Presentation is loading. Please wait.

Presentation is loading. Please wait.

卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计

Similar presentations


Presentation on theme: "卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计"— Presentation transcript:

1 卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计
本章将要讲解通信与信号处理中常见的下列几种具有代表性的算法在C54x芯片中的具体实现方法: 卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT)

2 8.1 卷积运算的DSP实现 8.2 数字滤波器的DSP实现 8.3 IIR滤波器的DSP实现 8.4快速傅立叶变换的DSP实现 目录:
第8章 数字信号处理典型算法程序设计 目录: 8.1 卷积运算的DSP实现 8.2 数字滤波器的DSP实现 8.3 IIR滤波器的DSP实现 8.4快速傅立叶变换的DSP实现

3 第8章 数字信号处理典型算法程序设计 8.1 卷积运算的DSP实现 数字卷积运算通常采用两种方法: 线性卷积 圆卷积

4 函数f(t)与h(t)的卷积积分,用符号“﹡ ”表示,即:
第8章 数字信号处理典型算法程序设计 8.1.1信号的卷积 函数f(t)与h(t)的卷积积分,用符号“﹡ ”表示,即: 读作f(t)与h(t)的卷积积分,简称卷积。

5 可将任意序列f(k)用单位序列及其移位序列表示,即:
第8章 数字信号处理典型算法程序设计 8.1.2 离散系统的卷积分析 1.离散时间信号的时域分解 根据单位序列 及单位移位序列 的选择性, 可将任意序列f(k)用单位序列及其移位序列表示,即:

6 第8章 数字信号处理典型算法程序设计 例:如图所示离散时间序列,可表示为: 1 2 3 1 2 3

7 与卷积积分一样,离散卷积也可通过图解法来计算,分为反折、平移、相乘、取和等过程。
第8章 数字信号处理典型算法程序设计 2.离散系统的卷积计算过程 设两个离散时间信号为 ,定义 的卷积和运算为: 与卷积积分一样,离散卷积也可通过图解法来计算,分为反折、平移、相乘、取和等过程。

8 第8章 数字信号处理典型算法程序设计 3.卷积的计算 在实际应用中,参与卷积运算的两个序列长度往往差距较大,比如我们要实时的对一长序列语音信号进行“过滤”处理,可以采用有限冲激相应序列与该语音信号进行卷积的方法来实现。 比如:重叠保留法

9 TI公司提供了以C54x系列芯片为基础的DSPLIB库函数,在CCS开发系统内包含DSPLIB库函数。
第8章 数字信号处理典型算法程序设计 8.1.3.重叠保留法卷积运算在C54x上的实现 1.利用C54x自带的dsplib库函数实现 TI公司提供了以C54x系列芯片为基础的DSPLIB库函数,在CCS开发系统内包含DSPLIB库函数。 这些库函数均为经过优化处理的符合C语言标准的函数。

10 DSPLIB库提供了一个直接进行线性卷积运算的函数,形式如下:
第8章 数字信号处理典型算法程序设计 DSPLIB库提供了一个直接进行线性卷积运算的函数,形式如下: oflag = short convol (DATA *x, DATA *h, DATA *r, ushort nr, ushort nh) 其中x,h为输入数组,即进行卷积的两序列,r为输出数组。

11 第8章 数字信号处理典型算法程序设计 其算法为: 0 <=j <=nr 通常我们将分段后的待滤波数据放于X数组中,而将滤波器冲激响应序列放于h数组。按前述方法,x长度为L+M-1,h长度为M,则nr应为L+M-1。计算得到结果后,舍弃r的前M-1个值。

12 #define Frame 240 //输入数据长度 #define FilterLength 8 //滤波器长度
第8章 数字信号处理典型算法程序设计 其算法为: ,0 <=j <=nr C程序代码为: #define Frame //输入数据长度 #define FilterLength 8 //滤波器长度 for ( i = 0 ; i < (Frame-7) ; i ++ )  {  for ( j = 0 ; j <  FilterLength ; j ++ )  Acc0 = L_mac( Acc0, Filter[j], Spnt[i+j] ) ;   Spnt[i] = round( Acc0) ; //小数16位精度 }  注: L_mac:Acc0=Filter*Spnt, 参见TMS320C54x-Optimizing C-C++ Compiler User’s Guide-spru103g-October 2002.pdf

13 C54x指令集内提供了单周期乘累加指令MAC和循环寻址方式,使每个样值的乘累加计算可以在一个周期内完成。
第8章 数字信号处理典型算法程序设计 2.汇编语言设计 C54x指令集内提供了单周期乘累加指令MAC和循环寻址方式,使每个样值的乘累加计算可以在一个周期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可采用RPTZ和MAC指令,结合循环寻址方式去方便地实现这一运算: RPTZ 累加器,N-1 MAC (双访问数据),(双访问数据),累加器

14 其中,RPTZ 指令将累加器清零初始化,并将立即数N-1(16位)装入到重复计数器,使下一条指令重复执行N次。
第8章 数字信号处理典型算法程序设计 其中,RPTZ 指令将累加器清零初始化,并将立即数N-1(16位)装入到重复计数器,使下一条指令重复执行N次。 MAC指令实现将两存储区数据的乘积累加到累加器,再通过存储区指针以循环寻址的方式指向下一个存储区。

15 为了能高效的利用DSP流水线,待卷积的两组数据都应存放在DARAM中
第8章 数字信号处理典型算法程序设计 程序设计的要点简要分析如下: 为了能高效的利用DSP流水线,待卷积的两组数据都应存放在DARAM中 如果使用双操作数指令,辅助寄存器只能用 AR2~AR5,在此我们选择AR3和AR4作为双操作数寻址辅助寄存器 汇编语言的代码设计要充分考虑到资源的优化等

