>> % Program P6_1_mod % Chebyshev Type I低通滤波器的设计 clear all close all Fs = 10e3; % 抽样频率 Fpass = 1e3; % 通带边界频率 Fstop = 2e3; % 阻带边界频率 Ap = 1; % 通带波纹,单位dB Ast = 20; % 最小阻带衰减,单位dB % 估计滤波器阶数 [n_cheb2, Wn_cheb2] = cheb2ord(Fpass/(Fs/2), Fstop/(Fs/2), Ap, Ast); % 设计滤波器 [b_cheb2, a_cheb2] = cheby2(n_cheb2, Ap, Wn_cheb2); % 显示传递函数 disp('分子系数是 ');disp(b_cheb2); disp('分母系数是 ');disp(a_cheb2); % 计算增益响应 [g, w] = gain(b_cheb2,a_cheb2); % 绘制增益响应 plot(w/pi,g);grid axis([0 1 -60 5]); xlabel('\omega/\pi'); ylabel('增益,dB'); title('Chebyshev Type I低通滤波器的增益响应'); function [g,w] = gain(b_cheb2,a_cheb2) % 在单位圆上半部分的256个等分点, % 计算传递函数的增益响应(dB) % 分子系数在向量 num 中 % 分母系数在向量 den 中 % 频率值以向量w返回 % 增益数值以向量g返回 w = 0:pi/255:pi; H = freqz(b_cheb2,a_cheb2,w); g = 20*log10(abs(H)); end改错
时间: 2024-03-31 17:33:53 浏览: 99
程序中的函数定义缺少了参数的输入和输出说明,应该添加注释说明。同时,在 gain 函数中,计算增益响应时应该使用分贝单位,而不是线性单位。以下是修改后的程序:
```
% Program P6_1_mod % Chebyshev Type I低通滤波器的设计
clear all
close all
Fs = 10e3; % 抽样频率
Fpass = 1e3; % 通带边界频率
Fstop = 2e3; % 阻带边界频率
Ap = 1; % 通带波纹,单位dB
Ast = 20; % 最小阻带衰减,单位dB
% 估计滤波器阶数
[n_cheb2, Wn_cheb2] = cheb2ord(Fpass/(Fs/2), Fstop/(Fs/2), Ap, Ast);
% 设计滤波器
[b_cheb2, a_cheb2] = cheby2(n_cheb2, Ap, Wn_cheb2);
% 显示传递函数
disp('分子系数是 ');
disp(b_cheb2);
disp('分母系数是 ');
disp(a_cheb2);
% 计算增益响应
[g_dB, w] = gain(b_cheb2,a_cheb2);
% 绘制增益响应
plot(w/pi,g_dB);
grid
axis([0 1 -60 5]);
xlabel('\omega/\pi');
ylabel('增益,dB');
title('Chebyshev Type I低通滤波器的增益响应');
% 定义计算增益响应的函数
% 输入参数:
% b_cheb2: 分子系数
% a_cheb2: 分母系数
% 输出参数:
% g_dB: 增益响应,单位dB
% w: 频率向量
function [g_dB, w] = gain(b_cheb2,a_cheb2)
% 在单位圆上半部分的256个等分点,
% 计算传递函数的增益响应(dB)
% 分子系数在向量 b_cheb2 中
% 分母系数在向量 a_cheb2 中
% 频率值以向量 w 返回
% 增益数值以向量 g_dB 返回
w = 0:pi/255:pi;
H = freqz(b_cheb2,a_cheb2,w);
g_dB = 20*log10(abs(H));
end
```
阅读全文