AudioKit FFT转换为dB?

时间:2017-11-01 22:35:03

标签: ios swift audio fft audiokit

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

我正在使用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转换数学将起作用。有人有什么想法吗?

提前感谢您对此问题的任何讨论!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

正常的声音,例如你在麦克风上吹的声音,会在整个频谱上传播能量,也就是说,在许多箱子而不是一个箱子里。因此,随着FFT大小的增加,幅度通常会降低。

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