r3963 - trunk/bse



Author: stw
Date: 2006-10-12 11:16:01 -0400 (Thu, 12 Oct 2006)
New Revision: 3963

Modified:
   trunk/bse/ChangeLog
   trunk/bse/gslfft.h
Log:
Thu Oct 12 16:54:42 2006  Stefan Westerfeld  <stefan space twc de>

	* gslfft.h: Improved documentation on FFT normalization.


Modified: trunk/bse/ChangeLog
===================================================================
--- trunk/bse/ChangeLog	2006-10-12 11:27:58 UTC (rev 3962)
+++ trunk/bse/ChangeLog	2006-10-12 15:16:01 UTC (rev 3963)
@@ -1,3 +1,7 @@
+Thu Oct 12 16:54:42 2006  Stefan Westerfeld  <stefan space twc de>
+
+	* gslfft.h: Improved documentation on FFT normalization.
+
 Thu Oct 12 13:25:38 2006  Stefan Westerfeld  <stefan space twc de>
 
 	* bseiirfilter.c: Added some comments.

Modified: trunk/bse/gslfft.h
===================================================================
--- trunk/bse/gslfft.h	2006-10-12 11:27:58 UTC (rev 3962)
+++ trunk/bse/gslfft.h	2006-10-12 15:16:01 UTC (rev 3963)
@@ -42,6 +42,18 @@
  * frequency K/n_values. (If you want to interpret negative frequencies,
  * note that the frequencies -K/n_values and (n_values-K)/n_values are
  * equivalent).
+ *
+ * In general for the gsl_power2_fft*() family of functions, normalization is
+ * only performed during backward transform. However, a popular mathematical
+ * strategy of defining the FFT and IFFT in a way that the formulas are
+ * symmetric is normalizing both, the forward and backward transform with
+ * 1/sqrt(N) - where N is the number of complex values (n_values).
+ *
+ * Compared to the above definition, in this implementation, the analyzed
+ * values produced by gsl_power2_fftac()/gsl_power2_fftar() will be too large
+ * by a factor of sqrt(N), which however are cancelled out on the backward
+ * transform.
+ *
  * Note that the transformation is performed out of place, the input
  * array is not modified, and may not overlap with the output array.
  */
@@ -60,9 +72,13 @@
  * array which is transformed into the frequency domain with
  * gsl_power2_fftac() can be reconstructed by issuing gsl_power2_fftsc()
  * on the transform.
+ *
  * This function also scales the time domain coefficients by a
  * factor of 1.0/n_values which is required for perfect reconstruction
- * of time domain data formerly transoformed via gsl_power2_fftac().
+ * of time domain data formerly transformed via gsl_power2_fftac().
+ * More details on normalization can be found in the documentation of
+ * gsl_power2_fftac().
+ *
  * Note that the transformation is performed out of place, the input
  * array is not modified, and may not overlap with the output array.
  */
@@ -88,6 +104,11 @@
  * H(n_values/2) is stored in ri_values_out[1] (the imaginery part of
  * H(0)), so that both arrays r_values_in and ri_values_out can be of
  * size n_values.
+ *
+ * The normalization of the results of the analysis is explained in
+ * gsl_power2_fftac(). Note that in the real valued case, the number of
+ * complex values N for normalization is n_values/2.
+ *
  * Note that the transformation is performed out of place, the input
  * array is not modified, and may not overlap with the output array.
  */
@@ -104,9 +125,14 @@
  * gsl_power2_fftar(), using the same frequency storage format.
  * A real valued data set transformed into the frequency domain
  * with gsl_power2_fftar() can be reconstructed using this function.
+ *
  * This function also scales the time domain coefficients by a
- * factor of 1.0/n_values which is required for perfect reconstruction
- * of time domain data formerly transformed via gsl_power2_fftar().
+ * factor of 1.0/(n_values/2) which is required for perfect
+ * reconstruction of time domain data formerly transformed via
+ * gsl_power2_fftar().
+ * More details on normalization can be found in the documentation of
+ * gsl_power2_fftac().
+ *
  * Note that the transformation is performed out of place, the input
  * array is not modified, and may not overlap with the output array.
  */




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]