用双线性变换法设计高通滤波器,未经预畸变的通带带宽较经过预畸变的带宽有什么变化?用matalab代码实现,画出预畸变和未预畸变的幅频图,要求纵轴以db为单位。写出完整可运行的代码
时间: 2024-10-25 17:04:37 浏览: 51
IIR_双线性变换法_双线性变换法matlab巴特沃兹滤波器_
5星 · 资源好评率100%
双线性变换法是一种将模拟频率域的设计转换到数字频率域的设计技术,常用于设计数字信号处理滤波器。对于高通滤波器来说,如果未进行预扭曲(也称为频率映射),其未经预畸变的通带带宽会在数字化过程中有所压缩,因为非线性变换会使得频率响应曲线变得更陡峭。
预扭曲是为了补偿这种频率响应的变化,通过调整频率映射函数,使得在实际数字系统中的频率响应更接近理想情况,通常可以保持原始模拟设计的通带特性。
以下是一个基本的MATLAB代码示例,它包括了未预扭曲和预扭曲高通滤波器的设计、幅频特性的绘制,以及结果的比较:
```matlab
% 设定滤波器参数
fc = 50; % 频率截断点 (Hz)
fs = 1000; % 采样率 (Hz)
order = 4; % 滤波器阶数
% 双线性变换
[b,a] = butter(order,'high',fc/fs); % 未预扭曲的巴特沃斯滤波器设计
[B,A] = bilinear(b,a,fs); % 应用双线性变换
% 计算幅频特性 (dB)
[Hs_db_unwarp] = dbmag(B,A);
[Hd_db_warp] = dbmag(b,a,fs);
% 绘制幅频图
figure;
subplot(2,1,1);
freqz(B,A,fs,plot='bode'); % 未预扭曲
title('未预扭曲高通滤波器幅频特性 (dB)');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
subplot(2,1,2);
freqz(b,a,fs,plot='bode'); % 预扭曲
title('预扭曲高通滤波器幅频特性 (dB)');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
% 显示结果
disp('-
阅读全文