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