source: Sophya/trunk/SigPredictor/Tabulatedfilter.cc

Last change on this file was 801, checked in by ansari, 25 years ago

Fichiers au format unix

dominique

File size: 1.9 KB
Line 
1 // Dominique YVON, CEA/DAPNIA/SPP 02/2000
2
3#include "macenvvariables.h"
4#include "tabulatedfilter.h"
5
6NumRecipes TabulatedFilter::NR;
7static unsigned long LastfreqIndex;
8
9TabulatedFilter::TabulatedFilter(char filename[])
10{ LastfreqIndex=0;
11 FILE* pfile;
12// char fileCur[150];
13
14 // On lit le tableau des abscisses
15 pfile=fopen(filename,"r");
16 if (pfile==NULL)
17 { cerr<< "Erreur a l'ouverture du fichier de donnees :"<<filename<< endl;
18 exit(-1);
19 }
20 // On lit le nombre d'echantillons
21 double nbreEchantillon;
22 fscanf(pfile,"%le",&nbreEchantillon);
23 nbSample=(long) nbreEchantillon;
24 Transmi= NR.vector(1,nbSample);
25 frequency=NR.vector(1,nbSample);
26
27 double freq, filtretrans;
28 for(int i=1; i<=nbSample; i++)
29 { fscanf(pfile,"%le%le",&freq,&filtretrans);
30 frequency[i]=freq;
31 Transmi[i]=filtretrans;
32 }
33
34 _numin=1.e99;
35 _numax=0.;
36 for(int i=1; i<=nbSample; i++)
37 { if(_numin>frequency[i]) _numin=frequency[i];
38 if(_numax<frequency[i]) _numax=frequency[i];
39 }
40}
41
42TabulatedFilter::~TabulatedFilter()
43{ NR.free_vector(Transmi,1,nbSample);
44 NR.free_vector(frequency,1,nbSample);
45}
46
47double TabulatedFilter::transmission(double freq) const
48{
49 if((freq<_numin)||(freq>_numax)) return 0.;
50
51 NR.hunt(frequency,nbSample,freq,&LastfreqIndex);
52 if((LastfreqIndex==0)||(LastfreqIndex==nbSample)) return 0.;
53 else
54 { double Transinf=Transmi[LastfreqIndex];
55 double Transsup=Transmi[LastfreqIndex+1];
56 double slope=(Transsup-Transinf)/(frequency[LastfreqIndex+1]-frequency[LastfreqIndex]);
57 double retVal=Transinf+slope*(freq-frequency[LastfreqIndex]);
58 return retVal;
59 }
60}
61
62#include <fstream>
63
64void TabulatedFilter::TraceFiltre(ostream& strOut, long nbPoint)
65{ cout<<"On trace un TabulatedFilter"<<endl;
66 strOut<<"Frequence(Hz)"<<'\t'<<"Transmission"<<endl;
67
68 double pasFreq= (_numax-_numin)/nbPoint;
69 double freq;
70 for(long i=0; i<nbPoint; i++)
71 { freq=_numin+pasFreq*i;
72 strOut<<freq<<'\t'<<transmission(freq)<<endl;
73 }
74 return;
75}
Note: See TracBrowser for help on using the repository browser.