matlab编写程序设计一个带通滤波器,其参数为:ws1=0.2*pi;wp1=0.35*pi; wp2=0.65*pi;ws2=0.8*pi;Ap=-3dB, As=-75dB; 根据阻带要求选择布莱克曼窗。
时间: 2023-10-15 09:02:05 浏览: 143
好的,以下是 Matlab 代码实现:
```matlab
% 定义参数
ws1 = 0.2*pi;
wp1 = 0.35*pi;
wp2 = 0.65*pi;
ws2 = 0.8*pi;
Ap = 3; % 单位为 dB
As = 75; % 单位为 dB
% 计算通带和阻带边缘频率
wc1 = sqrt(wp1*ws1);
wc2 = sqrt(wp2*ws2);
% 计算通带和阻带宽度
dw1 = wc2 - wc1;
dw2 = min(wc1, ws2-wp2);
% 计算窗函数长度
N = ceil((As-8)/(2.285*dw2));
if mod(N, 2) == 0
N = N + 1;
end
% 生成布莱克曼窗函数
w = blackman(N);
% 计算理想带通滤波器的频率响应
h_ideal = ideal_lp(wc2, N) - ideal_lp(wc1, N);
% 应用窗函数
h = h_ideal' .* w;
% 频域中心移位
h_shift = fftshift(h);
% 绘制频率响应曲线
[H, w] = freqz(h_shift);
mag_H = 20*log10(abs(H));
plot(w/pi, mag_H);
xlabel('Normalized Frequency (\times\pi rad/sample)');
ylabel('Magnitude (dB)');
title('Magnitude Response of Bandpass Filter');
% 输出滤波器系数
b = h_shift;
a = 1;
```
其中 `ideal_lp` 函数用于计算理想低通滤波器的频率响应,实现如下:
```matlab
function h = ideal_lp(wc, N)
% Ideal lowpass filter calculation
% wc : cutoff frequency
% N : filter length (odd)
% h : filter impulse response
h = zeros(1, N);
n = -(N-1)/2 : (N-1)/2;
for i = 1 : length(n)
if n(i) == 0
h(i) = pi * wc;
else
h(i) = sin(pi*wc*n(i)) / (pi*n(i));
end
end
end
```
最终得到的滤波器系数为 `b`,`a` 为 1。
阅读全文