16 重叠保留法卷积运算算法程序 在此经常使用一种零长度循环缓冲区,循环体对应的汇编程序如下: (修改书中的红色部分) .bss x,239
.bss y,233 .bss h,8 BEGIN STM # 233,BRC STM # x,AR1 STM # x,AR3 STM # h,AR4 STM # y,AR5 STM # -7, AR0 ; loop starts RPTB next-1

17 第8章 数字信号处理典型算法程序设计 LD #0, A ;LD *AR4+, 13, A ; 原先的程序是IIR滤波?! MAC *AR4 +, *AR3+, A MAC * AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +0%, *AR3-, A ; 双操作数只有+0% SFTA A, 2 ;在此不需要 RND A ; 小数16位精度 MVMM AR1+, AR STL A, * AR5+ LD #0,A ; 上面第一行有了,这里不需要了 ; loop ends next:

18 用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好的特点。
第8章 数字信号处理典型算法程序设计 8.2 数字滤波器的DSP实现 用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好的特点。 本节主要介绍FIR和IIR滤波器DSP实现方法。 首先简要介绍滤波器的基本原理、结构和设计方法,然后通过实例介绍滤波器设计在C54x上的实现方法。

19 1.FIR滤波器的结构 一般时域离散系统或网络的描述方式: 差分方程 单位脉冲响应 系统函数进行描述。 第8章 数字信号处理典型算法程序设计

20 第8章 数字信号处理典型算法程序设计 如果系统输入、输出服从N阶差分方程: 则其系统函数,即滤波器的传递函数为:

21 第8章 数字信号处理典型算法程序设计 若所有的 均为零,则有: 相应的传递函数为:

22 据上两式可直接画FIR滤波器的直接型结构:
第8章 数字信号处理典型算法程序设计 据上两式可直接画FIR滤波器的直接型结构: FIR滤波器的直接型结构又称为卷积型结构,有时也称为横截型结构。

23 可以在幅度特性随意设计的同时,保证精确、严格的线性相位
第8章 数字信号处理典型算法程序设计 FIR滤波器主要具有如下几个特点: 可以在幅度特性随意设计的同时,保证精确、严格的线性相位 FIR滤波器的单位脉冲响应是有限长序列,因此FIR滤波器系统总是稳定的

24 由于FIR滤波器一般为非递归结构,在有限精度运算中,不会出现像递归机构的滤波器那样的极限震荡等不稳定现象,误差较小
第8章 数字信号处理典型算法程序设计 由于FIR滤波器一般为非递归结构,在有限精度运算中,不会出现像递归机构的滤波器那样的极限震荡等不稳定现象,误差较小 FIR滤波器可采用FFT算法实现,从而提高运算效率

25 就是单位冲激响应序列,滤波器设计的目标就是
第8章 数字信号处理典型算法程序设计 2. FIR滤波器的设计方法 中,系数 (k=1~M)形成的序列 就是单位冲激响应序列,滤波器设计的目标就是 找到合适的序列 (k=1~M)。 方法1:傅立叶级数法 是以 为周期的周期函数,所以可展开为傅 立叶级数,即:

26 第8章 数字信号处理典型算法程序设计 这里我们用 表示归一化频率,即 ,则有: 可由下式求得:

27 因为FIR的系数为有限个,因此需将上式中的系数进行截取,到近似的传递函数为 :
第8章 数字信号处理典型算法程序设计 通常 为偶函数,这时: 且 。 因为FIR的系数为有限个,因此需将上式中的系数进行截取,到近似的传递函数为 : 式中Q为有限的正整数。

28 上式即为所求系统的Z域传递函数。近似传递函数的冲激响应是由系数决定。
第8章 数字信号处理典型算法程序设计 令 , 则有: 上式即为所求系统的Z域传递函数。近似传递函数的冲激响应是由系数决定。

29 方法2:窗函数法设计FIR 窗函数法的思路是寻找一有限长序列 逼近理想的滤波器脉冲响应 。 是对 做截 取处理。
第8章 数字信号处理典型算法程序设计 方法2:窗函数法设计FIR 窗函数法的思路是寻找一有限长序列 逼近理想的滤波器脉冲响应 。 是对 做截 取处理。 用一个有限长度的窗函数序列 来截取 ,即:

30 第8章 数字信号处理典型算法程序设计 利用 ,就可得到一近似的传递函数: 如令 ,则有:

31 同样,为使式8-17具有因果性,需延迟Q个样值,可得:
第8章 数字信号处理典型算法程序设计 同样,为使式8-17具有因果性,需延迟Q个样值,可得: 上式成为:

32 第8章 数字信号处理典型算法程序设计 再令 , ,得到: 设计FIR滤波器时,加窗是一个重要的计算步骤。采用矩形窗函数是简单并且直接的方法。而在实际设计中,一般采用其他窗函数,比较常用的窗函数有Hanning、Hamming、Blackman、Kaiser窗等。

33 FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波。
第8章 数字信号处理典型算法程序设计 FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波。 下面给出各种滤波器具体的设计方法: 1)低通滤波器的设计

34 高通滤波器可以由一个幅度为1的响应减去一个低通滤波的响应来获得。
第8章 数字信号处理典型算法程序设计 2)高通滤波器的设计 高通滤波器可以由一个幅度为1的响应减去一个低通滤波的响应来获得。 (n)函数的表达式为: 高通滤波器的系数可由下式计算得到:

35 带通滤波器可以由两个截止频率不同的低通滤波器获得,其系数等于两个低通滤波器的系数之差。
第8章 数字信号处理典型算法程序设计 3) 带通滤波器的设计 带通滤波器可以由两个截止频率不同的低通滤波器获得,其系数等于两个低通滤波器的系数之差。 fc1和fc2为低通滤波器的截止频率,fs为采样频率。

36 带阻滤波器可由(n)和带通滤波器相减获得,其系数可以由一个幅度为1的响应减去一个带通滤波的响应来获得。
第8章 数字信号处理典型算法程序设计 4) 带阻滤波器的设计 带阻滤波器可由(n)和带通滤波器相减获得,其系数可以由一个幅度为1的响应减去一个带通滤波的响应来获得。

