8000 Added a simple benchmarking suite. Run with 'make benchmark' · JavaScriptIOT/dsp.js@e361d92 · GitHub
[go: up one dir, main page]

Skip to content

Commit e361d92

Browse files
committed
Added a simple benchmarking suite. Run with 'make benchmark'
1 parent 864bad1 commit e361d92

File tree

5 files changed

+87
-0
lines changed

5 files changed

+87
-0
lines changed

Makefile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Make sure $JSSHELL points to your js shell binary in .profile or .bashrc
2+
# Most targets use commands that need a js shell path specified
3+
JSSHELL ?= $(error Specify a valid path to a js shell binary in ~/.profile: export JSSHELL=C:\path\js.exe or /path/js)
4+
5+
# Version number used in naming release files.
6+
VERSION ?= $(error Specify a version for your release (e.g., VERSION=0.5))
7+
FREQUENCY ?= 440
8+
9+
benchmark:
10+
${JSSHELL} -j -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/dft.js
11+
${JSSHELL} -j -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/fft.js
12+
${JSSHELL} -j -e 'var FREQUENCY=${FREQUENCY};' -f dsp.js -f ./bench/bench.js -f ./bench/rfft.js
13+
14+
clean:
15+
rm -fr ./release

bench/bench.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function benchmark(func, loopCount) {
2+
loopCount = loopCount || 10000;
3+
4+
var start = Date.now();
5+
6+
for (var i = 0; i < loopCount; i++) {
7+
func();
8+
}
9+
10+
var end = Date.now();
11+
return end - start;
12+
}

bench/dft.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var bufferSize = 2048;
2+
var sampleRate = 44100;
3+
var frequency = FREQUENCY || 440;
4+
5+
var dft = new DFT(bufferSize, sampleRate);
6+
var osc = new Oscillator(DSP.SAW, frequency, 1.0, bufferSize, sampleRate);
7+
var signal = osc.generate();
8+
9+
var duration = benchmark(function() { dft.forward(signal); }, 20);
10+
11+
var peakBand = 0;
12+
13+
for (var i = 0; i < dft.spectrum.length; i++) {
14+
peakBand = (dft.spectrum[i] > dft.spectrum[peakBand]) ? i : peakBand;
15+
}
16+
17+
var peakFreq = dft.getBandFrequency(dft.peakBand);
18+
19+
print("Detected peak: " + peakFreq + " Hz (error " + Math.abs(peakFreq - frequency) + " Hz)");
20+
print("20 DFTs: " + (duration) + " ms (" + ((duration) / 20) + "ms per DFT)\n");

bench/fft.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var bufferSize = 2048;
2+
var sampleRate = 44100;
3+
var frequency = FREQUENCY || 440;
4+
5+
var fft = new FFT(bufferSize, sampleRate);
6+
var osc = new Oscillator(DSP.SAW, frequency, 1.0, bufferSize, sampleRate);
7+
var signal = osc.generate();
8+
9+
var duration = benchmark(function() { fft.forward(signal); });
10+
11+
var peakBand = 0;
12+
13+
for (var i = 0; i < fft.spectrum.length; i++) {
14+
peakBand = (fft.spectrum[i] > fft.spectrum[peakBand]) ? i : peakBand;
15+
}
16+
17+
var peakFreq = fft.getBandFrequency(fft.peakBand);
18+
19+
print("Detected peak: " + peakFreq + " Hz (error " + Math.abs(peakFreq - frequency) + " Hz)");
20+
print("10000 FFTs: " + (duration) + " ms (" + ((duration) / 10000) + "ms per FFT)\n");

bench/rfft.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var bufferSize = 2048;
2+
var sampleRate = 44100;
3+
var frequency = FREQUENCY || 440;
4+
5+
var fft = new RFFT(bufferSize, sampleRate);
6+
var osc = new Oscillator(DSP.SAW, frequency, 1.0, bufferSize, sampleRate);
7+
var signal = osc.generate();
8+
9+
var duration = benchmark(function() { fft.forward(signal); });
10+
11+
var peakBand = 0;
12+
13+
for (var i = 0; i < fft.spectrum.length; i++) {
14+
peakBand = (fft.spectrum[i] > fft.spectrum[peakBand]) ? i : peakBand;
15+
}
16+
17+
var peakFreq = fft.getBandFrequency(fft.peakBand);
18+
19+
print("Detected peak: " + peakFreq + " Hz (error " + Math.abs(peakFreq - frequency) + " Hz)");
20+
print("10000 FFTs: " + (duration) + " ms (" + ((duration) / 10000) + "ms per FFT)\n");

0 commit comments

Comments
 (0)
0