基于DSP的FIR设计

更新时间:2024-04-03 11:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DSP原理及应用

课程设计

FIR滤波器综合设计

学 院 电气机电工程学院 专 业 电子信息工程 班 级 14级本一

分 组 成 员 王慈皓 4703140004 许浩杰 4703140003 联 系 方 式 13271275852 指 导 教 师 候兆然

2017年6月

目录

1 课程设计目标 ..........................................................................................................1 2 FIR滤波器的算法原理 .............................................................................................1 2.1数字滤波器介绍 .................................................................................................1 2.2 数字滤波器的设计原理 .....................................................................................2 2.3 FIR滤波器的特点..............................................................................................2 2.4 FIR滤波器的基本结构 ......................................................................................2 2.5 FIR滤波器实现方法 ..........................................................................................3 2.5.1 窗函数法 ................................................................................................3 2.5.2 频率抽样法 ...............................................................................................4 2.5.3 Chebyshev逼近法 ......................................................................................5 3 系统程序设计 ..........................................................................................................6 3.1 程序流程图 .......................................................................................................6 3.2 程序的参数变量解读及注释 ..............................................................................6 4 软件仿真步骤及结果分析 ........................................................................................8 4.1滤波器的设计 ....................................................................................................8 4.2 产生滤波器 .......................................................................................................9 4.3 实验准备 ........................................................................................................ 10 4.4仿真结果分析 .................................................................................................. 13 5 总结 ...................................................................................................................... 13

有限冲击响应滤波器(FIR)算法

1 课程设计目标

(1)熟悉FIR滤波器设计的基本方法。

(2)掌握用窗函数设计FIR滤波器的基本原理和方法,了解MATLAB语言。 (3)研究数字滤波器的基本理论和实现方法,从原理上理解和分析数字滤波器。并通过对数字滤波器的结构和设计方法的学习,为设计数字滤波器奠定基础。 (4)研究FIR数字滤波器的设计方法,及如何用滤波器设计工具设计各种类型的数字滤波器,并进行仿真与分析。 (5)对数字滤波器的DSP实现进行研究。

2 FIR滤波器的算法原理

2.1数字滤波器介绍

数字滤波是信号与信号处理领域的一个重要分支,在语音图像处理、模式识别、谱分析、无线通信等领域都有着非常广泛的应用。通过滤波运算,将一组输入数据序列转变为另一组输出数据序列,从而达到修正时域或频域中信号属性的目的。数字滤波器就是用于完成这种信号滤波功能,用有限精度算法来实现的一种离散时间线性时不变(LTI)系统。相比于模拟滤波器,数字滤波器具有以下优点:数字滤波器的频域特性容易控制,性能指标优良;数字滤波器可以工作在极低的频率,可以方便地实现模拟滤波器难以实现的线性相位系统;数字滤波器工作稳定,一般不会受到外部环境的影响;数字滤波器的灵活性和可重用性高,只需要简单编程就可以修改滤波器的特性,设计周期短。

数字滤波器的实现可以采用专用DSP芯片,通过编写程序,利用软、硬件结合完成滤波器设计,也可以采用市面上通用的数字滤波器集成电路来实现,但这两种方法无法适应高速应用场合。随着集成电路技术的高速发展,FPGA应用越来越普及,FPGA器件具有芯片密度大、执行效率高,速度快,集成度高等优点,用FPGA芯片作为滤波器的设计载体,可以实现高速信号滤波功能。

1

2.2 数字滤波器的设计原理

数字滤波器的设计问题就是寻找一组系数ai和bi,使得其性能在某种意义上逼近所要求的特性。如果在s平面上去逼近,就得到模拟滤波器,如果在z平面上去逼近,则得到数字滤波器。

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,

应满足常系数线性差分方程:

y ( n ) ? b x ( i ) ? a y (n ? i ) ( ) n ? n? 0?i?0N?1i?i?1Mi

x(n)、y(n)为输入(输出)序列,ai、bi 为滤波器系数,N为滤波器的阶数。 2.3 FIR滤波器的特点

数字滤波器的功能,就是把输入序列通过一定的运算变换成输出序列。它的实现方法有很多,其中比较常用到的是无限长脉冲响应滤波器 IIR和有限长脉冲响应滤波器FIR两种。

在计算量相等的情况下,IIR数字滤波器比FIR滤波器的幅频特性优越,频率选择性也好。但是,它有着致命的缺点,其相位特性不好控制。它的相位特性

f(?) ?argH(ej?)是使频率产生严重的非线性的原因。但是在图像处理、数据传

输等波形传递系统中都越来越多的要求信道具有线性的相位特性。在这方面 FIR滤波器具有它独特的优点,设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为H(z)??h(n)zn?0?1N?1?n。

