我有一个以 8000 Hz 采样率输入的单通道波。
我需要实时分析 5 Hz 到 300 Hz 之间的频率,重点是 10 到 60 Hz 的信号。
我最初的想法是将 8000 Hz 样本运行到缓冲区中,收集大约 32000 个样本。然后,对其运行 32000 窗口大小的傅立叶变换。
这里的原因是,对于低频信号,您需要更大的窗口大小(对吗?)
但是,如果我尝试实时显示此信号,那么 AudioAnalyserNode 似乎不是一个好的选择。我知道 WebAudio API 将允许我获取原始数据,但理想情况下,AudioAnalyserNode 将能够基于之前的 32000 个样本运行新的 fft,即使新提供的样本数量较少。此时,看起来 fft 数据仅每四秒更新一次。
我是否必须创建一个特殊的“运行垃圾箱”,以便显示更新频率高于每 4 秒一次?或者,我可以使用的最小窗口大小是多少,仍然可以获得此范围内的合理值? 32000 是一个足够大的窗口大小吗?
我在 javascript 中使用 WebAudio API 分析器节点,但如果我必须获取原始数据,我也愿意将库更改为 javascript 中的另一个库。
使用 AnalyserNode,您可以根据需要多次调用
getFloatFrequencyData
。这将返回最后 fftSize
样本的 FFT。这些都被平滑在一起。有关完整详细信息,请参阅AnalyserNode 接口
此外,WebAudio 规范允许您构建具有
用户可选采样率的
AudioContext
。您可以将采样率设置为 8000 Hz。那么您的 FFT 可以以更低的复杂性获得更精细的分辨率。
但是,我认为还没有任何浏览器实现了此功能。
另一种方法是获取支持 8000 Hz 采样率的声卡,并将系统设置为使用它作为默认音频输出设备,然后音频上下文的采样率为 8000 Hz。