37 一种是标准通带滤波器的设计FIR1 一种是多带FIR滤波器的设计FIR2 3.FIR滤波器的设计工具
第8章 数字信号处理典型算法程序设计 3.FIR滤波器的设计工具 在MATLAB中,提供了两种FIR滤波器设计方法: 一种是标准通带滤波器的设计FIR1 一种是多带FIR滤波器的设计FIR2

38 函数FIR1:只能设计标准的低通、高通、带通和带
第8章 数字信号处理典型算法程序设计 函数FIR1:只能设计标准的低通、高通、带通和带 阻线性相位FIR滤波器。 函数FIR2:还可设计加窗的FIR滤波器,但它针 对任意形状的分段线性频率相应,这一点在FIR1 中是受到限制的。

39 (4)b=fir1(n,Wn,‘ftype’,Window)
第8章 数字信号处理典型算法程序设计 1) fir1函数 具体调用格式为: (1)b = fir1(n,Wn); (2) b = fir1(n,Wn,'ftype');  (3) b = fir1(n,Wn, Window); (4)b=fir1(n,Wn,‘ftype’,Window)

40 当ftype=high时,可设计高通滤波器; 当ftype=stop时,可设计带阻滤波器。
第8章 数字信号处理典型算法程序设计 n:滤波器的阶数; Wn:滤波器的截止频率; ftype:用来决定滤波器的类型: 当ftype=high时,可设计高通滤波器; 当ftype=stop时,可设计带阻滤波器。 Window:用来指定滤波器采用的窗函数类型,其默认值为汉明(Hamming)窗。

41 使用b=fir1(n,Wn)可得到低通滤波。0 Wn 1, Wn=1相当于0.5fs。 格式: b=fir1(n,Wn)
第8章 数字信号处理典型算法程序设计 ①设计低通FIR滤波器: 使用b=fir1(n,Wn)可得到低通滤波。0 Wn 1, Wn=1相当于0.5fs。 格式: b=fir1(n,Wn) ②设计高通FIR滤波器: 在b=fir1(n,Wn, 'high')中, 0 Wn 1, 。 格式: b=fir1(n, Wn, 'high')

42 在b=fir1(n,Wn,‘ftype’)中,当ftype= stop, Wn=[ W1 W2 ]时,fir1函数可得到带阻滤波器。
第8章 数字信号处理典型算法程序设计 ③设计带通FIR滤波器: 在b=fir1(n,Wn)中,当Wn=[ W1 W2 ]时,可得到带通滤波器,其通带为W1 <w<W2,W1和W2分别为通带的下限频率和上限频率。 格式: b=fir1(n,[ W1 W2 ]) ④设计带阻FIR滤波器 在b=fir1(n,Wn,‘ftype’)中,当ftype= stop, Wn=[ W1 W2 ]时,fir1函数可得到带阻滤波器。 格式: b=fir1(n,[ W1 W2 ],‘stop’)

43 Boxcar Hanning Bartlett Blackman Kasier chebwin等
第8章 数字信号处理典型算法程序设计 在上述滤波器设计中,Window参数可采用的窗口函数有: Boxcar Hanning Bartlett Blackman Kasier chebwin等 默认的窗函数为汉明(Hamming)窗。

44 它可用来设计有任意频率响应的各种加窗FIR滤波器。
第8章 数字信号处理典型算法程序设计 2) fir2函数 它可用来设计有任意频率响应的各种加窗FIR滤波器。 具体调用格式为: b=fir2(n,f,m) b=fir2(n,f,m,Window) b=fir2(n,f,m,npt) b=fir2(n,f,m,npt,Window) b=fir2(n,f,m,npt,lap) b=fir2(n,f,m,nptt,lap,Window)

45 m:参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;
第8章 数字信号处理典型算法程序设计 n:滤波器的阶数; f:频率点矢量,且f[0,1],f=1对应于0.5fs。矢量f按升序排列,并且第一个元素必须为0,最后一个元素必须为1,并可以包含重复的频率点; m:参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;

46 Window:用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗;
第8章 数字信号处理典型算法程序设计 Window:用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗; Npt:用来指定fir2函数对频率响应进行内插的点数; Lap:用来指定fir2函数在重复频率点附近插入的区域大小。

47 cfir fir firdec firinterp firs firs2 firlat 1) 利用C54x自带的dsplib库函数实现
第8章 数字信号处理典型算法程序设计 4. FIR滤波器在C54x上的实现 1) 利用C54x自带的dsplib库函数实现 DSPLIB库提供了几个与FIR滤波直接有关的函数,分别是: cfir fir firdec firinterp firs firs2 firlat

48 2) FIR滤波运算的汇编语言程序设计 采用汇编的方法主要有: 单值更新缓存法 线性缓冲区法 区域更新缓存法 循环缓冲区法
第8章 数字信号处理典型算法程序设计 2) FIR滤波运算的汇编语言程序设计 采用汇编的方法主要有: 单值更新缓存法 线性缓冲区法 循环缓冲区法 区域更新缓存法

49 (1)在数据存储器中开辟一个N单元的缓冲区,用来存放最新的N个输入样本;
第8章 数字信号处理典型算法程序设计 (1) 线性缓冲区法 单值更新缓存法: 具体实现步骤如下: (1)在数据存储器中开辟一个N单元的缓冲区,用来存放最新的N个输入样本; (2)从最老样本开始取数,每取一个数后,样本向下移位; (3)读完最后一个样本后,输入最新样本并存入缓冲区的顶部。

50 线性缓冲区法实现FIR滤波 .title " fir1.asm " .mmregs .def start
X .usect “x”,8 ;定义数据存储空间 PA0 .set 0 PA1 .set 1

