// file:$SPEECH_HOMEWORK4/hw4/class/snr_ratio/v1.0/signal_noise_ratio.h // // make sure the definitions are made only once // #ifndef __ISIP_SNR_RATIO #define __ISIP_SNR_RATIO // isip include files // #ifndef __ISIP_INTEGRAL #include #endif #ifndef __ISIP_SNR_RATIO_CONSTANTS #include "signal_noise_ratio_constants.h" #endif // forward class declaration // class Param_file; // Signal: a class that handles and process signals // class Signal { //--------------------------------------------------------------------------- // // protected data // //--------------------------------------------------------------------------- protected: // the debug level // int_4 debug_level_d; // specify the files used // char_1* param_file_d; // parameter file char_1* input_file_d; // input file char_1* output_file_d; // output file // information needed about the signal // int_4 num_chans_d; int_4 num_bytes_d; float_4 sample_freq_d; // information needed to process the signal // float_4 signal_threshold_d; float_4 noise_threshold_d; float_4 frame_duration_d; float_4 window_duration_d; int_4 window_method_d; logical_1 pre_emphasize_d; float_4 pre_emphasize_value_d; int_4 num_bins_d; float_4 window_center_d; int_4 lp_order_d; //--------------------------------------------------------------------------- // // public methods // //--------------------------------------------------------------------------- public: // required methods // char_1* name_cc(); volatile void error_handler_cc(char_1* method_name, char_1* message); logical_1 debug_cc(FILE* fp, char_1* message); logical_1 set_debug_cc(int_4 level); // constructor and destructor // ~Signal(); Signal(); // compute method // logical_1 compute_snr_cc(char_1* input_file, char_1* output_file); logical_1 compute_lpc_cc(char_1* input_file, char_1* output_file); // io methods // logical_1 read_cc(FILE* fp, float_4*& buffer, int_4 start, int_4 end, int_4 last_sample, int_4& samples_read); // logical_1 write_cc(); logical_1 load_params_cc(char_1* param_file); // process files // logical_1 set_param_file_cc(char_1* param_file); logical_1 set_input_file_cc(char_1* input_file); logical_1 set_output_file_cc(char_1* output_file); logical_1 get_param_file_cc(char_1* param_file); logical_1 get_input_file_cc(char_1* input_file); logical_1 get_output_file_cc(char_1* output_file); // set methods // logical_1 set_values_cc(int_4 num_chan, int_4 frame, int_4 window, float_4 sth, float_4 nth, int_4 sf); logical_1 set_values_cc(int_4 num_chan, float_4 window, float_4 pre_emphasis, int_4 lp_order, float_4 window_center, int_4 sf); logical_1 set_param_cc(char_1* param, char_1* value); logical_1 set_num_chans_cc(int_4 num_chans); logical_1 set_num_bytes_cc(int_4 num_bytes); logical_1 set_sample_frequency_cc(float_4 sample_freq); logical_1 set_signal_threshold_cc(float_4 signal_threshold); logical_1 set_noise_threshold_cc(float_4 noise_threshold); logical_1 set_frame_duration_cc(float_4 frame_duration); logical_1 set_window_duration_cc(float_4 window_duration); logical_1 set_window_method_cc(int_4 window_method); logical_1 set_pre_emphasize_cc(logical_1 pre_emphasize); logical_1 set_pre_emphasize_value_cc(float_4 pre_emphasize_value); logical_1 set_num_bins_cc(int_4 num_bins); logical_1 set_lp_order_cc(int_4 lp_order); logical_1 set_window_center_cc(float_4 window_center); // get methods // logical_1 get_num_chans_cc(int_4 num_chans); logical_1 get_num_bytes_cc(int_4 num_bytes); logical_1 get_sample_frequency_cc(float_4 sample_freq); logical_1 get_signal_threshold_cc(float_4 signal_threshold); logical_1 get_noise_threshold_cc(float_4 noise_threshold); logical_1 get_frame_duration_cc(float_4 frame_duration); logical_1 get_window_duration_cc(float_4 window_duration); logical_1 get_window_method_cc(int_4 window_method); logical_1 get_pre_emphasize_cc(logical_1 pre_emphasize); logical_1 get_pre_emphasize_value_cc(float_4 pre_emphasize_value); logical_1 get_num_bins_cc(int_4 num_bins); logical_1 get_lp_order_cc(int_4 lp_order); logical_1 get_window_center_cc(float_4 window_center); //--------------------------------------------------------------------------- // // private methods // //--------------------------------------------------------------------------- private: // methods to calculate the number of samples, frames, and windows // int_4 calculate_samples_cc(float_4 duration); int_4 calculate_num_frames_cc(int_4 samples_per_frame); int_4 calculate_file_size_cc(char_1* file); int_4 calculate_end_sample_cc(); // methods to process the input file // logical_1 process_data_cc(float_4**& energy, int_4& num_energy, int_4 samples_per_frame, int_4 samples_per_window, int_4 total_num_frames); // method to perform pre-emphasis // logical_1 perform_pre_emphasis_cc(float_4* buffer, int_4 samples_per_window); // method to perform windowing // logical_1 perform_hamming_window_cc(float_4* buffer, int_4 samples_per_window); logical_1 perform_rectangular_window_cc(float_4* buffer, int_4 samples_per_window); // method to perform debias // logical_1 perform_debias_cc(float_4* buffer, int_4 samples_per_window); // method to perform dft // logical_1 perform_dft_cc(float_4* buffer, float_4**& dft_values, int_4 samples_per_window); // method to perfom lp // logical_1 perform_lp_cc(float_4* buffer, float_4**& lp_values, int_4 samples_per_window); // method to calculate energy value // logical_1 calculate_energy_cc(float_4* buffer, int_4 samples_per_window, int_4 num_energy, float_4* energy_value); // methods to process the information and generate pdf, cdf, etc. // logical_1 process_plots_cc(float_4** energy, int_4 num_energy); // method to process the lpc signal // logical_1 process_signal_cc(int_4 window_samples, int_4 center_sample, int_4 total_sample); logical_1 perform_autocorrelation_cc(float_4* buffer, float_4**& auto_corr_values, int_4 samples_per_window); logical_1 calculate_lp_pred_cc(float_4**& lp_pred, float_4** auto_corr_values, float_4*& lp_gain); logical_1 calculate_lp_spectrum_cc(float_4** lp_pred, float_4**& lp_values, int_4 samples_per_window, float_4* lp_gain); // statistics methods // logical_1 find_range_cc(float_4** energy, int_4 num_energy, float_4* min, float_4* max); logical_1 calculate_pdf_cc(float_4** energy, int_4 num_energy, int_4** pdf, float_4** mean, float_4* min, float_4* max); logical_1 calculate_cdf_cc(int_4** pdf, int_4** cdf); // method to compute the SNR of the channels // logical_1 calculate_snr_cc(int_4** cdf, float_4** energy, int_4 num_energy, float_4* max, float_4* min, float_4** mean, float_4* snr); // output methods // logical_1 output_values_cc(float_4** values, int_4 samples_per_window); }; // end of file // #endif