检测原始音频 (PCM) 中的特定频率/音调

Posted

技术标签:

【中文标题】检测原始音频 (PCM) 中的特定频率/音调【英文标题】:Detecting specific frequencies/tones in raw audio (PCM) 【发布时间】:2016-12-06 06:22:49 【问题描述】:

我录制了几秒钟的音频,其中包含两个以相同频率生成的相似音调。它们相隔几秒钟。我想要做的是检测第一个音调的结尾和第二个音调的开头,根据它们对于这个音频文件有多少样本。假设 48KHz 音频的 16 位有符号 PCM 和一个字节数组来表示原始音频。

我正在努力解决这个问题;

a) 运行 DFT 以检测特定音调频率的出现

b) 由于这两个音调是最响亮的,因此,以某种方式找出两个音调的峰值以及它们开始/结束的位置

c) 通过带通滤波器运行音频文件以滤除所有其他频率,我可能会以两行或数组中的两个非零段结束

什么是最直接的方法(欢迎提出其他技术)?

【问题讨论】:

【参考方案1】:

通过Fast Fourier Transform 运行样本,在一定的容差范围内匹配您预期的频率,然后计算不匹配时的样本数?

【讨论】:

这实际上是在使用来自***.com/questions/17429407/… 的答案/资源吗?谢谢 不太确定。我只是希望我能把你推向一个可能的方向。 我设法在上面提供的链接的信号上运行 FFT。这是一组实数/虚数。我能够找到每个频率的幅度。给定 FFT 数组及其绝对信号,如何根据样本数推断频率信息? 我认为您必须对不同的起始样本运行 FFT,因为 FFT 需要处理一组样本的二次方。有点像样本上的滑动窗口,以缩小更精确的范围。 所以基本上我应该多次运行 FFT,取几个样本以获得频率范围与时间范围?这像 STFT 吗?再次感谢!

以上是关于检测原始音频 (PCM) 中的特定频率/音调的主要内容,如果未能解决你的问题,请参考以下文章

音频基础知识 - PCM 浅析

使用 node.js 检测麦克风的音频频率

PCM音量控制

检测音频文件中的低频音

如何将多个不同频率的音调混合为一个

多媒体文件格式:PCM / WAV 格式