51 .data COEF: .word 1*32768/10 ;h6=0.1 .word 2*32768/10 ;h5=0.2 .word -4*32768/10 ;h4=-0.4 .word 3*32768/10 ;h3=0.3 .word -4*32768/10 ;h2=-0.4 .word 2*32768/10 ;h1=0.2 .word 1*32768/10 ;h0=0.1 .text

52 STM #6,AR0 LD #x+1,DP ; PORTR PA1,@x+1 start: SSBx FRCT
STM #x+7,AR2 STM #6,AR0 LD #x+1,DP ; PORTR This instruction loads the upper 9 bits of address x into DP (in ST0)

53 FIR1: ;FIR滤波运算 RPTZ A,#6 ;累加器 A清零,设置迭代次数 MACD *AR2-,COEF,A ;完成乘法-累加并移位 STH A, *AR2 ;暂存y(n) PORTW *AR2+ ,PA0 ;输出y(n) BD FIR1 循环 PORTR PA1,*AR2+0 ;输入最新样本,并修改AR2=AR2+AR0,并指向缓冲区底部 .END

54 (1)在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;
第8章 数字信号处理典型算法程序设计 (2)用循环缓冲区实现FIR滤波器 循环缓冲区算法的过程如下: (1)在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本; (2)从最新样本开始取数; (3)读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变; (4)用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。

55 2)用循环缓冲区实现FIR滤波器 FIR_TASK: STM #INPUT,AR6 ;加载输入数据
STM #OUTPUT,AR7 ;指向输出数据地址单元 STM #K_FRAME_SIZE-1,BRC ;设定循环次数 RPTBD FIR_FILTER_LOOP-1 ;程序块循环 STM #K_FIR_BFFR,BK ;设置缓冲区长度 LD *AR6+,A ;读入输入数据,修改数据指针 FIR_FILTER: STL A, *AR4+% ;将读入的输入数据放到循环缓冲区中 RPTZ A , (K_FIR_BFFR-1) ;A清零,重复执行37次 MAC *AR4+0%, *AR5+0% , A ;输入数据与滤波器系数 乘累加,并按模修正数据指针 STH A,*AR7+ ;保存输出数据到输出地址单元 FIR_FILTER_LOOP .end

56 循环缓冲区法实现FIR 滤波器 .title " fir2.asm " .mmregs .def start .bss y,1
xn .usect “xn”,7 ;定义数据存储空间 h0 .usect “h0”,7 ;定义数据存储空间 PA0 .set 0 PA1 .set 1

57 .data Table: .word 1*32768/10 ;h0=0.1 .word 2*32768/10 ;h1=0.2 .word 3*32768/10 ;h2=0.3 .word 4*32768/10 ;h3=0.4 .word 5*32768/10 ;h4=0.5 .word 6*32768/10 ;h5=0.6 .word 7*32768/10 ;h6=0.7 .text

58 RPT #6 MVPD table,*AR1+ STM #xn+6,AR2 STM #h0+6,AR3 STM #7,BK
start: SSBx FRCT;小数乘法编程时,设置FRCT(小数方式)位 STM #h0,AR1 RPT #6 MVPD table,*AR1+ STM #xn+6,AR2 STM #h0+6,AR3 STM #7,BK STM #-1,AR0 LD #xn,DP PORTR

59 FIR2: ;FIR滤波运算 RPTZ A,#6 MAC *AR2+0%,*AR3+0%,A STH PORTW @y,PA0 BD FIR2 PORTR PA1,*AR2+0% ;用最新的样本值替代最旧的样本值 .END

60 使用循环缓冲区进行滤波时程序中应注意的几个问题: ① 实现N 个循环缓冲区单元首尾相邻,须用BK寄存器 按模间接寻址来实现;
第8章 数字信号处理典型算法程序设计 (2)用循环缓冲区实现FIR滤波器 使用循环缓冲区进行滤波时程序中应注意的几个问题: ① 实现N 个循环缓冲区单元首尾相邻,须用BK寄存器 按模间接寻址来实现; ② 缓冲区起始地址的k个最低有效位必须为0,且必须 满足2k > N 。 ③ 采用Ti 公司的C54x 系列进行滤波仿真,要将滤波 器系数和输入数据转化成Q15格式。

61 适合于采样与传输数据很快,而处理时间相对较慢的场合。
第8章 数字信号处理典型算法程序设计 (3)区域更新缓存法 区域更新缓存法就是每次批量输入一批(m+N-1个)新样值,然后对这一批数进行滤波处理后批量存储(m个)结果,然后更新缓存。 采用前面卷积程序。 适合于采样与传输数据很快,而处理时间相对较慢的场合。

62 (4)系数对称FIR滤波器的实现 对称FIR滤波器的实现方法如图所示: 新 旧 系数 第8章 数字信号处理典型算法程序设计 b(0)
x(n-4) x(n-5) x(n-6) x(n-7) AR4 x(n) x(n-1) x(n-2) x(n-3) AR3 系数

63 (1)在RAM中开辟两个N/2长度的循环缓冲区New 和Old ,分别存放N/2个新数据和老数据;
第8章 数字信号处理典型算法程序设计 具体过程如下: (1)在RAM中开辟两个N/2长度的循环缓冲区New 和Old ,分别存放N/2个新数据和老数据; (2)设置循环缓冲区指针:AR3指向New区中的最新数据,AR4指向Old区中的最老数据; (3)在程序存储器中设置系数表; (4)进行(AR3)+(AR4)AH加法运算,并修改数据指针,AR3+1AR3,AR4-1AR4;

64 (6)修正数据指针,AR3指向New区的最老数据; AR4指向Old区的最老数据。
第8章 数字信号处理典型算法程序设计 (5)保存和输出结果; (6)修正数据指针,AR3指向New区的最老数据; AR4指向Old区的最老数据。 (7)用New区的最老数据替代Old区的最老数据,输入新数据替代New区的最老数据 ; (8)重复执行(4)~ (7)。

