DSP技术与应用实例课件赵红怡第7章
时间:2025-07-07
时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……