bpmsimulation/get_mode_response.c

Go to the documentation of this file.
00001 
00005 #include <bpm/bpm_messages.h>
00006 #include <bpm/bpm_simulation.h>
00007 #include <bpm/bpm_wf.h>
00008 #include <bpm/bpm_dsp.h>
00009 
00018 int get_mode_response( doublewf_t *excitation,
00019                        double freq, double Qvalue, 
00020                        complexwf_t *response ) {
00021 
00022   if ( ! excitation || ! response ) {
00023     bpm_error( "Invalid pointer argument in add_wave(...)",
00024                __FILE__, __LINE__ );
00025     return BPM_FAILURE;
00026   }
00027 
00028   // mode resonator
00029   filter_t *resonator =
00030            create_filter( "resonator", RESONATOR | BANDPASS, 0,
00031                           excitation->ns, excitation->fs,
00032                           freq, 0., Qvalue );
00033 
00034   doublewf_t *resp_re = doublewf_copy_new( excitation );
00035 
00036   apply_filter( resonator, resp_re->wf );
00037 
00038   doublewf_scale( resp_re->fs/(2*PI*freq/Qvalue), resp_re );
00039 
00040   doublewf_t *resp_im = doublewf_copy_new( resp_re );
00041 
00042   doublewf_integrate( resp_re );
00043   doublewf_scale( 2*PI*freq, resp_re );
00044 
00045   complexwf_setreal( response, resp_re );
00046   complexwf_setimag( response, resp_im );
00047 
00048   delete_filter( resonator );
00049   doublewf_delete( resp_re );
00050   doublewf_delete( resp_im );
00051 
00052   return BPM_SUCCESS;
00053 }
00054 
00055 // end of file

Generated on Thu Jan 10 10:18:04 2008 for libbpm by  doxygen 1.5.1