// file: $SPEECH_HOMEWORK4/hw4/class/snr_ratio/v1.0/snr_proc_2.cc // // isip include files // #include #include "signal_noise_ratio.h" #include "signal_noise_ratio_constants.h" // method: process_signal_cc // // arguments: // float_4* window (output) signal window // int_4 window_samples (input) the number of samples in one window // int_4 center_sample (input) the center of the window // int_4 total_samples (input) the total number of samples // // return: a logical_1 indicating status // logical_1 Signal::process_signal_cc (int_4 window_samples_a, int_4 center_sample_a, int_4 total_samples_a) { // check arguments // if (window_samples_a <= 0) { error_handler_cc((char_1*)"process_signal_cc", (char_1*)"invalid number of samples per window"); } if (center_sample_a <= 0) { error_handler_cc((char_1*)"process_signal_cc", (char_1*)"invalid center sample value"); } if (total_samples_a <= 0) { error_handler_cc((char_1*)"process_signal_cc", (char_1*)"invalid number of samples"); } // set up a buffer to keep up with the window // float_4* buffer = new float_4[window_samples_a * num_chans_d]; memset((void*)buffer, 0, window_samples_a * sizeof(float_4) * num_chans_d); // set up counters to keep track of the samples // int_4 offset = (int_4) (rint(window_samples_a/2)); int_4 start = (int_4) (rint(center_sample_a - offset)); int_4 end = (int_4) (rint(center_sample_a + offset)); int_4 last_sample = calculate_file_size_cc(input_file_d) / (num_bytes_d * num_chans_d); int_4 samples_read = 0; // open input file // FILE* fp_a = fopen((char*)input_file_d, "r"); // loop through data // if (read_cc(fp_a, buffer, start, end, last_sample, samples_read) != ISIP_TRUE) { error_handler_cc((char_1*)"process_signal_cc", (char_1*)"error reading signal file"); } fclose(fp_a); // do debias // perform_debias_cc(buffer, window_samples_a); // do pre-emphasize // if (pre_emphasize_d == ISIP_TRUE) { perform_pre_emphasis_cc(buffer, window_samples_a); } // apply window methods // if (window_method_d == SIGNAL_WINDOW_METHOD_HAMMING) { perform_hamming_window_cc(buffer, window_samples_a); } else if (window_method_d == SIGNAL_WINDOW_METHOD_RECTANGULAR) { perform_rectangular_window_cc(buffer, window_samples_a); } // allocate memory for the dft coefficients and lp values // float_4** dft_values = new float_4*[num_chans_d]; float_4** lp_values = new float_4*[num_chans_d]; for (int_4 channel=0; channel