2016-03-12 1 views
0

Я использую эту быструю реализацию преобразования Фурье в узле-js: https://www.npmjs.com/package/fft-js.FFT по 8-битовому сигналу PCM

Я использую 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); 

Что я должен делать? Должен ли я преобразовать 8-битное представление pcm wav-файла в значения между -1 и 1, и если да, то как?

ответ

2

Согласно этому article в Википедии, вы должны быть в состоянии принимать данные 8bit 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] 

Edit: Если вы не используете ES2015, код будет выглядеть следующим образом:

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