Skip to content

Commit

Permalink
Added benchmark for deinterleaving.
Browse files Browse the repository at this point in the history
  • Loading branch information
corbanbrook committed Mar 1, 2011
1 parent 56b1001 commit 8c4ba49
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 20 deletions.
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -10,6 +10,7 @@ benchmark:
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/dft.js
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/fft.js
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/rfft.js
${JSSHELL} -m -j -p -f dsp.js -f ./bench/bench.js -f ./bench/deinterleave.js

clean:
rm -fr ./release
40 changes: 40 additions & 0 deletions bench/deinterleave.js
@@ -0,0 +1,40 @@
var bufferSize = 2048;
var sampleRate = 44100;

var buffer1 = new Float32Array(bufferSize);
var buffer2 = new Float32Array(bufferSize);
var buffer3 = new Float32Array(bufferSize);
var buffer4 = new Float32Array(bufferSize);

for (var i = 0; i < bufferSize; i++) {
buffer1[i] = (i % 2 === 0) ? -Math.random() : Math.random();
}

for (var i = 0; i < bufferSize; i++) {
buffer2[i] = (i % 2 === 0) ? -Math.random() : Math.random();
}

for (var i = 0; i < bufferSize; i++) {
buffer3[i] = (i % 2 === 0) ? -Math.random() : Math.random();
}

for (var i = 0; i < bufferSize; i++) {
buffer4[i] = (i % 2 === 0) ? -Math.random() : Math.random();
}

var channel;
var temp;

var duration = benchmark(function() {
channel = DSP.deinterleave(DSP.MIX, buffer1);

// cycle buffers
temp = buffer1;
buffer1 = buffer2;
buffer2 = buffer3;
buffer3 = buffer4;
buffer4 = temp;
}, 100000);

print("Channel length: " + channel.length);
print("100000 iterations: " + (duration) + " ms (" + ((duration) / 100000) + "ms per iter)\n");
31 changes: 11 additions & 20 deletions dsp.js
Expand Up @@ -164,14 +164,6 @@ DSP.deinterleave = (function() {
mix = new Float32Array(buffer.length/2);
}

/*
for (var i = 0, len = buffer.length/2; i < len; i++) {
left[i] = buffer[2*i];
right[i] = buffer[2*i+1];
mix[i] = (left[i] + right[i]) / 2;
}
*/

return deinterleaveChannel[channel](buffer);
};
}());
Expand Down Expand Up @@ -361,7 +353,7 @@ DFT.prototype.forward = function(buffer) {
function FFT(bufferSize, sampleRate) {
FourierTransform.call(this, bufferSize, sampleRate);

this.reverseTable = new Uint32Array(bufferSize);
this.reverseTable = new Uint32Array(bufferSize);

var limit = 1;
var bit = bufferSize >> 1;
Expand All @@ -377,15 +369,13 @@ function FFT(bufferSize, sampleRate) {
bit = bit >> 1;
}

/*
this.sinTable = new Float32Array(bufferSize);
this.cosTable = new Float32Array(bufferSize);

for (i = 0; i < bufferSize; i++) {
this.sinTable[i] = Math.sin(-Math.PI/i);
this.cosTable[i] = Math.cos(-Math.PI/i);
}
*/
}

/**
Expand All @@ -399,16 +389,17 @@ function FFT(bufferSize, sampleRate) {
FFT.prototype.forward = function(buffer) {
// Locally scope variables for speed up
var bufferSize = this.bufferSize,
//cosTable = this.cosTable,
//sinTable = this.sinTable,
cosTable = this.cosTable,
sinTable = this.sinTable,
reverseTable = this.reverseTable,
real = this.real,
imag = this.imag,
spectrum = this.spectrum;

var k = Math.floor(Math.log(bufferSize) / Math.LN2);

if (Math.pow(2, k) !== bufferSize) { throw "Invalid buffer size, must be a power of 2."; }
if (bufferSize !== buffer.length) { throw "Supplied buffer is not the same size as defined FFT. FFT Size: " + bufferSize + " Buffer Size: " + buffer.length; }
if (bufferSize !== buffer.length) { throw "Supplied buffer is not the same size as defined FFT. FFT Size: " + bufferSize + " Buffer Size: " + buffer.length; }

var halfSize = 1,
phaseShiftStepReal,
Expand All @@ -427,11 +418,10 @@ FFT.prototype.forward = function(buffer) {
}

while (halfSize < bufferSize) {
//phaseShiftStepReal = cosTable[halfSize];
//phaseShiftStepImag = sinTable[halfSize];

phaseShiftStepReal = Math.cos(-Math.PI/halfSize);
phaseShiftStepImag = Math.sin(-Math.PI/halfSize);
//phaseShiftStepReal = Math.cos(-Math.PI/halfSize);
//phaseShiftStepImag = Math.sin(-Math.PI/halfSize);
phaseShiftStepReal = cosTable[halfSize];
phaseShiftStepImag = sinTable[halfSize];

currentPhaseShiftReal = 1;
currentPhaseShiftImag = 0;
Expand Down Expand Up @@ -665,6 +655,7 @@ RFFT.prototype.forward = function(buffer) {
rval, ival, mag;

this.reverseBinPermute(x, buffer);

/*
var reverseTable = this.reverseTable;
Expand Down Expand Up @@ -811,7 +802,7 @@ RFFT.prototype.forward = function(buffer) {
x[i5] -= t4;
}

ix = id << 1 - n2;
ix = (id << 1) - n2;
id = id << 2;

} while (ix < n);
Expand Down

0 comments on commit 8c4ba49

Please sign in to comment.