本次为实验项目,在学习数字信号处理课程需要利用matlab来巩固所学知识
参考博主为整个项目实验,本次我们所需只需前三问即可。
FIR数字滤波器的设计_A Master的博客-CSDN博客_fir数字滤波器的设计
一、实验内容
(1)N=45,计算并画出矩形窗、汉明窗、布莱克曼窗归一化的幅度谱,并比较各自的主要特点。
(2) N=15,带通滤波器的两个通带边界分别是w1 =0.3π,w2=0.5π。用汉宁窗设计此线性相位带通滤波器,观察它的实际3dB和20dB带宽。N=45,重复这一设计,观察幅频和相位特性的变化 ,注意长度N变化的影响。
(3)分别改用矩形窗和布莱克曼窗,设计(2)中的带通滤波器,观察并记录窗函数对滤波器幅频特性的影响,比较三种窗的特点。
二、实验流程
2.1 N=45,画出矩形窗、汉明窗、布莱克曼窗归一化的幅度谱。
可以看到图1为三种窗函数的汇总,图2为三种窗口函数的时域波形和分开展示的幅度谱。
具体代码见下:将汇总拆开只需要subplot函数来规划区域即可。
clear all;
N=45;
%矩形窗
wn1=boxcar(N);
%汉明窗
wn2=hanning(N);
%布莱克曼窗
wn3=blackman(N);
[h1,w1]=freqz(wn1,1);% 调用freqz函数求数字滤波器的频率响应[h2,w2]=freqz(wn2,1);
[h3,w3]=freqz(wn3,1);
%其分贝转化=20log10(h)
plot(w1/pi,20*log10(abs(h1)),'r-',w2/pi,20*log10(abs(h2)),'m--',w3/pi,20*log10(abs(h3)),'b-.');
xlable('归一化频率/\pi'); ylable('幅度/db');
title('矩形窗red','汉明窗purple','布莱克曼窗blue');
2.2 采样N=15和N=45汉宁窗设计带通滤波器,通带边界为0.3pi和0.5pi。
具体代码见下:第三问只需要将窗口函数hanning分别改为boxcar和blackman即可
clear all;
N1=15;
wn=[0.3,0.5];
window=hanning(N1+1);
b1=fir1(N1,wn,window);
[h1,w]=freqz(b1);
subplot(2,2,1);
plot(w/pi,20*log10(abs(h1)),'r');
xlabel('归一化频率/\pi');ylabel('幅度/dB');
title('N=15,幅度特性');
subplot(2,2,3);
plot(w/pi,angle(h1),'r');
title('N=15,相位特性');
N2=45;
wn2=[0.3,0.5];
window2=hanning(N2+1);
b2=fir1(N2,wn2,window2);
[h2,w1]=freqz(b2);
subplot(2,2,2);
plot(w1/pi,20*log10(abs(h2)),'m');
title('N=45,幅度特性');
xlabel('归一化频率/\pi');ylabel('幅度/dB');
subplot(2,2,4);
plot(w/pi,angle(h2),'r');
title('N=45,相位特性');
上述代码主要使用了fir1函数来设计其滤波器,其函数中各个参数使用:
b:返回fir滤波器的单位脉冲相应,偶对称,长度为n+1;
n:滤波器的阶数,设计出的滤波器长度为n+1;
wn:滤波器的截止频率,取值范围0window:指定使用的窗函数,默认是汉明窗(Hamming),最常用的还有汉宁(Hanning)、布莱克曼窗(Blackman)、凯赛窗(Kaiser);
b=fir1(n,wn);
b=fir1(n,wn,'ftype');
b=fir1(n,wn,'ftype',window)
为了显示的更加美观和简便可以使用GUI交互界面来达到更好的展示效果:图片展示如下,可以看到其实验所需的图形在一个界面便可以展示,当我们想要使用时,点击相关控制按键即可。
本次实验相对来说代码量较少,主要为分析其设计的流程和效果分析,对于课程知识的巩固很有帮助,对于滤波器的设计是个较为复杂的过程,相关知识大家可以自行寻找资源查看。