From 33682e1557c2e78f06a2e438fd9e5c423d0b0317 Mon Sep 17 00:00:00 2001
From: PERBEN Anatole <anatole.perben@imt-atlantique.net>
Date: Wed, 28 May 2025 23:29:16 +0000
Subject: [PATCH] Upload New File

---
 src/wav/question_3_8.m | 44 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 src/wav/question_3_8.m

diff --git a/src/wav/question_3_8.m b/src/wav/question_3_8.m
new file mode 100644
index 0000000..c5b18e7
--- /dev/null
+++ b/src/wav/question_3_8.m
@@ -0,0 +1,44 @@
+function y = effet_reverb_FFT(x, h)
+% effet_reverb_FFT : applique une réverbération par filtrage fréquentiel
+%
+% Entrées :
+%   x : signal source
+%   h : réponse impulsionnelle
+%
+% Sortie :
+%   y : signal filtré (avec réverbération)
+
+    % Calcul de la taille optimale de FFT
+    NFFT = length(x) + length(h) - 1;
+
+    % FFT des deux signaux
+    X = fft(x, NFFT);
+    H = fft(h, NFFT);
+
+    % Multiplication dans le domaine fréquentiel
+    Y = X .* H;
+
+    % Revenir au domaine temporel
+    y_full = ifft(Y);
+
+    % Optionnel : garder même taille que convolution
+    y = real(y_full(1:NFFT));  % s'assurer que le résultat est réel
+end
+% Chargement du signal et de la réponse impulsionnelle estimée
+[x_guitare, fe] = audioread('single_tone_guitar_nylon_string_a3.wav');
+load('signal_excitation.mat');  % contient R_yx
+x_guitare = x_guitare(:,1)
+
+% Extraire la partie causale de la réponse impulsionnelle
+[~, idx_peak] = max(abs(R_yx));
+h = R_yx(idx_peak:end);
+
+% --- Mesure du temps FFT ---
+tic;
+y_fft = effet_reverb_FFT(x_guitare, h);
+t_fft = toc;
+fprintf("Temps FFT : %.4f secondes\n", t_fft);
+
+% Écoute
+soundsc(y_fft, fe);  % tu peux aussi tester y_conv
+
-- 
GitLab