65 系数对称FIR滤波器实现优点:乘法的次数减少了一半。
Type II FIR filter x[n-(M-1)/2] x[n-(M+1)/2] x[n-1] x[n-2] x[n-M] x[n-M+1] x[n-M+2] x[n]

66 优点:乘法的次数减少了一半。 实现方法: 使用专门用于系数对称FIR滤波器的指令。 FIRS Xmem,Ymem,Pmad
该指令的操作如下: 执行: Pmad→PAR 当(RC)≠0 (循环计数器) ((Xmem)+(Ymem))≪16→A (B)+(A(32-16))×PAR→B (PAR+1)→PAR (RC)-1→RC

67 说明:FIRS指令在同一机器周期内,通过C和D总线读两次数据存储器,同时通过P总线读程序存储区的一个系数。
注意两点: (1) 在数据存储器中开辟两个循环缓冲区,如New和Old缓冲区,分别存放N/2个新数据和老数据,循环缓冲区的长度为N/2。设置了循环缓冲区,就需要设置相应的循环缓冲区指针,如用AR2指向New缓冲区中最新的数据,AR3指向Old缓冲区中最老的数据; (2) 将系数表存放在程序缓冲区内。

68 .mmregs .def begin .bss y, 1 x_new: .usect ″DATA1″,4 x_old: .usect ″DATA2″,4 size set 4 PA0 .set 0 PA1 .set 1 .data COEF word 1*32768/10, 2*32768/10 .word 3*32768/10, 4*32768/10 .text

69 begin: LD #y,DP SSBX FRCT STM #x_new,AR ;AR2指向新缓冲区第一个单元 STM #x_old+(size-1),AR3 ;AR3指向老缓冲区最后1个单元 STM #size, BK ;循环缓冲区长度 STM #-1,AR0 LD #x_new,DP PORTR PA1,#x_new ;输入x[n] FIR: ADD * AR2+0%,* AR3+0%,A ;AH=x[n]+x[n-7](第一次) RPTZ B, # (size-1) ;B=0,下条指令执行size次 FIRS* AR2+0%,* AR3+0%,COEF ;B+=AH*h0, AH=x[n-1]+x[n-6],… STH ;保存结果

70 ;输出结果 MAR * +AR2(2)% ;修正AR2,指向新缓冲区最老数据 MAR * AR3+% ;修正AR3,指向老缓冲区最老数据 MVDD * AR2,* AR3+0% ;新缓冲区向老缓冲区传送一个数 BD FIR PORTR PA1,* AR ;输入新数据至新缓冲区 .end

71 目标:设计一个15阶FIR低通滤波器,截止频率0.6 DSP应用技术实验指导书.pdf FIR_滤_波_器_设_计.doc
第8章 数字信号处理典型算法程序设计 8.2.2 FIR滤波器在C54x上的实现举例 目标:设计一个15阶FIR低通滤波器,截止频率0.6 DSP应用技术实验指导书.pdf FIR_滤_波_器_设_计.doc 2011年DSP作业FIR滤波器在DSP上的实现 FIR滤波器的设计.doc DSP FIR IIR 课设说明书 DSP课程设计(论文)-FIR滤波器设计.pdf

72 IIR滤波器的结构简单,运算量小,具有经济、灵活、高效等特点 。
第8章 数字信号处理典型算法程序设计 8.3 IIR滤波器的DSP实现 IIR滤波器的结构简单,运算量小,具有经济、灵活、高效等特点 。 8.3.1 IIR滤波器的基本原理和设计方法 1. IIR滤波器的特点 IIR滤波器差分方程的一般形式为:

73 IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,即是递归型的。
第8章 数字信号处理典型算法程序设计 IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,即是递归型的。 当M=N时,在零初始条件下,对上式进行z变换,得到传递函数:

74 对于IIR滤波器,系统稳定的条件如下: 若 ,当 时, ,系统稳定; 若 ,当 时, ,系统不稳定; IIR滤波器结构具有多种形式:
第8章 数字信号处理典型算法程序设计 对于IIR滤波器,系统稳定的条件如下: 若 ,当 时, ,系统稳定; 若 ,当 时, ,系统不稳定; IIR滤波器结构具有多种形式: (1)直接I型(也称直接型) (2)直接II型(也称标准型) (3)级联型 (4)并联型 (5)格型(lattice)

75 二阶IIR数字滤波器是构成复杂IIR数字滤波器的基本单元,因此又称为二阶基本节。
第8章 数字信号处理典型算法程序设计 2. IIR数字滤波器的结构与设计 1)二阶IIR数字滤波器 二阶IIR数字滤波器是构成复杂IIR数字滤波器的基本单元,因此又称为二阶基本节。 一个二阶IIR滤波器,其输出可写:

76 第8章 数字信号处理典型算法程序设计 直接型二阶IIR滤波器的结构图:

77 第8章 数字信号处理典型算法程序设计 直接I型的二阶IIR数字滤波器:

78 第8章 数字信号处理典型算法程序设计 标准型二阶IIR数字滤波器: x(n) y(n) w(n) a1 a2 b1 b2

79 一个高阶IIR滤波器可由多个二阶基本节级联组成。
第8章 数字信号处理典型算法程序设计 2)高阶IIR滤波器 一个高阶IIR滤波器可由多个二阶基本节级联组成。 其传递函数为: 式中Hi(z)为一阶或二节阶的传递函数。

80 此外,一个高阶IIR滤波器可由多个二阶基本节并联组成。其传递函数为 :
第8章 数字信号处理典型算法程序设计 其结构如图: x(n) y(n) Hk(z) H1(z) C H2(z) 此外,一个高阶IIR滤波器可由多个二阶基本节并联组成。其传递函数为 :

81 第8章 数字信号处理典型算法程序设计 并联型高阶IIR滤波器结构如图: H2 (z) x(n) y(n) H1(z) Hk(z) C

82 一种是所谓的全极点结构:全极点IIR格型滤波器以多个基本节级联而成
第8章 数字信号处理典型算法程序设计 格型结构义可分为两种: 一种是所谓的全极点结构:全极点IIR格型滤波器以多个基本节级联而成 一种是即有极点又有零点的零极结构

