AMR 文件的 FFT 计算中的问题

Posted

技术标签:

【中文标题】AMR 文件的 FFT 计算中的问题【英文标题】:Issue in FFT calculation for AMR files 【发布时间】:2011-12-26 09:16:05 【问题描述】:

我正在尝试开发一个能够识别动物声音片段的应用程序。我正在做的是接收 AMR 记录并从中读取字节数组,并通过 FFT 发送这些数据并相应地计算幅度。

AMR 文件采样频率 8 KHz(标准 AMR 为 15 秒)

输入 8192 个值的 FFT 点数 4096

然后我通过幅度=2 * FFT点值/8192计算幅度

所以我现在的意图是在与最高振幅相关的频率处获得一个尖峰,问题是最高振幅的尖峰对于同一动物的其他一些声音剪辑来说是不一致的。对于另一个声音剪辑,与最高振幅变化相关的频率。是否有一个原因?。对此的任何帮助和指导将不胜感激。提前致谢。

【问题讨论】:

“但这并没有发生”对确切问题的描述过于模糊,无法提供有用的答案。 感谢您的回复。问题是最高振幅的尖峰对于同一动物的其他声音片段来说是不一致的。对于另一个声音剪辑,与最高振幅变化相关的频率。这是有原因的吗? 我更新了问题请回复 【参考方案1】:

您的文件的采样频率为 8KHz,但我认为人类的平均听力频率约为 20KHz,因此您确定您尊重采样的奈奎斯特频率(.wav 文件的采样率通常为至少 48KHz)?

奈奎斯特频率规定,如果要对给定信号进行采样,则必须使用至少是给定信号最大频率两倍的采样频率。

此外,同一种动物可以并且会发出不同的声音,因此对于两个不同的样本,您的平均频率永远不会相同。您是否有考虑不同平均频率的容差阈值?

【讨论】:

感谢 Komyg。不,我没有。一些指导将不胜感激。另一个问题是上述频率(8KHz)是 AMR 文件的标准频率。那我想怎么改变呢?我愿意阅读我应该知道的新理论。 首先,根据您的描述,AMR 文件已经过采样,因此您不应重新采样它们。此外,您无法更改文件的采样频率,除非您拥有原始文件(用于编码 AMR 文件的文件)。从我在互联网上阅读的内容来看,AMR 是存储音频语音数据的标准,所以我认为您可能没有任何奈奎斯特频率问题,因为这种编解码器显然被广泛使用,所以我只能假设有人开发的时候想到了这个问题。 但是从我读到的内容来看,这个编解码器高度压缩音频文件,所以它可能对你来说不够用,因为你最终会在压缩过程中丢失很多有用的数据。也许使用没有任何压缩的文件(例如 .wav 文件)可以获得更好的结果。 我正在开发的应用程序是一个移动应用程序。所以我的初始录音格式是 AMR。这就是问题。是否可以在 j2me 环境中将格式从 AMR 转换为 Wav? 我不确定您是否可以,但是这里重要的是,一旦您将文件转换为 AMR 格式,由于压缩,您已经丢失了部分数据,因此即使您确实将文件转换为 WAV 或 AIFF 格式,您已经从第一次转换中丢失了数据,因此您的文件/样本的质量不会变得更好。要使用 WAV 文件,您需要原始文件(用于创建 AMR 文件)或重新录制声音,然后将其转换为 WAV。

以上是关于AMR 文件的 FFT 计算中的问题的主要内容,如果未能解决你的问题,请参考以下文章

Python FFT音频文件

AMR是啥类型文件,amr用啥打开?

如何播放 AMR 音频文件?

区分注释FFT算法

保存在文件中的双样本的 FFTW

MP3、MID、MMF、MFM、AMR、WMA ,RM,这些格式有啥区别啊?