H(z)是z的(N-1)次多项式,它在z平面上有(N-1)个零点,原点z=0是(N-1)阶重极点。因此,H(z)永远稳定,它可以在幅度特性随意设计的同时,保证精确、严格的线性相位。

2.4 FIR滤波器的基本结构

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的

2

输出序列,FIR滤波器的差分方程为:

y(n)??akx(n?k)k?0N?1。

Y?z?N?1?kH?z????bkzX?z?i?0对上式进行Z变换得到FIR滤波器的传递函数为:。

由上式可以看出,H(z)是z的N-1次多项式,它在z平面内有N-1个零点,同时在原点处有N-1个重极点。N阶滤波器通常采用N个延迟单元、N个加法器与N+1个乘法器,取图中(a)、(b)两种结构。

?1

图2-4-1 FIR滤波器的一般结构

因为FIR滤波器的单位抽样响应是有限长的,所以它永远是稳定的。另外,若对 h(n)提出一些约束条件,那么可以很容易地使 H(z)具有线性相位,这在信号处理的很多领域是非常重要的。FIR滤波器的设计任务,是要决定一个转移函数H(z),使它的频率响应满足给定的要求。这里所说的要求,除了通带频率阻带频率及两个带上的最大和最小衰减有线性相位。

2.5 FIR滤波器实现方法

2.5.1 窗函数法 窗函数法也称为傅里叶级数法。理想的数字滤波器频率特

jwH(e)是无法实现的,FIR的设计就是要寻找一个可以得到的频率特性性

N?1n?0?p、

?p和

?s外,很重要的一条是保证H(z)具

H(e)??h(n)e?jwnjwjwH(e),这相当于用一个可实现的单位脉冲响应 h来逼近

jwh(n)h(n)H(e)通过dd(n)去逼近一个理想单位脉冲响应。可由理想频率特性

3

傅氏反变换得到,

1hd(n)?2?????Hd(ejw)d?。一般来说,这样得到的理想单位脉

冲响应序列hd(n)是个无限长序列,因而是非因果的。设有一个截止频率为?c的

j?c0????c?ejwHd(e)???0?c????。理想线性相位低通,延时为?,其频率特性是:

hd(n)?sin??c(n??)??(n??)(???n??)。

得到:

这是一个以n=?为中心偶对称的无限长非因果序列,要想用一个有限长的因果序列去逼近它,最简单的方法是截取从0到N-1的一段来表示它,及

h(n)=hd(n)(0?n?N?1),其他N:h(n)?0。

