MATLAB代码:采用dir2fs(h)函数实现给定FIR滤波器H(Z)=0.2*(1 + 1z^-1 + 5z^-2+3z^-3++z^4) 请画出其级联型、频率抽样型结构 并写出dir2fs(h)函数
时间: 2024-05-06 20:17:07 浏览: 133
以下是给定FIR滤波器H(Z)=0.2*(1 + 1z^-1 + 5z^-2+3z^-3++z^4)的级联型和频率抽样型结构的MATLAB代码:
```matlab
% FIR滤波器系数
h = [0.2, 0.2, 1, 5, 3, 1];
% 级联型结构
b1 = [h(1), h(2)];
b2 = [h(3), h(4)];
b3 = [h(5), h(6)];
sos = [b1, 0, 1, -b2, 0, 1, -b3, 0, 1];
% 绘制级联型结构
fvtool(sos);
% 频率抽样型结构
fs = dir2fs(h);
% 绘制频率抽样型结构
fvtool(fs);
function fs = dir2fs(h)
% DIR2FS 通过迭代法实现FIR滤波器的频率抽样结构
% 输入参数:
% h: FIR滤波器系数
% 输出参数:
% fs: 频率抽样型结构
N = length(h);
M = floor(N/2);
if mod(N, 2) == 0
a = h(1:M) + h(N:-1:M+1);
b = h(1:M) - h(N:-1:M+1);
else
a = [h(1:M), h(M+1)*2, h(M+2:N)] + [h(N:-1:M+2), h(M+1)*2, h(1:M)];
b = [h(1:M), -h(M+2:N)] + [h(N:-1:M+2), -h(1:M)];
end
fs = zeros(3, N);
fs(1, :) = [a, 0];
fs(2, :) = [b(1:2:end), 0];
fs(3, :) = [b(2:2:end), 0];
end
```
其中,`dir2fs(h)`函数采用迭代法实现FIR滤波器的频率抽样结构。具体实现过程如下:
1. 计算中间点M和系数a、b:
如果N为偶数,则M = N/2,a = h(1:M) + h(N:-1:M+1),b = h(1:M) - h(N:-1:M+1);
如果N为奇数,则M = (N-1)/2,a = [h(1:M), h(M+1)*2, h(M+2:N)] + [h(N:-1:M+2), h(M+1)*2, h(1:M)],b = [h(1:M), -h(M+2:N)] + [h(N:-1:M+2), -h(1:M)]。
2. 构造频率抽样型结构的三个部分:
第一部分:所有系数都为a,输出为y1(n);
第二部分:每隔一个采样周期,将系数b的奇数项作为输入,输出为y2(n);
第三部分:每隔一个采样周期,将系数b的偶数项作为输入,输出为y3(n)。
3. 将三个部分连接起来,得到频率抽样型结构。
阅读全文