There was also a buffer overrun in the frequency analysis code, which caused very unpredictable results. Patch attached.
For explanation: http://www.network-theory.co.uk/docs/gslref/gsl-ref_245.html The terms for k=0 and k=N/2 are both purely real, and count as a special case. Their real parts are stored in locations 0 and N/2 respectively, while their imaginary parts which are zero are not stored. The zero value did already have special treatment, but it was again used in the loop as the value of j, causing ch1[window_size - j] to overrun.
--- analysis.c.orig 2006-04-06 12:54:28.000000000 +0300 +++ analysis.c 2006-04-06 12:42:03.000000000 +0300 @@ -618,8 +618,10 @@ gsl_fft_real_radix2_transform (ch1, 1, window_size); mags [0] = fabs (ch1 [0]); - - for (j = 0; j < window_size / 2; j++) { + if (mags [0] > ch1max) + ch1max = mags [j]; + + for (j = 1; j < window_size / 2; j++) { mags [j] = sqrt (ch1 [j] * ch1 [j] + ch1 [window_size - j] * ch1 [window_size - j]); if (mags [j] > ch1max) @@ -632,8 +634,10 @@ if (wsfile->header.modus == 2) { mags [0] = fabs (ch2 [0]); + if (mags [0] > ch2max) + ch2max = mags [j]; - for (j = 0; j < window_size / 2; j++) { + for (j = 1; j < window_size / 2; j++) { mags [j] = sqrt (ch2 [j] * ch2 [j] + ch2 [window_size - j] * ch2 [window_size - j]); if (mags [j] > ch2max)