--------------------------实验报告学生姓名:学号:指导教师:一、实验室名称:数字信号处理实验室二、实验项目名称:数字滤波器的设计及实现三、实验原理:一.数字滤波器设计:1.数字滤波器设计步骤:(1)根据给定的滤波器设计要求,得到参数化描述,即通带,阻带截止频率p和s,通带阻带纹波p和s等数据。(2)找一个数字系统函数G(z),使其频率响应逼近设计要求。(3)择合适的滤波器结构对满足要求的传递函数G(z)进行实现。2.数字滤波器设计中的注意事项:(1)设计要求的参数化:图1给出了一个典型的数字低通滤波器的幅频特性说明。理解每个参数的物理含义。(2)滤波器类型选择:在数字滤波器实现中可选择IIR滤波器和FIR滤波器两种。在实现相同幅频特性时,IIR滤波器的阶数会相对FIR滤波器的更低;而在实现中,对相同阶数的两种滤波器来看,对每个采样值所做的乘法数量,IIR约为FIR的两倍;另外,FIR还可以方便地设计成线性相位滤波器。总的来说,IIR滤波器除)(jeGP1P1sSPPS通带阻带过渡带图1.典型的数字LPF幅频特性--------------------------不能实现线性相位这一点外,由于阶数的原因,从计算复杂度上较FIR滤波器有很大的优势。根据以上这些区别,结合实际的设计要求,就可以选择一款合适的滤波器。(3)波器设计的方法:由于IIR滤波器和FIR滤波器各自的结构特点,所以它们的设计方法也不一样。在IIR滤波器的设计中,常用的方法是:先根据设计要求寻找一个合适的模拟原型滤波器)(sHa,然后根据一定的准则将此模拟原型滤波器转换为数字滤波器)(zG,即为我们需要设计的数字滤波器。在FIR滤波器设计中,一般使用比较直接的方法:根据设计的要求在时域对理想的冲击响应序列进行加窗逼近,或从频域对需要实现的频率响应特性进行采样逼近然后进行反FFT。(4)波器阶数估计:IIR滤波器的阶数就等于所选的模拟原型滤波器的阶数,所以其阶数确定主要是在模拟原型滤波器设计中进行的。FIR滤波器阶数估计可以根据很多工程中的经验公式,这些公式可以直接从设计的参数要求中估计滤波器阶数。例如,对FIR低通滤波器,已知通带截止频率p,阻带截止频率s,最大通带纹波p和最大最带纹波s,则可以使用下面的公式估计其阶数:2/)(6.1413)(log2010psspN3.数字滤波器的设计方法:(1)IIR滤波器设计方法:(a)冲击响应不变法:A.满足设计要求的模拟原型滤波器)(sHa进行部分分式展开为:B.由于,可以得到:(b)双线性变换法:A.设计要求中给出的边界频率进行预畸处理,然后用得到的频率进行模拟滤波器设计,得到模拟原型滤波器)(sHa。B.用双线性变换法求出数字滤波器:1111|)()(zzzasHzG。(2)FIR滤波器设计方法:NkkkassAsH1)()0)(Re(maxks)()(nThngaNkTskzeAzGk111)(--------------------------(a)窗函数法:A.根据设计的要求选择合适的窗函数)(nw,然后根据此窗计算阶数等参数N。B.写出冲击响应序列的表达式:)()()(nwnhnhNd,其中,)(nhd为理想的冲击响应序列,一般为无限长的,)(nwN为长度为N的窗函数。C.计算所得冲击响应序列)(nh的DTFT,然后验证其是否满足设计要求。(b)频率采样法:A.根据设计要求估算滤波器阶数N。B.对要求的频率响应特性进行采样,获得N个离散样点值H(k)。C.对H(k)求N点IFFT,得到所需要的滤波器冲击响应序列h(n)。D.计算所得冲击响应序列)(nh的DTFT,然后验证其是否满足设计要求。4.滤波器的实现结构(a)FIR滤波器:直接型实现结构级联结构并联结构多相实现结构线性相位型结构(b)IIR滤波器:直接型实现结构:I型和II型级联结构并联结构具体结构形式参见教材第六章内容。二.在滤波器设计中使用到的MATLAB命令:1.IIR滤波器设计函数:butter,buttord,chebwin,cheb1ord,cheb2ord,cheby1,cheby2,ellip,ellipord。例如:用下面的MATLAB命令可估算一个Butterworth滤波器的阶数:[N,Wn]=buttord(Wp,Ws,Rp,Rs)2.FIR滤波器设计函数:fir1,fir2,remez,remezord,kaiser,kaiserord,hanning,hamming,blackman。例如:用下面的MATLAB命令可根据式(7.18)估算一个FIR滤波器阶数:[N,fpts,mag,wt]=remezord(fedge,mval,dev)--------------------------3.MATLAB中提供的滤波器设计辅助设计软件(在命令窗口中键入“fdatool”即可启动),界面如下图1所示。在本界面中填写需要设计的滤波器参数,即可设计出需要的滤波器。还可以通过本工具提供的幅度,相位观察窗口观察设计出来的滤波器的幅度,相位特性等,并可以将设计好的滤波器冲激响应系数导出进行实现。图1MATLAB中滤波器辅助设计软件界面四、实验目的:从理论上讲,任何的线性时不变(LTI)离散时间系统都可以看做一个数字滤波器,因此设计数字滤波器实际就是设计离散时间系统。本实验通过使用MATLAB函数和滤波器辅助设计软件对数字滤波器进行设计和实现,加深学生对数字滤波器的常用指标、设计过程及实现的理解。五、实验内容:对给定的输入信号(基带二进制码元为500Hz,两个载频分别为2kHz和4kHz的FSK调制信号)进行滤波。利用MATLAB编程设计一个数字低通滤波器,指标要求如下:通带截止频率:2.1pfkHz;阻带截止频率:3.5sfkHz;采样频率20pfkHz;通带峰值起伏:1[]pdB;最小阻带衰减:40[]SdB。要求分别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需要的滤波器系数。再将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现结果),对输入信号进行滤波,观察滤波结果。--------------------------在提供的DSP实验板上编程对本滤波器过程进行实现,观察实际的滤波结果,并与理论结果对比。六、实验器材(设备、元器件):安装MATLAB软件的PC机一台,DSP实验演示系统一套。七、实验步骤:(1)给定输入信号:FSK信号(输入的二进制待调信号为随机信号,码元频率为500Hz,两个载频分别为2kHz和4kHz,采样频率为20kHz,)。利用MATLAB编程产生本信号,画出其时域和频域的图像。(2)利用MATLAB编程设计一个数字低通滤波器,指标要求如下:通带截止频率:2.2pfkHz;阻带截止频率:3.5sfkHz;采样频率20pfkHz;通带峰值起伏:1[]pdB;最小阻带衰减:40[]SdB。(3)分别用MATLAB中的IIR和FIR设计命令进行滤波器设计,得出需要的滤波器系数。(4)(拓展要求)用MATLAB滤波器辅助设计软件对上述滤波器进行设计,并将得到的滤波器系数对输入信号进行滤波,观察滤波实现。(5)将得到的滤波器系数在MATLAB中编程进行实现(选择直接型实现结果进行实现),对(1)中的输入信号进行滤波(分别用FIR和IIR滤波器进行),观察滤波结果,画出时域和频域图像。(6)(拓展要求)修改需要设计的滤波器的指标要求,比如:将通带截止频率修改为2kHz,或者将最小阻带衰减改为20[]SdB,这时再重复(3)和(5)的步骤,观察所得到的滤波器效果,并对这一结果进行解释。(7)(拓展要求)在提供的DSP实验板上编程对滤波器滤波过程进行实现,观察实际的滤波结果,并与理论结果对比。八、实验数据及结果分析:(1)产生输入FSK信号的程序程序:N=input('二进制序列长度=');b=randint(1,N,2);%二进制序列rb=500;%比特率为500A=10;%调制信号的幅度f1=2000;%载频f1为2000f2=4000;%载频f1为4000fs=20000;%采样频率20kHzTime=1/rb;%脉冲保持时间Num=fs*Time;%一个脉冲采样多少点High_Level=ones(1,Num);--------------------------Low_Level=zeros(1,Num);signal=zeros(1,Num*N);%调制后的信号signal_y=zeros(1,Num*N);%基带信号t=0:1/fs:N*Time-1/fs;forI=1:N%原始脉冲信号ifb(I)==1signal_y((I-1)*Num+1:I*Num)=High_Level;elsesignal_y((I-1)*Num+1:I*Num)=Low_Level;endendforI=1:N%实现FSK调制ifb(I)==1signal((I-1)*Num+1:I*Num)=A*sin(2*pi*f1*t((I-1)*Num+1:I*Num));elsesignal((I-1)*Num+1:I*Num)=A*sin(2*pi*f2*t((I-1)*Num+1:I*Num));endend[H,omega]=freqz(signal,1);%得到调制后频谱subplot(311)plot(t,signal_y)axis([0,N*Time-1/fs,0,2])title('基带信号时域波形')subplot(312)plot(t,signal)title('FSK调制后的时域波形')subplot(313)plot(omega*fs/(2*pi),abs(H))title('FSK调制后信号频域波形')其调制后时域频域波形如下:--------------------------结果分析:(1)实验中取了20个二进制随机序列,形成了如上图所示的基带信号的时域脉冲信号。(2)取F1=2kHz,F2=4kHz的载频信号,进行FSK调制,同时实验中用到的采样频率Fs=20kHz。得到如上图所示的时域波形与频域波形。其中当脉冲取1时,时域在该时刻为频率为2kHz的正弦信号,频域低频信号移到2kHz为中心的区域;当脉冲取0时,时域在该时刻为频率为4kHz的正弦信号,频域低频信号移到4kHz为中心的区域。便得到了FSK的调制信号。(2)FIR滤波器设计程序程序如下:N=input('二进制序列长度=');b=randint(1,N,2);%二进制序列rb=500;%比特率为500A=10;%调制信号的幅度f1=2000;%载频f1为2000f2=4000;%载频f1为4000fs=20000;%采样频率20kHzTime=1/rb;%脉冲保持时间Num=fs*Time;%一个脉冲采样多少点High_Level=ones(1,Num);Low_Level=zeros(1,Num);signal=zeros(1,Num*N);%调制后的信号signal_y=zeros(1,Num*N);%基带信号t=0:1/fs:N*Time-1/fs;forI=1:N%原始脉冲信号ifb(I)==1--------------------------signal_y((I-1)*Num+1:I*Num)=High_Level;elsesignal_y((I-1)*Num+1:I*Num)=Low_Level;endendforI=1:N%实现FSK调制ifb(I)==1signal((I-1)*Num+1:I*Num)=A*sin(2*pi*f2*t((I-1)*Num+1:I*Num));elsesignal((I-1)*Num+1:I*Num)=A*sin(2*pi*f1*t((I-1)*Num+1:I*Num));endendfp=22