当前位置:文档之家› 低通滤波器

低通滤波器

实验名称:FIR 低通滤波器的DSP 实现一、实验目的1、掌握用窗函数法设计FIR 数字滤波器的原理和方法。

2、熟悉线性相位FIR 数字滤波器的特性。

3、了解各种窗函数对数字滤波器的特性的影响。

二、实验设备PC 兼容机一台(操作系统为Windows XP ),安装Code Composer Studio 2.2.1软件和MATLAB 6.5.1(含SIMULINK 工具包)软件。

三、实验内容FIR 低通滤波器的DSP 实现1、实验要求:用窗口法设计线性相位的FIR 低通滤波器,截止频率为1kHz ,采样速率为8kHz 。

窗口大小N=11,分别加矩形窗和海明窗。

检验结果并计算峰值的位置和过渡带宽度。

2、对设计要求的理解(1)要设计的滤波器为理想低通滤波器,便于FIR 低通滤波器的实现。

(2)FIR 滤波器满足线性相位应具有以下两个条件:一是)1,,1,0()(-=N n n h 为实数;二是h(n)满足以21-=N n 的偶对称或奇对称,即)1()(n N h n h --±=。

故使用窗函数设计滤波器时,所加的窗都以原点对称,设计的理想滤波器的单位脉冲响应d(k)都以原点为偶对称或奇对称。

同时保证了d(k)加窗平移后得到的h(n)以M=(N-1)/2对称,也就是保证了设计出的FIR 滤波器具有线性相位。

(3)低通滤波器的系数采用MATLAB 软件仿真工具产生,并把仿真产生的系数导出成头文件,运用到CCS 程序中。

课题一中要求采用两种窗函数设计滤波器,两者仅仅是窗函数不同,相应的滤波器系数不同。

运用MATLAB 产生两个窗函数对应的系数文件。

同时对两种窗函数滤波效果进行对比。

(4)峰值和过滤带的宽度通过理论计算后,再和实际的信号波形进行对比。

3、窗函数法设计FIR 滤波器的思路首先从窗口大小N 中计算出M ,其中21-=N M ;其次是利用离散时间傅里叶反变换,从)(ωd 中计算出滤波器系数d(k);最后考虑到滤波器的因果性,把d(k)延迟M 个单位得到因果的滤波器系数h(n),其中1,,1,0,)()(-=-=N n M n d n h 。

四、实验原理1、窗口法设计的滤波器系数的原理。

归一化截止频率是采样速率。

是截止频率,其中s c scc f f f f ,2πω=。

低通滤波器的频率响应)(ωD 定义为:⎪⎩⎪⎨⎧≤<<≤-≤=π,π,0,1)(ωωωωωωωc c cD 或利用离散时间傅里叶反变换(IDTFT )我们得到时域信号:∞<<∞-=⎥⎦⎤⎢⎣⎡===---⎰⎰k kk jk e e e D k d c k j k j kj ccc πωππωπωωωωωωωωωππ)sin(22d .12d )()(c对于k=0的时候需要单独考虑,由极限性质可以得到πωcd =)0( 矩形窗函数)(n w 在时域的定义为:⎩⎨⎧≤=其他,0,1)(rec Mn n w故滤波器的系数M M k kk k w k d k d c ,0,,)sin()()()('-===πω (1)利用延时的性质把滤波器脉冲值响应移位成因果序列,所以FIR 低通滤波器系数1,1,0)()](sin[)()('-=--=-=N n M n M n M n d n h c πω2、如采用同阶数的汉明窗,只需将)(rec n w 改为⎪⎩⎪⎨⎧≤≤--=其他,0,πcos 46.054.0)(ham M n M Mn n w , 所以。

1,,1,0,)π()](sin[)(πcos 46.054.0)()()(ham -=--⋅⎪⎭⎫ ⎝⎛--=--=N n M n M n M M n M n d M n w n h c ω(2)五、实验的设计1、课题一的滤波器系数具体的求解已知窗口大小N 为11,故5211121=-=-=N M 。

归一化截止频率为:48122πππω=⨯==s c c f f ,由(1)式可得矩形窗设计的滤波器系数10,1,0)5()]5(4sin[)( =--=n n n n h ππ,即可以得到:045.0)10(,0.0)9(,075.0)8(,1592.0)7(,2251.0)6(,25.0)5(,2251.0)4(,1592.0)3(,075.0)2(,0.0)1(,045.0)0(-==========-=h h h h h h h h h h h由(2)式可以得到汉明窗设计的滤波器系数为:1,1,0)]10)5(2cos(46.054.0.[)5()]5(4sin[)()(-=----=-=N n n n n M n d n h πππ,计算的:0036.0)10(,0.0)9(,02985.0)8(,1086.0)7(,2053.0)6(,25.0)5(,2053.0)4(,1086.0)3(,02985.0)2(,0.0)1(,0036.0)0(-==========-=h h h h h h h h h h h2、使用MATLAB 仿真工具产生系数实际在设计FIR 低通滤波器系数时采用MATLAB 仿真工具,具体操作如下: 第一步进入到MATLAB 软件Command Window 界面,输入fdatool 命令,进入到滤波器设计界面。

第二步在Filter Design 设计界面,按照课题要求选择FIR 滤波器,窗函数法,阶数为10,矩形窗。

具体的界面如下图:同时选择工具栏Analysis 中的Filter Coefficients 命令即可以观察滤波器系数。

系数具体如下图:通过观察可以发现:仿真产生的滤波器系数与直接计算的结果相同。

第三步滤波器系数的导出,在工具栏中选择Targets 下的Export to Code Composer Studio 命令,即可以得到C 语言形式的头文件。

该头文件命名为coeffRectangular.h,供CCS 软件中的程序调用。

对于汉明窗,只要在Window 下拉菜单中选择Hamming 即可实现汉明窗FIR 低通滤波器的设计。

其滤波器系数得到如下图:可以得到系数文件coeffHamming.h 供程序调用。

3、低通滤波的实现已知输入信号是)(n x ,通过低通滤波器)(n h 之后,输出信号)(n y 为:)()()(0m n x m h n y Mm -=∑=。

对于矩形窗的低通滤波器,其差分方程为:)10(045.0)8(075.0)7(1592.0)6(2251.0)5(25.0)4(2251.0)3(1592.0)2(075.0)(045.0)(---+-+-+-+-+-+-+-=n x n x n x n x n x n x n x n x n x n y同样对于汉明窗设计的FIR 低通滤波器,其差分方程为:)10(0036.0)8(02985.0)7(1086.0)6(2053.0)5(25.0)4(2053.0)3(1086.0)2(02985.0)(0036.0)(---+-+-+-+-+-+-+-=n x n x n x n x n x n x n x n x n x n y4、程序流程图(1)输入信号的产生波形发生计算步常调用标准的sin和cos函数计算当前波形值返回波形值调用sin、cos函数生成新的输入信号fIn[0],作为fInput。

(2)FIR滤波器的实现FIR滤波器用滤波器系数乘以保存的N-1个输入值和当前输入值并求和返回计算结果(3)输入信号通过低通滤波器的得到输出信号开始初始化工作变量调用波形发生子程序产生混叠波形(高频加低频成分)调用FIR滤波子程序计算当前输出5、程序代码1、矩形窗的系数文件coeffrectangular.h代码#define FIRNUMBER 11const float fHn[FIRNUMBER] ={-0.0450*******, 9.745429214e-018, 0.07502636313, 0.1591549367,0.2250790745, 0.25, 0.2250790745, 0.1591549367,0.07502636313, 9.745429214e-018, -0.0450*******};2、汉明窗系数文件coeffHamming.h代码#define FIRNUMBER 11const float fHn[11] ={-0.003601265373, 1.635791641e-018, 0.029********, 0.1085672006,0.2053053975, 0.25, 0.2053053975, 0.1085672006,0.029********, 1.635791641e-018, -0.003601265373};3、实验源代码(Fir.c)#include "coeffrectangular.h" //矩形窗系数文件//#include "coeffhamming.h" //汉明窗系数文件#include <math.h>#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PI 3.1415926extern const float fHn[11];float InputWave(); //输入波形子程序float FIR(); //滤波器的实现float fXn[FIRNUMBER]={ 0.0 };//输入信号初始化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();fIn[nIn]=fInput;nIn++; nIn%=256;fOutput=FIR();fOut[nOut]=fOutput;nOut++; /* break point */if ( nOut>=256 ){nOut=0;}}}float InputWave(){for ( i=FIRNUMBER-1;i>0;i-- )fXn[i]=fXn[i-1];fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;fSignal1+=fStepSignal1;if ( fSignal1>=f2PI ) fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2>=f2PI ) fSignal2-=f2PI;return(fXn[0]);}float FIR(){float fSum;fSum=0;for ( i=0;i<FIRNUMBER;i++ ){fSum+=(fXn[i]*fHn[i]); //}return(fSum);}六、实验过程和结果分析1、启动CCS软件,打开Fir.pjt编译并load program。

相关主题