我有以下系统,由系数集指定:
b = [1 2 3];
a = [1 .5 .25];
在Z-Domain中,此类函数将具有以下传递函数:
H(Z) = Y(Z)/X(Z)
所以频率响应只是单位圆,其中:
H(e^jw) = Y(e^jw)/X(e^jw)
我只是在我的传递函数中用e^jw
代替“Z”来在纸上以数学方式获得系统的频率响应吗?从我(学生)的观点来看,似乎有点荒谬。
答案 0 :(得分:1)
你试过freqz()
吗?它返回数字滤波器的频率响应矢量h
和相应的角频率矢量w
,其中分子和分母多项式系数存储在b
和a
中,分别
在您的情况下,只需按照帮助:
[h,w]=freqz(b,a);
答案 1 :(得分:0)
你为Z做了e ^ jw。这并不荒谬。然后你只需从-pi扫描到pi。您的频率响应将是结果的绝对值。
正如Alessiox所说,freqz是你想在matlab中使用的命令。
答案 2 :(得分:0)
我确实会像在你的传递函数中替换exp(j*w)
一样简单。当然,使用Matlab实现这一点的方法有很多种。出于说明的目的,我将假设b
s是x
序列的系数,a
s是y
序列的系数,因此{ {1}}在分子中,b
在分母中:
使用Matlab进行直接评估可以通过以下方式完成:
a
这相当于以下使用内置polyval
:
b = [1 2 3];
a = [1 .5 .25];
N = 513; % number of points at which to evaluate the transfer function
w = linspace(0,2*pi,N);
num = 0;
for i=1:length(b)
num = num + b(i) * exp(-j*i*w);
end
den = 0;
for i=1:length(a)
den = den + a(i) * exp(-j*i*w);
end
H = num ./ den;
此外,这实际上是在离散等距角频率N = 513; % number of points at which to evaluate the transfer function
w = linspace(0,2*pi,N);
H = polyval(fliplr(b),exp(-j*w))./polyval(fliplr(a),exp(-j*w));
评估传递函数,其对应于离散傅立叶变换(DFT)。因此,也可以通过以下方式完成:
w = 2*pi*k/N
顺便说一下,这就是freqz
的作用,所以你也可以得到相同的结果:
N = 512;
H = fft(b,N) ./ fft(a,N);