【问题标题】:FFT on the 8 bit PCM signal对 8 位 PCM 信号进行 FFT
【发布时间】:2026-01-01 13:05:02
【问题描述】:

我在 node-js 中使用这种快速傅立叶变换实现:https://www.npmjs.com/package/fft-js

我正在使用 wav 阅读器读取我的 wav 文件,该文件编码为 8 位 PCM,并将数据输出为 8 位无符号整数数组。

我看到 fft-js 需要从 -1 到 1 的信号值,如以下使用示例所示:

var fft = require('fft-js').fft,
    signal = [1,0,1,0];

var phasors = fft(signal);

console.log(phasors);

我该怎么办?我应该将 wav 文件的 8 位 pcm 表示形式转换为 -1 和 1 之间的值吗?如果可以,如何转换?

【问题讨论】:

    标签: javascript node.js audio signal-processing fft


    【解决方案1】:

    根据*上的article,您应该能够获取 8 位 uint 数据并将其映射到 -1 和 1 之间的数字,类似于以下内容:

    let arrForFFT = uint8Array.map(num => (num - 128) / 128)
    

    如果我的uint8Array 看起来像这样:

    [ 256, 192, 128, 64, 0]
    

    那么arrForFFT 将如下所示:

    [ 1, 0.5, 0, -0.5, -1]
    

    编辑:如果您不使用 ES2015,代码将如下所示:

    var arrForFFT = uint8Array.map(function(num) {
      return (num - 128) / 128
    })
    

    【讨论】: