pierrot7777 | Bonjour,
Je suis en train d'ecrire un programme qui effectue entre autre du traitement de donnees.
Je dois calculer la magnitude de deux vecteurs, j'ai pour cela ecrit une fonction Magnitude, que j'utilise de la maniere suivante :
Code :
- MagnitudeBgT= Magnitude(BgTLp,BgT_size,RedFactor,Nfft);
- MagnitudeTemplate = Magnitude(TemplateLp,Template_size,RedFactor,Nfft);
|
Je ne pense pas que cela soit tres important mais ci-dessous vous trouverez l'implementation de la fonction.
Peu importe les parametres, toujours est-il que la fonction renvoit des resultats corrects la premiere fois (ici donc le tableau MagnitudeBgT sera rempli correctement), tandis que le second tableau ne le sera pas (premiere case du tableau non nulle puis que des zeros).
Si j'ordonne mes lignes dans ce sens:
Code :
- MagnitudeTemplate = Magnitude(TemplateLp,Template_size,RedFactor,Nfft);
- MagnitudeBgT= Magnitude(BgTLp,BgT_size,RedFactor,Nfft);
|
C'est exactement l'inverse ! MagnitudeTemplate est correctement rempli mais pas MagnitudeBgT...
Est ce que l'appel d'une fonction peut la modifier ??? Voici le code de la fonction
Code :
- double* Magnitude(double* input,int len_input,float fact_red,int nfft)
- {
- complex_t * datafft = new complex_t[nfft];
- complex_t * resfft = new complex_t[nfft];
- double* magnitude = new double[nfft/2]; //we keep only half of the spectrum since it is symetric
- double E=1; //total energy
- datafft[0].im = 0;
- datafft[0].re = input[0]/nfft;
- if(nfft > len_input)
- {
- for(int n = 1;n<len_input;n++) //filter to increase high frequencies. fact_red must be between 0 and 1. 0.7 gives good results.
- {
- datafft[n].im = 0;
- datafft[n].re = (input[n] - fact_red*input[n-1])/nfft;
- }
- for(int n = len_input;n<nfft;n++) //filter to increase high frequencies. fact_red must be between 0 and 1. 0.7 gives good results.
- {
- datafft[n].im = 0;
- datafft[n].re = 0;
- }
- }
- else
- {
- for(int n = 1;n<nfft;n++) //filter to increase high frequencies. fact_red must be between 0 and 1. 0.7 gives good results.
- {
- datafft[n].im = 0;
- datafft[n].re = (input[n] - fact_red*input[n-1])/nfft;
- }
- }
- resfft = FFT_simple(datafft,nfft);
- for(int n = 0;n<nfft/2;n++)
- {
- magnitude[n] = module(resfft[n]);
- }
- E = sum(magnitude,0,nfft/2);
- for(int n = 1;n<nfft/2;n++)
- {
- magnitude[n] = magnitude[n]/E;
- }
- return magnitude;
- }
|
Merci pour votre aide !
|