Dagnir El Che vive | J'essaye de retrouver le spectre d'un signal en utilisant les dct et idct de Matlab.
Le problème c'est que quand j'échantillone le signal le spectre que je trouve est décalé.
Par exemple je me crée un spectre en gaussienne centré sur 1500GHz, avec une résolution de 0.05GHz
Code :
- e = 0.05*GSI;
- spectrum.center = 1500*GSI;
- spectrum.range = 50*GSI;
- spectrum.amplitude = 1;
- f = 0:e:50*spectrum.center;
- spectrum.val = spectrum.amplitude * exp(-((f-spectrum.center)/spectrum.range).^2);
|
Je calcule ensuite le signal qui lui est associé avec idct et je met une échelle de temps linéaire
Code :
- [tps, InSignal] = S2R(spectrum.val, f);
- function [t, r] = S2R(s, f)
- df = f(2) - f(1);
- tmax = 1 / (2*df);
- t = tmax * linspace(0, 1, size(s, 2));
- r = idct(s')';
|
Si je fais la dct de InSignal avec une mise à l'échelle similaire, je retombe bien sur le spectre d'origine.
Par contre si je fais la même chose mais en prenant par exemple un point sur 8 du signal, pour simuler un sampling, et que je fais la DCT de ce signal "échantilloné", les fréquences sont décalées vers les basses fréquences.
Par exemple
Code :
- [frequence spectre] = R2S(InSignal, tps);
- [frequence2 spectre2] = R2S(InSignal(1:8:floor(length(t)/8)), tps(1:8:floor(length(t)/8)));
- plot(frequence, spectre, 'r')
- hold on
- plot(f, spectrum.val, 'k')
- plot(frequence2, spectre2,'g')
- function [f, s] = R2S(r, t)
- T = t(2) - t(1);
- fmax = 1 / (2*T);
- f = fmax * linspace(0, 1, size(r, 2));
- s = dct(r')';
|
J'obtiens ca
J'ai aussi essayé de sampler plus de points qu'il n'y en a dans InSignal (en faisant une interpolation linéaire) et dans ce cas le maximum du spectre obtenu est très légèrement décalé mais vers la droite.
Si par contre je prends un spectre rectangulaire ou des raies (InSignal = somme de quelques cosinus), je ne vois pas de décalage quelque soit l'intervalle entre les points que je prends.
Je pense que ca viens d'un problème d'échelle puisqu'en principe l'intervalle entre les points samplés influe sur la fréquence maximale su spectre, pas sur la résolution. Mais j'ai utiliser le meme principe que ce qui est donné en exemple dans l'aide sur la fft pour créer les échelles, donc je suis assez perdu, quelqu'un pourrait m'orienter ? Message édité par Dagnir le 15-09-2009 à 13:38:46 ---------------
Nous vous souhaitons de beaux rêves, c'est le cinéma gratuit.
|