Example #1
0
        double spread_complex(ref fft_results_rec this_fft_result, int analysis_number)
        {
            double sc_y = 0.0, sc_x;
            int    sc_i = analysis_recs[analysis_number].lo_bins - 1;

            fft_result[sc_i] = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
            for (sc_i = analysis_recs[analysis_number].lo_bins; sc_i <= analysis_recs[analysis_number].hi_bins; sc_i++)
            {
                sc_x             = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
                sc_y            += sc_x;
                fft_result[sc_i] = sc_x;
            }
            sc_i = analysis_recs[analysis_number].hi_bins + 1;
            sc_x = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
            //sc_y += sc_x;
            fft_result[sc_i] = sc_x;

            double snr_value_exp             = Math.Pow(2, snr_value / lg2x20);
            double noise_threshold_shift_exp = Math.Pow(2, noise_threshold_shift / lg2x20);

            this_fft_result.savebin = (float)(sc_y / analysis_recs[analysis_number].num_bins * snr_value_exp);
            sc_y = 5623413251903.490803949510; // MaxDb { 10^(255/20)   }
            for (sc_i = analysis_recs[analysis_number].lo_bins; sc_i <= analysis_recs[analysis_number].max_bins; sc_i++)
            {
                double sc_z = ((fft_result[sc_i - 1] + fft_result[sc_i + 1]) * analysis_recs[analysis_number].spreading_averages_rem[sc_i] + fft_result[sc_i]) * analysis_recs[analysis_number].spreading_averages_rec[sc_i];
                sc_y = Math.Min(sc_y, sc_z);
            }

            this_fft_result.sminbin = (float)(sc_y * noise_threshold_shift_exp);
            return(lg2x20 * fastlog2(Math.Min(this_fft_result.savebin, this_fft_result.sminbin)));
        }
        double spread_complex(ref fft_results_rec this_fft_result, int analysis_number)
        {
            double sc_y = 0.0, sc_x;
            int sc_i = analysis_recs[analysis_number].lo_bins - 1;
            fft_result[sc_i] = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
            for (sc_i = analysis_recs[analysis_number].lo_bins; sc_i <= analysis_recs[analysis_number].hi_bins; sc_i++)
            {
                sc_x = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
                sc_y += sc_x;
                fft_result[sc_i] = sc_x;
            }
            sc_i = analysis_recs[analysis_number].hi_bins + 1;
            sc_x = Math.Sqrt(fastsqr(fft_array[sc_i * 2]) + fastsqr(fft_array[sc_i * 2 + 1])) * analysis_recs[analysis_number].skewing_function[sc_i];
            //sc_y += sc_x;
            fft_result[sc_i] = sc_x;

            double snr_value_exp = Math.Pow(2, snr_value / lg2x20);
            double noise_threshold_shift_exp = Math.Pow(2, noise_threshold_shift / lg2x20);

            this_fft_result.savebin = (float)(sc_y / analysis_recs[analysis_number].num_bins * snr_value_exp);
            sc_y = 5623413251903.490803949510; // MaxDb { 10^(255/20)   }
            for (sc_i = analysis_recs[analysis_number].lo_bins; sc_i <= analysis_recs[analysis_number].max_bins; sc_i++)
            {
                double sc_z = ((fft_result[sc_i - 1] + fft_result[sc_i + 1]) * analysis_recs[analysis_number].spreading_averages_rem[sc_i] + fft_result[sc_i]) * analysis_recs[analysis_number].spreading_averages_rec[sc_i];
                sc_y = Math.Min(sc_y, sc_z);
            }

            this_fft_result.sminbin = (float)(sc_y * noise_threshold_shift_exp);
            return lg2x20 * fastlog2(Math.Min(this_fft_result.savebin, this_fft_result.sminbin));
        }