// file: csnr_cal_12.cc // // this function computes the snr value of the signal in each channel // // system include file // #include // local include file // #include "global_constants.h" #include "calculate_snr_constants.h" #include "calculate_snr.h" // function: calculate_snr_cc // // arguments: // float*& snr_values_a: (output) snr values // float** cdf_a: (input) cdf of the signal // int num_chans_a: (input) number of channels // float noise_threshold_a: (output) threshold of noise // float signal_threshold_a: (output) threshold of signal+noise // int debug_mode_a: (input) debug level // // return: an int to indicate status // // this function calculates the signal to noise ratio using the following // equation: // // SNR = 10 * log10[((Es + En) - En) / En] // // int calculate_snr_cc (float*& snr_values_a, float** cdf_a, float** bin_avgs_a, int num_chans_a, float noise_threshold_a, float signal_threshold_a, int debug_mode_a) { int noise_flag = FALSE; int signal_flag = FALSE; float noise_level; float signal_level; for (int j = 0; j < num_chans_a; j++) { for (int i = 0; i < CSNR_NUM_BINS; i++) { if ( (cdf_a[j][i] > noise_threshold_a) && (!noise_flag) ) { noise_level = bin_avgs_a[j][i]; noise_flag = TRUE; } else if ( (cdf_a[j][i] > signal_threshold_a) && (!signal_flag) ) { signal_level = bin_avgs_a[j][i]; signal_flag = TRUE; } } snr_values_a[j] = (float)10.0 * log10((signal_level - noise_level) / noise_level); noise_flag = FALSE; signal_flag = FALSE; } if (debug_mode_a > DEBUG_BRIEF) { for (int j = 0; j < num_chans_a; j++) { fprintf(stdout, "snr [%d] = %.2f\n", j, snr_values_a[j]); } } // exit gracefully // return TRUE; }