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()