我正在实现如下所述的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,这是正确的,但是当我尝试绘制零点位置时,在原点找到了一个极点。但是,系统的脉冲响应是正确的,但仅向右移动了一个。为什么还会发生这种情况?

我无法弄清楚的是,为什么原点有一个极点,以及为什么单位圆之外有一些零。

close all;clear;clc;

Ts = 0.1;

num = [1, 2, 4, 2, 1];
den = 1;

HZ = tf(num, den, Ts, 'variable', 'z^-1')


matlab - MATLAB上的Z转换极点和零点位置-LMLPHP

matlab - MATLAB上的Z转换极点和零点位置-LMLPHP

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])

最佳答案

您的冲动响应是HZ = 1 + 2 z^-1 + 4 z^-2 + 2 z^-3 + z^-4
因此对于z = 0 i.e Origin冲激响应为infinity/undefined,因此按照惯例z=0应该是极点。
而且由于您的冲激响应是“有限持续时间”,因此ROCwhole Z-Plain except 0,并且ROC可以包含零,但不能包含极点。因此,单位圆外有零。
无论如何,您始终可以将HZ = 0并计算Z的值(该方程的度数为4,应该有4个值。)

09-11 05:22