窗函数法设计FIR数字滤波器

设计要求:

1.用海明窗设计一个线性低通滤波器,截止频率wc=0.25pi,要求在N=15和N=33的两种窗口长度的要求下,分别求出h(n),输出相应的幅频特性和相频特性。

2.用四种窗函数设计线性相位低通滤波器,绘制相应的幅频特性,比较四种窗函数对滤波器特性的影响。

实现代码:
 

实现理想低通滤波器的函数:

function hd = ideal_lp(wc,N)
%N为奇数 理想低通滤波器的脉冲响应
alpha = (N-1)/2;
n = 0:1:N-1;
m = n - alpha;
hd = sin(wc*m)./(pi*m);
hd(alpha + 1) = wc/pi;

实现设计: 

clear all;
close all;
figure;
N =15;
wc = 0.25*pi;
n = 0:1:N-1;
hd = ideal_lp(wc,N);
subplot(221);stem(n,hd);title('理想单位脉冲响应');
w_ham = (hamming(N))';
h = hd.*w_ham;
subplot(223);stem(n,h);title('实际单位脉冲响应');
[H w] = freqz(h);
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
subplot(222);plot(w/pi,mag);title('实际的幅度响应');
subplot(224);plot(w/pi,pha);title('实际的相位响应');
 w1 = w;
% plot(w/pi,db);title('实际的幅度响应');

db1 = 20*log10((mag+eps)/max(mag));
figure;
N =33;
wc = 0.25*pi;
n = 0:1:N-1;
hd = ideal_lp(wc,N);
subplot(221);stem(n,hd);title('理想单位脉冲响应');
w_ham = (hamming(N))';
h = hd.*w_ham;
subplot(223);stem(n,h);title('实际单位脉冲响应');
[H w] = freqz(h);
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
subplot(222);plot(w/pi,mag);title('实际的幅度响应');
subplot(224);plot(w/pi,pha);title('实际的相位响应');
figure;
plot(w1/pi,db1);
hold on;
plot(w/pi,db);
hold on;
line([0,1],[-3,-3],'Color','g');
hold on;
line([0,1],[-20,-20],'Color','g');
title('实际的幅度db响应,(15)蓝色 (33)红色');

%% 不同的窗口对滤波器的影响
N =33;
wc =0.25*pi;
hd = ideal_lp(wc,N);
w_box = (boxcar(N))';
h_box = hd .*w_box;

w_han = (hanning(N))';
h_han = hd .*w_han;

w_ham = (hamming(N))';
h_ham = hd .*w_ham;

w_bla = (blackman(N))';
h_bla = hd .*w_bla;

[H w] = freqz(h_box);
subplot(221);plot(w/pi,20*log10(abs(H)));title('由矩形窗设计的filter幅度响应');

[H w] = freqz(h_han);
subplot(222);plot(w/pi,20*log10(abs(H)));title('由汉宁窗设计的filter幅度响应');

[H w] = freqz(h_ham);
subplot(223);plot(w/pi,20*log10(abs(H)));title('由海明窗设计的filter幅度响应');

[H w] = freqz(h_bla);
subplot(224);plot(w/pi,20*log10(abs(H)));title('由二阶升余弦设计的filter幅度响应');


绘图:

 

窗函数法设计FIR数字滤波器_第1张图片窗函数法设计FIR数字滤波器_第2张图片 

 

 

 

窗函数法设计FIR数字滤波器_第3张图片

 

 

窗函数法设计FIR数字滤波器_第4张图片

 

你可能感兴趣的:(matlab,matlab)