Skip to content

Commit 8c4ba49

Browse files
committed
Added benchmark for deinterleaving.
1 parent 56b1001 commit 8c4ba49

File tree

3 files changed

+52
-20
lines changed

3 files changed

+52
-20
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ benchmark:
1010
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/dft.js
1111
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/fft.js
1212
${JSSHELL} -m -j -p -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/rfft.js
13+
${JSSHELL} -m -j -p -f dsp.js -f ./bench/bench.js -f ./bench/deinterleave.js
1314

1415
clean:
1516
rm -fr ./release

bench/deinterleave.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
var bufferSize = 2048;
2+
var sampleRate = 44100;
3+
4+
var buffer1 = new Float32Array(bufferSize);
5+
var buffer2 = new Float32Array(bufferSize);
6+
var buffer3 = new Float32Array(bufferSize);
7+
var buffer4 = new Float32Array(bufferSize);
8+
9+
for (var i = 0; i < bufferSize; i++) {
10+
buffer1[i] = (i % 2 === 0) ? -Math.random() : Math.random();
11+
}
12+
13+
for (var i = 0; i < bufferSize; i++) {
14+
buffer2[i] = (i % 2 === 0) ? -Math.random() : Math.random();
15+
}
16+
17+
for (var i = 0; i < bufferSize; i++) {
18+
buffer3[i] = (i % 2 === 0) ? -Math.random() : Math.random();
19+
}
20+
21+
for (var i = 0; i < bufferSize; i++) {
22+
buffer4[i] = (i % 2 === 0) ? -Math.random() : Math.random();
23+
}
24+
25+
var channel;
26+
var temp;
27+
28+
var duration = benchmark(function() {
29+
channel = DSP.deinterleave(DSP.MIX, buffer1);
30+
31+
// cycle buffers
32+
temp = buffer1;
33+
buffer1 = buffer2;
34+
buffer2 = buffer3;
35+
buffer3 = buffer4;
36+
buffer4 = temp;
37+
}, 100000);
38+
39+
print("Channel length: " + channel.length);
40+
print("100000 iterations: " + (duration) + " ms (" + ((duration) / 100000) + "ms per iter)\n");

dsp.js

+11-20
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,6 @@ DSP.deinterleave = (function() {
164164
mix = new Float32Array(buffer.length/2);
165165
}
166166

167-
/*
168-
for (var i = 0, len = buffer.length/2; i < len; i++) {
169-
left[i] = buffer[2*i];
170-
right[i] = buffer[2*i+1];
171-
mix[i] = (left[i] + right[i]) / 2;
172-
}
173-
*/
174-
175167
return deinterleaveChannel[channel](buffer);
176168
};
177169
}());
@@ -361,7 +353,7 @@ DFT.prototype.forward = function(buffer) {
361353
function FFT(bufferSize, sampleRate) {
362354
FourierTransform.call(this, bufferSize, sampleRate);
363355

364-
this.reverseTable = new Uint32Array(bufferSize);
356+
this.reverseTable = new Uint32Array(bufferSize);
365357

366358
var limit = 1;
367359
var bit = bufferSize >> 1;
@@ -377,15 +369,13 @@ function FFT(bufferSize, sampleRate) {
377369
bit = bit >> 1;
378370
}
379371

380-
/*
381372
this.sinTable = new Float32Array(bufferSize);
382373
this.cosTable = new Float32Array(bufferSize);
383374

384375
for (i = 0; i < bufferSize; i++) {
385376
this.sinTable[i] = Math.sin(-Math.PI/i);
386377
this.cosTable[i] = Math.cos(-Math.PI/i);
387378
}
388-
*/
389379
}
390380

391381
/**
@@ -399,16 +389,17 @@ function FFT(bufferSize, sampleRate) {
399389
FFT.prototype.forward = function(buffer) {
400390
// Locally scope variables for speed up
401391
var bufferSize = this.bufferSize,
402-
//cosTable = this.cosTable,
403-
//sinTable = this.sinTable,
392+
cosTable = this.cosTable,
393+
sinTable = this.sinTable,
404394
reverseTable = this.reverseTable,
405395
real = this.real,
406396
imag = this.imag,
407397
spectrum = this.spectrum;
408398

409399
var k = Math.floor(Math.log(bufferSize) / Math.LN2);
400+
410401
if (Math.pow(2, k) !== bufferSize) { throw "Invalid buffer size, must be a power of 2."; }
411-
if (bufferSize !== buffer.length) { throw "Supplied buffer is not the same size as defined FFT. FFT Size: " + bufferSize + " Buffer Size: " + buffer.length; }
402+
if (bufferSize !== buffer.length) { throw "Supplied buffer is not the same size as defined FFT. FFT Size: " + bufferSize + " Buffer Size: " + buffer.length; }
412403

413404
var halfSize = 1,
414405
phaseShiftStepReal,
@@ -427,11 +418,10 @@ FFT.prototype.forward = function(buffer) {
427418
}
428419

429420
while (halfSize < bufferSize) {
430-
//phaseShiftStepReal = cosTable[halfSize];
431-
//phaseShiftStepImag = sinTable[halfSize];
432-
433-
phaseShiftStepReal = Math.cos(-Math.PI/halfSize);
434-
phaseShiftStepImag = Math.sin(-Math.PI/halfSize);
421+
//phaseShiftStepReal = Math.cos(-Math.PI/halfSize);
422+
//phaseShiftStepImag = Math.sin(-Math.PI/halfSize);
423+
phaseShiftStepReal = cosTable[halfSize];
424+
phaseShiftStepImag = sinTable[halfSize];
435425

436426
currentPhaseShiftReal = 1;
437427
currentPhaseShiftImag = 0;
@@ -665,6 +655,7 @@ RFFT.prototype.forward = function(buffer) {
665655
rval, ival, mag;
666656

667657
this.reverseBinPermute(x, buffer);
658+
668659
/*
669660
var reverseTable = this.reverseTable;
670661
@@ -811,7 +802,7 @@ RFFT.prototype.forward = function(buffer) {
811802
x[i5] -= t4;
812803
}
813804

814-
ix = id << 1 - n2;
805+
ix = (id << 1) - n2;
815806
id = id << 2;
816807

817808
} while (ix < n);

0 commit comments

Comments
 (0)