Bonjour j'ai quelques incompréhensions de 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.

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
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.

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
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
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.

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 :

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));
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 ?

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