Mercurial > hg > js-dsp-test
changeset 4:fcb64e4b8393
Report magnitudes for total
author | Chris Cannam |
---|---|
date | Mon, 05 Oct 2015 11:30:11 +0100 |
parents | b3243c84ccb3 |
children | b4ab69bdb4c8 |
files | fft/test.html fft/test.js |
diffstat | 2 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/fft/test.html Mon Oct 05 09:53:11 2015 +0100 +++ b/fft/test.html Mon Oct 05 11:30:11 2015 +0100 @@ -38,7 +38,7 @@ <ul> <li><b>Nayuki</b>: in-place single-precision complex-complex</li> <li><b>Nockert</b>: double-precision real-complex</li> - <li><b>Nayuki</b>: double-precision complex-complex (forward transform is scaled)</li> + <li><b>Nayuki</b>: double-precision complex-complex. Forward transform is scaled and I've scaled it back again here, which may introduce rounding error.</li> </ul> <h3>Rationale</h3>
--- a/fft/test.js Mon Oct 05 09:53:11 2015 +0100 +++ b/fft/test.js Mon Oct 05 11:30:11 2015 +0100 @@ -61,7 +61,7 @@ var imag = zeroReals(size); transform(real, imag); for (var j = 0; j < size; ++j) { - total += real[j] + imag[j]; + total += Math.sqrt(real[j] * real[j] + imag[j] * imag[j]); } } @@ -87,8 +87,8 @@ var ri = inputReal64s(size); var co = new Float64Array(2 * size); fft.simple(co, ri, 'real'); - for (var j = 0; j < 2 * size; ++j) { - total += co[j]; + for (var j = 0; j < size; ++j) { + total += Math.sqrt(co[j*2] * co[j*2] + co[j*2+1] * co[j*2+1]); } } @@ -104,6 +104,7 @@ var end = start; total = 0.0; + var scale = Math.sqrt(size); for (var i = 0; i < 2*iterations; ++i) { if (i == iterations) { @@ -112,13 +113,14 @@ var ci = inputComplexArray(size); var co = ci.FFT(); for (var j = 0; j < size; ++j) { - total += co.real[j] + co.imag[j]; + total += scale * + Math.sqrt(co.real[j] * co.real[j] + co.imag[j] * co.imag[j]); } } var end = performance.now(); - report("dntj", start, middle, end, total * Math.sqrt(size)); + report("dntj", start, middle, end, total); } function test() {