同时,为了保证线性相位,还要满足偶对称h(n)?h((N?1?n)。这就像透过一个窗口观看到的一段hd(n),因此h(n)就表示成hd(n)和一个窗口函数的乘积,这样对h(n)的求解就变为h(n)?hd(n)*Wn,这里的Wn就被称为窗函数,既然一个频域上的标准的矩形窗口对应于时域是一个无限长的序列,那么在时域上截取一段必然会造成频域的矩形窗口的失真。相应的,截取出的信号也相应失真,从而需要改变原来窗口的形状来修正经过时域截取后的窗口失真。

2.5.2 频率抽样法 窗函数法是从时域出发,用窗函数截取理想的hd(n)得到

h(n),以此有限长的h(n)近似hd(n),这样得到的频率响应H(ejw)逼近于理想的

jwjwH(e)H(e)加dd频率响应。频率抽样法是从频率出发,将给定的理想频率响应

Hd(ejw)以等间隔抽样

??2?kN?Hd(k) 。

然后以此Hd(k)作为FIR滤波器的频率响应抽样值H(k),再根据DFT(离散傅氏变换)定义由频域这N个抽样值来唯一定义一个有限长序列h(n),同样也可

jwH(z)H(e),可以推出频率响应以算出FIR滤波器的系统抽样函数及频率响应

H(ejw)是频率抽样值H(k)与线性相位因子e?j?(N?1)/2及如下内插函数S(?,k)的

4

S(?,k)?线性组合

1eNnk?jNsin?N2??ksin(?)2N。

所以,在各频率取样点上,实际滤波器的频率响应是严格地和所要求的滤波器的频率响应一致的,逼近误差为零,但在抽样点之间的频率响应是各取样点的内插函数的延伸叠加而成,有一定的逼近误差,误差大小取决于频率响应曲线的圆滑程度和抽样点的密度。为了减少误差就要增加抽样点数目即增大采样频率,抽样点之间的理想频率特性变化越陡,则逼近误差越大,在理想频率特性的不连续点附近会产生肩峰和纹波。频率抽样法的优点是可以在频域设计,适于利用最优化方法,而且这种方法特别适用于窄带选频滤波器,但频率抽样法的抽样频率只能是2π/N的整数倍或2π/N的整数倍加上π/N。不能保证截止频率?c的准确取值,要实现精确的?c就必须取N足够大,相应的计算量也很大。此外,它的阻带最大衰减一般,也只有30-50dB左右,很难满足频域特性要求较高的场合。

2.5.3 Chebyshev逼近法 窗函数法和频率采样法设计出的滤波器的频率特性

jwHed都是在不同意义上对所给理想频率特性的逼近。由数值逼近理论可知,

??对某个函数f(x)的逼近一般有以下三种方法:

插值法(Interpolating Way)

最小平方逼近法(Least Square Approaching Way) 一致逼近法(Consistent Approaching Way)

切比雪夫最佳一致逼近的基本思想是,对于给定区间[a,b]上的连续函数

f?x?,在所有n次多项式的集合?n中,寻找一个多项式 p(x),使它在[a,b]上对f?x?的偏差和其它一切属于?n的多项式 p(x)对f(x)的偏差相比是最小的,即

??x??f?x??min?max?p?x??f?x???maxp

切比雪夫逼近理论,这样的多项式是存在的,且是唯一的,并指出了构造这种最佳一致逼近多项式的方法,就是有名的“交错点组定理”。切比雪夫逼近理论解决了p(x)的存在性、唯一性和如何构造等问题。J.H.McClellan、T.W.Parks、L.R.Rabiner 等人应用切比雪夫逼近理论提出了一种设计FIR滤波器的计算机辅

5

jwHed助算法。这种算法由于是在一致意义上对作最佳逼近,因而获得了较好

??的通带和阻带性能,并能准确地指定通带和阻带的边缘。但它的效率依赖于初始极值频率点的估计,且通带和阻带内波纹数较多,这是Chebyshev方法的两个主要缺点。

3 系统程序设计

3.1 程序流程图

图3-1-1 程序流程图

3.2 程序的参数变量解读及注释

#include //调用数学函数库

#define FIRNUMBER 25 //定义滤波器的阶数为25阶 #define SIGNAL1F 1000 //输入信号1的频率 #define SIGNAL2F 4500 //输入信号2的频率 #define SAMPLEF 10000 //采样信号 #define PI 3.1415926

float InputWave(); //InputWave()函数声明 float FIR(); //FIR()函数声明

float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,

6

-0.018,0.049,-0.02,0.11,0.28,0.64,0.28, -0.11,-0.02,0.049,-0.018,-0.009,0.01, -0.002,-0.002,0.001,0.0,0.0

}; //用MATLAB得到的滤波器系数

float fXn[FIRNUMBER]={ 0.0 }; /*由于每一个输出的点值,需要上一个输入输出值和当前的输入值经过H(Z)的系数矩阵的计算来得到,即通过数值计算得到滤波后的点值*/

float fInput,fOutput; //定义输入和输出的变量 float fSignal1,fSignal2; //确定输入点值的初始值

float fStepSignal1,fStepSignal2; //由高低频率决定其步值 float f2PI; int i;

float fIn[256],fOut[256]; /*创建输入输出波形的点数,即每次所观察的波形点数*/

int nIn,nOut; main() {

nIn=0; nOut=0; f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1;

fStepSignal1=2*PI/30; fStepSignal2=2*PI*1.4; while ( 1 ) //不断的循环 { fInput=InputWave(); //InputWave函数的返回值赋值给fInput fIn[nIn]=fInput;// fInput的值存入fIn[nIn] nIn++; nIn%=256; //nIn=nIn+1;nIn除256取余 fOutput=FIR(); //调用FIR滤波子程序 fOut[nOut]=fOutput; //将本次滤波输出存入fOut[nOut] nOut++; // nOut自加 if ( nOut>=256 )

{ nOut=0; } } }

float InputWave() //生成一个信号,为两种频率的正弦波叠加。 {

for ( i=FIRNUMBER-1;i>0;i-- ) //循环导入数据 fXn[i]=fXn[i-1]; //将上一个采样时间的输入信号向量延迟1个单元, 空出 1个单元(以便将新值放入)

fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; //混频正弦信号

7

fSignal1+=fStepSignal1;

if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2;

if ( fSignal2>=f2PI ) fSignal2-=f2PI;

return(fXn[0]); //返回当前采样时间的输入信号fXn[0] }

float FIR() //FIR滤波算法 {

float fSum; fSum=0;

