用Matlab 代码实现用双线性变换法设计一个Chebyshev1型数字带通滤波器,设计指标为:T=1ms,Rp=1dB,Wp1=0.35π,Wp2=0.65π,Rs=60dB,Ws1=0.2π,Ws2=0.8π,并绘制数字滤波器幅度响应图,相位响应图,幅度响应:dB ,以及群时延图
时间: 2023-08-18 12:06:08 浏览: 65
以下是用Matlab实现双线性变换法设计Chebyshev1型数字带通滤波器的代码:
```matlab
% 指定设计参数
T = 1e-3; % 采样周期
Rp = 1; % 通带最大衰减
Wp1 = 0.35*pi; % 通带边缘频率1
Wp2 = 0.65*pi; % 通带边缘频率2
Rs = 60; % 阻带最小衰减
Ws1 = 0.2*pi; % 阻带边缘频率1
Ws2 = 0.8*pi; % 阻带边缘频率2
% 计算通带和阻带的截止频率
fp1 = 2/T * tan(Wp1/2);
fp2 = 2/T * tan(Wp2/2);
fs1 = 2/T * tan(Ws1/2);
fs2 = 2/T * tan(Ws2/2);
% 计算通带和阻带的通带增益和阻带衰减量
Ap = 10^(Rp/20);
As = 10^(Rs/20);
ep = sqrt(Ap^2 - 1);
es = sqrt(As^2 - 1);
% 计算通带和阻带的通带角频率和截止角频率
wp1 = 2*pi*fp1;
wp2 = 2*pi*fp2;
ws1 = 2*pi*fs1;
ws2 = 2*pi*fs2;
Wp = wp2 - wp1;
Ws = ws2 - ws1;
% 计算滤波器阶数和归一化的通带和阻带频率
N = ceil(acosh(sqrt((es^2-1)/(ep^2-1)))/acosh(Ws/Wp));
Wc1 = wp1/ws1;
Wc2 = wp2/ws2;
% 计算Chebyshev1型滤波器的极点
k = 1:N;
theta_k = (2*k-1)*pi/(2*N);
sk = -sinh(asinh(1/ep)/N) * sin(theta_k);
pk = exp(j*theta_k);
% 计算数字滤波器的传递函数
[num, den] = zp2tf(pk, sk, 1);
[b, a] = bilinear(num, den, 1/T);
% 绘制数字滤波器的幅频响应和相位响应
[H, w] = freqz(b, a, 1024);
Hdb = 20*log10(abs(H));
Hphase = angle(H);
gd = grpdelay(b, a, w);
% 绘制幅频响应图
figure;
plot(w/pi*T/2, Hdb);
title('数字Chebyshev1型带通滤波器幅频响应');
xlabel('频率/Hz');
ylabel('幅度/dB');
axis([0, 1, -80, 5]);
% 绘制相位响应图
figure;
plot(w/pi*T/2, Hphase);
title('数字Chebyshev1型带通滤波器相位响应');
xlabel('频率/Hz');