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
})
我在 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
})