较低的频率在FFT中更强?


15

我正在根据麦克风输入计算FFT。我注意到,低频似乎总是比高频具有更大的功率(更高的dB)。

  1. 我将数据切成24576字节(4096 * 6)的帧。
  2. 应用汉明窗: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
  3. 通过FFTW运行它Process1D()
  4. 从复数转换: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]));
  5. 对6个值求平均值,以获得4096字节的完整FFT。
  6. 绘制漂亮的图片(颜色映射到调色板)。

进行平均(第5页)以降低FFT噪声。

如图所示,声音和麦克风关闭时,低频处都有更多的能量(和更多的噪音)。这表明它不仅仅是麦克风/子问题。

我的问题:
1.这是预期的吗?为什么?
2.有什么标准方法可以解决此问题?几乎像某些Math.Tan()魔术可以将其提升到所属位置。

我的目标是能够确定前5个频率,而默认情况下不会赢得较低的频率。

快速傅立叶变换


请首先尝试使用正确的汉明窗,看看破窗碎片是否是造成这种低频噪声的原因。
2011年

@Tedd Hansen,您最终是如何“在没有较低频率的情况下识别出前5个频率的”-加权1/3倍频程频段的前5个?
denis 2013年

Answers:


12

是的,这是非常期望的。您会看到一个“ 粉红色 ”频谱,即每个相对带宽的能量恒定,而“ 白色 ” 频谱则是每个绝对带宽的能量恒定。对于粉红信号,1-2kHz之间的能量与2-4kHz之间的能量相同(每个能量代表带宽加倍或“倍频”)。

大多数自然音频信号(语音,音乐,电影等)具有类似粉红色的频谱。同样,大多数声学背景噪音(麦克风噪音,HVAC噪音,气压波动,一般背景)往往呈粉红色,甚至偏向低频。

人类听觉系统也是如此。在内耳中,音频信号被分解为具有恒定相对带宽的频带(称为“临界频带”),该频带与第三倍频程频谱大致相同。

查看音频频谱数据的最佳方法是将其绘制在对数频率标度上。


“自然音频信号具有类似粉红色的频谱”的说法忽略了时间尺度的考虑。我同意很长一段时间(约10秒),并且肯定会在几分钟内使该陈述成为事实。但是这里的光谱是在0.55秒内计算出来的。如果输入是例如音乐,我希望音调结构更多。
mtrw 2011年

2
“音调”会影响频谱的精细结构。总体形状(以每八度音阶的能量而言)对于音乐而言仍将大部分为粉红色,除非它类似于“三角形和crash鼓的独奏”
Hilmar

1
@mtrw:方波当然是一个音调,但是高频谐波仍然以1 / f的速率下降。
endlith 2012年

8

在第2步中,公式应为input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/N));N在这种情况下,其中是缓冲区中的样本数24576

在步骤4和5中,我将对幅度的平方值而不是dB​​值进行二进制平均。假设您的幅度是平方的[4,6]。他们的平均是510*log10(5) ~= 6.99。平均10*log10(4)10*log10(6)6.90

第一个问题可能是导致偏向低频的原因,因为这会导致频谱泄漏,并且低频会受到直流线路的更多污染(这不可避免地是一个差的估计)。第二个问题可能不会对低频产生影响,但我认为这更接近您的测量意图。


fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]4610日志10510日志104+10日志106/2

在上面的解释中,我相信您希望窗口宽度(N)为4096,因为这是应用的FFT的宽度。该窗口将需要应用于在每个fft之前进行转换的4096个样本。
雅各布

@Jacob-OP正在计算6 * 4096点的FFT,然后平均6个相邻的bin,以减少到4096点。
mtrw 2011年

5

1 / f噪声发生在许多物理,生物和经济系统中。一些研究人员将其描述为无处不在。

粉红和白色的噪音

线性频率垂直轴的FFT频谱图上的粉红噪声(左)和白噪声(右)(在典型的音频或类似频谱分析仪上,粉红噪声将是平坦的,不会向下倾斜并且白噪声会上升)


6
左边的声音肯定是粉红色,但右边的声音看起来有点橙色:-)

虽然1 / f噪声无处不在,但设计良好的音频模拟前端通常具有较高的1 / f噪声水平,例如高于10 Hz。白噪声在感兴趣的频带中占主导地位。
mtrw 2011年

4

这是预期的吗?为什么?

许多自然声音具有谐波,因此基频较低,而基频较高的倍数时能量较少。可能存在直流偏置,这将在最左侧表示很多能量。另一个影响是您的开窗功能会扭曲频率响应。

解决此问题的任何标准方法?几乎像某些Math.Tan()魔术可以将其提升到所属位置。

您可以通过使用高通滤波器来处理直流偏置。一种简单的实现是从每个样本中减去长期平均值(编辑:或更简单的是,将较低的频率(例如,FFT结果中的<50Hz)丢弃)。您也可以尝试使用不同的窗口功能。确保(如@mtrw所指出的)您正确地应用了窗口。可以通过测量一些理想的输入并对该曲线进行归一化来校正响应中的任何其他非线性。


窗口功能不应该影响频率响应,应该吗?
endlith 2012年

@endolith:它确实-您将数据与开窗函数相乘,并且组合函数具有不同的响应。阅读链接的Wikipedia文章,其中将对此进行更深入的讨论。处理现实世界样本的现实是通常存在一些窗口(例如矩形),因此您只能近似(无限)源信号的频率响应。
盖·西顿

也许我们对“频率响应”的看法有所不同。如果信号是固定的,并且您对其应用了窗函数,则无论您使用哪种窗函数,频谱都应在相同频率处具有相同的振幅,其区别仅在于会影响所有频率的比例因子。每个频率尖峰的宽度将有所不同,但尖峰的高度彼此之间将相同。窗口功能不像一个滤波器,它对某些频率的衰减比其他频率更大。
endolith

@endolith:想象一个无限的正弦波,现在乘以一个cos ^ 2窗口。您仍将具有原始频率的分量,但是其幅度将为“ off”,并且您将有来自窗口的新频率分量。请参阅此处的第一段:en.wikipedia.org/wiki/Spectral_leakage
Guy Sirton

是的,但是无论无限正弦波的频率如何,“关闭”幅度都将相同,不是吗?
endolith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.