// file: csnr_cal_4.cc // // this function windows the signal // // system include file // #include #include // local include file // #include "global_constants.h" #include "calculate_lpc_constants.h" #include "calculate_lpc.h" // function: window_signal_cc // // arguments: // float*& signal_window_a: (input/output) buffer contain the signal to // be pre-emphasized // int samples_per_win_a: (input) number of samples per window // int num_chans_a: (input) number of channels // int win_type_a: (input) type of window // int debug_mode_a: (input) debug level // // return: an int to indicate status // // this function windows the signal using either hamming window or rectangular // window using the equation below: // // x(k) = x(k) * window(k) // // where window(k) = 1 for rectangular window // window(k) = 0.54 - 0.46 * cos(2 * pi * k / (N - 1)) for hamming window // and k = 0 .. N-1 // and N = total signal points // // int window_signal_cc (float*& signal_window_a, int samples_per_win_a, int num_chans_a, int win_type_a, int debug_mode_a) { int num_samples = samples_per_win_a * num_chans_a; if (win_type_a == CLPC_RCTGL_WIN) { for (int chan = 0; chan < num_chans_a; chan++) { for (int sample = chan; sample < num_samples; sample += num_chans_a) { signal_window_a[sample] *= CLPC_RCTGL_CONST; } } } else if (win_type_a == CLPC_HAMMING_WIN) { for (int chan = 0; chan < num_chans_a; chan++) { for (int sample = chan; sample < num_samples; sample += num_chans_a) { signal_window_a[sample] *= ( 0.54 - 0.46 * cos( 2 * M_PI * (float)(sample / num_chans_a) / (samples_per_win_a - 1) ) ); } } } else { fprintf(stdout, "No such window type\n"); return FALSE; } if (debug_mode_a > DEBUG_FULL) { for (int chan = 0; chan < num_chans_a; chan++) { for (int sample = chan; sample < num_samples; sample += num_chans_a) { fprintf(stdout, "chan %d :: windowed signal [%d] = %.6f\n", chan, sample, signal_window_a[sample]); } } fprintf(stdout, "\n"); } // exit gracefully // return TRUE; }