83 全极点格型IIR滤波器的基本节: 对于格型滤波器结构,只要 的绝对值小于1, 滤波器就是稳定的。 第8章 数字信号处理典型算法程序设计
yi(n) yi-1(n) ei(n) ei-1(n) -ki ki 对于格型滤波器结构,只要 的绝对值小于1, 滤波器就是稳定的。

84 常用到的模拟滤波器的原型主要有以下几种:
第8章 数字信号处理典型算法程序设计 3. IIR数字滤波器的设计方法 常用到的模拟滤波器的原型主要有以下几种: 1)巴特沃思滤波器,其幅度响应在通带内具有最平特性; 2)切比雪夫滤波器,在通带内具有等波纹特性,且阶数小于巴特沃思滤波器; 3)椭圆滤波器,在通带和阻带内具有等波纹特性,且阶数最小。

85 冲激不变法 双线性变换法 设计步骤如下: 1)根据模拟设计理论设计出满足要求的传递函数 2)将 变换成数字滤波器的传递函数
第8章 数字信号处理典型算法程序设计 设计步骤如下: 1)根据模拟设计理论设计出满足要求的传递函数 2)将 变换成数字滤波器的传递函数 常用的变换方法有: 冲激不变法 双线性变换法

86 ① s平面上的j轴映射到z平面的单位圆上;
第8章 数字信号处理典型算法程序设计 双线性变换的基本性质如下: ① s平面上的j轴映射到z平面的单位圆上; ② s平面的左半平面映射到z平面的单位圆内; ③ s平面的右半平面映射到z平面的单位圆外。

87 由双线性变换法设计数字滤波器,首先要设计符合指标要求的模拟滤波器。但一般只给出归一化原型滤波器的设计数据。
第8章 数字信号处理典型算法程序设计 由双线性变换法设计数字滤波器,首先要设计符合指标要求的模拟滤波器。但一般只给出归一化原型滤波器的设计数据。 而对于截止频率为Ωc的滤波器,可通过适当的代换得到实际的模拟滤波器。 例如:对于低通滤波器,用s/ Ωc代替原型滤波器中的s即可。

88 实际应用中,需要设计各种类型的数字滤波器,—般有下列两种方法:
第8章 数字信号处理典型算法程序设计 实际应用中,需要设计各种类型的数字滤波器,—般有下列两种方法: (1)把一个归一化模拟滤波器经频带变换化为所需类型的模拟滤波器,再通过双线性变换法数字化为所需类型的数字滤波器。 (2)将模拟低通原型用双线性变换法数字化为数字低通滤波器,再变换成各种类型的数字滤波器。

89 第一种方法设计各型数字滤波器的一般步骤:
第8章 数字信号处理典型算法程序设计 第一种方法设计各型数字滤波器的一般步骤: (1)根据数字频率指标计算预畸变的模拟频率指标, 计算方法为: (2)根据通带或阻带允许的波动,确定滤波器类型。根据阻带的衰耗要求,确定滤波器的阶数,进而求得归一化模拟低通滤波器的传递函数Ha(s),然后用s/ Ωc代替滤波器Ha(s)中的s即可得到实际的模拟滤波器传递函数H(s)。

90 (3)根据双线性变换法把模拟滤波器H(s)变换为数字滤波器H(z)。H(s)与H(z)之间的对应关系为:
第8章 数字信号处理典型算法程序设计 (3)根据双线性变换法把模拟滤波器H(s)变换为数字滤波器H(z)。H(s)与H(z)之间的对应关系为: 以上第(2)步第(3)步可以合并进行,即可参照下表给出的变换公式进行代换。

91 模拟低通原型到各种数字滤波器的变换方法: 变换类型 变换方法 说明 模拟低通原型→数字低通
第8章 数字信号处理典型算法程序设计 模拟低通原型到各种数字滤波器的变换方法: 变换类型 变换方法 说明 模拟低通原型→数字低通 表示低通预畸截频 模拟低通原型→数字高通 表示高通预畸截频

92 模拟低通原型→数字带通 模拟低通原型→数字带阻
第8章 数字信号处理典型算法程序设计 模拟低通原型→数字带通 模拟低通原型→数字带阻 注: 表示通带或阻带的上截频, 表示通带或阻 带的下截频,T为采样周期

93 例8-1设计一个低通滤波器。要求:带宽BW=1rad/s,采样频率fs=100Hz。
第8章 数字信号处理典型算法程序设计 例8-1设计一个低通滤波器。要求:带宽BW=1rad/s,采样频率fs=100Hz。 解:根据给定的指标,令 = BW=1rad/s, T=1/ fs=0.01s。 选择一个满足带宽条件的低通模拟 滤波器,传递函数为: 对进行预畸变,求 Ωc。

94 第8章 数字信号处理典型算法程序设计 用s/ Ωc代换原型滤波器 中的s,得 : 根据表8.1得到: 代入上式得数字滤波器的传递函数 :

95 函数形式为: [b,a] = butter(n,Wn) [b,a] = butter(n,Wn,‘ftype’)
第8章 数字信号处理典型算法程序设计 8.3.2 IIR滤波器的C54x实现 1.巴特沃思型滤波器的设计 1)butter函数 函数形式为: [b,a] = butter(n,Wn) [b,a] = butter(n,Wn,‘ftype’) 当设计截止频率为Wn的n阶低通滤波器,其中截止频率应满足0≤Wn≤1,Wn=1相当于0.5fs。

96 当Wn=[ W1 W2]时,butter函数产生一个2n阶的数字带通滤波器,其通带为W1 < w <W2。
第8章 数字信号处理典型算法程序设计 当Wn=[ W1 W2]时,butter函数产生一个2n阶的数字带通滤波器,其通带为W1 < w <W2。 当ftype = high时,可设计截止频率为Wn的高通滤波器; 当ftype = stop时,可设计带阻滤波器,此时Wn = [ W1 W2],阻带为W1< W<W2。

