diff tests/TestFFT.cpp @ 384:279991b6ebe7

Complex fft tests
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 01 Nov 2013 17:11:50 +0000
parents 3c7338aff6a8
children 8c86761a5533
line wrap: on
line diff
--- a/tests/TestFFT.cpp	Fri Nov 01 15:32:05 2013 +0000
+++ b/tests/TestFFT.cpp	Fri Nov 01 17:11:50 2013 +0000
@@ -121,6 +121,29 @@
     COMPARE_ARRAY(back, in);
 }
 
+BOOST_AUTO_TEST_CASE(c_dc)
+{
+    // DC-only signal. The DC bin is purely real
+    double rin[] = { 1, 1, 1, 1 };
+    double iin[] = { 1, 1, 1, 1 };
+    double re[] = { 999, 999, 999, 999 };
+    double im[] = { 999, 999, 999, 999 };
+    FFT(4).process(false, rin, iin, re, im);
+    BOOST_CHECK_EQUAL(re[0], 4.0);
+    BOOST_CHECK_EQUAL(re[1], 0.0);
+    BOOST_CHECK_EQUAL(re[2], 0.0);
+    BOOST_CHECK_EQUAL(re[3], 0.0);
+    BOOST_CHECK_EQUAL(im[0], 4.0);
+    BOOST_CHECK_EQUAL(im[1], 0.0);
+    BOOST_CHECK_EQUAL(im[2], 0.0);
+    BOOST_CHECK_EQUAL(im[3], 0.0);
+    double back[4];
+    double backim[4];
+    FFT(4).process(true, re, im, back, backim);
+    COMPARE_ARRAY(back, rin);
+    COMPARE_ARRAY(backim, iin);
+}
+
 BOOST_AUTO_TEST_CASE(sine)
 {
     // Sine. Output is purely imaginary
@@ -198,6 +221,29 @@
     FFTReal(4).inverse(re, im, back);
     COMPARE_ARRAY(back, in);
 }
+
+BOOST_AUTO_TEST_CASE(c_cosine)
+{
+    // Cosine. Output is purely real
+    double rin[] = { 1, 0, -1, 0 };
+    double iin[] = { 1, 0, -1, 0 };
+    double re[] = { 999, 999, 999, 999 };
+    double im[] = { 999, 999, 999, 999 };
+    FFT(4).process(false, rin, iin, re, im);
+    BOOST_CHECK_EQUAL(re[0], 0.0);
+    BOOST_CHECK_EQUAL(re[1], 2.0);
+    BOOST_CHECK_EQUAL(re[2], 0.0);
+    BOOST_CHECK_EQUAL(re[3], 2.0);
+    BOOST_CHECK_EQUAL(im[0], 0.0);
+    BOOST_CHECK_EQUAL(im[1], 2.0);
+    BOOST_CHECK_EQUAL(im[2], 0.0);
+    BOOST_CHECK_EQUAL(im[3], 2.0);
+    double back[4];
+    double backim[4];
+    FFT(4).process(true, re, im, back, backim);
+    COMPARE_ARRAY(back, rin);
+    COMPARE_ARRAY(backim, iin);
+}
 	
 BOOST_AUTO_TEST_CASE(sineCosine)
 {
@@ -243,6 +289,25 @@
     FFTReal(4).inverse(re, im, back);
     COMPARE_ARRAY(back, in);
 }
+	
+BOOST_AUTO_TEST_CASE(c_sineCosine)
+{
+    double rin[] = { 1, 0, -1, 0 };
+    double iin[] = { 0, 1, 0, -1 };
+    double re[] = { 999, 999, 999, 999 };
+    double im[] = { 999, 999, 999, 999 };
+    FFT(4).process(false, rin, iin, re, im);
+    BOOST_CHECK_EQUAL(re[0], 0.0);
+    BOOST_CHECK_EQUAL(re[1], 4.0);
+    BOOST_CHECK_EQUAL(re[2], 0.0);
+    BOOST_CHECK_EQUAL(re[3], 0.0);
+    COMPARE_CONST(im, 0.0);
+    double back[4];
+    double backim[4];
+    FFT(4).process(true, re, im, back, backim);
+    COMPARE_ARRAY(back, rin);
+    COMPARE_ARRAY(backim, iin);
+}
 
 BOOST_AUTO_TEST_CASE(nyquist)
 {