给出MATLAB程序
时间: 2024-02-27 22:51:36 浏览: 15
好的,以下是MATLAB程序实现:
切比雪夫 I 型数字低通滤波器设计:
```matlab
% 参数设置
wp = 0.2 * pi; % 通带截止频率
ws = 0.25 * pi; % 阻带截止频率
Rp = 1; % 通带最大衰减
As = 10; % 阻带最小衰减
% 计算滤波器阶数
N = ceil(acosh(sqrt((10^(0.1*As)-1)/(10^(0.1*Rp)-1)))/acosh(ws/wp));
% 计算切比雪夫 I 型数字低通滤波器的极点
for k = 1:N
sk(k) = -sin((2*k-1)*pi/(2*N)) + 1j*cos((2*k-1)*pi/(2*N));
end
% 将极点映射到单位圆内
T = 1;
for k = 1:N
zk(k) = exp(T*sk(k));
end
% 计算数字低通滤波器的传递函数
K = 1/prod(abs(1-zk));
num = abs(poly(zk));
den = real(poly([zk,conj(zk)]));
H = K*tf(num,den,T);
% 对传递函数进行归一化
Hn = H/freqresp(H,wp);
% 输出差分方程系数
[b,a] = tfdata(Hn,'coeff');
```
切比雪夫 II 型数字带通滤波器设计:
```matlab
% 参数设置
wp1 = 0.1 * pi; % 第一个阻带截止频率
wp2 = 0.9 * pi; % 第二个阻带截止频率
ws1 = 0.07 * pi; % 第一个通带截止频率
ws2 = 0.43 * pi; % 第二个通带截止频率
Rp = 1; % 通带最大衰减
As = 15; % 阻带最小衰减
Fs = 2000; % 系统采样频率
% 计算滤波器阶数
wp = (wp2 - wp1)/2;
ws = (wp2 - wp1)/(2*0.1);
N = ceil(acosh(sqrt((10^(0.1*As)-1)/(10^(0.1*Rp)-1)))/acosh(ws/wp));
% 计算切比雪夫 II 型数字带通滤波器的极点
for k = 1:N
sk(k) = -sin((2*k+N-1)*pi/(2*N)) + 1j*cos((2*k+N-1)*pi/(2*N));
end
% 将极点映射到单位圆内
T = 1/Fs;
for k = 1:N
zk(k) = exp(T*sk(k));
end
% 计算数字带通滤波器的传递函数
K = 1/prod(abs(1-zk.*conj(zk)));
num = abs(poly(zk).*poly(conj(zk)));
den = real(poly([zk,conj(zk)]));
H = K*tf(num,den,T);
% 对传递函数进行归一化
wc = (ws1+ws2)/2;
Hn = H/freqresp(H,wc);
% 输出差分方程系数
[b,a] = tfdata(Hn,'coeff');
```