DSP技术与应用实例课件赵红怡第7章

时间:2025-07-07

第7章 TMS320C54x 应用程序开发实例7.1 正弦信号发生器 7.2 FIR滤波器的DSP实现方法

7.3 IIR滤波器的DSP实现方法7.4 快速傅里叶变换的DSP实现方法 7.5 语音信号压缩的DSP实现方法 7.6 数字基带信号的DSP实现方法

7.1 正弦信号发生器通常有两种方法可以产生正弦波和余弦波:(1)查表法 (2)泰勒级数展开法x3 x5 x7 x9 x2 x2 x2 x2 sin(x ) x x (1 (1 (1 (1 )))) 3! 5! 7! 9! 2 3 4 5 6 7 8 9

x 2 x 4 x6 x8 x2 x2 x2 x2 cos(x ) 1 1 (1 (1 (1 ))) 2! 4! 6! 8! 2 3 4 5 6 7 8也可以由递推公式求正弦和余弦值: sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x] cos(nx)=2cos(x)cos[(n-1)x]-cos[(n-2)x] 利用递推公式计算正弦和余弦值需已知cos(x)和正弦、余弦的前 两个值。用这种方法,求少数点还可以,如产生连续正弦、余弦波, 则积累误差太大,不可取。

1.计算一个角度的正弦值利用泰勒级数展开式计算一个角度的正弦值。为了方 便起见,编写计算sin(x)的程序sinx.asm,调用前只要在数 据存储器d_x单元中设定x的弧度值就行了,计算结果在 d_sinx单元中。程序中要用到一些存储单元存放数据和变 量,如图所示。数据存储器 d_x d_squr_x d_temp d_sinx c_1 d_coeff sin(x) (7FFFH) (c1=01C7H) (c2=030BH) (c3=0666H) (c4=1556H) 计算正弦值存储单元分配 计算结果存储在数据存储单元 x x2 程序存储器 table c1=1/(8*9) c2=1/(6*7) c3=1/(4*5) c4=1/(2*3)

2.计算一个角度的余弦值利用泰勒级数展开式计算一个角度的余弦值,采用调用 cosx.asm程序方式。调用前只要在数据存储器d_x单元中设定 x的弧度值就行了,计算结果在d_cosx单元中。程序中要用 到一些存储单元存放数据和变量,如图所示。数据存储器d_x d_squr_x d_temp x x2 程序存储器 table c1=1/(7*8)

d_cosxc_1 d_coeff

cosx(7FFFH) (c1=0249H) (c2=0444H)

c2=1/(5*6)c3=1/(3*4) c4=1/2

(c3=0AABH)(c4=4000H) 计算余弦值存储单元分配

计算结果存储在数据存储单元

3.产生正弦波程序先以sinx.asm和cosx.asm程序,计算00~450(间隔为 0.50)的正弦和余弦值,再利用sin(2x)=2sin(x)cos(x)求出 00~900的正弦值(间隔为10)。然后通过复制,获得00~ 3590的正弦值。

正弦波数据

数据存储单元

若执行菜单命令“View”→“Graph” →“Time/Frequcecy” 就可以观察到所生成的正弦波波形,如图所示。

若执行菜单命令“File”→“Data” →“Save”,再按下图所 示设置就可将正弦波数据存储在数据文件out.dat中了。

7.2 FIR滤波器的DSP实现方法1.FIR滤波器的特点x(n)z-1 x(n-1) z-1 x(n-2) z-1 z-1

x(n-N+1)

h0

h1

h2

hN-2

hN-1

y(n)

图7-9 FIR滤波器结构图

2.FIR滤波器的DSP实现(1)用线性缓冲区法实现z-1数据存储器 线性缓冲区

顶部 x(n) PORTR→ 数据存储器 x(n+1) PORTR→ 数据存储器 x(n+2)

x(n-1)x(n-2)

x(n)x(n-1)

x(n+1)x(n)

x(n-3)↑ *ARxx(n-4) x(n-5) ↑ *ARx-

x(n-2)x(n-3) x(n-4) ↑ *ARx-

x(n-1)x(n-2) x(n-3)

N=6的线性缓冲区存存储器图

(2)用循环缓冲区法实现z-1

数据存储器 循环缓冲区顶部 x(n) x(n-1) x(n-2) x(n-3) x(n-4) x(n-5) x(n-6) 循环缓冲区底部 x(n-7) ←ARx ↓

数据存储器 x(n) x(n-1) x(n-2) x(n-3) x(n-4) x(n-5) x(n-6) x(n+1) ←ARx ↓

数据存储器 x(n) x(n-1) x(n-2) x(n-3) x(n-4) x(n-5) x(n+2) x(n+1) ←ARx ↓

N=8的循环缓冲区存储器图

3.FIR滤波器的实现方法(1)用线性缓冲区和直接寻址方法实现FIR滤波器〖例7-1〗N=5,y(n)=h0x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h4x(n-4)数据存储器 y XN XNM1 XNM2 XNM3 XNM4 H0 H1 H2 H3 H4 y(n) x(n) x(n-1) x(n-2) x(n-3) x(n-4) h0 h1 h2 h3 h4 FIR滤波器的输出

在数据存储器中 存放系数h0~h4,并 设置线性缓冲区存放 输入数据,如图所示 :

直接寻址线性缓冲区数据分配

(2)用线性缓冲区和间接寻址方法实现FIR滤波器〖例7-2〗N=5,y(n)=h0x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h4x(n-4)数据存储器

在数据存储器中存

y x

y(n) x(n) x(n-1) x(n-2) x(n-3)

放系数h0~h4,并设置线性缓冲区存放输入数 据,如图所示,利用AR1→ h

x(n-4) h0 h1 h2 h3 FIR滤波器的输出

AR1和AR2分别作为间接寻址线性缓冲区和系 数区的辅助寄存器。

AR2→

h4

间接寻址线性缓冲区数据分配

(3)用线性缓冲区和带移位双操作数寻址方法实现FIR滤波器〖例7-3〗N=5,y(n)=h0x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h4x(n-4)数据存储器 x 暂存y(n) x(n) x(n-1) x(n-2) x(n-3) AR1→ x(n-4) PAR→COEF 程序存储器 h4 h3 h2 h1 h0

双操作数寻址线性缓冲区数据分配

(4)用循环缓冲区和双操作数寻址方法实现FIR滤波器〖例7-4〗N=80,,存放h0~h79的系数表以及存放数据的循环缓冲区

均设在DARAM中,如图所示。数据存储器 y y(n) … xn x(n) x(n-1) x(n-2) 80h 81h h 60h 数据存储器 h0 h1 h2 100h 101h 102h

x(n-3)x(n-4)

h3h4

103h104h

x(n-5)…

h5…

105h

AR3→

x(n-79)

cfh

AR4→

h79

14fh

双操作数寻址循环缓冲区数据分配

(5)系数对称FIR滤波器的实现方法数据存储器 New循环 缓冲区 Old循环 缓冲区 程序存储器 系数表 COEF h0 h1 h2 h3 高地址 低地址

80h

x(n)

←AR2

88h

x(n-4)

81h 82h

x(n-3) x(n-2)

89h 8Ah

x(n-5) x(n-6)

83h

x(n-1)

8Bh

x(n-7)

←AR3

新旧缓冲区对比

程序存储器存系数表

FIR滤波器单位脉冲响应

输入方波时FIR滤波器的输出

…… 此处隐藏:1142字,全部文档内容请下载后查看。喜欢就下载吧 ……
DSP技术与应用实例课件赵红怡第7章.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219