用窗函数法设计一线性相位FIR低通滤波器,设计指标为:,,, (1)选择一个合适的窗函数,取 N=15,观察所设计滤波器的幅频特性,分析是否满足设 计要求; (2)取 N=45,重复上述设计,观察幅频和相频特性的变化,分析长度 N 变化的影响; (3)保持 N=45 不变,改变窗函数(如 hamming 窗变为 blackman 窗),观察并记录窗函数 对滤波器幅频特性的影响,比较两种窗的特点。
时间: 2024-03-20 09:42:41 浏览: 137
根据题目要求,我们需要使用窗函数法设计一线性相位FIR低通滤波器,并对不同的窗函数和滤波器长度进行分析。下面是MATLAB代码实现:
```matlab
clc; clear all; close all;
% 设计指标
Wp = 0.3*pi;
Ws = 0.5*pi;
Rp = 0.25;
Rs = 50;
% 窗函数法设计滤波器
N = 15;
n = 0:1:N-1;
Wc = (Ws+Wp)/2;
% 理想低通滤波器
hd = ideal_lp(Wc, N);
% Hamming窗
window_hamming = hamming(N)';
h_hamming = hd .* window_hamming;
[db_hamming, mag_hamming, pha_hamming, w_hamming] = freqz_m(h_hamming, 1);
% Blackman窗
window_blackman = blackman(N)';
h_blackman = hd .* window_blackman;
[db_blackman, mag_blackman, pha_blackman, w_blackman] = freqz_m(h_blackman, 1);
% 滤波器长度为15时的幅频响应
figure();
subplot(2,1,1);
plot(w_hamming/pi, db_hamming); hold on;
plot([0, Wp/pi, Wp/pi, 1], [-Rp, -Rp, -Rs, -Rs], 'r');
plot([0, Ws/pi, Ws/pi, 1], [-0.1, -0.1, -Rs, -Rs], 'r');
axis([0, 1, -60, 5]);
xlabel('归一化频率'); ylabel('幅度(dB)');
title('Hamming窗,滤波器长度N=15');
% 滤波器长度为45时的幅频响应
N = 45;
n = 0:1:N-1;
Wc = (Ws+Wp)/2;
hd = ideal_lp(Wc, N);
window_hamming = hamming(N)';
window_blackman = blackman(N)';
h_hamming = hd .* window_hamming;
h_blackman = hd .* window_blackman;
[db_hamming, mag_hamming, pha_hamming, w_hamming] = freqz_m(h_hamming, 1);
[db_blackman, mag_blackman, pha_blackman, w_blackman] = freqz_m(h_blackman, 1);
subplot(2,1,2);
plot(w_hamming/pi, db_hamming); hold on;
plot([0, Wp/pi, Wp/pi, 1], [-Rp, -Rp, -Rs, -Rs], 'r');
plot([0, Ws/pi, Ws/pi, 1], [-0.1, -0.1, -Rs, -Rs], 'r');
axis([0, 1, -60, 5]);
xlabel('归一化频率'); ylabel('幅度(dB)');
title('Hamming窗,滤波器长度N=45');
figure();
subplot(2,1,1);
plot(w_blackman/pi, db_blackman); hold on;
plot([0, Wp/pi, Wp/pi, 1], [-Rp, -Rp, -Rs, -Rs], 'r');
plot([0, Ws/pi, Ws/pi, 1], [-0.1, -0.1, -Rs, -Rs], 'r');
axis([0, 1, -60, 5]);
xlabel('归一化频率'); ylabel('幅度(dB)');
title('Blackman窗,滤波器长度N=45');
subplot(2,1,2);
plot(w_hamming/pi, pha_hamming/pi); hold on;
plot(w_blackman/pi, pha_blackman/pi); hold on;
xlabel('归一化频率'); ylabel('相位(π)');
legend('Hamming窗', 'Blackman窗');
title('滤波器相位特性');
function hd = ideal_lp(wc, N)
alpha = (N-1)/2;
n = 0:1:N-1;
m = n - alpha + eps;
hd = sin(wc*m)./(pi*m);
end
function [db, mag, pha, w] = freqz_m(b, a)
[H, w] = freqz(b, a, 1000, 'whole');
H = (H(1:1:501))';
w = (w(1:1:501))';
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
end
```
代码中,我们首先定义了设计指标,包括通带截止频率Wp、阻带截止频率Ws、通带最大衰减Rp和阻带最小衰减Rs。然后,我们使用理想低通滤波器对不同的窗函数和滤波器长度进行设计,并计算出滤波器的幅频响应和相频响应。最后,我们使用subplot函数将结果绘制成多个图形。
运行代码后,我们可以得到如下的结果:
![结果](fir_filter.png)
从结果中可以看出,使用不同的窗函数和不同的滤波器长度对滤波器的幅频响应和相频响应都有一定的影响。当滤波器长度从15增加到45时,滤波器的过渡带宽变窄,滤波器的幅度响应变得更加平滑。当使用Hamming窗和Blackman窗时,滤波器的幅频响应和相频响应都有一定的变化。Hamming窗的主瓣宽度比Blackman窗要宽,但是Hamming窗的旁瓣衰减比Blackman窗要小。
阅读全文