java - AMR 文件的 FFT 计算问题

标签 java fft voice-recognition amr

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

AMR file sample frequency 8 KHz (Standard AMR of 15 seconds)

Number of FFT points 4096 for input of 8192 values

Then I calculate amplitude by amplitude=2 * FFT point value/8192

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

最佳答案

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

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

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

关于java - AMR 文件的 FFT 计算问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634372/

相关文章:

java - 503 服务对 google 端点不可用

java - 当我们第二次写入文件时,用新内容替换文本文件的旧内容

ios - 如何绘制语音样本的语调?

android - 同时进行语音转文本和文本转语音

machine-learning - 使用哪些数据结构对经过训练的语音模型进行编码?

java - 为什么不鼓励在 Android 中使用字符串文字?还有哪些其他/更好的选择?

java - 即使在确认后,应用程序仍接受来自 google Pub/Sub 的重复消息

matlab - FFT 后在时域中延迟具有频域中相位变化的信号

c++ - 使用 Eigen 和 FFTW 进行二维傅里叶变换

使用 FFTW 计算音频数据的离散傅立叶变换