我正在尝试绘制频率响应图。我被要求在MATLAB中使用filter
,但由于我已阅读本手册,我仍然无法了解它如何执行Z
转换。
我有下面写的数字滤波器的脉冲响应:
for i=1:22;
y(i)= 0;
end
x(22) = 1;
for k=23:2523
x(k) = 0;
end
for n = 22:2522;
y(n) = ((1/21)*x(n))+((20/21)*y(n-21));
end
plot(y);
这只是y[n] = 1/21*x[n] + 20/21*y[n-21]
以下是我计算上述系统的Z
变换的计算,最终决定了脉冲响应:
Z(y) = Z((1/21)*x(n)+(20/21)*y(n-21))
Y(Z) = (1/21)X(Z)+(20/21)*Z.^-21Y(Z)
Z(Z)-(20/21)*Z.^-21Y(Z) = (1/21)X(Z)
Y(Z)(1-(20/21)*Z.^-21) = (1/21)X(Z) // divide by X(Z)*(1-(20/21)*Z.^-21)
Y(Z)/X(Z) = (1/21)/(1-(20/21)*Z.^-21)
H(Z) = (1/21)/(1-(20/21)*Z.^-21) // B = 1/21, A = 20/21
H(Z) = (B*Z.^21)/(Z.^21-A)
如何绘制H(Z)
的频率响应?我应该使用filter
吗?
答案 0 :(得分:3)
如果您只是需要绘制脉冲响应,那很容易。脉冲响应是数字滤波器对狄拉克脉冲的响应。你已经有了差分方程,所以你已经在'z'并且你不关心's',你不必执行's'到'z'变换(这是一个主题)本身!)。
所以只需生成一个由零组成的信号x(n),除了第一个样本x(1)为1.将其传递过滤器(是的,你的差分方程)。你得到的y(n)是你的脉冲响应h(n)。这基本上就是你做的。
当然,如果你对这个h(n)进行FFT,你会得到相位和幅度响应。
答案 1 :(得分:3)
使用信号处理工具箱中的freqz
(希望你拥有它)。您首先需要找到Z-transform,您已在此处完成:
Y(Z)/X(Z) = (1/21)/(1-(20/21)*Z.^-21)
freqz
接收系数向量,该向量对应于传递函数的分子和分母。它被称为如此:
freqz(b, a);
b
和a
是传递函数的分子和分母系数。这将产生一个数字,显示上述系统的幅度和相位响应(因此频率响应)。
因此,您只需要这样做:
b = 1/21;
a = [1 zeros(1,20) -(20/21)];
freqz(b, a)
特别注意a
向量。它有1,后跟20个零,然后是-(20/21)
。因为你有一个-21的幂系数,除了之前的1之外没有别的东西,这意味着-1到-20之间的那些系数是零,并且这些系数中有20个是总计为零,这就是为什么我们需要在1和-(20/21)
项之间用零填充向量。
我们得到:
如果您想绘制滤镜的极点和零点,请使用tf
和pzmap
的组合:
sys = tf(b, a, -1);
pzmap(sys);
tf
通过指定滤镜的分子和分母系数来创建传递函数,-1
暗示它是离散时间滤镜,但我们不知道是什么采样时间是。 pzmap
绘制z域中的极点和零点,并重叠单位圆。
我们得到了这个:
这是有道理的,因为你的系统中没有零和21极,因为你在检查示例中的离散时间序列时有21个延迟元素。
答案 2 :(得分:1)
来自Matlab的filter
文档:
使用由分子和分母系数b和a分别定义的rational transfer function来过滤输入数据x。
您可能知道,过滤脉冲输入会给您脉冲响应。然后,仍然需要获得那些b
和a
系数。
您可以直接从差分方程
y[n] = 1/21*x[n] + 20/21*y[n-21];
(如rational transfer function link above所示)或等效于你得出的理性转移函数:
%H(Z) = (B*Z.^21)/(Z.^21-A)
在任何一种情况下,您都应该获得以下a
和b
系数:
a = [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -20/21];
% or equivalently: a=zeros(22,1); a(1)=1; a(22)=-20/21;
b = [1/21];
因此,
% setup the impulse input
x = zeros(2500,1);
x(1) = 1;
% compute the impulse response
y = filter(b, a, x);
可以按照您的方式绘制此脉冲响应:
plot(y);
就这与变换H(Z)
的相关性而言,您获得的封闭式表达式可以根据Laurent series扩展进行评估,然后具有时域{{ 1}}(脉冲响应)系列。
但是,y
是在复杂平面中H(z)
(在您的情况下为|z| > R
)收敛区域中定义的分析函数。更典型的是绘制频率响应,其对应于在单位圆上评估的R=power(20/21,1/21)
(即,对于[0]满足H(z)
或等效|z|=1
的复数,[0- 2pi]范围)。在单位圆上规则间隔点计算z = exp(j * theta)
值的有效方法是采用脉冲响应的FFT:
H(z)
PS :FrequencyResponse = fft(y);
figure(1);
plot(abs(FrequencyResponse));
figure(2);
plot(phase(FrequencyResponse));
和filter
的计算可以在单个调用fft
中完成,如果您有信号处理工具箱(尽管您具体要求使用freqz
)。