我正在尝试绘制频率响应。我被要求filter
在MATLAB中使用,但是由于我已经阅读了手册,所以我仍然不了解它如何执行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
吗?
从Matlab的filter
文档中:
使用分别由分子系数和分母系数b和a定义的有理传递函数对输入数据x进行滤波。
如您所知,过滤脉冲输入会给您脉冲响应。然后剩下来获得那些b
和a
系数。您可以直接从差分方程中获得
y[n] = 1/21*x[n] + 20/21*y[n-21];
(如上面的有理传递函数链接中所示)或等效地由您得出的有理传递函数得出:
%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级数展开来评估您获得的闭合形式表达式,该展开式具有时域y
(脉冲响应)级数的系数。
但是,H(z)
是在复杂平面的|z| > R
(R=power(20/21,1/21)
在您所在的情况下)会聚区域中定义的分析函数。更典型地绘制频率响应,其对应H(z)
于在单位圆上评估的频率响应(即,对于满足|z|=1
或等效z = exp(j * theta)
于θ在[0-2pi]范围内的复数)。计算H(z)
该单位圆上等距点的值的有效方法是对脉冲响应进行FFT:
FrequencyResponse = fft(y);
figure(1);
plot(abs(FrequencyResponse));
figure(2);
plot(phase(FrequencyResponse));
PS:如果您具有信号处理工具箱(尽管需要使用)filter
,fft
则可以在单个调用中完成和的计算。freqz
filter
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句