Théorie du Signal : fiche de formules + codes MATLAB
(Prêt à personnaliser)
0) Règles d’or (pour ne pas se tromper)
— Toujours fixer le pas temporel dt (ou Te ) et l’axe correspondant avant la FFT.
— Pour approcher une intégrale (convolution/intégrale de Fourier), utiliser des sommes et mul-
tiplier par dt.
— Pour afficher un spectre centré en 0, utiliser fftshift.
Listing 1 – Template de base (temps, signal, figures)
1 clear ; close all ; clc ;
2
3 % === Temps ( continu approx .) ===
4 dt = 1e -3; % pas temporel
5 t = -2: dt :2; % axe du temps
6
7 % === Exemple de signal x ( t ) ( a modifier selon l ’ nonc ) ===
8 x = (t >= -0.5 & t <=0.5) ; % rectangle hauteur 1 , largeur 1
9
10 figure ; plot (t ,x , ’ LineWidth ’ ,1.5) ; grid on ;
11 xlabel ( ’t ’) ; ylabel ( ’x ( t ) ’) ; title ( ’ Signal x ( t ) ’) ;
1) Signaux usuels (construction rapide)
1.1. Créneau/rectangle par logique
Idée : un rectangle sur [a, b] s’écrit x(t) = A · 1[a,b] (t).
Listing 2 – Rectangle, décalage et somme de rectangles
1 A = 2;
2 a = -0.2; b = 0.7;
3 x1 = A *( t >= a & t <= b ) ; % A sur [a , b ]
4
5 % D c a l a g e temporel : x (t - t0 )
6 t0 = 0.5;
7 x_shift = A *(( t - t0 ) >= a & (t - t0 ) <= b ) ;
8
9 % Somme de rectangles ( ex : signal d ’ archives )
10 x = x1 - 0.5* x_shift ;
11
12 figure ; plot (t ,x , ’ LineWidth ’ ,1.5) ; grid on ;
13 title ( ’ Somme de rectangles ’) ; xlabel ( ’t ’) ; ylabel ( ’x ( t ) ’) ;
1.2. Sinusoı̈de
Listing 3 – Sinus, cosinus, phase
1 A = 1; f0 = 10; phi = pi /4; % Hz
2 x = A * cos (2* pi * f0 * t + phi ) ;
1
2) Transformée de Fourier
2.1. Rappel (convention CTFT)
Z +∞ Z +∞
−jωt 1
X(ω) = x(t) e dt, x(t) = X(ω) e+jωt dω.
−∞ 2π −∞
2.2. CTFT numérique (approximation de l’intégrale)
x(tk )e−jωtk dt.
P
Principe : on calcule X(ω) ≈ k
Listing 4 – CTFT par somme (très bon pour vérifier un résultat analytique)
1 w = linspace ( -200 ,200 ,4001) ; % axe omega ( rad / s )
2
3 E = exp ( -1 j *( t (:) * w ) ) ; % matrice e ^{ - j w t }
4 Xw = ( x (:) . ’* E ) * dt ; % somme * dt ~ i n t g r a l e
5
6 figure ;
7 subplot (2 ,1 ,1) ; plot (w , abs ( Xw ) , ’ LineWidth ’ ,1.3) ; grid on ;
8 xlabel ( ’\ omega ’) ; ylabel ( ’| X (\ omega ) | ’) ;
9
10 subplot (2 ,1 ,2) ; plot (w , unwrap ( angle ( Xw ) ) , ’ LineWidth ’ ,1.0) ; grid on ;
11 xlabel ( ’\ omega ’) ; ylabel ( ’ arg ( X (\ omega ) ) ’) ;
2.3. FFT (DFT) + axe fréquence + centrage
Principe : FFT pour un signal échantillonné, avec un axe f (Hz) puis ω = 2πf .
Listing 5 – FFT correctement affichée (avec fftshift) + scaling dt
1 N = numel ( x ) ;
2 Fs = 1/ dt ; % f r q u e n c e d’ chantillonnage ( Hz
)
3
4 f = ( - N /2: N /2 -1) *( Fs / N ) ; % axe en Hz
5 w = 2* pi * f ; % axe en rad / s
6
7 X = fftshift ( fft ( x ) ) * dt ; % * dt pour approcher la CTFT
8
9 figure ;
10 plot (w , abs ( X ) , ’ LineWidth ’ ,1.3) ; grid on ;
11 xlabel ( ’\ omega ’) ; ylabel ( ’| X (\ omega ) | ’) ; title ( ’ Spectre ( FFT + fftshift ) ’) ;
2.4. Fourier symbolique (si le TD attend une expression fermée)
Listing 6 – Fourier symbolique (Symbolic Toolbox)
1 syms tt w
2 x_sym = heaviside ( tt +1) - heaviside ( tt -1) ; % rectangle [ -1 ,1]
3 X_sym = fourier ( x_sym , tt , w ) ; % X(w)
4 simplify ( X_sym )
3) Convolution (sortie d’un système LTI)
3.1. Rappel
Z +∞
y(t) = (x ∗ h)(t) = x(τ ) h(t − τ ) dτ.
−∞
2
3.2. Convolution numérique (avec conv)
Listing 7 – Convolution y = x*h avec l’échelle temporelle
1 % Exemple : r p o n s e impulsionnelle h ( t ) = e ^{ - a t } u ( t )
2 a = 5;
3 h = exp ( - a * t ) .*( t >=0) ;
4
5 y = conv (x , h ) * dt ; % * dt ~ i n t g r a l e
6 ty = ( t (1) + t (1) ) : dt : ( t ( end ) + t ( end ) ) ;
7
8 figure ;
9 plot ( ty ,y , ’ LineWidth ’ ,1.3) ; grid on ;
10 xlabel ( ’t ’) ; ylabel ( ’y ( t ) ’) ; title ( ’y ( t ) = x * h ( n u m r i q u e ) ’) ;
4) Corrélation et autocorrélation
4.1. Rappel (autocorrélation)
Z +∞
Rxx (τ ) = x(t) x(t + τ ) dt.
−∞
4.2. Avec xcorr (rapide et fiable)
Listing 8 – Autocorrélation avec xcorr + axe tau
1 [r , lags ] = xcorr (x , ’ none ’) ; % options : ’ biased ’ , ’ unbiased ’ , ’ coeff ’
2 tau = lags * dt ;
3
4 figure ;
5 plot ( tau ,r , ’ LineWidth ’ ,1.3) ; grid on ;
6 xlabel ( ’\ tau ’) ; ylabel ( ’ R_ { xx }(\ tau ) ’) ; title ( ’ A u t o c o r r l a t i o n ’) ;
5) Énergie, puissance, RMS
5.1. Signal d’énergie
Z +∞ X
E= |x(t)|2 dt ≈ |x(tk )|2 dt.
−∞ k
Listing 9 – Énergie et valeur efficace (RMS)
1 E = sum ( abs ( x ) .^2) * dt ; % nergie ( approx )
2 xrms = sqrt ( mean ( abs ( x ) .^2) ) ; % RMS discret ( sur l ’ intervalle s i m u l )
3 disp ( E ) ; disp ( xrms ) ;
6) Échantillonnage (rappel pratique)
1
Te = , x[n] = x(nTe ).
Fs
3
Listing 10 – Échantillonnage d’un signal ”continu” simulé
1 Fs = 200; Te = 1/ Fs ;
2 t = -1: dt :1; % " continu " s i m u l
3 x = cos (2* pi *30* t ) ; % signal analogique ( ex )
4
5 n = -50:50;
6 ts = n * Te ;
7 xs = cos (2* pi *30* ts ) ; % chantillons
8
9 figure ;
10 plot (t ,x , ’ LineWidth ’ ,1.0) ; hold on ; grid on ;
11 stem ( ts , xs , ’ filled ’) ; hold off ;
12 legend ( ’x ( t ) ’ , ’x [ n ] ’) ; xlabel ( ’t ’) ; title ( ’ chantillonnage ’) ;
7) Filtrage numérique (difference equation / LTI discret)
7.1. Filtrage avec filter
B(z)
Système rationnel : H(z) = .
A(z)
Listing 11 – Filtrer un signal avec filter(b,a,x)
1 % Exemple : FIR moyenne glissante ( lissage )
2 b = ones (1 ,5) /5; % num rateur
3 a = 1; % d nominateur
4 y = filter (b ,a , x ) ;
5
6 figure ;
7 plot (t ,x , ’ LineWidth ’ ,1.0) ; hold on ; grid on ;
8 plot (t ,y , ’ LineWidth ’ ,1.3) ;
9 legend ( ’x ’ , ’y = filter ( x ) ’) ; xlabel ( ’t ’) ; title ( ’ Filtrage ’) ;
7.2. Réponse fréquentielle avec freqz
Listing 12 – Réponse fréquentielle du filtre (magnitude)
1 [H , wz ] = freqz (b ,a ,2048) ; % wz en rad / chantillon
2 figure ; plot ( wz , abs ( H ) , ’ LineWidth ’ ,1.3) ; grid on ;
3 xlabel ( ’\ omega ( rad / ch ) ’) ; ylabel ( ’| H ( e ^{ j \ omega }) | ’) ; title ( ’ R p o n s e
f r q u e n t i e l l e ’) ;
8) Densité spectrale de puissance (PSD) et spectrogramme
8.1. Periodogramme (PSD)
Listing 13 – PSD avec periodogram
1 % Suppose x est un signal discret et Fs connu
2 [ pxx , fpsd ] = periodogram (x ,[] ,[] , Fs ) ; % PSD
3 figure ; plot ( fpsd ,10* log10 ( pxx ) , ’ LineWidth ’ ,1.3) ; grid on ;
4 xlabel ( ’f ( Hz ) ’) ; ylabel ( ’ PSD ( dB / Hz ) ’) ; title ( ’ Periodogramme ’) ;
4
8.2. Welch (PSD plus lisse) avec pwelch
Listing 14 – PSD avec pwelch (Welch)
1 win = hann (256) ;
2 noverlap = 128;
3 nfft = 1024;
4
5 [ pxx , fpsd ] = pwelch (x , win , noverlap , nfft , Fs ) ;
6 figure ; plot ( fpsd ,10* log10 ( pxx ) , ’ LineWidth ’ ,1.3) ; grid on ;
7 xlabel ( ’f ( Hz ) ’) ; ylabel ( ’ PSD ( dB / Hz ) ’) ; title ( ’ Welch PSD ’) ;
8.3. Spectrogramme (STFT) avec spectrogram
Listing 15 – Spectrogramme (temps-fréquence)
1 win = hann (256) ;
2 noverlap = 200;
3 nfft = 1024;
4
5 [s ,f , tsp ] = spectrogram (x , win , noverlap , nfft , Fs , ’ yaxis ’) ;
6 figure ;
7 imagesc ( tsp ,f ,20* log10 ( abs ( s ) ) ) ; axis xy ; colorbar ;
8 xlabel ( ’ Temps ( s ) ’) ; ylabel ( ’ F r q u e n c e ( Hz ) ’) ; title ( ’ Spectrogramme ( dB ) ’) ;
9) Mini-checklist (quand tu veux à 100% valider ton résultat)
— Compare le support temporel de x(t) et le support de Rxx (τ ) (largeur double typiquement).
— Si x(t) est réel : |X(ω)| est pair (symétrie) et la phase est impaire (souvent).
— Pour une somme de signaux : transformer chaque partie et faire la somme, puis comparer au
numérique.