频率采样法matlab程序,MATLAB用频率采样法设计一带通数字滤波器(程序)
时间: 2023-12-24 11:03:13 浏览: 130
利用MATLAB结合频率取样法设计数字高通FIR滤波器.doc
以下是一个使用频率采样法设计一带通数字滤波器的MATLAB程序:
```
% 定义带通数字滤波器的参数
fs = 1000; % 采样率
f1 = 50; % 通带下限频率
f2 = 150; % 通带上限频率
f3 = 200; % 阻带下限频率
f4 = 300; % 阻带上限频率
Rp = 1; % 通带最大衰减
Rs = 60; % 阻带最小衰减
% 计算数字滤波器的参数
wp1 = 2*pi*f1/fs;
wp2 = 2*pi*f2/fs;
ws1 = 2*pi*f3/fs;
ws2 = 2*pi*f4/fs;
B = wp2 - wp1;
wc = sqrt(wp1*wp2);
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta_s = 10^(-Rs/20);
A = -20*log10(delta_s);
% 计算数字滤波器的阶数和截止频率
N = ceil((A-8)/(2.285*B));
wc1 = wc/B^(1/N);
% 计算数字滤波器的传递函数
k = 1:N;
sk = -sin((2*k-1)*pi/(2*N));
ck = cos((2*k-1)*pi/(2*N));
alpha = sin(wc1)/(2*sqrt(delta_p));
ak = sk.^2 + ck.^2/(alpha^2);
bk = -2*sk.*ck/(alpha);
k1 = prod(ak);
k2 = prod(bk);
% 数字滤波器的传递函数
z = tf('z',1/fs);
Hd = k1*(z-1)^N/k2;
Hd = minreal(Hd);
% 使用双线性变换将数字滤波器转换为模拟滤波器
s = tf('s');
Ha = subs(Hd, (2/fs)*((s-1)/(s+1)), s);
% 画出模拟滤波器的幅频特性
w = linspace(0, 2*pi*fs, 1000);
[mag, phase, w] = bode(Ha, w);
mag = 20*log10(mag);
plot(w/(2*pi), mag)
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Analog Filter Frequency Response')
```
这个程序使用频率采样法来设计一个带通滤波器,然后使用双线性变换将数字滤波器转换为模拟滤波器。最后,程序画出模拟滤波器的幅频特性。你可以根据自己的需要修改程序中的参数来设计不同参数的带通滤波器。
阅读全文