Bonjour j'ai quelques incompréhensionsde la façon dont est gérer la TdF sous matlab.
Si je prends une fonction super classique du style : x(t) = exp(-a*abs(t))
en calculant à la main la TdF est : X(f) = (2*a) / (a²+(2*Pi*f )²)
Or quand je compare les courbes de celle que j'ai calculé à la main et de la TdF déterminé par approximation avec : fx = fftshift(Te * fft(x))
c'est très différent, je mets le code à disposition si vous voulez voir ce que ça donne car je ne comprends pas du tout d'où ça vient.
Je veux bien que ça soit une méthode approchée, mais de là à avoir des oscillations et des valeurs négatives, je ne trouve pas ça très approché de ma TdF à la main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 clear all a = 1; f0 = 5; tdebut = -5; tfin = 5; Te = 0.01; t = tdebut:Te:tfin; fdebut = -5; ffin = 5; Fe = 0.01; f = fdebut:Fe:ffin; % f = t ... x = exp(-a.*abs(t)); X = 2*a./(a.^2+4*pi^2*f.^2); fx = fftshift(Te * fft(x)); % approximation de la TF xt = abs(ifft(fx)/Te); % TF inverse subplot (4,1,1); plot(t,x); subplot (4,1,2); plot(f,X); subplot (4,1,3); plot(f,fx); subplot (4,1,4); plot(f,xt); if xt == x disp('true'); else disp('false'); end
Toujours dans la même optique si je fais une TdF (que je noterais xt) inverse je retrouve grosso modo la forme de mon signal x(t) (que je noterais x) d'origine mais si je fais un test de style
Il m'affiche false donc là aussi je pige pas trop, je me dis que ça doit venir de la TdF approchée alors la TdF inverse d'un truc approché ça doit pas être le même que la fonction de départ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if xt == x disp('true'); else disp('false'); end
Enfin un dernier truc que je ne comprends pas encore en lien avec la TdF, si je prends un son en wav et que je l'intègre dans une matrice avec wavread. Comme par exemple :
Première chose que je ne comprends pas, mon vecteur y, aura une certaine length, mais cela me dit pas le temps en seconde si je veux représenter l'amplitude en fct du temps du signal de départ mais l'amplitude en fonction de la taille de la matrice na ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [y, Fs, nbits] = wavread('son'); FFT_y = fftshift(fft(y)); % il me semble que la période d'échantillonnage 1/Fs n'est pas requise pour réaliser la TdF mais sans certitude plot (abs(FFT_y));
Deuxième chose dans le même acabit, pour la TdF obtenue (mais je ne suis pas sur que ce soit la bonne ligne de commande), l'Amplitude obtenue n'est pas bonne (genre 6000 fois celle du signal temporel ça me paraît louche), et l'échelle en abscisses va toujours correspondre à la taille du vecteur comment faire pour obtenir la bonne échelle fréquentielle ?
Merci d'avance et désolé pour la longueur du sujet![]()
Partager