2022 05月20日
作者: 小白哥
  • 浏览: 785
  • 收藏:0
  • 点赞:2
MATLAB设计FIR滤波器
% 画出 5 种常用窗函数的波形
N=51;
n=0:N-1;
w1=boxcar(N);     %矩形窗
w2=bartlett(N);   %三角窗
w3=hanning(N);    %汉宁窗
w4=hamming(N);    %海明窗
w5=blackman(N);   %布莱克曼窗
plot(n,w1,'*',n,w2,'-.',n,w3,'-',n,w4,'+',n,w5,'.')%在同一个图中画出 5 个窗函数
legend('box','barlet','hanning','hamming','blackman')%标出曲线名

1.jpg

%采用矩形窗和汉明窗设计一个 FIR 低通滤波器,满足指标:wc=0.25pi,阶数 N=10.
N=10;
wc=0.25*pi;
b1=fir1(N,wc/pi,boxcar(N+1));%fir1 返回 fir 滤波器的系统函数,参数分别为阶数 N、截止频率 wc,以 pi 为基准和矩形窗函数。若设计高通滤波器在参数 wc/pi 和 boxcar(N)之间加'high'。
b2=fir1(N,wc/pi,hamming(N+1));%fir1 返回 fir 滤波器的系统函数,参数分别为阶数 N、截止频率 wc,以 pi 为基准和汉明窗函数。
[h1,w1]=freqz(b1,1,-2*pi:pi/100:2*pi);
[h2,w2]=freqz(b2,1,-2*pi:pi/100:2*pi);
plot(w1/pi,abs(h1),'-',w2/pi,abs(h2),'-.');
ylabel('|H|');
xlabel('pi');
grid;
legend('boxcar','hamming');

1.jpg

% 采用窗函数法设计一个 FIR 带通滤波器,满足指标:低端阻带边界频率 ws1=0.2pi,高端阻带边
% 界频率 ws2=0.8pi,阻带最小衰减 60dB;低端通带边界频率 wp1=0.35pi,高端通带边界频率
% wp2=0.65pi,通带最大衰减 1dB.
%根据阻带最小衰减 60dB,选择布莱克曼窗。
ws1=0.2*pi;ws2=0.8*pi;
wp1=0.35*pi;wp2=0.65*pi;
N=max(ceil(5.5*2*pi/(wp1-ws1)),ceil(5.5*2*pi/(ws2-wp2)));%根据过渡带宽选择 N,ceil(x)为不小于 x的最小整数。
wc=[(ws1+wp1)/2,(ws2+wp2)/2];
b=fir1(N-1,wc/pi,blackman(N));%阶数比长度小1
[h,f]=freqz(b,1,-2*pi:pi/100:2*pi);
plot(f/pi,20*log10(abs(h)),'-');ylabel('dB');xlabel('pi');grid;

1.jpg

% 频率采样法
% 利用频率抽样法,设计一个低通 FIR 数字滤波器, wc=0.5pi,抽样点数为 N=33,要求滤波
% 器具有线性相位。
N=33;
absH=[ones(1,9),zeros(1,16),ones(1,8)];%理想低通滤波器的频率抽样点的幅度。
n=[];
for i=1:N
n(i)=i-1;
end
angH=-2*pi/N*n*(N-1)/2;%理想低通滤波器的频率抽样点的相角。
H=absH.*exp(1j*angH);%理想低通滤波器的频率抽样点。
b=ifft(H,N);%所设计滤波器的单位抽样响应。
[H1,w]=freqz(b,1,500);
plot(w/pi,20*log10(abs(H1)));ylabel('dB');xlabel('pi');grid;
axis([0 1 -100 10]);

1.jpg

% 实验任务
% 一、利用窗函数法设计一个线性相位低通 FIR 数字滤波器, wp=0.4pi, wst=0.6pi,阻带最小
% 衰减-50dB。
% 根据衰减-50dB选择海明窗。
ws1=0.6*pi;
wp1=0.4*pi;
N=max(ceil(3.3*2*pi/(ws1-wp1)));%根据过渡带宽选择 N,ceil(x)为不小于 x的最小整数。
wc=(ws1+wp1)/2;
b=fir1(N-1,wc/pi,hamming(N));
[h,f]=freqz(b,1,-2*pi:pi/100:2*pi);
plot(f/pi,20*log10(abs(h)),'-');ylabel('dB');xlabel('pi');grid;

1.jpg

% 二、利用频率抽样法,设计一个低通 FIR 数字滤波器, wc=0.5pi,抽样点数为 N=33,要求
% 滤波器具有线性相位。
% (1)增加一点过渡带进行优化,过渡带抽样点值为 0.5;
% (2)增加抽样点数至 N=65,加两点过渡带优化,过渡带抽样点值为 0.5886, 0.1065。


% (1)增加一点过渡带进行优化,过渡带抽样点值为 0.5;
N=33;
absH=[ones(1,9),zeros(1,16),ones(1,8)];%理想低通滤波器的频率抽样点的幅度。
n=[];
for i=1:N
n(i)=i-1;
end
angH=-2*pi/N*n*(N-1)/2;%理想低通滤波器的频率抽样点的相角。
H=absH.*exp(1j*angH);%理想低通滤波器的频率抽样点。
b=ifft(H,N);%所设计滤波器的单位抽样响应。
[H1,w]=freqz(b,1,500);
figure(1)
plot(w/pi,20*log10(abs(H1)),'-');ylabel('dB');xlabel('pi');grid;
axis([0 1 -100 10]);
hold on

%增加一点过渡带进行优化,过渡带抽样点值为 0.5;
absH(10)=0.5;
absH(25)=0.5;
n=[];
for i=1:N
n(i)=i-1;
end
angH=-2*pi/N*n*(N-1)/2;%理想低通滤波器的频率抽样点的相角。
H=absH.*exp(1j*angH);%理想低通滤波器的频率抽样点。
b=ifft(H,N);%所设计滤波器的单位抽样响应。
[H1,w]=freqz(b,1,500);
plot(w/pi,20*log10(abs(H1)),'-');ylabel('dB');xlabel('pi');grid;
axis([0 1 -100 10]);
hold on
% (2)增加抽样点数至 N=65,加两点过渡带优化,过渡带抽样点值为 0.5886, 0.1065。
N=65;
absH=[ones(1,17),zeros(1,32),ones(1,16)];%理想低通滤波器的频率抽样点的幅度。
%增加抽样点数至 N=65,加两点过渡带优化,过渡带抽样点值为 0.5886, 0.1065。
absH(18)=0.5886;
absH(49)=0.5886;
absH(19)=0.1065;
absH(48)=0.1065;
n=[];
for i=1:N
n(i)=i-1;
end
angH=-2*pi/N*n*(N-1)/2;%理想低通滤波器的频率抽样点的相角。
H=absH.*exp(1j*angH);%理想低通滤波器的频率抽样点。
b=ifft(H,N);%所设计滤波器的单位抽样响应。
[H1,w]=freqz(b,1,500);
plot(w/pi,20*log10(abs(H1)),'-');ylabel('dB');xlabel('pi');grid;
axis([0 1 -100 10]);
legend('N=33','N=33优化','N=65优化')

1.jpg

FIRlbq.rar



  

发表评论

评论列表


没有评论

筛选

文章分类

热门文章

企业招聘网址

2023-12-07  浏览:3044次

BC1.2协议介绍

2023-06-14  浏览:2946次

USB2.0速度识别

2023-10-23  浏览:1366次