WebAudio API / javascript 中低频信号的快速傅里叶变换

问题描述 投票:0回答:1

我有一个以 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 中的另一个库。

signal-processing fft web-audio-api
1个回答
1
投票

使用 AnalyserNode,您可以根据需要多次调用

getFloatFrequencyData
。这将返回最后
fftSize
样本的 FFT。这些都被平滑在一起。有关完整详细信息,请参阅AnalyserNode 接口

此外,WebAudio 规范允许您构建具有

用户可选采样率
AudioContext。您可以将采样率设置为 8000 Hz。那么您的 FFT 可以以更低的复杂性获得更精细的分辨率。

但是,我认为还没有任何浏览器实现了此功能。

另一种方法是获取支持 8000 Hz 采样率的声卡,并将系统设置为使用它作为默认音频输出设备,然后音频上下文的采样率为 8000 Hz。

© www.soinside.com 2019 - 2024. All rights reserved.