从一个简单的方程画出频率响应图

信息处理 过滤器 过滤器设计 信号分析 低通滤波器 频率响应
2022-02-01 07:16:26

如何从一个简单的方程式绘制音频响应图(x 轴:频率从 20 到 20 000hz,y 轴:dB)

y[n] = x[n] - x[n-486]

(例如:对于采样率为 96 Khz 的音频文件,通过这个等式,我得到了一个很好comb filter的去除频率 197.5Hz 及其所有谐波的方法)

如何将这样的等式转换为这样的图形解释 http://downloadfreesamples.com/wp-content/uploads/2013/08/EQ-Four-CIS-DSP_3.jpg然后我可以看到过滤的深度/陡峭程度。

谢谢

(PS:我继续阅读之前问题中提供给我的有关过滤器设计的参考资料和在线书籍,顺便感谢这些参考资料。)

3个回答

这里选择的工具是 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)));

复数域中的因子 1-x^486。你会在单位圆上得到一堆零。计算从 pi*(20/96000) 到 pi*(20/96) 绕单位圆行驶时到所有这些零点的距离的乘积。阴谋。

我终于找到了一个解决方案(可能不是最好的,但是......)

1) 生成 10 秒白噪声(平均 10 秒频谱平坦)

2) 应用过滤器

3) 在声音编辑器软件(例如 Sound forge)中显示频谱,平均 10 秒。 梳状滤波器的频率响应