【发布时间】:2017-05-10 11:37:27
【问题描述】:
我正在实现如下所述的 FIR 滤波器:
y(n) = x(n) + 2x(n-1) + 4x(n-2) + 2x(n-3) + x(n-4)
这个系统中没有极点。
在 MATLAB 上计算传递函数会产生 HZ = 1 + 2 z^-1 + 4 z^-2 + 2 z^-3 + z^-4,这是正确的,但是当我尝试绘制 Zeros 位置时,我在原点找到了一个极点。然而系统的脉冲响应是正确的,但它只是向右移动了一个。为什么还会出现这种情况?
我想不通的是,为什么原点有一个极点,为什么单位圆外有一些零点。
close all;clear;clc;
Ts = 0.1;
num = [1, 2, 4, 2, 1];
den = 1;
HZ = tf(num, den, Ts, 'variable', 'z^-1')
figure(1)
pzplot(HZ)
axis equal
figure(2)
stem(impulse(HZ*Ts), 'linewidth', 1)
xlabel('n', 'FontSize', 13)
ylabel('h(n)', 'FontSize', 13)
title('Impulse Response')
grid minor
axis([0 10 0 max(num)+0.1])
【问题讨论】:
-
FIR 滤波器包含的极点与它们的零点一样多,但它们都位于原点。将 num 和 den 乘以 z^4
-
@percusse 我明白你的意思,但你的解决方案需要符号表达式,我想计算数值。
-
反转你的数字并使用 den 作为
[1,0,0,0,0]例如。您也可以为此使用信号处理工具箱的过滤命令 -
@percusse 你的意思是我用
'Z'而不是'z^-1'? -
如果您想要 z 的逆幂,请使用
filt(num,den,0.1)。它会做你想做的事
标签: matlab function filter transfer digital