diff --git a/src/PARTIE3.m b/src/PARTIE3.m
new file mode 100644
index 0000000000000000000000000000000000000000..622035dcdc6d228838945d0065ad51e36e364ed9
--- /dev/null
+++ b/src/PARTIE3.m
@@ -0,0 +1,208 @@
+%% ========================================================================
+%  PARTIE 3 — Effets audio numeriques  (Q 3.1 → Q 3.19)
+%  Poly « SAR – Traitements audio : partie signal »  v1.0 (23 avril 2025)
+%  ------------------------------------------------------------------------
+clear; close all; clc
+Fe = 44100;                     % frequence d echantillonnage
+
+%% ========================================================================
+%% Q 3.1 — Correlation croisee R R xx * h
+% -------------------------------------------------------------------------
+dur = 0.05; f0 = 1000;
+t = (0:1/Fe:dur - 1/Fe).';
+x = sin(2*pi*f0*t) + 0.5*randn(size(t));   % excitation
+h = [1 zeros(1,199) 0.5];                 % reponse impulsionnelle test
+y = conv(x,h,'same');
+
+lagMax = 400;
+Rxx = xcorr(x,lagMax,'biased');
+Ryx = xcorr(y,x,lagMax,'biased');          % variable corrigee
+convTest = conv(Rxx, h, 'same');           % theorie
+
+figure('Name','Q3-1 Correlations'); hold on
+plot(-lagMax:lagMax, Ryx,'b', 'DisplayName','R yx numerique');
+plot(-lagMax:lagMax, convTest,'r--','DisplayName','R xx * h');
+grid on; legend; xlabel('retard (ech)');
+title('Q 3.1  Verification corrélation');
+
+%% ========================================================================
+%% Q 3.2 — Estimation de h si R xx ≈ Dirac
+% -------------------------------------------------------------------------
+hEstime = Ryx(lagMax+1:end);               % partie causale
+figure('Name','Q3-2 h estimee');
+stem(hEstime(1:300)); grid on
+title('Q 3.2  Estimation h');
+
+%% ========================================================================
+%% Q 3.3 — Choix du meilleur signal d excitation
+% -------------------------------------------------------------------------
+if exist('signal_excitation.mat', 'file')
+    load('signal_excitation.mat');  % attend variables xe1, xe2
+    lag = 1024;
+    
+    Rxe1 = xcorr(xe1, lag, 'biased');
+    Rxe2 = xcorr(xe2, lag, 'biased');
+    
+    % Affichage
+    figure;
+    subplot(2,1,1);
+    plot(-lag:lag, Rxe1);
+    title('Autocorrélation de xe1');
+    xlabel('Décalage');
+    ylabel('Rxe1');
+
+    subplot(2,1,2);
+    plot(-lag:lag, Rxe2);
+    title('Autocorrélation de xe2');
+    xlabel('Décalage');
+    ylabel('Rxe2');
+else
+    warning('Fichier signal_excitation.mat absent — Q 3.3 ignorée');
+end
+
+
+%% ========================================================================
+%% Q 3.4 — Simulation de mesure de piece  et estimation de h
+% -------------------------------------------------------------------------
+if exist('simule_piece.m','file');
+    excitation = xe1;
+    tensionMicro = simule_piece(excitation, Fe);
+    
+    lag = 4000;
+    % Utilisation sans 'biased' car tensionMicro et excitation sont de tailles différentes
+    hPiece = xcorr(tensionMicro, excitation, lag);
+    hPiece = hPiece(lag+1:end);
+    figure('Name','Q3-4 h piece');
+    plot(hPiece); grid on; title('Q 3.4  h mesuree');
+    xlabel('t');
+    ylabel('h(t)');
+else
+    warning('Fonction simule_piece absente ou signal non choisi — Q 3.4 ignoree');
+end
+
+
+%% ========================================================================
+%% Q 3.5 — Fonction effectReverb  (convolution directe)
+% -------------------------------------------------------------------------
+yReverb = effectReverb(excitation, hPiece);  
+
+%% ========================================================================
+%% Q 3.6 — Temps de calcul de effectReverb
+
+% Lecture du fichier audio
+guitare = audioread("C:\Users\gauti\Documents\SAR EE\tp-audio-ee-etudiant-m24duboc-main\src\wav\nylon-guitar.wav");
+
+% Application de la réverbération avec mesure du temps
+tic
+guitareReverb = effectReverb(guitare, hPiece);  % On stocke le résultat
+tempsDirect = toc;
+
+% Affichage du temps de traitement
+fprintf('Q 3.6  Convolution temporelle : %.3f s\n', tempsDirect);
+
+% Tracé du signal de sortie
+figure;
+plot(guitareReverb);
+title('Sortie de effectReverb');
+xlabel('t');
+ylabel('y(t)');
+
+%% ========================================================================
+%% Q 3.7 — Fonction effectReverbFFT  + temps
+tic
+yReverbFFT = effectReverbFFT(guitare, hPiece);
+tempsFFT = toc;
+fprintf('Q 3.7  Convolution FFT : %.3f s\n', tempsFFT);
+plot(yReverbFFT);
+title('3.7 Sortie de effectReverbFFT');
+xlabel('t');
+ylabel('y(t)');
+
+%% ========================================================================
+%% Q 3.8 — Equivalence numerique des deux convolutions
+delta = yReverbFFT(1:length(excitation)) - yReverb(1:length(excitation));
+fprintf('Q 3.8  Energie difference : %.4e\n', norm(delta));
+% Q 3.13 / 3.14 : module theorique vs DFT
+Nfft = 4096;
+w = linspace(0, pi, Nfft);
+Hth = 1 ./ (1 + g * exp(-1j * w * tauEch));
+Hnum = fft(hDelayNum, Nfft);
+figure('Name','Q3-14 Module'); hold on
+plot(w/pi*Fe/2, 20*log10(abs(Hth)),'r','DisplayName','theorie');
+plot(w/pi*Fe/2, 20*log10(abs(Hnum(1:Nfft))),'b--','DisplayName','DFT');
+legend; grid on; xlabel('f (Hz)'); ylabel('dB');
+title('Module theorique vs numerique');
+
+%% ========================================================================
+%% Q 3.15 — Fonction effectDelay  + test
+testDur = 2; t = (0:1/Fe:testDur - 1/Fe).';
+testSig = sin(2*pi*440*t);
+yDelay = effectDelay(testSig, tauSec, g, Fe);
+soundsc(yDelay, Fe); pause(testDur+0.5);
+
+%% ========================================================================
+%% Q 3.17 – Q 3.18 — Delay boucle + filtre moyenne K
+K = 10;
+yDelayFilt = effectDelayFiltre(testSig, tauSec, g, K, Fe);
+audiowrite('pianoDelayFiltre.wav', yDelayFilt, Fe);
+soundsc(yDelayFilt, Fe);
+disp('Q 3.18  Fichier pianoDelayFiltre.wav genere');
+
+%% ========================================================================
+%% Q 3.19 — Attenuation des hautes frequences (boucle filtree)
+w = linspace(0, pi, 2048);
+Hf = (1 - g * exp(-1j*w*tauEch)).^(-1) .* (sin(K*w/2)./(K*sin(w/2)));
+figure('Name','Q3-19 Attenuation HF');
+plot(w/pi*Fe/2, 20*log10(abs(Hf))); grid on
+xlabel('f (Hz)'); ylabel('dB');
+title('Boucle avec moyenne glissante  —  aigus attenues');
+
+%% ========================================================================
+%% === Fonctions locales (sans underscore) ================================
+function y = effectReverb(x,h)
+    y = filter(h,1,x);     % convolution lineaire directe
+end
+
+function y = effectReverbFFT(x,h)
+    L = 2^nextpow2(length(x)+length(h)-1);
+    y = real(ifft( fft(x,L) .* fft(h,L) ));
+    y = y(1:length(x));
+end
+
+function h = impulseDelay(g,tauEch,Nmax)
+    n = 0:Nmax;
+    h = zeros(1,Nmax*tauEch+1);
+    h(n*tauEch+1) = (-g).^n;
+end
+
+function [b,a] = coeffDelay(g,tauEch)
+    b = [1 zeros(1,tauEch)];           % numerateur
+    a = [1 zeros(1,tauEch-1) -g];      % denominateur
+end
+
+function y = effectDelay(x,tauSec,g,Fe)
+    tauEch = round(tauSec*Fe);
+    [b,a] = coeffDelay(g,tauEch);
+    y = filter(b,a,x);
+end
+
+function y = effectDelayFiltre(x,tauSec,g,K,Fe)
+    tauEch = round(tauSec*Fe);
+    buf = zeros(tauEch,1);
+    y = zeros(size(x));
+    coef = ones(1,K)/K;                % moyenne glissante
+    for n = 1:length(x)
+        delayed = buf(1);
+        buf = [buf(2:end); 0];
+        feedback = filter(coef,1,g*delayed);
+        y(n) = x(n) + feedback(1);
+        buf(end) = y(n);
+    end
+end
+
+function plotSpectrum(x,Fe,color,label)
+    N = length(x); f = (-N/2:N/2-1)*Fe/N;
+    X = fftshift(fft(x.*hann(N)));
+    SdB = 20*log10(abs(X)/max(abs(X))+eps);
+    plot(f,SdB,color,'LineWidth',1.2,'DisplayName',label);
+end
\ No newline at end of file