Bonjour
Je voudrais écrire un code en matlab qui permet de calculer la fft d'un signal enregistré et son taux de distorsion THD, j'ai commencé donc par un signal simple cos
c'est bon pour la fft mais je trouve un THD>100% et ça m’inquiète ça vient peut être de la formule de THD que j'utilise ? puis que je ne sais pas comment extraire l'amplitude du fondamentale, j'ai choisi de détecter le max et de le retrancher à la somme des carrées des amplitudes.
Merci de me donner votre avis
ci joint le code que j'ai écrit.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%%%%% Calcul de la FFT pour un exemple simple%%%
close all
Hz=1;
F= 3000*Hz; %%% fréquence d'échantilonnage
N=2048; %%% nombre d'échantillons
t=0:1/F:(N-1)/F; %%% génération du vecteur temps
n=0:N/2; %% génération du vecteur des index d'échantilonnage 
f=0:F/N:0.5*F; %%générartion de la moitié du vecteur  fréquence
 
%x= cos(2*pi*50.*t)+cos(2*pi*150.*t)+cos(2*pi*300.*t); % signal à analyser
%x = awgn(x,15); %%% ajouter au signal un bruit de 15db
 
x= cos(2*pi*50.*t);
 
figure 
plot(t*1000,x)
xlabel('temps (s)');
ylabel('x(t)');
xlim([0,100]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
X=fft(x)/N; %transformée de fourier du signal x
X=2*abs(X);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
figure
stem(f,X(1:N/2+1)); %%Transforméé de fourier en fonction de la fréquence
xlabel('Fréquence (Hz)');
ylabel('X(f)');
xlim([0,400]);
grid
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Calcul du taux de distorsion du courant%%%%%%%%%%%
THD=0; %%% initialisation
 
for k=1:N
 
       THD=THD+X(k)^2;
 
end
I1=max(X);
 
THD=THD-I1^2;%%% valeur efficace sans le fondamental
 
THD=(sqrt(THD))/I1; 
THD=100*THD; %%%% taux de distorsion en pourcent