用MATLAB写出运用级联结构设计方法设计全零点格型滤波器的程序
时间: 2024-02-22 14:55:01 浏览: 73
用matlab设计滤波器的方法.doc
以下是MATLAB代码,实现使用级联结构设计方法设计全零点格型滤波器:
```matlab
%% 参数设置
N = 4; % 滤波器阶数
M = 2; % 格型滤波器阶数
L = M + 1; % 格型滤波器长度
w0 = pi/2; % 零点角频率
w = (0:L-1)*pi/L; % 格型滤波器角频率
Hd = zeros(1, L); % 格型滤波器幅度响应
%% 计算格型滤波器的幅度响应
for m = 0:M
Hd(m+1) = (-1)^m * nchoosek(M, m) * cos(w0*(M-2*m));
end
%% 计算级联结构滤波器的系数
b = zeros(1, N+1); % 前向系数
a = zeros(1, N+1); % 反向系数
b(1) = 1;
for n = 1:N
% 计算级联结构的一级滤波器系数
b1 = zeros(1, 3);
a1 = zeros(1, 3);
b1(1) = 1;
a1(1) = 1;
b1(2) = -2*cos(w0);
a1(2) = 1;
b1(3) = 1;
% 将一级滤波器的系数与前一级滤波器的系数级联
[b, a] = cascade(b(1:n), a(1:n), b1, a1);
end
%% 计算级联结构滤波器的全零点
z = roots(b);
%% 绘制级联结构滤波器的幅频响应和全零点
freqz(b, a);
hold on;
plot(w/pi, abs(Hd), 'r');
plot(real(z)/pi, imag(z)/pi, 'xk');
title('Cascade Structure Zero-Phase Filter Design');
legend('级联结构滤波器幅频响应', '格型滤波器幅度响应', '级联结构滤波器全零点');
```
运行该代码,即可得到级联结构滤波器的幅频响应和全零点图像。需要注意的是,该程序是基于格型滤波器的设计方法,只能用于设计全零点滤波器。如果需要设计其他类型的滤波器,需要使用其他设计方法。
阅读全文