FFT

thanks Michi

by Nayana Das

HTML

<script src="https://rawgit.com/corbanbrook/dsp.js/master/dsp.js"></script>
<script src="http://dygraphs.com/1.1.0/dygraph-combined-dev.js"></script>
<div id="graph"></div>

<!--<button onclick="Oszi()">Start</button>-->
<button onclick="_FFT(signal,1024,400)">Perform FFT</button>

JavaScript

var signal = [];
var sam = 400;
var fre = 14;
var buf = 1024;

function Oszi(){
    signal = []
    for (i = 0 ; i<buf; i++){
        signal.push(3*Math.cos(Math.PI * 2 * i / sam * fre*2.7) +Math.sin(Math.PI * 2 * i / sam * fre));
    }
    plot(signal);
}

function _FFT(signal,bufferSize, samplingRate) {
		signal = [-0.36, 0.03, 0.2, -0.37, -0.13, 0.33, -0.24, -0.21, 0.42, -0.02, -0.26, 0.38, 0.13, -0.56, 0.06, 0.37, -0.39, -0.03, 0.38, -0.25, -0.18, 0.13, -0.14, -0.21, 0.5, -0.08, -0.25, 0.42, 0.03, -0.14, 0.27, 0.18, -0.43, 0.11, 0.38, -0.42, -0.14, 0.34, -0.22, -0.14, 0.07, -0.19, -0.21, 0.47, -0.1, -0.33, 0.32, 0.07, -0.38, 0.08, 0.4, -0.15, -0.18, 0.43, 0.01, -0.26, 0.3, 0.29, -0.36, -0.15, 0.37, -0.15, -0.52, 0.32, 0.11, -0.35, 0.11, 0.35, -0.2, -0.1, 0.37, -0.15, -0.3, 0.37, 0.06, -0.38, 0.05, 0.29, -0.23, -0.12, 0.37, -0.04, -0.32, 0.34, 0.08, -0.42, 0.13, 0.3, -0.35, -0.18, 0.4, 0.04, 0, 0.06, 0.33, -0.15, -0.4, 0.33, 0.18, -0.52];
    bufferSize=signal.length;
    samplingRate=400;
    console.log(JSON.stringify(signal));
    console.log("bufferSize: "+bufferSize)
    console.log("samplingRate: "+samplingRate)
    var fft = new FFT(bufferSize, samplingRate);
    fft.forward(signal);
    var spectrum = fft.spectrum;
    plotFFT(spectrum,samplingRate); 
}


function plotFFT(spectrum,samplingRate) {
    var data = [];
    var frequencyIncrement = parseFloat(samplingRate)/2/spectrum.length;
    for (var j = 0; j < spectrum.length; j++){
        data.push([frequencyIncrement*j,spectrum[j]]);    
    }
    new Dygraph(document.getElementById("graph"),data);
    console.log(data);
}


function plot(plotData) {
    var row = [];
    for (var j = 0; j < plotData.length; j++){
        row.push([j,plotData[j]]);    
    }
    console.log(row);
    
    new Dygraph(document.getElementById("graph"),row);  
    
    
}
//Oszi()