AudioKit FFT转换为dB?

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

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

目前我正在尝试将FFT缓冲区转换为dB值

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

我期待的值在-128到0的范围内,但是我得到了近-200dB的奇怪值,当我用麦克风吹出读数时它只能达到-60左右。 我没有正确接近这个吗? 我假设从EZAudioFFT引擎输出的值将是普通的幅度值,并且正常的dB转换数学将起作用。 有人有主意吗?

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

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

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

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

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