97 函数形式为:[n,Wn] = buttord(Wp,Ws,Rp,Rs)
第8章 数字信号处理典型算法程序设计 2)buttord函数 函数形式为:[n,Wn] = buttord(Wp,Ws,Rp,Rs) 当Wp > Ws时,为高通滤波器; 当Wp, Ws为二元矢量时,若Wp < Ws,则为带通或带阻滤波器,此时Wn也为二元矢量。 利用buttord函数可得到滤波器的最小阶数n,并使通带(0,Wp)内的纹波系数小于Rp,阻带(Ws, 1)内衰减系数大于Rs。

98 函数形式为:[ b,a ] = cheby1(n,Rp,Wn) [ b,a ] = cheby1(n, Rp,Wn,‘ftype’)
第8章 数字信号处理典型算法程序设计 2.切比雪夫滤波器的设计 分为两种类型: ChebyshevⅠ型:通带等波纹性能 ChebyshevⅡ型:阻带等波纹性能 1)cheby1函数 函数形式为:[ b,a ] = cheby1(n,Rp,Wn) [ b,a ] = cheby1(n, Rp,Wn,‘ftype’) 可以设计低通、带通、高通和带阻ChebyshevⅠ型数字滤波器,其通带内为等波纹,阻带内为单调。

99 [n,Wn] = cheb1ord(Wp, Ws, Rp, Rs)
第8章 数字信号处理典型算法程序设计 2)cheb1ord函数 函数形式为: [n,Wn] = cheb1ord(Wp, Ws, Rp, Rs) 此函数用来选择ChebyshevⅠ型滤波器的阶数。 Wp和Ws分别为通带和阻带滤波器的截止频率,其值为0≤Wp(或Ws)≤1。 Rp和Rs分别是通带和阻带区的纹波系数。

100 函数形式为: [ b,a ] = cheby2(n,Rs,Wn) [ b,a ] = cheby2(n,Rs,Wn,‘ftype’)
第8章 数字信号处理典型算法程序设计 3) cheby2函数 函数形式为: [ b,a ] = cheby2(n,Rs,Wn) [ b,a ] = cheby2(n,Rs,Wn,‘ftype’) cheby2函数与cheby1函数基本相同,但是其通带内为单调的,阻带内为等波纹,由Rs指定阻带内的波纹。 cheby2函数可以设计ChebyshevⅡ型低通、带通、高通和带阻数字滤波器。

101 [ n,Wn ] = cheb2ord(Wp, Ws, Rp, Rs)
第8章 数字信号处理典型算法程序设计 4) cheb2ord函数 函数形式为: [ n,Wn ] = cheb2ord(Wp, Ws, Rp, Rs) 可以利用该函数确定ChebyshevⅡ型数字滤波器的最小阶数n和截止频率Wn。

102 函数形式为:[ b,a ] = ellip(n, Rp, Rs, Wn)
第8章 数字信号处理典型算法程序设计 3.椭圆滤波器的设计 ellip函数 函数形式为:[ b,a ] = ellip(n, Rp, Rs, Wn) [ b,a ] = ellip(n, Rp, Rs, Wn,‘ftype’) 此函数用来设计Elliptic(椭圆)型滤波器。 可设计n阶低通或带通滤波器。 也可设计n阶高通或带阻滤波器。

103 [ n,Wn ] = ellipord(Wp, Ws, Rp, Rs)
第8章 数字信号处理典型算法程序设计 2) ellipord函数 函数形式为: [ n,Wn ] = ellipord(Wp, Ws, Rp, Rs) 此函数用来选择椭圆滤波器的阶数。

104 FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT。
第8章 数字信号处理典型算法程序设计 8.4快速傅立叶变换的DSP实现 8.4.1 FFT算法介绍 FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT。 按照抽取方式的不同可分为:DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法。 按照蝶形运算的构成不同可分为:基2、基4、基8以及任意因子(2n,n为大于1的整数)。

105 对于变换长度为N的序列x(n)其傅立叶变换可以表示如下:
第8章 数字信号处理典型算法程序设计 1.傅立叶变换和逆变换 对于变换长度为N的序列x(n)其傅立叶变换可以表示如下: 其中,W=exp(-2π/N),称为旋转因子或蝶形因子。 上式即为DFT的定义式。

106 第8章 数字信号处理典型算法程序设计 的特性: 1)对称性: 2)周期性: 并由以上两条得到:

107 按时间抽取的算法是在时间域内将输入序列不断根据奇偶划分为2个短序列。
第8章 数字信号处理典型算法程序设计 2.基2、DIT-FFT(按时间抽取) 按时间抽取的算法是在时间域内将输入序列不断根据奇偶划分为2个短序列。 这时要求序列的长度N为2的整数幂次,如不满足,可通过补零调整。 在时间域上,将每一级输入序列依次按奇偶分为两个短序列进行计算。

108 第8章 数字信号处理典型算法程序设计 结果N点X(k)可分为两部分: 其中:

109 蝶形运算单元如图所示 : 第8章 数字信号处理典型算法程序设计 x1(n) x (n) x2 (n) x (n+N/2)
图8-19 蝶形运算单元图 基2、DIT-FFT(按时间抽取)

110 图8-20基2、DIF-FFT(按频率抽取)蝶形运算单元图
第8章 数字信号处理典型算法程序设计 另一种FFT算法——按频率抽取的IF-FFT算法,是把输出序列X(k)(也是N点序列)按其顺序的奇偶分解为越来越短的序列 。 其蝶形运算单元如图8-20所示: X1 (k) X2 (k) X (k) X (k+N/2) 图8-20基2、DIF-FFT(按频率抽取)蝶形运算单元图

