这里选择的工具是 z 变换,它应用于您的方程。它将复数序列转换为复平面中的函数。它最有用的特性是它需要参数 z 的幂的延迟,因为z = exp(i omega)我们得到了变换序列的傅立叶变换。查看详细信息,我将在这里向您展示它是如何工作的。
y[n] = x[n] - x[n-486] ---> Y(z) = X(z) - X(z)*z^(-486)
右侧 z 域因子中的方程给出Y(z) = X(z) ( 1 - z^(-486) ).
由于 Y(z) 是输出,X(z) 是输入,对于线性系统,我们将传递函数定义Y(z)/X(z) = H(z)为
H(z) = Y(z)/X(z) = 1 - z^(-486)
现在,如果我们替换 z = exp(i omega),我们得到系统的频率响应,即
H_f(omega) = 1 - exp(i omega)^(-486)
并且使用 exp() 的属性,它简化为
H_f(omega) = 1 - exp(- 486 i omega)
如果您需要实际频率 f 而不是角频率 omega,只需omega = 2 pi f/fs用采样率 fs 替换 ,即可。
最后,您可能只想知道响应的幅度,因此请查看 abs(H_f)。在这种特定情况下,计算非常简单,因为abs(H_f) = sqrt( H_f * conj(H_f) )和conj(H_f) = 1 - exp(+ 486 i omega)。
根据要求,一些代码。这是您可以在 matlab/octave 中执行的操作,以获取具有对数频率轴和以 dB 为单位的幅度轴的幅度频率响应。
% Create a logarithmically spaced frequency axis with range 20Hz to 20kHz
fAxis = logspace( log10( 20 ) , log10( 20000) , 10000);
% calculate the complex frequency response at these frequencies
% Set SampleRate before calling this, like SampleRate = 44100;
Hf = 1 - exp(1i*486*2*pi*fAxis/SampleRate);
% plot the magnitude spectrum
semilogx(fAxis,10*log10(Hf.*conj(Hf)));