1 | // Dominique YVON, CEA/DAPNIA/SPP 02/2000
|
---|
2 |
|
---|
3 | #include "macenvvariables.h"
|
---|
4 | #include "tabulatedfilter.h"
|
---|
5 |
|
---|
6 | NumRecipes TabulatedFilter::NR;
|
---|
7 | static unsigned long LastfreqIndex;
|
---|
8 |
|
---|
9 | TabulatedFilter::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 |
|
---|
42 | TabulatedFilter::~TabulatedFilter()
|
---|
43 | { NR.free_vector(Transmi,1,nbSample);
|
---|
44 | NR.free_vector(frequency,1,nbSample);
|
---|
45 | }
|
---|
46 |
|
---|
47 | double 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 |
|
---|
64 | void 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 | } |
---|