测试低通滤波器

时间:2012-02-01 16:28:54

标签: c audio filter signal-processing

有什么简单的方法可以查看我的低通滤波器是否正常工作?我正在设计一个低通滤波器,并希望以相对直接的方式对其进行测试。

现在我打开一个WAV文件并将所有样本粘贴在一组int中。然后我通过低通滤波器运行数组以创建一个新数组。检查低通滤波器是否有效的简单方法是什么?

所有这一切都在C中完成。

6 个答案:

答案 0 :(得分:9)

您可以使用白噪声等宽带信号来测量频率响应:

  • 生成白噪声输入信号
  • 通过过滤器传递白噪声信号
  • 从滤波器输出FFT
  • 计算FFT的对数幅度
  • 绘制对数幅度

您可以将过滤器的输出转储到文本文件,然后在例如MATLAB或Octave(提示:使用periodogram)。

答案 1 :(得分:4)

取决于您想要测试的内容。我不是DSP专家,但我知道有一些不同的东西可以衡量你的过滤器(如果这是你的测试意思)。

如果滤波器是线性的,则可以在脉冲响应中找到滤波器的所有信息。在此处阅读:http://en.wikipedia.org/wiki/Linear_filter

E.g。如果你采用脉冲响应的傅立叶变换,你将得到频率响应。频率响应很容易告诉您低通滤波器是否值得它的名字。

也许我低估了您对DSP的了解,但我建议您阅读本网站上的书:http://www.dspguide.com。这是一本非常容易理解的书,没有困难的数学。它可以作为一本真实的书,但您也可以在线免费阅读。

编辑:在阅读之后,我确信每个接触ADC的程序员都应该首先阅读本书。我发现在过去的项目中我做了很多困难的事情,当我对DSP有了更多的了解时,我可以做得好一千倍。大多数时候,没有经验的程序员在不知情的情况下做DSP。

答案 2 :(得分:2)

创建两个单调信号,一个是低频信号,另一个是高频信号。然后在两者上运行过滤器。如果有效,那么低频信号应该不被修改,而高频信号将被滤除。

答案 3 :(得分:1)

就像上面提到的巴特一样。 如果是LTI系统,我将插入脉冲并记录样本,并使用matlab执行FFT并绘制幅度。 你问为什么? 在时域中,必须将输入x(t)与脉冲响应d(t)卷积,以获得繁琐的传递函数。 y(t)= x(t)* d(t)

在频域中,卷积变成简单的乘法。 y(s)= x(s)x d(s) 因此,传递函数为y(s)/ x(s)= d(s)。 这就是您对脉冲响应进行FFT来查看滤波器性能的原因。

答案 4 :(得分:0)

您应该能够以编程方式生成各种频率的音调(正弦波),将它们填充到输入数组中,然后通过对数组的平方值求和来比较信号能量(并除以长度,尽管这是数学上的这里没有必要,因为信号应该是相同的长度)。输出能量与输入能量之比为您提供滤波器增益。如果您的LPF工作正常,低频时增益应接近1,带宽频率接近0.5,高频时接近零。

注意:“带宽”和“增益”的定义有很多(但在精神上基本相同)。我建议的方法应该对滤波器的瞬态响应相对不敏感,因为它基本上平均了信号的强度,尽管你可以通过忽略输入的前T个采样来改善它,其中T与滤波器带宽有关。无论哪种方式,都要确保信号与滤波器带宽的倒数相比较长。

答案 5 :(得分:0)

当我检查数字滤波器时,我计算滤波器的幅度响应图并绘制它。然后我在代码中或使用Audacity生成线性扫描正弦波,并将扫描正弦波传递过滤波器(考虑到事情可能会变大,因此正弦波足够安静,不会被削波)。视觉检查通常足以断言过滤器正在做我认为应该做的事情。如果您不知道如何计算幅度响应,我怀疑有些工具会为您计算它。

根据您的确定程度,您甚至不必这样做。您可以只处理线性扫描并看到它衰减了更高的频率。