signal-processing - 是否需要FFT才能找到音频文件上的峰值和凹坑

标签 signal-processing audio

我能够读取wav文件及其值。我需要找到峰和坑的位置及其值。第一次,我尝试通过(i-1 + i + i +1) / 3公式对其进行平滑处理,然后以array[i-1] > array[i] & direction == 'up' --> pits样式解决方案在数组上​​进行搜索,但是由于噪声和项目 future 计算的其他原因,我试图找到更好的工作区域。几天以来,我一直在研究FFT。据我了解,ftf将音频文件转换为一系列的正弦和余弦。 fft操作后,给定值是a0a1a0 + ak * cos(k*x) + bk * sin(k*x) which k++ and x++,如图所示

http://zone.ni.com/images/reference/en-XX/help/371361E-01/loc_eps_sigadd3freqcomp.gif

我的问题是,fft是否有助于我找到音频的峰值和凹点?有人对这种问题有经验吗?

最佳答案

这完全取决于您要执行的操作,而您尚未真正弄清楚。 “找到高峰和低谷”是一回事,但是由于执行此操作的原因可能多种多样,因此可能会有多种方法。您已经尝试了直接寻找局部最大值和最小值的简单方法,这听起来像是。这里有一些提示:

  • 您不需要FFT。
  • 音频数据通常在零上下波动(存在一些异常(exception),包括8位wav,这些是无符号的,但这些是异常(exception)),因此您必须注意正值和负值。通常,较大的正值和较大的负值会携带大量能量,因此您希望将它们视为相同。
  • 由于是#2的
  • ,如果要求平均值,则可能要取绝对值的平均值,或更常见的是取平方的平均值。一旦找到平方的平均值,就取该值的平方根,得到RMS,它与信号的功率有关,因此您可能会尝试执行以下操作,以指示信号的响度,强度或近似一个模拟仪表。绝对平均值对极限值可能更健壮,但使用较少。
  • 的另一种方法是简单地在一定数量的样本上查找绝对值的峰值,这通常在绘制波形和数字“峰值”仪表时完成。查看最小绝对值没有意义。
  • 完成上述操作后,是的,您可能希望计算找到的值的对数,以便以dB显示信号,但请确保使用正确的公式。不是10 * log_10(振幅)。经验法则:通常,从振幅计算对数时,您会看到20,而不是10。如果要计算dBFS(削波前的“净空”量,这是数字仪表的标准测量值),公式为- 20 * log_10(| amplitude |),其中幅度归一化为+/-1。请注意幅度= 0,以dB为单位提供了无限的净空。
  • 关于signal-processing - 是否需要FFT才能找到音频文件上的峰值和凹坑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312703/

    相关文章:

    java - Java 分层音频文件时的峰值削波

    Java:声音捕获和波形绘制

    iphone - iPhone 上的 FFT 可忽略背景噪音并找到更低的音调

    javascript - 为什么 Chrome 不使用 SoundCloud API V3 流式传输歌曲

    iphone - 设置允许 airplay 不通过 airplay 发送声音

    python - "extended"傅立叶变换

    iphone - 如何实现低通滤波器?

    python - Freeze.py上的Tensorflow简单音频识别错误

    android - 如何在android中的语音通话中播放音频文件

    android - Android音频输出上通常的最大输出频率是多少?