// file: clpc_cal_3.cc // // this function filters the signal // // system include file // #include // local include file // #include "global_constants.h" #include "calculate_lpc_constants.h" #include "calculate_lpc.h" // function: pre_emphasize_signal_cc // // arguments: // float*& signal_window_a: (input/output) input buffer containing the // signal to be pre-emphasized and output buffer // containing the pre-emphasized signal // float*& prev_sig_val_a: (input/output) previous frame last signal value // int samples_per_win_a: (input) number of samples per window // int num_chans_a: (input) number of channels // float preemp_val_a: (input) pre-emphasis constant // int debug_mode_a: (input) debug level // // return: an int to indicate status // // this function filters the signal using the equation below: // x(k) = x(k) - a * x(k-1); // // where a is the filter constant // and k = 0 .. N-1 // and N = total signal points // // int pre_emphasize_signal_cc (float*& signal_window_a, float*& prev_sig_val_a, int samples_per_win_a, int num_chans_a, float preemp_val_a, int debug_mode_a) { int num_samples = samples_per_win_a * num_chans_a; // keep a copy of the original data // float* temp_window = new float[num_samples]; for (int sample = 0; sample < num_samples; sample++) { temp_window[sample] = signal_window_a[sample]; } // calculate the pre-emphasis signal // for (int chan = 0; chan < num_chans_a; chan++) { signal_window_a[chan] = temp_window[chan] - preemp_val_a * prev_sig_val_a[chan]; } for (int chan = 0; chan < num_chans_a; chan++) { for (int sample = num_chans_a; sample < num_samples; sample += num_chans_a) { signal_window_a[sample] = temp_window[sample] - preemp_val_a * temp_window[sample-num_chans_a]; } } for (int chan = 0; chan < num_chans_a; chan++) { prev_sig_val_a[chan] = signal_window_a[num_samples-num_chans_a+chan]; } 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 :: pre-emphasized signal [%d] = %.6f\n", chan, sample, signal_window_a[sample]); } fprintf(stdout, "\n"); } } // delete temp buffer // if (temp_window != (float*)NULL) { delete [] temp_window; temp_window = (float*)NULL; } // exit gracefully // return TRUE; }