【问题标题】:AudioKit FFT conversion to dB?AudioKit FFT 转换为 dB?
【发布时间】:2018-04-14 08:28:51
【问题描述】:

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

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

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

【问题讨论】:

  • 嘿,Dan Jensen 已经解决了这个问题?因为我的问题和你的问题一样
  • 嗨,Paulo,实际上我从来没有能够在 AudioKit 中正常工作。 AudioKit 很棒,但我找到了一个更适合我的情况的不同解决方案,称为 Superpowered。我能够按照我对这个应用程序的预期方式使那个工作。 superpowered.com
  • 你达到了解决方案你得到了dB(A)吗?

标签: ios swift audio fft audiokit


【解决方案1】:

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

【讨论】:

  • 我已经尝试过您对self.fft?.fftData 中的绝对值求和的想法,我肯定得到了更合理的结果,但是,结果仍然过于敏感。为了测试这一点,我添加了一个偏移值,以使读数与我办公桌上的专用 SPL 仪表相匹配。如果我说话、吹口哨、吹口哨或产生粉红噪声并比较结果,我的应用程序会跳跃 40dB+,而 SPL 表只增加 7-10dB。我比较了一些用于查看 dB 读数的 iOS 应用程序,它们似乎与 SPL 计有相似的结果。任何想法为什么这会更加敏感?
  • 一次计算使用多少样本?完整的缓冲区?我使用的是标准 Tap,我没有使用 AKFFTTap 的经验,所以也许我遗漏了一些东西
【解决方案2】:

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

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

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

【讨论】:

  • 在 AudioKit 中,bin 值不在 0-1 的范围内,它们是可以包含从零到 700-1000 以上的值的幅度。如果我可以将其设置为 0-1 的比例,那将有很大帮助,但如果没有明确的最大值供参考,我不知道如何做到这一点。我正在吹麦克风以尝试获得该参考,但 fft 产生的幅度从来没有一致的上限。
  • 您的问题给人的印象是值在 0..1 范围内,仅比您预期的更接近 0。
猜你喜欢
  • 2016-11-06
  • 2011-08-09
  • 2015-11-08
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多