我确实会像在您的传递函数中替换 exp(j*w) 一样简单。当然,使用 Matlab 有不同的方法来实现这一点。为了便于说明,我将假设bs 是x 序列的系数,as 是y 序列的系数,因此b 在分子中,而在as 在分母中:
可以使用 Matlab 进行直接评估:
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;
这相当于使用内置polyval的以下内容:
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));
此外,这实际上是在评估离散等距角频率w = 2*pi*k/N 的传递函数,它对应于离散傅里叶变换 (DFT)。因此,它也可以通过以下方式完成:
N = 512;
H = fft(b,N) ./ fft(a,N);
顺便说一句,这就是 freqz 所做的,因此您也可以通过以下方式获得相同的结果:
N = 512;
H = freqz(b,a,N,'whole');