111 下面以256点的实数FFT算法为例,介绍FFT算法在 54x系列DSP上的实现过程。
第8章 数字信号处理典型算法程序设计 8.4.2 FFT算法在C54x上的实现 下面以256点的实数FFT算法为例,介绍FFT算法在 x系列DSP上的实现过程。 1.存储区分配 由于FFT算法中大量使用了乘-累加指令,因而应尽可能将被乘数和乘数安排在DARAM中,以便程序能高速并行地执行。

112 FFT实现程序存储器和数据存储器空间分布: 0000h 015Fh 程序空间
第8章 数字信号处理典型算法程序设计 FFT实现程序存储器和数据存储器空间分布: 程序存储器 0000h 015Fh 程序空间 FF80h FFFFh 中断向量设置 复位

113 第8章 数字信号处理典型算法程序设计 0000h-0005Fh 存储器初始化 0060h 记数组 0061h 图形指标 0062h
数据处理缓冲器指标 0070h-007Fh 正弦 0800h-09FFh 余弦 0C00h-3FFh 数据处理区输入的数据存入下一半 1400h-17FFh 数据输出空间 数据存储器: d_grps_cnt d_twid_idx d_data_idx 正弦数据表 余弦数据表 real_fft_input real_fft_output

114 根据傅立叶变换的对称性和周期性,可以将DFT运算中某些项合并。
第8章 数字信号处理典型算法程序设计 2.算法分析 根据傅立叶变换的对称性和周期性,可以将DFT运算中某些项合并。 一般来说,输入被假定为连续、合成的。当输入为纯粹的实数的时候,我们就可以利用傅立叶变换的基本性质更高效地计算DFT。

115 将2N点实数序列打包成为N点复数序列,此过程称为“进包”。 由复数FFT运算结果合成为2N点的实数FFT结果的过程称为“解包”
第8章 数字信号处理典型算法程序设计 将2N点实数序列打包成为N点复数序列,此过程称为“进包”。 由复数FFT运算结果合成为2N点的实数FFT结果的过程称为“解包” 其原理和过程如下: (1)首先将变换序列x(n)分为偶序列r(n)和奇序列i(n) (2)构造d(n)=r(n)+j*i(n) (3)对d(n)作复数FFT,则有:

116 根据DFT的性质,序列的傅立叶变换可分为共轭对称和共轭反对称序列,其各自对应的傅立叶原序列分别是序列的实部和虚部乘j。
第8章 数字信号处理典型算法程序设计 令 : 由此二式可得: 根据DFT的性质,序列的傅立叶变换可分为共轭对称和共轭反对称序列,其各自对应的傅立叶原序列分别是序列的实部和虚部乘j。

117 这样把D(k)分为共轭对称对称序列De(k)和共轭反对称序列Do(k),即:
第8章 数字信号处理典型算法程序设计 这样把D(k)分为共轭对称对称序列De(k)和共轭反对称序列Do(k),即: , 对应的是输入序列的实部部分即r(n), 而 对应的是输入序列的虚部部分乘以j即j*i(n)

118 这说明通过计算N点的复数FFT,然后附加一次迭代运算,可得到2N点的实数FFT结果。
第8章 数字信号处理典型算法程序设计 对比可得: 展开x(n)的FFT最终为: 这说明通过计算N点的复数FFT,然后附加一次迭代运算,可得到2N点的实数FFT结果。

119 针对于C54x的RFFT算法是基-2的按时间抽取(DIT)算法。它由5个阶段构成:
第8章 数字信号处理典型算法程序设计 3.程序组成 针对于C54x的RFFT算法是基-2的按时间抽取(DIT)算法。它由5个阶段构成: N点位翻转使输入按新的次序排列; 进包过程; N点FFT的计算; 解包过程; 产生最终的输出。

120 1)主文件中的宏定义文件: fft_size.inc
第8章 数字信号处理典型算法程序设计 程序由以下几个部分组成: 1)主文件中的宏定义文件: fft_size.inc 2)汇编文件:Bit_rev.asm、Fft.asm、Initcfft.asm、Power.asm、Rfft.asm、Unpack.asm、Vectors.asm 。 各个文件的功能如下: Bit_rev.asm:第一步,对最原始的输入数据进行位翻转后的从新排序。

121 Initcfft.asm:设置变量、缓存和平台。 Rfft.asm:进行函数调用,把FFT计算按步骤组合起来。
第8章 数字信号处理典型算法程序设计 Initcfft.asm:设置变量、缓存和平台。 Rfft.asm:进行函数调用,把FFT计算按步骤组合起来。 Vectors.asm:设置中断向量。 Fft.asm:第二步,对翻转后的数据进行FFT计算。 库文件:RTS.LIB, 作用:提供主文件的函数。

122 下面分5个阶段对FFT算法的实现做一个说明:
第8章 数字信号处理典型算法程序设计 下面分5个阶段对FFT算法的实现做一个说明: 第一阶段:使用文件Bit_rev.asm对最原始的输入数据进行位翻转后的从新排序。 第二阶段:使用文件Fft.asm对翻转后的数据进行FFT计算。 第三阶段:使用文件Unpack.asm它包含了第三、四阶段,把输入数据分成实数的偶对称部分RP(k),实数的奇对称部分RM (k) ,虚数的偶对称部分IP(k)和虚数的奇对称部分IM(k) ,计算出RFFT。

123 第五阶段:使用文件Power.asm,用来做计算结果的输出。把计算出来的功率谱输出,输出地址为0x1400。
第8章 数字信号处理典型算法程序设计 第四阶段:此阶段主要为了符合最初的2N点的实数输入,由N点复数FFT最终产生2N点实数序列的FFT结果,还需经过一个蝶形运算。输出数据保存在数据处理缓冲器中。 第五阶段:使用文件Power.asm,用来做计算结果的输出。把计算出来的功率谱输出,输出地址为0x1400。

124 第8章 数字信号处理典型算法程序设计

125 作业 习题8.2,8.3


Download ppt "卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计"

Similar presentations


Ads by Google