8 位 PCM 信号的 FFT

FFT on the 8 bit PCM signal

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

我正在使用 wav reader,它读取编码为 8 位 PCM 的 wav 文件,并将数据输出为 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 之间的值,如果是,如何转换?

根据维基百科上的 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
})