请设计一个椭圆带通滤波器的代码,设计流程为从数字域带通指标出发,通过预畸变得到模拟域带通指标;然后对模拟域带通指标进行归一化处理,变为模拟域低通指标;模拟域低通指标可以通过模拟 低通原型滤波器进行设计,得到模拟低通滤波器系统;模拟低通滤波器系统可以通过脉冲响应不变法或者双线性变换法得到数字域低通滤波器系统;数字域低 通滤波器系统通过数字频带变换就可以得到数字域带通滤波器系统。,并且该代码可在matlab上运行不出错
时间: 2023-05-26 21:07:49 浏览: 115
% 1. 从数字域带通指标出发,得到模拟域带通指标
fs = 1000; % 采样率
f1 = 50; % 带通边缘频率1
f2 = 150; % 带通边缘频率2
B = f2 - f1; % 带宽
% 预畸变
wp1 = 2*pi*f1/fs * tan(pi*B/fs);
wp2 = 2*pi*f2/fs * tan(pi*B/fs);
% 根据预畸变后的带通指标,得到模拟域带通指标
ws1 = (wp1 + wp2)/2 - B/2; % 带通边缘频率1
ws2 = (wp1 + wp2)/2 + B/2; % 带通边缘频率2
As = 30; % 阻带衰减
% 2. 对模拟域带通指标进行归一化处理
wp = pi; % 常规低通滤波器的截止频率
ws = min([ws1, ws2]); % 归一化后的带通边缘频率2
Ap = 1; % 通带最大衰减,常设为1dB
alpha_p = (10^(0.05*Ap) - 1)/(10^(0.05*Ap) + 1); % 常规低通滤波器的阻带最大波纹
% 根据归一化后的模拟域低通指标进行设计
[N, Wn] = ellipord(wp, ws, Ap, As); % 求得阶数和通带截止频率
[b, a] = ellip(N, Ap, As, Wn); % 模拟低通滤波器系数
% 3. 将模拟低通滤波器系数转换成数字低通滤波器系数
[B, A] = bilinear(b, a, fs); % 双线性变换法
% [B, A] = impinvar(b, a, fs); % 脉冲响应不变法
% 4. 通过数字频带变换来得到数字域带通滤波器系数
F1 = f1/fs; % 数字域带通边缘频率1
F2 = f2/fs; % 数字域带通边缘频率2
omega1 = 2*pi*F1; % 对应的数字角频率1
omega2 = 2*pi*F2; % 对应的数字角频率2
delta_omega = omega2 - omega1; % 数字域带宽
% 数字频带变换
k = (A*exp(-1i*omega2) - A*exp(-1i*omega1)) / (B*exp(-1i*omega2) - B*exp(-1i*omega1));
bpass_num = delta_omega / (2*pi) * abs(k) * B; % 数字域带通滤波器系数
% 绘制幅频特性
fvtool(bpass_num);
% 对信号进行滤波
x = randn(1000,1); % 随机信号
y = filter(bpass_num, 1, x); % 滤波后的信号
阅读全文