MATLAB代码:采用dir2fs(h)函数实现给定FIR滤波器H(Z)=0.2*(1 + 1z^-1 + 5z^-2+3z^-3++z^4) 请画出其级联型、频率抽样型结构 并写出dir2fs(h)函数
时间: 2024-05-03 10:18:12 浏览: 82
利用MATLAB仿真软件系统结合频率取样法设计一个数字高通FIR滤波器
4星 · 用户满意度95%
下面是给定FIR滤波器H(Z)的MATLAB代码:
```matlab
% 给定FIR滤波器系数
h = 0.2 * [1 1 5 3 1];
% 画出级联型结构
figure;
subplot(2,1,1);
plot(filter(h,1,[1 zeros(1,99)]));
title('级联型结构');
% 画出频率抽样型结构
N = length(h);
M = 2*N-1;
H = fft(h,M);
W = exp(-1j*2*pi/M);
for k = 1:N
H(k+N:M) = H(k+N:M) * W^(k-1);
end
figure;
subplot(2,1,1);
plot(abs(ifft(H)));
title('频率抽样型结构');
% 定义dir2fs函数
function [num,den] = dir2fs(h)
N = length(h);
if mod(N,2) == 0
h = [h(:);0];
N = N + 1;
end
H = fft(h);
W = exp(-1j*2*pi/N);
A = H(1:N/2+1);
B = conj(flipud(A));
C = A.*B;
D = W.^(0:N-1)';
F = diag(D);
G = real(F*C);
num = G(1:N/2+1);
den = [1; -2*G(N/2+1:-1:2); G(1)];
end
% 使用dir2fs函数
[num,den] = dir2fs(h);
```
其中,`filter(h,1,[1 zeros(1,99)])`用于实现级联型结构的FIR滤波,`fft(h,M)`用于计算频率抽样型结构的DFT,`ifft(H)`用于将DFT转换为时域响应。`dir2fs`函数实现频率抽样型到级联型的转换,其中`h`为输入的FIR滤波器系数,`num`和`den`为输出级联型结构的分子和分母系数。
阅读全文