对 8 位 PCM 信号进行 FFT
Posted
技术标签:
【中文标题】对 8 位 PCM 信号进行 FFT【英文标题】:FFT on the 8 bit PCM signal 【发布时间】:2016-03-12 15:33:40 【问题描述】:我在 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 之间的值吗?如果可以,如何转换?
【问题讨论】:
【参考方案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
)
【讨论】:
以上是关于对 8 位 PCM 信号进行 FFT的主要内容,如果未能解决你的问题,请参考以下文章