对 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的主要内容,如果未能解决你的问题,请参考以下文章

关于用FFT分析信号频谱的问题

通信基于matlab语音信号仿真含Matlab源码 957期

数字信号和模拟信号之间如何让相互转换?

用MATLAB设计对信号进行频谱分析和滤波处理的程序

PCM调节器原理?

关于用MATLAB设计对信号进行频谱分析和滤波处理的程序