README <= | FREQ1 : phaseurs | => FREQ2 | $\ | $ |
---|---|---|---|---|
Pour tout exécuter cliquez sur le bouton play en haut de ce notebook. Pour exécuter juste une cellule de code :
Faites SHIT+ENTER pour exécuter une cellule et passer à la suivante
$ \mathcal{R}\!\!\left[z_n.e^{i.\omega_n.t}\right] = \quad \quad c_n.e^{i\omega_n.t} + \overline{c_n}.e^{-i\omega_n.t} \quad \quad = a_n.cos(\omega_n.t)+b_n.\sin(\omega_n.t) \quad= A_n.\cos{(\omega_n.t+\varphi_n} )$
ne vous posent pas de problème :
=> sautez direct au petits exos de 2IMACS pour vérifier que tout va bien.
2) Peut-être que les sommes partielle de Fourier et représentations spectrales ne vous posent pas de problème et
=> sautez direct à l'exercice global
Peut-être vous avez le temps de revoir tout ça et lisez tout...
On peut représenter l'onde complexe $t\mapsto e^{i.\omega.t}$ (notée en bref $e^{i.\omega.\bullet}$) dans le plan complexe (vision phaseur/Fresnel) ou la projeter sur les réels pour obtenir un cosinus.
t=-0.5:0.01:1.1;
f=1;
w = exp(i*2*pi*f*t);
Zi = 1;
plot(t,real(Zi*w),'b');
grid on; hold on;
plot(t,imag(Zi*w),'r');
xlabel('temps [s]');
legend(["partir reelle";"partir imaginaire"]);
On comprend parfaitement ici la formule d'Euler appliquée à l'onde complexe : $e^{i\omega.t}=\cos(i\omega.t) + i.\sin(\omega.t)$.
Le cosinus est la partie réelle d'un nombre complexe qui tourne sur le cercle unité :
Un phaseur $z$ est un nombre complexe qui va être multiplié à l'onde complexe $e^{i\omega\bullet}$.
$A\cos\left(\omega.t+\varphi\right) \quad=\quad \mathcal{R}\!\!\left[z.e^{i.\omega.t}\right]$
En représentation polaire $z=A.e^{i\varphi}$ :
Pour les produits complexes, les modules se multiplient et les arguments s'ajoutent (comme les arguments d'une exponentielle : d'où l'idée d'Euler de la notation $e^{i\theta}$).
$\mathcal{R}\!\!\left[z.e^{i.\omega.t}\right] = \mathcal{R}\!\!\left[A.e^{i\varphi}.e^{i.\omega.t}\right] = \mathcal{R}\!\!\left[A.e^{i.(\omega.t+\varphi)}\right] = A.\mathcal{R}\!\!\left[e^{i.(\omega.t+\varphi)}\right] = A.\cos(\omega.t+\varphi)$
L'onde multipliée aura ainsi un déphasage de $\varphi$ par rapport à l'onde de base $e^{i\omega\bullet}$ e tune amplitude A
Le phaseur appelé $z_I$ pour In phase (avec le cosinus), qui donnera les $a(n)$ des Séries de Fourier, est celui qui permet d'obtenir un cosinus en partie réelle :
$z_I=1$ car la partie réelle de $e^{i\omega.t}$ est déjà un cosinus.
Car $1=1.e^{i.0}$ ce qui fait bien une amplitude 1 et une phase nulle pous $cos(\omega.t)$
Le phaseur appelé $z_Q$ pour Quadrature (avec le cosinus), qui donnera les b(n) des SdF, est celui qui permet d'obtenir un sinus en partie réelle.
À vous de trouver la valeur du phaseur $z_Q$ donnant un sinus en partie réelle.
La valeur proposée Zq = 2j+1
n'est pas la bonne car $2i+1 = \sqrt{3}.e^{i.\textrm{atan}(2)}$ donne :
# A VOUS DE TROUVER Zq = ? donnant le sinus
Zq = 2j+1; # Modifiez ce nombre complexe et SHIFT + ENTREE pour voir
t = 0:0.01:0.9; w = exp(i*2*pi*f*t);
subplot(121);
plot(real(Zi*w),imag(Zi*w),'b'); hold on;
plot(real(Zq*w),imag(Zq*w),'r'); grid on;
plot(real(Zi),imag(Zi),'ob'); xlabel('reels');
plot(real(Zq),imag(Zq),'or'); ylabel('imag.');
axis("square");
subplot(122);
plot(t,real(Zi*w),'b'); hold on;
plot(t,real(Zq*w),'r'); grid on;
plot(0,real(Zi),'ob');
plot(0,real(Zq),'or');
axis("square");
Déroulez la cellule pour avoir la réponse.
Le phaseur est donc un vecteur du plan complexe représenté à l'instant $t=0$. Ce vecteur tourne en étant multiplié par $e^{i\omega t}$ créant une onde complexe dont la partie réelle est le signal réel représenté. En représentation I, Q le phaseur est décomposé en :
Il fallait donc mettre Zq = -j
dans le code Octave
On peut représenter n'importe quelle onde déphasée et amplifiée sous forme d'un cosinus + un sinus.
En télécom c'est la représentation IQ et ce sont nos fameux coefficient $a(n)$ et $b(n)$ d'une série de Fourier : $A.cos(\omega.t+\varphi) = a.\cos(\omega.t) + b.\sin(\omega.t) = a.\mathcal{R}\!\!\left[z_I.e^{i\omega.t} \right] + b . \mathcal{R}\!\!\left[z_Q.e^{i\omega.t}\right] = \mathcal{R}\!\!\left[(a.z_I + b.z_Q).e^{i\omega.t} \right]$
Pour les séries de Fourier on utilise des pulsations multiples d'une pulsation fondamentale $\omega_0$ et pour chaque multiple de rang $n$ de pulsation $\omega_n = n.\omega_0$ on aura une onde déphasée représentée par deux coefficients $a(n)$ et $b(n)$ :
$A_n . cos(\omega_n.t+\varphi_n) = a(n).\cos(\omega_n.t) + b(n).\sin(\omega_n.t)= a(n).\mathcal{R}\!\!\left[z_I.e^{i\omega.t} \right] + b(n) . \mathcal{R}\!\!\left[z_Q.e^{i\omega.t}\right] = \mathcal{R}\!\!\left[(a(n).z_I + b(n).z_Q).e^{i\omega.t} \right]$
Diable ! les valeurs 666
ne sont pas les bonnes...
À vous de :
%% Exemple de somme IQ ou a(n) b(n)
F0 = 2 ; w0=2*pi*F0; % fréquence fondamentale d'une série de Fourier
n = 1; wn = n*w0; % rang de la composante n
an = sqrt(3)/n % coefs de Fourier
bn = (-1)^n/n
%% VOTRE CODE qui affiche la composante de rang n.
%% VOTRE mesure graphique de l'amplitude et de la phase.
A_n = 666 % mesure de l'amplitude
Phi_n =pi/666 % mesure de la phase
an = 1.7321 bn = -1 A_n = 666 Phi_n = 0.0047171
Déroulez la cellule pour voir
%% Exemple de somme IQ ou a(n) b(n)
F0 = 2 ; w0=2*pi*F0; % fréquence fondamentale d'une série de Fourier
n = 1; wn = n*w0; % rang de la composante n
an = sqrt(3)/n % coefs de Fourier
bn = (-1)^n/n
%% VOTRE CODE qui affiche la composante de rang n.
T0 = 1/F0;
t = -0.5:0.01:T0;
plot(t,an*cos(wn*t)+bn*sin(wn*t));
grid on;
xlabel("temps [s]")
ylabel("signal [V]")
%% VOTRE mesure graphique de l'amplitude et de la phase.
A_n = 2 % mesure de l'amplitude
% Le maximum (-tm,2) est en avance de l'instant 0 à environ
tm = -0.04;
hold on; plot(tm,2,'or');
% L'écart de temps par rapport à 0 est donc
Dt = 0 - tm;
% ce qui fait un déphasage Dt/T0 * 2pi
Phi_n =Dt/T0*2*pi % mesure de la phase v[rad]
Phi_n_deg = Phi_n * 180/pi % en degrés
% déphasage positif car l'onde est en avance sur le cosinus
an = 1.7321 bn = -1 A_n = 2 Phi_n = 0.50265 Phi_n_deg = 28.800
Dans une somme $a(n).\cos(\omega_n.t) + b(n).\sin(\omega_n.t)$ il suffit de faire la somme des phaseurs pour avoir la représentation IQ :
$a(n).\mathcal{R}\left(z_I.e^{i.\omega_n.t}\right) + b(n).\mathcal{R}\left(z_Q.e^{i.\omega_n.t}\right) = \mathcal{R}\left(\overbrace{(a(n).z_I+b(n).z_Q)}^{z_n}.e^{i.\omega_n.t}\right)$
On décompose alors $z_n = a(n).z_I + b(n).z_Q = a(n) -i. b(n)$ pour obtenir $s(t) = a(n).\cos(\omega_n.t) + b(n).\sin(\omega_n.t)= \mathcal{R}\left(z_n.e^{i.\omega_n.t}\right)$
Ajouter deux ondes, c'est ajouter leurs phaseurs et inversement :
\( \begin{array}{c} y(t) = \overbrace{A.e^{i\varphi}}^{\text{phaseur } z_y}.e^{i.\omega t} \in \mathbb{C} \\ s(t) = \mathcal{R}\left(y(t)\right) \in \mathbb{R} = A\cos(\omega t + \varphi) \\ \\ \mathcal{R}\left(y_1(t)=z_1.e^{i\omega t}\right) = A_1\cos(\omega t + \varphi_1) \\ \mathcal{R}\left(y_2(t)=z_2.e^{i\omega t}\right) = A_2\cos(\omega t + \varphi_2) \\ y(t) = y_1(t) + y_2(t) = \underbrace{(z_1+z_2)}_{z}.e^{i\omega t} \in \mathbb{C} \\ \\ z = z_1 + z_2 \text{ constantes complexes}\\\mathcal{R}\left(y=y_1+y2\right) = \mathcal{R}\left(y_1\right) + \mathcal{R}\left(y_2\right) \\ A\cos(\omega t + \varphi) = A_2\cos(\omega t + \varphi_2) + A_1\cos(\omega t + \varphi_1) \end{array} \) |
plot(t,an*cos(wn*t)+bn*sin(wn*t),'r'); hold on
%% 1 - VOTRE CODE zn = f(an,bn)
Zi = 1;
Zq = -i; % fameux signe - du phaseur Q
zn = an + bn;
%% 2- VOTRE affichage du signal temporel
% Restez bien réels !
plot(t,t,'k');
% le rouge et le noir ne s'épousent-ils pas ?
grid on;
xlabel("temps [s]")
ylabel("signal [V]")
%% 3 - VOTRE calcul de l'amplitue et phase à partir de zn.
% pour les complexes : abs (module), angle(argument), real ,imag
A_n = real(zn) ;
Phi_n = acos(bn/an);
printf("An = %f \t et on doit avoir environ 2\n",A_n)
printf("Phase = %f (deg) \t et on doit avoir environ +29 degrés\n",Phi_n*180/pi)
An = 0.732051 et on doit avoir environ 2 Phase = 125.264390 (deg) et on doit avoir environ +29 degrés
Déroulez la cellule cachée ici
an
bn
t=0:0.01:2;
plot(t,an*cos(wn*t)+bn*sin(wn*t),'r-o'); hold on;
%% 1 - VOTRE CODE zn = f(an,bn)
Zi=1; Zq = -i;
zn = an*Zi + bn * Zq ; %on ajoute les phaseurs
zn = an -i* bn % ce qui donne le fameux signe - !
%% 2- VOTRE affichage du signal temporel
% Restez bien réels !
plot(t,real(zn*exp(i*wn*t)),'k');
% le rouge et le noir ne s'épousent-ils pas ?
grid on;
xlabel("temps [s]")
ylabel("signal [V]")
%% 3 - VOTRE calcul de l'amplitue et phase à partir de zn.
% pour les complexes : abs (module), angle(argument), real ,imag
A_n = abs(zn) ;
Phi_n = atan(bn/an) % est faux ! => piège du Zq = -i
Phi_n = angle(zn)
printf("An = %f \t et on doit avoir environ 2\n",A_n)
printf("Phase = %f (deg) \t et on doit avoir environ +29 degrés\n",Phi_n*180/pi)
an = 1.7321 bn = -1 zn = 1.7321 + 1.0000i Phi_n = -0.52360 Phi_n = 0.52360 An = 2.000000 et on doit avoir environ 2 Phase = 30.000000 (deg) et on doit avoir environ +29 degrés
La partie réelle d'une onde complexe peut être obtenue par la somme de deux conjugués $e^{i.\omega_n.t}$ et $e^{-i.\omega_n.t}$ : car $2.\mathcal{R}(z) = z + \overline{z}$
On fait apparaître une fréquence négative -$\omega_n$, car ce sont des ondes imaginaires qui s'ajoutent pour donner une onde réelle.
Ainsi pour une composante de rang n d'une série nous avons 4 représentations :
$ \mathcal{R}\!\!\left[z_n.e^{i.\omega_n.t}\right] = \quad \quad c_n.e^{i\omega_n.t} + \overline{c_n}.e^{-i\omega_n.t} \quad \quad = a_n.cos(\omega_n.t)+b_n.\sin(\omega_n.t) \quad= A_n.\cos{(\omega_n.t+\varphi_n} )$
Les composantes d'une série de Fourier étant des ondes complexes, on peut les représenter en phaseur, IQ et aussi en somme de conjugués car :
$s(t) = \mathcal{R}\left(z.e^{i\omega t}\right) = \frac{z.e^{i\omega t} + \overline{z.e^{i\omega t}}}{2} = \underbrace{\frac{z}{2}}_{c(n)}.e^{i\omega t} + \underbrace{\frac{\overline{z}}{2}}_{c(-n)}.e^{-i\omega t}$
Remarquez que pour qu'une onde soit réelle dans la représentation complexe $c(n).e^{i n \omega_0 t}+c(-n).e^{-i n \omega_0 t}$ *pour tout t*, il faut que $c(n).e^{i n \omega_0 t}$ soit le conjugué de $c(-n).e^{-i n \omega_0 t}$ ce qui impose :
Donnez la représentation en c(n) de l'onde précédente.
an
bn
zn = an -i* bn
A_n = abs(zn) ;
Phi_n = angle(zn)
%% VOTRE CODE cn=
c_n = an;
c_moins_n = -an
t=0:0.01:2;
plot(t,A_n*cos(wn*t+Phi_n),'g'); hold on;
plot(t,real(zn*exp(i*wn*t)),'k');
plot(t,an*cos(wn*t)+bn*sin(wn*t),'ro');
%% VOTRE affichage de la représentation en c(n) en "bleu avec des +"
% le rouge et le noir, le vert et le bleu ne s'épousent-ils pas ?
grid on;
xlabel("temps [s]")
ylabel("signal [V]")
an = 1.7321 bn = -1 zn = 1.7321 + 1.0000i Phi_n = 0.52360 c_moins_n = -1.7321
Déroulez la cellule cachée ici
an
bn
zn = an -i* bn
A_n = abs(zn) ;
Phi_n = angle(zn)
%% VOTRE CODE cn=
c_n = zn/2
c_n= an/2-i*bn/2
c_moins_n = conj(c_n)
c_moins_n = an/2+i*bn/2
t=0:0.01:2;
plot(t,A_n*cos(wn*t+Phi_n),'g'); hold on;
plot(t,real(zn*exp(i*wn*t)),'k');
plot(t,an*cos(wn*t)+bn*sin(wn*t),'ro');
%% VOTRE affichage de la représentation en c(n) en "bleu avec des +"
% le rouge et le noir, le vert et le bleu ne s'épousent-ils pas ?
s_n = c_n*exp(i*wn*t);;
s_moins_n = c_moins_n*exp(-i*wn*t);
s = s_n + s_moins_n;
plot(t, s,'b+')
grid on;
xlabel("temps [s]")
ylabel("signal [V]")
%% VOTRE CODE qui vérifie que le signal est bien réel
s_i = imag(s); % on extrait la partie imaginaire et réelle
s_r = real(s); %
% On calcule la norme 2 par produit scalaire
energie_imaginaire = s_i*transpose(s_i)
energie_reelle = s_r*transpose(s_r)
an = 1.7321 bn = -1 zn = 1.7321 + 1.0000i Phi_n = 0.52360 c_n = 0.86603 + 0.50000i c_n = 0.86603 + 0.50000i c_moins_n = 0.86603 - 0.50000i c_moins_n = 0.86603 - 0.50000i energie_imaginaire = 0 energie_reelle = 403.00
On peut visualiser le phaseur qui tourne et les deux ondes complexes conjuguées qui s'ajoutent pour faire sa partie réelle.
t = 0:0.01:0.1;
w = exp(i*wn*t);
%cercle unité
plot(cos(0:0.1:2*pi), sin(0:0.1:2*pi), 'k--'); hold on ;
plot(real(zn*w),imag(zn*w),'k'); % zn
plot(real(c_n*w),imag(c_n*w),'b'); % c(n)
plot(real(c_moins_n*exp(-i*wn*t)),
imag(c_moins_n*exp(-i*wn*t)),'r'); % c(-n)
plot([0, real(zn)],[0,imag(zn)],'ok');
plot(real(c_n),imag(c_n),'ob');
plot(real(c_moins_n),imag(c_moins_n),'or');
xlabel('reels');
ylabel('imag.');
legend(["cercle unite";"z(n)";"c(n)";"c(-n)"])
axis("square");
grid on;
Exercice Ch2-Ex2.2 a) :
Dans l'expression $(1+j).e^{i.10.t}$, vous retrouvez un phaseur $(1+j)$ qu'il est facile de décomposer en IQ (attention au signe !).
Dans le plan complexe l'amplitude $A$ et la phase $\phi$ se retrouvent facilement en écrivant le phaseur en coordonnées polaires : $i+j = \sqrt{2}.e^{i.\frac{\pi}{4}}$.
## VOS VALEURS manquantes à la place de "0.666"
clear all;
w = 0.666 % pulsation [rad/s]
A = 0.666 % amplitude [V]
phi = 0.666 *pi; % phase [rad]
printf("phi = 2 pi / %.0f\n",2*pi/phi)
z = 1+j % phaseur [V] complexe
a = 0.666 % I in phase ou a(n) [V]
b = 0.666 % Q Quadrature ou b(n) [V]
c_n = 0.666 % c(n) [V] complexe
c_moins_n = 0.666 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T/2;
plot(t,real(z*exp(i*w*t)), "k"); hold on;
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 0.66600 A = 0.66600 phi = 2 pi / 3 z = 1 + 1i a = 0.66600 b = 0.66600 c_n = 0.66600 c_moins_n = 0.66600
Déroulez la cellule cahcée ici
## CORRIGÉ
w = 10 % pulsation [rad/s]
A = sqrt(2) % amplitude [V]
phi = pi/4 ; % phase [rad]
printf("phi = 2 pi / %.0f\n",2*pi/phi)
z = 1+j % phaseur [V] complexe
a = 1 % I in phase ou a(n) [V]
b = -1 % Q Quadrature ou b(n) [V]
c_n = 1/2 + j/2 % c(n) [V] complexe
c_moins_n = 1/2 - j/2 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T/2;
plot(t,real(z*exp(i*w*t)), "k"); hold on;
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 10 A = 1.4142 phi = 2 pi / 8 z = 1 + 1i a = 1 b = -1 c_n = 0.50000 + 0.50000i c_moins_n = 0.50000 - 0.50000i
Exercice Ch2-Ex4 a) :
- Dans $\frac{1}{2}e^{i.2\pi.t+\frac{\pi}{3}}$, trouvez le phaseur en factorisant ce qui est constant dans le temps pour avoir la forme $Z.e^{i.\omega.t}$ avec $Z=\rho.e^{i.\varphi}\in\mathbb{C}$ le phaseur et $\omega\in\mathbb{R}$ la pulsation en rad/s
- Passez ce phaseur de la représentation polaire à la forme $R+i.I$ et trouvez ainsi le I (ou $a_n$) et le Q (ou $b_n$) permettant d'avoir $I\cos(\omega.t)+Q\sin(\omega.t)$
On doit obtenir une sinusoïde d'amplitude 0.5 avec $\frac{\pi}{3}$ d'avance de phase sur le cosinus, car
$\mathcal{R}\!\!\left(\frac{1}{2}.e^{2\pi.t+\frac{\pi}{3}}\right) = \frac{1}{2}.\cos\left(2\pi.t+\frac{\pi}{3}\right)$
## VOS VALEURS manquantes à la place de "0.666"
clear all;
w = 0.666 % pulsation [rad/s]
A = 0.666 % amplitude [V]
phi = 0.666 *pi; % phase [rad]
printf("phi = 2 pi / %.0f\n",2*pi/phi)
z = 0.666 % phaseur [V] complexe
a = 0.666 % I in phase ou a(n) [V]
b = 0.666 % Q Quadrature ou b(n) [V]
c_n = 0.666 % c(n) [V] complexe
c_moins_n = 0.666 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T/2;
plot(t,real(1/2*exp(i*(2*pi*t+pi/3))),'k.-');hold on;
plot(t,real(z*exp(i*w*t)), "kd-");
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["formule exo"; "phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 0.66600 A = 0.66600 phi = 2 pi / 3 z = 0.66600 a = 0.66600 b = 0.66600 c_n = 0.66600 c_moins_n = 0.66600
Déroulez la cellule cachée ici.
## VOS VALEURS manquantes à la place de "0.666"
w = 2*pi % pulsation [rad/s]
A = 0.5 % amplitude [V]
phi = pi/3 ; % phase [rad]
printf("phi = 2 pi / %.0f\n",2*pi/phi)
z = 0.25+i*sqrt(3)/4 % phaseur [V] complexe
a = 0.25 % I in phase ou a(n) [V]
b = -sqrt(3)/4 % Q Quadrature ou b(n) [V]
c_n = 0.125 + j*sqrt(3)/8 % c(n) [V] complexe
c_moins_n = 0.125 - j*sqrt(3)/8 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T;
plot(t,real(1/2*exp(i*(2*pi*t+pi/3))),'k.-');hold on;
plot(t,real(z*exp(i*w*t)), "kd-");
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["formule exo"; "phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 6.2832 A = 0.50000 phi = 2 pi / 6 z = 0.25000 + 0.43301i a = 0.25000 b = -0.43301 c_n = 0.12500 + 0.21651i c_moins_n = 0.12500 - 0.21651i
Exercice Ch2-Ex4 c) :
- Dans $\frac{\sqrt{3}}{2}.\cos\left(2\pi.t\right)+\frac{1}{2}.\sin\left(2\pi.t\right)$ vous avez directement la représentation IQ. Donnez le phaseur $Z_c=a + i.b$ en faisant attention au signe. Quelle doit être la période $T$[s], la fréquence $f$[Hz] et la pulsation $\omega$[rad/s] de ce signal.
- Passez ce phaseur à la représentation polaire $Z_c = \rho.e^{i.\varphi}= a+I.b$ et trouvez ainsi l'amplitude et le déphasage du cosinus $\rho .\cos\left(\omega.t+\varphi\right)$
## VOS VALEURS manquantes à la place de "0.666"
w = 0.666 % pulsation [rad/s]
A = 0.666 % amplitude [V]
phi = 0.666 % phase [rad]
printf("phi = 2 pi / %.1f",2*pi/phi)
z = 0.666 % phaseur [V] complexe
a = sqrt(3)/2 % I in phase ou a(n) [V]
b = 1/2 % Q Quadrature ou b(n) [V]
c_n = 0.666 % c(n) [V] complexe
c_moins_n = 0.666 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T/2;
plot(t,real(z*exp(i*w*t)), "k"); hold on;
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 0.66600 A = 0.66600 phi = 0.66600 phi = 2 pi / 9.4z = 0.66600 a = 0.86603 b = 0.50000 c_n = 0.66600 c_moins_n = 0.66600
Déroulez la cellule cachée ici
## VOS VALEURS manquantes à la place de "0.666"
w = 2*pi % pulsation [rad/s]
A = 1 % amplitude [V]
phi = -pi/6; % phase [rad]
printf("phi = 2 pi / %.1f\n",2*pi/phi);
z = sqrt(3)/2 -i/2 % phaseur [V] complexe
a = sqrt(3)/2 % I in phase ou a(n) [V]
b = 1/2 % Q Quadrature ou b(n) [V]
c_n = sqrt(3)/4-i/4 % c(n) [V] complexe
c_moins_n = sqrt(3)/4+i/4 % c(-n) [V] complexe
f=w/2/pi; T = 1/f; t=-T/2:T/20:T/2;
plot(t,real(z*exp(i*w*t)), "k"); hold on;
plot(t,A*cos(w*t+phi), "ro");
plot(t,a*cos(w*t)+b*sin(w*t), "b+");
plot(t,c_n*exp(i*w*t)+c_moins_n*exp(-i*w*t), "gd");
plot(t,cos(w*t),'k--');
tm = -phi/2/pi*T;
plot([0,tm,tm],[1,1,A],"k->")
text(tm,0.9,["Dt=1/",num2str(T/abs(tm)),".T"])
grid on;
legend(["phaseur";"ampli., phase";"a(n),b(n)";"c(n),c(-n)";"cos"])
w = 6.2832 A = 1 phi = 2 pi / -12.0 z = 0.86603 - 0.50000i a = 0.86603 b = 0.50000 c_n = 0.43301 - 0.25000i c_moins_n = 0.43301 + 0.25000i
Si l'on ajoute des phaseurs d'ondes qui ont des fréquences multiples d'une fréquence fondamentale $F_0$.
L'angle $\theta$ varie en fonction du temps $t$ et du rang $n$ : $$\theta = n.\omega_0.t=2\pi.n.F_0.t $$
rang | nom | $\theta$ |
---|---|---|
n=0 | composante continue | $\theta=0$ |
n=1 | fondamentale ou harmonique de rang 1 | $\theta=2\pi.F_0.t=\omega_0.t$ |
n=2 | 1ᵉ harmonique ou harmonique de rang 2 | $\theta=2\pi.2F_0.t=2.\omega_0.t$ |
n=3 | 2ᵉ harmonique ou harmonique de rang 3 | $\theta=2\pi.3F_0.t=3.\omega_0.t$ |
Ce code calcule la somme partielle des sinus de l'animation ci-dessus.
Complétez au fur et à mesure le code pour ajouter les représentations :
Le corrigé est dans l'exo 2 suivant
clear all;
F0=3;T0=1/F0; % Arbitraire ont est T0 périodique
Te = T0/50; % échantillonnage du temps
t=-T0:Te:T0; % on regarde deux périodes
theta = 2*pi*F0*t; % l'angle theta varie dans le temps
%amplitude des sinus de l'animation
Asin = [-2/pi, 2/2/pi, 2/-3/pi, 2/4/pi] ;
% F0 2F0 3F0 4F0
%% 1 - VOTRE CODE a= ... b=...
% On peut recopier des tableaux a = Asin
% faire des calculs vectorisés a = Asin/2 + i*Asin
a = Asin*0.666 ;
b = Asin*0.666 ;
% somme partielles : signaux nuls au départ
s_sin= s_an = t*0; %signaux réels
style = ["y"; "g"; "b"; "r"];
for n = 1:4
subplot(4,1,n) % 4 rangée de figure, 1colonne, on se met dans la figure n
% somme de sinus de l'animation
s_sin= s_sin + Asin(n) * sin(n*theta); hold on;
plot(t,s_sin, style(n));
% 1 - CORRIGER 2 ERREURs du calcul du signal à partir de a(n), b(n)
s_an = a(n) * cos(theta) + b(n) * sin(theta);
plot(t,s_an, [style(n),"o"]);
title(sprintf("Somme partielle de rang %d", n))
end
Le corrigé est dans l'exo 3 suivant
%% 1 - CORRIGÉ
a = Asin*0; % pas de cos
b = Asin ; % que des sin
%% 2 - VOTRE CODE z=... en phaseur
% idem on peut faire des calculs avec a et b...
% se rappeler du phaseur du coset du sin
z = i*0.666*a + 0.666*b ;
% somme partielles : signaux nuls au départ
y_phaseurs = t*0 ; % signal complexe à partir des phaseurs
s_sin= s_an = t*0; %signaux réels
style = ["y"; "g"; "b"; "r"];
for n = 1:4
subplot(4,1,n)
s_sin= s_sin + Asin(n) * sin(n*theta);
plot(t,s_sin, style(n)); hold on;
% 1 - CORRIGÉ
s_an = s_an + a(n) * cos(n*theta) + b(n) * sin(n*theta);
plot(t,s_an, style(n));
%% 2 - VOTRE CODE y_phaseurs = ... est un signal complexe !
y_phaseurs = 0.666*exp(n*theta) ;
% vérification que y est complexe
if (sum(abs(imag(y_phaseurs)))<0.01) disp("PB !Votre signal y_phaseur n'est pas imaginaire !")
end
% le signal s_phaseurs est sa partie réelle
s_phaseur = real(y_phaseurs);
plot(t,s_phaseur, [style(n),"+"]);
title(sprintf("Somme partielle de rang %d", n))
end
PB !Votre signal y_phaseur n'est pas imaginaire ! PB !Votre signal y_phaseur n'est pas imaginaire ! PB !Votre signal y_phaseur n'est pas imaginaire ! PB !Votre signal y_phaseur n'est pas imaginaire !
Le corrigé est dans l'exo 4 suivant
%% 2 - CORRIGÉ
zI =1 ; %phaseur du cos
zQ = -i ; % phaseur du sin
z = a*zI + b*zQ ; % a.cos + b.sin
z = a - i * b ; %
%% 3 - VOTRE CODE Amp=... phi=...
% facile quand on connait le phaseur z !
% voir : real , imag, abs, angle, conj
% pour manipuler les complexes
Amp = real(z)*0.666;
phi = conj(z)*0.666;
% somme partielles : signaux nuls au départ
y_phaseurs = t*0 ; % signal complexe à partir des phaseurs
s_sin= s_an=s_amp_phi = t*0; %signaux réels
style = ["y"; "g"; "b"; "r"];
for n = 1:4
subplot(4,1,n)
s_sin= s_sin + Asin(n) * sin(n*theta);
plot(t,s_sin, style(n)); hold on;
s_an = s_an + a(n) * cos(n*theta) + b(n) * sin(n*theta);
plot(t,s_an, style(n));
%% 2 - CORRIGÉ
y_phaseurs = y_phaseurs + z(n)*exp(i*n*theta) ;
s_phaseur = real(y_phaseurs);
plot(t,s_phaseur, style(n));
%% 3 - VOTRE code avec amplitude et phase
s_amp_phi = s_amp_phi + 0.666*cos(n*theta);
plot(t,s_amp_phi, [style(n),"+"]);
title(sprintf("Somme partielle de rang %d", n))
end
Le corrigé est dans la suite
%% 3 - CORRIGÉ
Amp = abs(z); % amplitude = module de z
phi = angle(z); % phase = argument de z
%% phi = atan(-b./a) ne fonctionne pas car a=0
%phi = atan(-b*Inf); %marche
%% 4 - VOTRE CODE c=... et c_moins=...
% facile quand on a le phaseur z
% on veut c(n).exp.. + c(-n).exp = partie réelle de z
% pensez somme de conjugués !
c=0.666*(z-conj(z))
c_moins=0.666*imag(z)*2*i
y_phaseurs = t*0 ; % signal complexe à partir des phaseurs
s_sin= s_an=s_amp_phi= s_cn = t*0; %signaux réels
style = ["y"; "g"; "b"; "r"];
for n = 1:4
subplot(4,1,n)
s_sin= s_sin + Asin(n) * sin(n*theta);
plot(t,s_sin, style(n)); hold on;
s_an = s_an + a(n) * cos(n*theta) + b(n) * sin(n*theta);
plot(t,s_an, style(n));
y_phaseurs = y_phaseurs + z(n)*exp(i*n*theta) ;
s_phaseur = real(y_phaseurs);
plot(t,s_phaseur, style(n));
%% 3 - CORRIGÉ
s_amp_phi = s_amp_phi + Amp(n)*cos(n*theta+phi(n));
plot(t,s_amp_phi, style(n));
%% 4 - VOTRE CODE s_cn à partir des c(n) c(-n)
s_cn = s_cn + (c(n) + c_moins(n))*0.666 * exp(i*n*theta);
plot(t,s_cn, [style(n),"+"]);
if (sum(abs(imag(s_cn)))>0.01) disp("Votre signal s_cn n'est pas réel ! conjuguez !")
end
title(sprintf("Somme partielle de rang %d", n))
end
c = Columns 1 through 3: 0.00000 + 0.84798i 0.00000 - 0.42399i 0.00000 + 0.28266i Column 4: 0.00000 - 0.21199i c_moins = Columns 1 through 3: 0.00000 + 0.84798i -0.00000 - 0.42399i 0.00000 + 0.28266i Column 4: -0.00000 - 0.21199i Votre signal s_cn n'est pas réel ! conjuguez ! Votre signal s_cn n'est pas réel ! conjuguez ! Votre signal s_cn n'est pas réel ! conjuguez ! Votre signal s_cn n'est pas réel ! conjuguez !
%% 4 - CORRIGÉ
c=z/2 ;
c_moins=conj(z/2) ;
% On a bien c(n).exp(i...) + c(-n).exp(-i...) conjuguées et donc
% = 2.Reel(c(n).exp(i...))
% avec c(n) = z/2 => = Reel(z.exp(i...)) = onde réelle voulue
y_phaseurs = t*0 ; % signal complexe à partir des phaseurs
s_sin= s_an=s_amp_phi= s_cn = t*0; %signaux réels
style = ["y"; "g"; "b"; "r"];
for n = 1:4
subplot(4,1,n)
s_sin= s_sin + Asin(n) * sin(n*theta);
plot(t,s_sin, style(n)); hold on;
s_an = s_an + a(n) * cos(n*theta) + b(n) * sin(n*theta);
plot(t,s_an, style(n));
y_phaseurs = y_phaseurs + z(n)*exp(i*n*theta) ;
s_phaseur = real(y_phaseurs);
plot(t,s_phaseur, style(n));
s_amp_phi = s_amp_phi + Amp(n)*cos(n*theta+phi(n));
plot(t,s_amp_phi, style(n));
%% 4 - CORRIGÉ
s_cn = s_cn + c(n) * exp(i*n*theta);
s_cn = s_cn + c_moins(n) * exp(-i*n*theta);
plot(t,s_cn, [style(n),"+"]);
if (sum(abs(imag(s_cn)))>0.01) disp("Votre signal s_cn n'est pas réel ! conjuguez !")
end
title(sprintf("Somme partielle de rang %d", n))
end
On peut maintenant visualiser les amplitudes des composantes pour chaque fréquence plutôt que de visualiser le signal dans le temps.
Visualiser l'amplitude et la phase en fonction de la fréquence (rang n), c'est visualiser un spectre.
On peut passer du temporel d'une fonction $f$ au spectre fréquentiel $\hat{f}$ par la décomposition de $f$ :
De ces 4 représentations des composantes nous tirons 4 visions fréquentielles (en fonction du rang $n$) associé à la fréquence de l'onde :
$n \leftrightarrow n.F_0$ fréquence de la composante de rang $n$
On peut représenter les coefficients réels a(n) et b(n) pour les fréquences positives :
n=1:4;
F0
f = n*F0;
subplot(211);
stem(f,a,'b');
ylabel("a(n) [V]");
xlabel("frequence [Hz]");
subplot(212);
stem(f,b,'r');
ylabel("b(n) [V]");
xlabel("frequence [Hz]");
grid on;
F0 = 3
On peut représenter le coefficient complexe c(n) pour les fréquences positives et négatives :
Attention on a bien
subplot(211);
stem(f,abs(c),'b');hold on;
stem(-f,abs(c_moins),'r');
ylabel("|c(n)| [V]");
xlabel("frequence [Hz]");
subplot(212);
stem(f,angle(c)*180/pi,'b'); hold on;
stem(-f,angle(c_moins)*180/pi,'r');
ylabel("argument c(n) [deg.]");
xlabel("frequence [Hz]");
grid on;
Remarquez la symétrie de Hilbert $c(f)=\overline{c(-f)}$, car le signal est réel :
Souvent on omet de représenter les fréquences négatives qui se déduisent des positives dans le cas des signaux réels
On peut représenter le module et l'argument du phaseur $z$ pour les fréquences positives seules (le phaseur tourne dans le sens positif uniquement et on prend sa partie réelle) :
subplot(211);
stem(f,abs(z),'b');
ylabel("|z(n)| [V]");
xlabel("frequence [Hz]");
grid on;
subplot(212);
stem(f,angle(z)*180/pi,'b');
ylabel("argument c(n) [deg.]");
xlabel("frequence [Hz]");
On peut faire le même affichage avec une échelle logarithmique en fréquence et en amplitude : c'est la représentation de Bode
subplot(211);
semilogx(f,20*log(abs(z)),'b-o');
ylabel("amplitude [V dB] ");
xlabel("frequence [Hz] ");
title("Diagramme de bode")
grid on;
subplot(212);
semilogx(f,angle(z)*180/pi,'b-o');
ylabel("phase [deg.]");
xlabel("frequence [Hz]");
grid on;
Recalculons notre somme complexe de phaseurs $y$ et regardons :
clear all;
F0=1;T0=1/F0;
Te = T0/100; t=-T0:Te:T0;
z = [-2/pi, 2/2/pi, 2/-3/pi, 2/4/pi] * -i ;
% F0 2F0 3F0 4F0
y = t*0 ;
for n = 1:4
y = y + z(n)*exp(i*n*2*pi*F0*t) ;
end
plot(t,real(y))
Regardons certains instants en particulier.
Attention le plan complexe est "tourné" :
pour faciliter le passage au temporel
indices = (0:18:100) +101;
styles = ["o", "+" ,"d", "s"];
instants = t(indices);
subplot(121)
plot(imag(y),real(y),'.');hold on;
for k = 1:4
plot(imag(y(indices(k))),real(y(indices(k))),styles(k));hold on;
text(imag(y(indices(k)))-0.4,real(y(indices(k))),sprintf(" t=%.2f",instants(k)))
end
axis("square");
xlabel("Imag(y)");
ylabel("Real(y)");
subplot(122)
plot(t,real(y),'-');hold on;
for k = 1:4
plot(instants(k),real(y(indices(k))),styles(k));hold on;
text(instants(k)+0.1,real(y(indices(k))),sprintf(" t=%.2f",instants(k)))
end
axis("square");
xlabel("Temps");
ylabel("signal");