for ( i=0;i

return(fSum); //返回当前滤波结果fSum }

4 软件仿真步骤及结果分析

MATLAB辅助DSP实现FIR ,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR ,再把滤波器系数以头文件形式导入CCS 中,头文件中MATLAB 辅助DSP 实现FIR 数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程序。头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便程序调试、仿真。

4.1滤波器的设计

MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。

打开Filter Design & Analysis Tool,单击MATLAB R2014a中的应用程序→“Filter Design & Analysis Tool”命令,打开FDATool,如图所示。

8

图4-1-1 打开MATLAB中FDATool

4.2 产生滤波器

阶数为25阶,这里应填24,比阶数少1。窗函数选择切比雪夫型(chebyshev),采样频率为10000Hz,通带截止频率为750Hz。

图4-2-1 滤波器的幅频特性

9

图4-2-2 滤波器的相位特性

H[n]={-1.5286e-05,-0.0001,-0.0005,-0.0013,-0.0021,-0.0012,0.0047,0.0198,0.0464,0.0825,0.1207,0.1503,0.1615,0.1503,0.1207,0.0825,0.0464,0.0198,0.0047,-0.0012,-0.0021,-0.0013,-0.0005,-0.0001,-1.5286e-05}

滤波器系数通过Matlab的 FDATOOL设计滤波器后,为了确认该滤波器是否有效,现通过simulator进行建模仿真观察该滤波器是否有效。

4.3 实验准备

1.设置软件仿真模式,参看:第三部分、四、1。 启动CCS,参看:第三部分、五、1。 2.打开工程,浏览程序:工程目录为

C:\\ICETEK\\VC5416AES61\\VC5416AES61\\Lab0501-FIR\\Fir.pjt。 3.编译并下载程序。 4.打开观察窗口。

*选择菜单View->Graph->Time/Frequency?,进行如下设置:

10

图4-3-1 打开观察窗口

*选择菜单View->Graph->Time/Frequency?,进行如下设置:

图4-3-2 进行窗口数值设置

在弹出的图形窗口中单击鼠标右键,选择“CleAe Display”。 5.设置断点:在有注释“break point”的语句设置软件断点。 6.运行并观察结果:

⑴ 选择“Debug”菜单的“Animate”项,或按F12键运行程序。 ⑵ 观察“Input”、“Output”窗口中时域图形;观察滤波效果。 ⑶ 鼠标右键单击“Input”和“Output”窗口,选择“Properties?”项,设置“Display Type”为“FFT Magitude”,再单击“OK”按钮结束设置。

⑷ 观察“Input”、“Output”窗口中频域图形;理解滤波效果。 结果如图所示:

11

图4-3-3 FIR滤波器仿真结果

从图中可以发现滤波器具有很好的滤波作用,从输入FFT与输出FFT之间比较可以发现,噪声经过FIR滤波器之后,噪声被滤出去了,从而达到很好滤波的效果。以下是改程序已达到移动噪声和能量。

从图中可以发现滤波器具有很好的滤波作用,从输入FFT与输出FFT之间比较可以发现,噪声经过FIR滤波器之后,噪声被滤出去了,从而达到很好滤波的效果。以下是改程序已达到移动噪声和能量。

float InputWave() {

for ( i=FIRNUMBER-1;i>0;i-- )

fXn[i]=fXn[i-1];

fXn[0]=sin((double)fSignal1)+10*cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1;

if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2;

if ( fSignal2>=f2PI ) fSignal2=f2PI-5;

12

}

return(fXn[0]);

我们通过增大噪声的幅度来增大频率,同样,我们通过噪声的衰减来产生能量的变动

仿真结果如下

图4-3-4 FIR滤波器改变程序后仿真结果

4.4仿真结果分析

通过以上的Simulator仿真结果可以发现,噪声信号通过不同的滤波器时,可以得到不同结果的滤除。

对于相同的频率下,带噪信号的能量不同,带噪信号经过低通FIR滤波器的滤波,消除了一部分的噪声,但是输出信号还有一定的失真。对于相同的能量下,带噪信号的频率不同,带噪信号的滤波效果也不相同。

5 总结

本次课程设计,实现了用MATLAB工具软件设计数字滤波器的方法并在CCS上仿真结果观察波形图可以看出本次设计基本实现了目标要求,但还存在误差,分析误差原因为在用DSP实现IIR滤波器时,在定点运算中,乘法运算的结果因位数增多而需要进行截止或舍入处理,因而引起了乘法运算的量化效应。由于舍

13

入和截尾都是非线性过程,所以量化效应相当于在滤波器某些链路中引入了非线性环节,给分析和设计带来问题。

在课程设计的过程中,遇到了一些困难,查阅了资料,通过和队友的合作完成了这次的课程设计。在这个过程中,学会了用MATLAB设置滤波器的方法,并且对FIR滤波器的C语言程序有了一定的了解,相信在以后若遇到类似的问题,一定会处理的更好。

14

本文来源:https://www.bwwdw.com/article/6y2r.html

Top