班级电子1412姓名学号实验名称FIR滤波器设计验一.实验目的1.掌握用窗函数法设计FIR数字滤波器的原理和方法。2.熟悉线性相位FIR数字滤波器特性。3.了解各种窗函数对滤波器特性的影响。二.实验内容、过程及结果(含程序)1.有限冲激响应数字滤波器的基础理论(请参考相关书籍)。2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。3.数字滤波器系数的确定方法。4.根据要求设计低通FIR滤波器。要求:通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75dB,采样频率50kHz。设计:-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz-采样频率:f1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHzΩ1=2πf1/fs=0.64π-理想低通滤波器脉冲响应:h1[n]=sin(nΩ1)/n/π=sin(0.64πn)/n/π-根据要求,选择布莱克曼窗,窗函数长度为:N=5.98fs/过渡带宽度=5.98*50/12=24.9-选择N=25,窗函数为:w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24)-滤波器脉冲响应为:h[n]=h1[n]w[n]|n|≤12h[n]=0|n|>12-根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。-完成的滤波器的差分方程为:y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]5.程序流程图:6.实验准备:-设置软件仿真模式,参看:第三部分、第一章、四、2。-启动CCS2.打开工程,浏览程序:工程目录为C:\ICETEK\ICETEK-VC5509-AE\Lab0501-FIR,代码如下:#includemyapp.h#includeICETEK-VC5509-EDU.h#includescancode.h#includemath.h#defineFIRNUMBER25#defineSIGNAL1F1000#defineSIGNAL2F4500#defineSAMPLEF10000#definePI3.1415926floatInputWave();floatFIR();floatfHn[FIRNUMBER]={0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-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};floatfXn[FIRNUMBER]={0.0};floatfInput,fOutput;floatfSignal1,fSignal2;floatfStepSignal1,fStepSignal2;floatf2PI;inti;floatfIn[256],fOut[256];intnIn,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++;/*breakpoint*/if(nOut=256){nOut=0;}}}floatInputWave(){for(i=FIRNUMBER-1;i0;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]);}floatFIR(){floatfSum;fSum=0;for(i=0;iFIRNUMBER;i++){fSum+=(fXn[i]*fHn[i]);}return(fSum);}7.点击图标,ccs会自动连接,编译和下载程序。8.打开观察窗口。*选择菜单Tools-Graph-DuleTime,进行如下设置:*选择菜单Tools-Graph-SingleTime,进行如下设置:*选择菜单Tools-Graph-FFTMagnitude,新建2个观察窗口,分别进行如下设置:9.设置断点:在有注释“breakpoint”的语句设置软件断点。使用菜单的View-Breakpoints打开断点观察窗口,在刚才设置的断点上右键-Breadkpointproperties调出断点的属性设置界面,设置Action为RefreshAllwindows。则程序每次运行到断点,所有的观察窗口值都会被刷新。10.运行并观察结果:⑴按F8键运行程序。⑵观察窗口中时域图形;观察滤波效果。⑶观察窗口中频域图形;理解滤波效果。7.退出CCS:请参看本书第三部分、第一章、六。11.运行结果输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则大部分被滤除。三.问题与思考试选用合适的高通滤波参数滤掉实验的输入波形中的低频信号。答:用窗函数法设计第一类线性相位FIR高通滤波器,由高频信号频率为4500Hz和低频信号频率为1000Hz,且窗函数长度为25可取截止频率为3π/4rad,阻带最小衰减50dB,过渡带宽度8π/25,采用汉明窗。其可以采用MATLAB实现,具体程序如下:N=25;a=(N-1)/2;Wc=3*pi/4;n=[0:1:(N-1)];m=n-a+eps;hd=(sin(pi*m)-sin(Wc*m))./(pi*m);W_ham=(hamming(N))';h=hd.*W_ham;[H,W]=freqz(h,1);plot(W/pi,20*log10(abs(H)/max(abs(H))));得到的幅频响应如下图所示: