6

第一次发帖,感谢广大社区!

我正在使用AudioKit并尝试将频率加权滤波器添加到麦克风输入中,因此我试图了解来自 AudioKit AKFFTTap 的值。

目前我正在尝试仅打印转换为 dB 值的 FFT 缓冲区

for i in 0..<self.bufferSize {
    let db = 20 * log10((self.fft?.fftData[Int(i)])!)
    print(db)
}

我期望值在大约 -128 到 0 的范围内,但我得到了接近 -200dB 的奇怪值,当我对着麦克风吹气以确定读数时,它只达到大约 -60。我没有正确解决这个问题吗?我假设从 EZAudioFFT 引擎输出的值将是普通幅度值,并且正常的 dB 转换数学将起作用。有人有想法么?

在此先感谢您对此问题的任何讨论!

4

2 回答 2

4

您需要添加所有值self.fft?.fftData(考虑在添加之前将负值更改为正值),然后将其更改为分贝

于 2017-11-14T14:33:30.867 回答
4

数组中的值对应于 FFT 中 bin 的值。使单个 bin 包含接近 1 的幅度值意味着大量能量位于该窄频带中,例如非常响亮的正弦曲线(具有单一频率的信号)。

正常的声音,比如你对着麦克风吹的声音,会在整个频谱中传播它们的能量,也就是说,在许多箱中,而不仅仅是在一个箱中。出于这个原因,通常幅度会随着 FFT 大小的增加而降低。

单个 bin 的 -40dB 幅度非常响亮。如果您尝试播放音调,您应该会在其中一个垃圾箱中看到一个清晰的峰值。

于 2017-11-15T20:23:58.000 回答