bpmwf/bpm_wf.h

Go to the documentation of this file.
00001 /*
00002   libbpm - BPM signal processing/simulation library
00003   Copyright (C) 2006-07 Bino Maiheu (bino@hep.ucl.ac.uk)
00004   
00005   This program is free software; you can redistribute it and/or modify
00006   it under the terms of the GNU General Public License as published by
00007   the Free Software Foundation; either version 2 of the License, or
00008   (at your option) any later version.
00009   
00010   This program is distributed in the hope that it will be useful,
00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013   GNU General Public License for more details.
00014   
00015   You should have received a copy of the GNU General Public License
00016   along with this program; if not, write to the Free Software
00017   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA 
00018 */
00019 
00138 #ifndef BPMWAVE_H_LOADED__
00139 #define BPMWAVE_H_LOADED__
00140 
00141 /* -----------------------------------------------------------------------------
00142 // includes
00143 // -------------------------------------------------------------------------- */
00144 #include <math.h>
00145 #include <float.h>
00146 #include <stdio.h>
00147 #include <stdlib.h>
00148 
00149 #include "bpm/bpm_defs.h"
00150 #include "bpm/bpm_units.h"
00151 #include "bpm/bpm_messages.h"
00152 #include "bpm/bpm_nr.h"
00153 
00154 /* -----------------------------------------------------------------------------
00155 // macro definitions
00156 // -------------------------------------------------------------------------- */
00157 #define WF_EPS          1.e-10 
00158 #define MAX_ALLOWED_NS  262144 
00160 #define WF_NEAREST    0x0000   
00161 #define WF_LINEAR     0x0001   
00162 #define WF_QUADRATIC  0x0002   
00163 #define WF_SINC       0x0004   
00164 #define WF_LANCZOS    0x0008   
00166 /* -----------------------------------------------------------------------------
00167 // typedefs, enums and other declarations
00168 // -------------------------------------------------------------------------- */
00169 #ifdef __cplusplus
00170 extern "C" {
00171 #endif
00172 
00174   typedef struct {
00175     int     ns; 
00176     double  fs; 
00177     double *wf; 
00178   } doublewf_t;
00179   
00181   typedef struct {
00182     int     ns; 
00183     double  fs; 
00184     int    *wf; 
00185   } intwf_t;
00186   
00188   typedef struct {
00189     int        ns; 
00190     double     fs; 
00191     complex_t *wf; 
00192   } complexwf_t;
00193   
00194 
00196   typedef struct {
00197     int     imax;  
00198     int     imin;  
00199     double  max;   
00200     double  min;   
00201     double  mean;  
00202     double  rms;   
00203   } wfstat_t;
00204   
00205 /* -----------------------------------------------------------------------------
00206 // function prototypes and declarations
00207 // -------------------------------------------------------------------------- */
00208 
00209   // wfstats_t handling routines -----------------------------------------------
00210 
00214   EXTERN int wfstat_reset( wfstat_t *s );
00215 
00216 
00221   EXTERN void wfstat_print( FILE *of, wfstat_t *s );
00222   
00223 
00224   // doublewf_t handling routines ----------------------------------------------
00225 
00230   EXTERN doublewf_t* doublewf( int ns, double fs );
00231 
00232   
00238   EXTERN doublewf_t* doublewf_time_series( int ns, double fs );
00239 
00240 
00246   EXTERN doublewf_t* doublewf_sample_series( int ns, double fs );
00247 
00248 
00254   EXTERN doublewf_t* doublewf_frequency_series( int ns, double fs );
00255 
00256 
00263   EXTERN int doublewf_setvalues( doublewf_t *w, double *x );
00264 
00265  
00276   EXTERN int doublewf_setfunction( doublewf_t *w, 
00277                                    double (*wffun)( double t, int, double* ),
00278                                    int npars, double *par );
00279   
00280 
00288   EXTERN int doublewf_copy( doublewf_t *copy, doublewf_t *src );
00289 
00290 
00294   EXTERN doublewf_t* doublewf_copy_new( doublewf_t *w );
00295 
00296 
00306   EXTERN int doublewf_subset( doublewf_t *sub, doublewf_t *w, int i1, int i2 );
00307 
00308 
00312   EXTERN int doublewf_reset( doublewf_t *w ); 
00313 
00314 
00318   EXTERN void doublewf_delete( doublewf_t *w );
00319   
00320 
00327   EXTERN intwf_t* intwf_cast_new( doublewf_t *w );
00328 
00329 
00335   EXTERN int intwf_cast( intwf_t *iw, doublewf_t *w );
00336 
00337 
00345   EXTERN int doublewf_compat( doublewf_t *w1, doublewf_t *w2 );
00346 
00347   
00353   EXTERN int doublewf_add( doublewf_t *w1, doublewf_t *w2 );
00354 
00355 
00361   EXTERN int doublewf_subtract( doublewf_t *w1, doublewf_t *w2 );
00362 
00363 
00369   EXTERN int doublewf_multiply( doublewf_t *w1, doublewf_t *w2 );
00370 
00371 
00378   EXTERN int doublewf_divide( doublewf_t *w1, doublewf_t *w2 );
00379 
00380 
00386   EXTERN int doublewf_scale( double f, doublewf_t *w );
00387 
00388 
00394   EXTERN int doublewf_bias( double c, doublewf_t *w );
00395 
00396 
00405   EXTERN int doublewf_add_cwtone( doublewf_t *w, double amp, double phase, double freq,
00406                                   double phasenoise );
00407 
00408   
00422   EXTERN int doublewf_add_dcywave( doublewf_t *w, double amp, double phase, double freq, 
00423                                    double ttrig, double tdcy, double phasenoise );
00424   
00425   
00430   EXTERN int doublewf_add_ampnoise( doublewf_t *w, double sigma );
00431 
00432   
00433 
00441   EXTERN int doublewf_basic_stats( doublewf_t *w, int s0, int s1, wfstat_t *stats );
00442 
00443 
00447   EXTERN int doublewf_derive( doublewf_t *w );
00448 
00452   EXTERN int doublewf_integrate( doublewf_t *w );
00453 
00454 
00460   EXTERN void doublewf_print( FILE *of, doublewf_t *w );
00461 
00462 
00470   EXTERN double doublewf_getvalue( doublewf_t *w, double t, unsigned int mode );
00471   
00472 
00485   EXTERN int doublewf_resample( doublewf_t *w2, double fs, doublewf_t *w1, unsigned int mode );
00486 
00487 
00488 
00489   // intwf_t handling routines ----------------------------------------------
00490 
00491 
00496   EXTERN intwf_t* intwf( int ns, double fs );
00497   
00503   EXTERN intwf_t* intwf_sample_series( int ns, double fs );
00504 
00505 
00512   EXTERN int intwf_setvalues( intwf_t *w, int *x );
00513 
00514  
00525   EXTERN int intwf_setfunction( intwf_t *w, 
00526                                 int (*wffun)( double t, int, double* ),
00527                                 int npars, double *par );
00528   
00529 
00537   EXTERN int intwf_copy( intwf_t *copy, intwf_t *src );
00538 
00539 
00543   EXTERN intwf_t* intwf_copy_new( intwf_t *w );
00544 
00545 
00555   EXTERN int intwf_subset( intwf_t *sub, intwf_t *w, int i1, int i2 );
00556 
00557 
00561   EXTERN int intwf_reset( intwf_t *w ); 
00562 
00563 
00567   EXTERN void intwf_delete( intwf_t *w );
00568   
00569 
00576   EXTERN doublewf_t* doublewf_cast_new( intwf_t *w );
00577 
00578 
00584   EXTERN int doublewf_cast( doublewf_t *w, intwf_t *iw );
00585 
00586 
00594   EXTERN int intwf_compat( intwf_t *w1, intwf_t *w2 );
00595 
00596   
00602   EXTERN int intwf_add( intwf_t *w1, intwf_t *w2 );
00603 
00604 
00610   EXTERN int intwf_subtract( intwf_t *w1, intwf_t *w2 );
00611 
00612 
00618   EXTERN int intwf_multiply( intwf_t *w1, intwf_t *w2 );
00619 
00620 
00627   EXTERN int intwf_divide( intwf_t *w1, intwf_t *w2 );
00628 
00629 
00635   EXTERN int intwf_scale( int f, intwf_t *w );
00636 
00637 
00643   EXTERN int intwf_bias( int c, intwf_t *w );
00644 
00645 
00654   EXTERN int intwf_add_cwtone( intwf_t *w, double amp, double phase, double freq,
00655                                double phasenoise );
00656 
00657   
00671   EXTERN int intwf_add_dcywave( intwf_t *w, double amp, double phase, double freq, 
00672                                 double ttrig, double tdcy, double phasenoise );
00673   
00674   
00679   EXTERN int intwf_add_ampnoise( intwf_t *w, double sigma );
00680 
00681   
00682 
00690   EXTERN int intwf_basic_stats( intwf_t *w, int s0, int s1, wfstat_t *stats );
00691 
00692 
00696   EXTERN int intwf_derive( intwf_t *w );
00697 
00701   EXTERN int intwf_integrate( intwf_t *w );
00702 
00703 
00709   EXTERN void intwf_print( FILE *of, intwf_t *w );
00710 
00711 
00719   EXTERN int intwf_getvalue( intwf_t *w, double t, unsigned int mode );
00720   
00721 
00734   EXTERN int intwf_resample( intwf_t *w2, double fs, intwf_t *w1, unsigned int mode );
00735 
00736 
00737 
00738   // complexwf_t handling routines ----------------------------------------------
00739 
00744   EXTERN complexwf_t* complexwf( int ns, double fs );
00745 
00749   EXTERN complexwf_t* complexwf_copy_new( complexwf_t *w );
00750 
00758   EXTERN int complexwf_copy( complexwf_t *copy, complexwf_t *src );
00759 
00769   EXTERN int complexwf_subset( complexwf_t *sub, complexwf_t *w, int i1, int i2 );
00770 
00771 
00778   EXTERN int complexwf_setvalues( complexwf_t *w, complex_t *x );
00779 
00790   EXTERN int complexwf_setfunction( complexwf_t *w, 
00791                                     complex_t (*wffun)( double, int, double* ),
00792                                     int npars, double *par );
00793 
00797   EXTERN int complexwf_reset( complexwf_t *w );
00798 
00802   EXTERN void complexwf_delete( complexwf_t *w );
00803 
00811   EXTERN int complexwf_compat( complexwf_t *w1, complexwf_t *w2 );
00812 
00818   EXTERN int complexwf_add( complexwf_t *w1, complexwf_t *w2 );
00819 
00825   EXTERN int complexwf_subtract( complexwf_t *w1, complexwf_t *w2 );
00826 
00832   EXTERN int complexwf_multiply( complexwf_t *w1, complexwf_t *w2 );
00833 
00834   
00840   EXTERN int complexwf_divide( complexwf_t *w1, complexwf_t *w2 );
00841 
00842 
00848   EXTERN int complexwf_scale( complex_t f, complexwf_t *w );
00849 
00850 
00856   EXTERN int complexwf_bias( complex_t c, complexwf_t *w );
00857 
00858 
00869   EXTERN int complexwf_add_cwtone( complexwf_t *w, double amp, double phase, double freq,
00870                                    double phasenoise );
00871   
00872 
00889   EXTERN int complexwf_add_dcywave( complexwf_t *w, double amp, double phase, double freq, 
00890                                     double ttrig, double tdcy, double phasenoise );
00891  
00897   EXTERN int complexwf_add_noise( complexwf_t *w, double sigma );
00898 
00899 
00905   EXTERN int complexwf_add_ampnoise( complexwf_t *w, double sigma );
00906 
00907 
00913   EXTERN int complexwf_add_phasenoise( complexwf_t *w, double sigma );
00914 
00915 
00921   EXTERN void complexwf_print( FILE *of, complexwf_t *w );
00922 
00930   EXTERN int complexwf_getreal( doublewf_t *re, complexwf_t *z );
00931 
00939   EXTERN int complexwf_getimag( doublewf_t *im, complexwf_t *z );
00940 
00948   EXTERN int complexwf_getamp( doublewf_t *r, complexwf_t *z );
00949 
00957   EXTERN int complexwf_getphase( doublewf_t *theta, complexwf_t *z );
00958 
00965   EXTERN doublewf_t* complexwf_getreal_new( complexwf_t *z );
00966 
00973   EXTERN doublewf_t* complexwf_getimag_new( complexwf_t *z );
00974 
00981   EXTERN doublewf_t* complexwf_getamp_new( complexwf_t *z );
00982 
00989   EXTERN doublewf_t* complexwf_getphase_new( complexwf_t *z );
00990 
00998   EXTERN int complexwf_setreal( complexwf_t *z, doublewf_t *re );
00999 
01007   EXTERN int complexwf_setimag( complexwf_t *z, doublewf_t *im );
01008 
01009 
01010 #ifdef __cplusplus
01011 }
01012 #endif
01013 
01014 #endif /* #ifndef __BPMWAVE_H_LOADED */
01015 
01016 /* ========================== end of file 'bpm_wave.h' ==================== */

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