【问题标题】:Increase FFT resolution with AnalyserNode使用 AnalyserNode 提高 FFT 分辨率
【发布时间】:2014-04-27 19:27:26
【问题描述】:

我想我可能会对使用 AnalyserNode 感到有些困惑。我目前将我的 userAudio 流“line-in”连接到 AnalyserNode。然后我使用 getByteFrequencyData() 填充一个 Uint8Array。

当我播放单个 440Hz 音调时,我的阵列中强度最高的频率将是 468Hz 421Hz(取决于我改变它的程度)。有没有办法可以提高这些频率的分辨率,使其在 468 和 421Hz 之间有更多的频率?

当我用 440Hz 音调绘制 fft 数据时,您可以看到 468Hz 和 421Hz 处的两个强烈频率。有没有办法将 FFT 数据平均到一个单独的数组中,以便平均 468Hz 和 421Hz(以及其他点)数据点的强度?我想这就像在频率之间插入数据......

JSFiddle:http://jsfiddle.net/puYw3/(我不确定这是否真的有效,因为我当前的计算机上没有麦克风)。

【问题讨论】:

  • 您可以将信号的频率(使用playbackRate 或失谐)移到较低的频率,然后分析此信号。 (也许一些过滤会有所帮助)。
  • 您使用什么 FFT 大小(如果不是默认 2048)?你能展示一些代码/创建一个小提琴吗?
  • 我只是使用默认的 2048。稍后我会附上一个 jsfiddle。
  • 这可能会有所帮助:dsp.stackexchange.com/questions/14906/…

标签: javascript signal-processing web-audio-api audiocontext


【解决方案1】:

来的有点晚,但也许有人会觉得它有用。

您可以使用 AnalyserNode 的属性fftSize 来增加 fft 的“分辨率”。

由于 fftSize 最大值是有限的(我相信在撰写本文时大约为 2^15),您最终仍会得到相当不精确的值。使用parabolic peak interpolation可以提高精度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2011-05-04
    • 2021-05-11
    • 2020-06-04
    • 2013-07-13
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多