diff --git a/src/question/ADSR.png b/src/question/ADSR.png
new file mode 100644
index 0000000000000000000000000000000000000000..95e70bf34fb65ff50173bc9babb9b2d783ccdbeb
Binary files /dev/null and b/src/question/ADSR.png differ
diff --git a/src/question/accord_piano_delay.wav b/src/question/accord_piano_delay.wav
new file mode 100644
index 0000000000000000000000000000000000000000..aeafbfc4469e6377dccf99fa39c063b6b9876266
Binary files /dev/null and b/src/question/accord_piano_delay.wav differ
diff --git a/src/question/analyse_delay.m b/src/question/analyse_delay.m
new file mode 100644
index 0000000000000000000000000000000000000000..d783b599d60db9728f56a426b8bb83c71f133eaf
--- /dev/null
+++ b/src/question/analyse_delay.m
@@ -0,0 +1,25 @@
+%% analyse_delay.m – Question 3.12
+clear; clc; close all;
+
+% Paramètres du filtre
+g = 0.7;
+tau = 5;           % ici on prend un petit tau pour mieux visualiser h(k)
+N = 100;           % longueur d’analyse (nombre d’échantillons affichés)
+
+% Vecteurs a et b
+a = [1, zeros(1, tau - 1), g];
+b = [1];
+
+% Signal d’entrée : Dirac
+x = [1; zeros(N-1, 1)];
+
+% Réponse impulsionnelle par filter()
+h = filter(b, a, x);
+
+% Affichage
+k = 0:N-1;
+stem(k, h, 'filled');
+xlabel('k'); ylabel('h(k)');
+title('Réponse impulsionnelle du filtre (via filter)');
+grid on;
+saveas(gcf, 'impulsion_filter_delay.png');
diff --git a/src/question/comp_fft_theorie_delay.png b/src/question/comp_fft_theorie_delay.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1d624a7f3d3dbfdbfb041f2f813123bdfc5c1a9
Binary files /dev/null and b/src/question/comp_fft_theorie_delay.png differ
diff --git a/src/question/delay_025s_g09.png b/src/question/delay_025s_g09.png
new file mode 100644
index 0000000000000000000000000000000000000000..2710adabea11f5717c90310a10d9f89543e483a9
Binary files /dev/null and b/src/question/delay_025s_g09.png differ
diff --git a/src/question/effet_delay.m b/src/question/effet_delay.m
new file mode 100644
index 0000000000000000000000000000000000000000..e2c8d005502b926124bee5c8ab0abeff1366bef1
--- /dev/null
+++ b/src/question/effet_delay.m
@@ -0,0 +1,25 @@
+function y = effet_delay(x, delay_sec, g, Fe)
+% effet_delay : applique un effet de délai récurrent de type IIR
+% Entrées :
+%   x         : signal d'entrée (vecteur colonne)
+%   delay_sec : délai en secondes
+%   g         : coefficient d'amortissement
+%   Fe        : fréquence d'échantillonnage (en Hz)
+% Sortie :g
+%   y         : signal de sortie filtré
+
+    % Convertir le délai en nombre d'échantillons
+    tau = round(delay_sec * Fe);
+
+    % Vérifier les dimensions
+    if size(x, 2) > 1
+        x = x(:,1); % on garde qu’un seul canal si stéréo
+    end
+
+    % Définir les coefficients du filtre
+    b = 1;
+    a = [1, zeros(1, tau - 1), g];  % a = [1 0 ... 0 g] (longueur tau+1)
+
+    % Appliquer le filtre
+    y = filter(b, a, x);
+end
diff --git a/src/question/effet_delay_filtre.m b/src/question/effet_delay_filtre.m
new file mode 100644
index 0000000000000000000000000000000000000000..673a936564f32666dec82214c98523f89a758862
--- /dev/null
+++ b/src/question/effet_delay_filtre.m
@@ -0,0 +1,24 @@
+function y = effet_delay_filtre(x, delay_sec, g, Fe)
+% effet_delay_filtre - applique un effet delay en utilisant la fonction filter
+%
+% Entrées :
+%   x         : signal d'entrée (vecteur colonne)
+%   delay_sec : délai en secondes (ex: 0.25)
+%   g         : coefficient d'amortissement (ex: 0.9)
+%   Fe        : fréquence d'échantillonnage (ex: 44100)
+%
+% Sortie :
+%   y         : signal de sortie avec effet delay
+
+    % Convertir le délai en nombre d’échantillons
+    tau = round(delay_sec * Fe);
+
+    % Vecteur b (numérateur) : [1]
+    b = 1;
+
+    % Vecteur a (dénominateur) : [1, 0, 0, ..., 0, g]
+    a = [1, zeros(1, tau - 1), g];
+
+    % Appliquer le filtre avec les vecteurs b et a
+    y = filter(b, a, x);
+end
diff --git a/src/question/effet_reverb.m b/src/question/effet_reverb.m
new file mode 100644
index 0000000000000000000000000000000000000000..df37a27a941336e44eff96dcb3ccfd271626169a
--- /dev/null
+++ b/src/question/effet_reverb.m
@@ -0,0 +1,6 @@
+function y = effet_reverb(x, h)
+% Applique un effet de réverbération à un signal audio x
+% en convoluant avec une réponse impulsionnelle h.
+
+    y = conv(x, h, 'same');  % conserve la taille du signal d'entrée
+end
diff --git a/src/question/effet_reverb_fft.m b/src/question/effet_reverb_fft.m
new file mode 100644
index 0000000000000000000000000000000000000000..66ec2aa6ccd6f74164b6ef3d0f051e78188d48b0
--- /dev/null
+++ b/src/question/effet_reverb_fft.m
@@ -0,0 +1,9 @@
+function y = effet_reverb_fft(x, h)
+% Applique une réverbération par convolution rapide avec FFT
+
+    N = length(x) + length(h) - 1;           % taille totale pour éviter repliement
+    X = fft(x, N);
+    H = fft(h, N);
+    Y = X .* H;
+    y = ifft(Y, N);                          % retour dans le domaine temporel
+end
diff --git a/src/question/effet_reverberation.m b/src/question/effet_reverberation.m
new file mode 100644
index 0000000000000000000000000000000000000000..b07b0d128702023609a50c03675052d5a2b8fdd0
--- /dev/null
+++ b/src/question/effet_reverberation.m
@@ -0,0 +1,27 @@
+clear all; close all; clc;
+
+% Charger les signaux d'excitation et leur fréquence d'échantillonnage
+load('signal_excitation.mat');  % variables : xe1, xe1, fe
+
+% Étape 1 – Simuler l'effet de la pièce sur le signal xe1
+y = simule_piece(xe1, fe);   % ⚠️ on passe aussi la fréquence fe
+
+% (optionnel) Écouter le signal en sortie
+soundsc(y, fe);
+
+% Étape 2 – Calcul de l’intercorrélation R_yx(u)
+r_est = xcorr(y, xe1);       % intercorrélation entre sortie et excitation
+lags = -(length(xe1)-1):(length(y)-1);  % axe des décalages
+
+% Étape 3 – Centrer sur la partie causale (à partir du pic)
+[~, i_max] = max(r_est);
+r_causale = r_est(i_max:end);  % on garde seulement la partie causale
+temps = (0:length(r_causale)-1) / fe;  % axe temporel en secondes
+
+% Étape 4 – Affichage de la réponse impulsionnelle estimée
+figure;
+plot(temps, r_causale, 'LineWidth', 1.5);
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Réponse impulsionnelle estimée de la pièce');
+grid on;
diff --git a/src/question/empreinte_ac.mat b/src/question/empreinte_ac.mat
new file mode 100644
index 0000000000000000000000000000000000000000..813112aa851768cfec53dc808d887032c417d7c5
Binary files /dev/null and b/src/question/empreinte_ac.mat differ
diff --git a/src/question/example_with_wave_file.m b/src/question/example_with_wave_file.m
new file mode 100644
index 0000000000000000000000000000000000000000..efdc07d6b29d048580f5182ca3150736055b5ff5
--- /dev/null
+++ b/src/question/example_with_wave_file.m
@@ -0,0 +1,7 @@
+[x_piano, Fe] = audioread("synthetic_piano_ADSR.wav");
+x_piano = x_piano(:,1); % mono
+delay_time = 0.25;
+g = 0.9;
+K = 10;
+y_filtre = effet_delay_filtre(x_piano, delay_time, g, K, Fe);
+soundsc(y_filtre, Fe);
diff --git a/src/question/impulsion_filter_delay.png b/src/question/impulsion_filter_delay.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a98bb47102b05e6f02fa0417fb3dda8f7ac9460
Binary files /dev/null and b/src/question/impulsion_filter_delay.png differ
diff --git a/src/question/piano1_harmonique_synthetique.wav b/src/question/piano1_harmonique_synthetique.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a81a65a88f13adc4ad2f2f612d31e0db6c6b1147
Binary files /dev/null and b/src/question/piano1_harmonique_synthetique.wav differ
diff --git a/src/question/piano1_synth_ADSR.wav b/src/question/piano1_synth_ADSR.wav
new file mode 100644
index 0000000000000000000000000000000000000000..85a998b29fd6b9b850d1b975189cb23c625efd87
Binary files /dev/null and b/src/question/piano1_synth_ADSR.wav differ
diff --git a/src/question/piano1_synth_fourier_inverse.wav b/src/question/piano1_synth_fourier_inverse.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7b4006d555705b116db08671949770b67816728a
Binary files /dev/null and b/src/question/piano1_synth_fourier_inverse.wav differ
diff --git a/src/question/piano1_synth_harmoniques.wav b/src/question/piano1_synth_harmoniques.wav
new file mode 100644
index 0000000000000000000000000000000000000000..587bc28a1843eec0096788e0b8497a5c90b4eb96
Binary files /dev/null and b/src/question/piano1_synth_harmoniques.wav differ
diff --git a/src/question/piano_delay_filtre.wav b/src/question/piano_delay_filtre.wav
new file mode 100644
index 0000000000000000000000000000000000000000..aeafbfc4469e6377dccf99fa39c063b6b9876266
Binary files /dev/null and b/src/question/piano_delay_filtre.wav differ
diff --git a/src/question/q15_comparaison_adsr_vs_ifft.png b/src/question/q15_comparaison_adsr_vs_ifft.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d7245fe10a505629b8c79cc13cb8089125d4441
Binary files /dev/null and b/src/question/q15_comparaison_adsr_vs_ifft.png differ
diff --git a/src/question/q15_comparaison_temporelle.png b/src/question/q15_comparaison_temporelle.png
new file mode 100644
index 0000000000000000000000000000000000000000..3751ed19f97ea5c819bf22418c292c7774ad4c3a
Binary files /dev/null and b/src/question/q15_comparaison_temporelle.png differ
diff --git a/src/question/q15_diff_adsr_vs_ifft.png b/src/question/q15_diff_adsr_vs_ifft.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb794223e010a34b367c3d76b0d138498dd7511a
Binary files /dev/null and b/src/question/q15_diff_adsr_vs_ifft.png differ
diff --git a/src/question/q15_signal_ifft.png b/src/question/q15_signal_ifft.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e08be792fd65d6349b5f785c07a308d31656de5
Binary files /dev/null and b/src/question/q15_signal_ifft.png differ
diff --git a/src/question/q15_synth_ifft.wav b/src/question/q15_synth_ifft.wav
new file mode 100644
index 0000000000000000000000000000000000000000..b0349cc1b684fc828c929308fdf0fd983c937f02
Binary files /dev/null and b/src/question/q15_synth_ifft.wav differ
diff --git a/src/question/q15_synth_piano1_ifft.wav b/src/question/q15_synth_piano1_ifft.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9259b98deb30799ad0bd7acab274e2f9bd55b8ff
Binary files /dev/null and b/src/question/q15_synth_piano1_ifft.wav differ
diff --git a/src/question/q21_dentscie_fft_vs_fourier.png b/src/question/q21_dentscie_fft_vs_fourier.png
new file mode 100644
index 0000000000000000000000000000000000000000..4db36cfcda2994aa7e468608b70ac9a3b012243a
Binary files /dev/null and b/src/question/q21_dentscie_fft_vs_fourier.png differ
diff --git a/src/question/q21_fft_vs_fourier.png b/src/question/q21_fft_vs_fourier.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d0c53e46cf9c6c55a78fb3805ed6430dfb5f5ba
Binary files /dev/null and b/src/question/q21_fft_vs_fourier.png differ
diff --git a/src/question/q21_spectres_carre_dent.png b/src/question/q21_spectres_carre_dent.png
new file mode 100644
index 0000000000000000000000000000000000000000..4acaf327b543f4d5a16a83e2b9285c39cb90e7c5
Binary files /dev/null and b/src/question/q21_spectres_carre_dent.png differ
diff --git a/src/question/q21_spectres_fftshift.png b/src/question/q21_spectres_fftshift.png
new file mode 100644
index 0000000000000000000000000000000000000000..225e5b0358ff668de934d264da8b71c6cdf2e544
Binary files /dev/null and b/src/question/q21_spectres_fftshift.png differ
diff --git a/src/question/q23_saw_filtered.wav b/src/question/q23_saw_filtered.wav
new file mode 100644
index 0000000000000000000000000000000000000000..484e7ad43949f64ff9d4b8f74d391e9fe78ce697
Binary files /dev/null and b/src/question/q23_saw_filtered.wav differ
diff --git a/src/question/q23_square_filtered.wav b/src/question/q23_square_filtered.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9889028f9667bc84abb737504c9f10e8cc798bbb
Binary files /dev/null and b/src/question/q23_square_filtered.wav differ
diff --git a/src/question/q24_signaux_filtres.png b/src/question/q24_signaux_filtres.png
new file mode 100644
index 0000000000000000000000000000000000000000..15008ef8f997d8fd219d2471d4138206edd1f064
Binary files /dev/null and b/src/question/q24_signaux_filtres.png differ
diff --git a/src/question/q312_reponse_impulsionnelle.png b/src/question/q312_reponse_impulsionnelle.png
new file mode 100644
index 0000000000000000000000000000000000000000..239f438c4facb4add998a2a29ac7b4a998d6b9f7
Binary files /dev/null and b/src/question/q312_reponse_impulsionnelle.png differ
diff --git a/src/question/q314_reponse_frequentielle.png b/src/question/q314_reponse_frequentielle.png
new file mode 100644
index 0000000000000000000000000000000000000000..51cedaa3e62133dafc4875fd8344c4d1bbe6d0e8
Binary files /dev/null and b/src/question/q314_reponse_frequentielle.png differ
diff --git a/src/question/question1_1.m b/src/question/question1_1.m
new file mode 100644
index 0000000000000000000000000000000000000000..00b20fcee8167730df47ff887198b2d321edacc7
--- /dev/null
+++ b/src/question/question1_1.m
@@ -0,0 +1,29 @@
+%% this is a simple example to read and play a wave file with matlab
+% set a string variable to a wave filename we want to open:
+note = "wav/single_tone_trumpet-a3.wav";
+% read the content of the wave file:
+[data,fe] = audioread(note);
+% data is a matrix with 2 columns if the sound is stereo; keep the mono to ease further processing
+data = data(:,1);
+% get the number of sample in vector data
+N = length(data);
+% play the sound in the audio output:
+% soundsc(data,fe);
+fft_data = fft(data);
+data_shift = fftshift(fft_data);
+f = (-N/2:N/2-1)*(fe/N);
+amplitude_db = 20*log10(abs(data_shift));
+figure;
+% affichage
+figure;
+plot(f, amplitude_db);
+xlabel('Frequence (Hz)');
+ylabel('Amplitude (dB)');
+title('Spectre centré - Trompette');
+%xlim([-5000 5000]);
+grid on;
+% frequence fondamentale
+[~, idx_max] = max(amplitude_db(f>0))
+frequence_fondamentale = f(f>0)
+frequence_fondamentale = frequence_fondamentale(idx_max)
+disp(['Fréquence fondamentale = ' num2str(frequence_fondamentale) ' Hz']);
diff --git a/src/question/question1_2.m b/src/question/question1_2.m
new file mode 100644
index 0000000000000000000000000000000000000000..01528c5929467eaa7a8598a5cb7f25b8554bc447
--- /dev/null
+++ b/src/question/question1_2.m
@@ -0,0 +1,83 @@
+% Fichiers audio
+piano1 = "single_tone_piano1.wav";
+piano2 = "wav/single_tone_piano2.wav";
+% Lecture des sons
+[x1, Fe1] = audioread(piano1);
+[x2, Fe2] = audioread(piano2);
+x1 = x1(:,1); x2 = x2(:,1); % mono
+% Vérification fréquence d’échantillonnage
+assert(Fe1 == Fe2, "Les fichiers doivent avoir la même fréquence d’échantillonnage");
+Fe = Fe1;
+% FFT et spectre
+N1 = length(x1); N2 = length(x2);
+X1 = fft(x1); X2 = fft(x2);
+f1 = (0:N1-1)*(Fe/N1); f2 = (0:N2-1)*(Fe/N2);
+amp1_db = 20*log10(abs(X1) + eps); amp2_db = 20*log10(abs(X2) + eps);
+% Affichage des spectres
+figure;
+plot(f1, amp1_db, 'b', 'DisplayName', 'Piano 1'); hold on;
+plot(f2, amp2_db, 'r', 'DisplayName', 'Piano 2');
+xlabel('Fréquence (Hz)'); ylabel('Amplitude (dB)');
+title('Spectres des sons de piano');
+legend; grid on;
+xlim([0 5000]);
+
+% Fréquences fondamentales
+[~, idx1] = max(amp1_db(1:floor(N1/2)));
+f0_piano1 = f1(idx1);
+
+
+% Détection du premier pic significatif pour Piano 2
+amp2_half = amp2_db(1:floor(N2/2));
+f2_half = f2(1:floor(N2/2));
+
+% Trouver les pics locaux
+[pk_vals, pk_locs] = findpeaks(amp2_half, 'MinPeakHeight', max(amp2_half)-20);  % seuil à ajuster si besoin
+
+if isempty(pk_locs)
+    error('Aucun pic significatif détecté dans le spectre du piano 2');
+end
+
+% Premier pic (fréquence fondamentale estimée)
+f0_piano2 = f2_half(pk_locs(1));
+
+
+
+% Analyse harmonique
+
+f_th1 = zeros(1, nH); f_th2 = zeros(1, nH);
+f_mes1 = zeros(1, nH); f_mes2 = zeros(1, nH);
+inharm1 = zeros(1, nH); inharm2 = zeros(1, nH);
+% --- Analyse Piano 1 ---
+for i = 1:7
+   f_th1(i) = f0_piano1 * i;
+   idx_win1 = find(f1 > f_th1(i)-10 & f1 < f_th1(i)+10);
+   [~, local_max1] = max(amp1_db(idx_win1));
+   f_mes1(i) = f1(idx_win1(local_max1));
+   inharm1(i) = 1200 * (log2(f_mes1(i)) - log2(f_th1(i)));
+end
+% --- Analyse Piano 2 ---
+for i = 1:7
+   f_th2(i) = f0_piano2 * i;
+   idx_win2 = find(f2 > f_th2(i)-10 & f2 < f_th2(i)+10);
+   [~, local_max2] = max(amp2_db(idx_win2));
+   f_mes2(i) = f2(idx_win2(local_max2));
+   inharm2(i) = 1200 * (log2(f_mes2(i)) - log2(f_th2(i)));
+end
+% --- Affichage du tableau Piano 1 ---
+fprintf('\nAnalyse harmonique du Piano 1\n');
+fprintf('Harm | f_th (Hz) | f_mes (Hz) | Inharmonicité (cents)\n');
+fprintf('-----|------------|-------------|------------------------\n');
+for i = 1:nH
+   fprintf('%4d | %10.2f | %11.2f | %20.2f\n', ...
+       i, f_th1(i), f_mes1(i), inharm1(i));
+end
+% --- Affichage du tableau Piano 2 ---
+fprintf('\n Analyse harmonique du Piano 2\n');
+fprintf('Harm | f_th (Hz) | f_mes (Hz) | Inharmonicité (cents)\n');
+fprintf('-----|------------|-------------|------------------------\n');
+for i = 1:nH
+   fprintf('%4d | %10.2f | %11.2f | %20.2f\n', ...
+       i, f_th2(i), f_mes2(i), inharm2(i));
+end
+
diff --git a/src/question/question1_3.m b/src/question/question1_3.m
new file mode 100644
index 0000000000000000000000000000000000000000..56a3d1bdf5ccce21b3bc7a0a1afd73aad96ddab4
--- /dev/null
+++ b/src/question/question1_3.m
@@ -0,0 +1,45 @@
+% Chargement du son piano1
+[x, Fe] = audioread("single_tone_piano1.wav");
+x = x(:,1); % Passage en mono si besoin
+% Calcul de la FFT
+N = length(x);
+X = fft(x);
+f = (0:N-1)*(Fe/N);
+amp = abs(X);
+% Estimation de la fréquence fondamentale 
+[~, idx_f0] = max(amp(1:floor(N/2)));
+f0 = f(idx_f0);
+fprintf("Fréquence fondamentale estimée : %.2f Hz\n", f0);
+% Récupération des fréquences et amplitudes des 8 premières harmoniques
+nH = 8;
+frequences = zeros(1, nH);
+amplitudes = zeros(1, nH);
+for n = 1:nH
+   f_th = n * f0;
+   idx_range = find(f > f_th - 10 & f < f_th + 10);
+   [~, idx_local] = max(amp(idx_range));
+   idx_max = idx_range(idx_local);
+   frequences(n) = f(idx_max);
+   amplitudes(n) = amp(idx_max);
+end
+% Normalisation des amplitudes
+amplitudes = amplitudes / max(amplitudes);
+% Synthèse du signal harmonique
+duree = 6; % Durée du signal
+t = linspace(0, duree, round(duree * Fe));
+y = zeros(size(t));
+for n = 1:nH
+   y = y + amplitudes(n) * sin(2 * pi * frequences(n) * t);
+end
+% Normalisation
+y = y / max(abs(y));
+% Écoute et sauvegarde
+soundsc(y, Fe);
+audiowrite("piano1_synth_harmoniques.wav", y, Fe);
+% Affichage des amplitudes en fonction des fréquences mesurées (Hz)
+figure;
+plot(frequences, amplitudes, '-', 'LineWidth', 2);
+xlabel('Fréquence (Hz)');
+ylabel('Amplitude normalisée');
+title('Amplitudes des 8 premières harmoniques mesurées dans piano1.wav');
+grid on;
diff --git a/src/question/question1_4.m b/src/question/question1_4.m
new file mode 100644
index 0000000000000000000000000000000000000000..34939a09eabbbc7b1282d68b44c170b820d277b4
--- /dev/null
+++ b/src/question/question1_4.m
@@ -0,0 +1,61 @@
+%% Question 1.4 - Synthèse d'un son de piano avec enveloppe ADSR réaliste
+% Paramètres de base
+fe = 44100;               % Fréquence d’échantillonnage
+f1 = 220.37;              % Fréquence fondamentale du piano
+A = [1, 0.7, 0.5, 0.3, 0.2, 0.15, 0.1, 0.05];  % Amplitudes des harmoniques
+
+% Durée totale souhaitée
+dur = 6;  % secondes
+t = linspace(0, dur, round(dur * fe));  % Axe temporel
+
+% Proportions ADSR en % de la durée totale
+attack_ratio = 0.10;    % 10%
+decay_ratio = 0.10;     % 10%
+sustain_ratio = 0.70;   % 70%
+release_ratio = 0.10;   % 10%
+
+% Durées effectives de chaque phase
+attack = attack_ratio * dur;
+decay = decay_ratio * dur;
+sustain = sustain_ratio * dur;
+release = release_ratio * dur;
+
+% Niveau d'amplitude pendant la phase de sustain
+sustain_level = 0.6;
+
+% Construction de l'enveloppe ADSR
+env = [linspace(0, 1, round(attack * fe)), ...
+       linspace(1, sustain_level, round(decay * fe)), ...
+       sustain_level * ones(1, round(sustain * fe)), ...
+       linspace(sustain_level, 0, round(release * fe))];
+
+% Ajustement de la taille de l'enveloppe si besoin
+env = env(1:min(length(env), length(t)));
+env = [env, zeros(1, length(t) - length(env))];  % Complète si besoin
+
+% Synthèse par addition des 8 harmoniques
+y = zeros(size(t));
+for n = 1:length(A)
+    y = y + A(n) * sin(2 * pi * f1 * n * t);
+end
+
+% Application de l'enveloppe
+y = y .* env;
+
+% Normalisation
+y = y / max(abs(y));
+
+% Lecture du son
+soundsc(y, fe);
+
+% Sauvegarde
+audiowrite('synthetic_piano_ADSR.wav', y, fe);
+
+% Tracé de l'enveloppe
+figure;
+plot(t, env, 'LineWidth', 1.5);
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Enveloppe ADSR - Son synthétique de piano');
+grid on;
+saveas(gcf, 'ADSR.png');  % pour le rapport
\ No newline at end of file
diff --git a/src/question/question1_5.m b/src/question/question1_5.m
new file mode 100644
index 0000000000000000000000000000000000000000..ed2de403cbaee13dab723687bc485d5c06083e6e
--- /dev/null
+++ b/src/question/question1_5.m
@@ -0,0 +1,26 @@
+Fe = 8000;        % fréquence d’échantillonnage
+T = 1;            % durée (s)
+N = Fe * T;       % nombre d’échantillons
+
+f_mes = [220.37, 442.04, 663.22, 885.54, 1108.34, 1331.46, 1552.48];
+A = exp(-0.5*(0:6));  % mêmes amplitudes que la première synthèse
+
+X = zeros(1, N);
+
+for i = 1:length(f_mes)
+    k = round(f_mes(i) * N / Fe);
+    if k < N/2
+        X(k+1) = A(i);
+        X(N-k+1) = conj(A(i));
+    end
+end
+
+x = real(ifft(X));
+
+% Affichage temporel
+t = (0:N-1)/Fe;
+plot(t, x);
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Signal synthétisé par TFDi');
+grid on;
diff --git a/src/question/question2_3.m b/src/question/question2_3.m
new file mode 100644
index 0000000000000000000000000000000000000000..5a12ac78f1ff958432c03fc02f3dd1be85dc5283
--- /dev/null
+++ b/src/question/question2_3.m
@@ -0,0 +1,35 @@
+%% Paramètres initiaux
+fs = 44100;       % Fréquence d'échantillonnage (Hz)
+duration = 2;     % Durée du son (s)
+t = 0:1/fs:duration-1/fs;
+
+%% 1. Synthèse soustractive avec différents signaux sources
+% Génération des signaux
+f0 = 440; % Fréquence fondamentale (La 440 Hz)
+
+% Signal carré (harmoniques impaires)
+square_wave = 0.5 * square(2*pi*f0*t);
+
+% Signal en dents de scie (toutes les harmoniques)
+sawtooth_wave = 0.5 * sawtooth(2*pi*f0*t);
+
+% Signal triangle (harmoniques atténuées)
+triangle_wave = 0.5 * sawtooth(2*pi*f0*t, 0.5);
+
+% Filtre passe-bas d'ordre 2
+d_lowpass = designfilt('lowpassfir', 'FilterOrder', 2, 'HalfPowerFrequency', 0.25);
+
+% Application du filtre
+filtered_square = filter(d_lowpass, square_wave);
+filtered_sawtooth = filter(d_lowpass, sawtooth_wave);
+
+%% 2. Synthèse additive (exemple : 3 harmoniques)
+% Harmoniques : f0, 2f0, 3f0 avec amplitudes décroissantes
+additive_sound = 0.5*sin(2*pi*f0*t) + 0.3*sin(2*pi*2*f0*t) + 0.1*sin(2*pi*3*f0*t);
+
+%% Écoute et analyse
+% Jouer les sons
+soundsc(filtered_square, fs); pause(duration + 1);
+soundsc(filtered_sawtooth, fs); pause(duration + 1);
+soundsc(additive_sound, fs);
+
diff --git a/src/question/question2_4.m b/src/question/question2_4.m
new file mode 100644
index 0000000000000000000000000000000000000000..eb4e1b55a96625b31bb625722329966762e49566
--- /dev/null
+++ b/src/question/question2_4.m
@@ -0,0 +1,86 @@
+%% ========== Paramètres initiaux ==========
+fs = 44100;                  % Fréquence d'échantillonnage (Hz)
+duration = 2;                % Durée du son (s)
+t = 0:1/fs:duration-1/fs;
+f0 = 440;                    % Fréquence fondamentale (La 440 Hz)
+
+%% ========== Question 2.3 ==========
+%% 1. Génération des signaux carré et dents de scie
+% Signal carré (harmoniques impaires)
+square_wave = 0.5 * square(2*pi*f0*t);
+
+% Signal en dents de scie (toutes les harmoniques)
+sawtooth_wave = 0.5 * sawtooth(2*pi*f0*t);
+
+%% 2. Filtrage passe-bas (ordre 2) pour synthèse soustractive
+d_lowpass = designfilt('lowpassfir', 'FilterOrder', 2, 'HalfPowerFrequency', 0.25);
+
+% Application du filtre
+filtered_square = filter(d_lowpass, square_wave);
+filtered_sawtooth = filter(d_lowpass, sawtooth_wave);
+
+%% 3. Synthèse additive (3 harmoniques pour comparaison)
+additive_sound = 0.7*sin(2*pi*f0*t) + 0.4*sin(2*pi*2*f0*t) + 0.2*sin(2*pi*3*f0*t);
+additive_sound = additive_sound / max(abs(additive_sound)); % Normalisation
+
+%% 4. Comparaison audio
+soundsc(filtered_square, fs); pause(duration + 1);   % Carré filtré
+soundsc(filtered_sawtooth, fs); pause(duration + 1); % Dents de scie filtrée
+soundsc(additive_sound, fs);                        % Synthèse additive
+
+%% 5. Visualisation des formes d'onde (carré vs dents de scie)
+figure;
+subplot(3,1,1); 
+plot(t(1:1000), square_wave(1:1000)); 
+title('Signal carré original');
+
+subplot(3,1,2); 
+plot(t(1:1000), filtered_square(1:1000)); 
+title('Carré filtré (ordre 2)');
+
+subplot(3,1,3); 
+plot(t(1:1000), filtered_sawtooth(1:1000)); 
+title('Dents de scie filtrée (ordre 2)');
+
+%% ========== Question 2.4 ==========
+%% 1. Amélioration avec filtre RIF ordre 8 (pour dents de scie)
+d_improved_FIR = designfilt('lowpassfir', ...
+    'FilterOrder', 8, ...
+    'HalfPowerFrequency', 0.35);
+
+filtered_sawtooth_improved = filter(d_improved_FIR, sawtooth_wave);
+
+%% 2. Comparaison audio avant/après
+soundsc(filtered_sawtooth, fs); pause(duration + 1);     % Filtre ordre 2
+soundsc(filtered_sawtooth_improved, fs); pause(duration + 1); % Filtre ordre 8
+
+%% 3. Visualisation des améliorations
+figure;
+subplot(2,1,1); 
+plot(t(1:1000), filtered_sawtooth(1:1000)); 
+title('Dents de scie filtrée (ordre 2)');
+
+subplot(2,1,2); 
+plot(t(1:1000), filtered_sawtooth_improved(1:1000)); 
+title('Dents de scie filtrée (ordre 8)');
+
+%% 4. Analyse spectrale (FFT)
+N = 2^nextpow2(length(t));
+frequencies = fs/2 * linspace(0, 1, N/2+1);
+
+% FFT pour dents de scie filtrée (ordre 2)
+fft_sawtooth = fft(filtered_sawtooth, N);
+P_sawtooth = abs(fft_sawtooth/N).^2;
+
+% FFT pour dents de scie filtrée (ordre 8)
+fft_improved = fft(filtered_sawtooth_improved, N);
+P_improved = abs(fft_improved/N).^2;
+
+figure;
+semilogy(frequencies, P_sawtooth(1:N/2+1), 'b');
+hold on;
+semilogy(frequencies, P_improved(1:N/2+1), 'r');
+legend('Ordre 2', 'Ordre 8');
+xlabel('Fréquence (Hz)'); ylabel('Puissance');
+title('Impact de l''ordre du filtre (dents de scie)');
+grid on;
diff --git a/src/question/question3_14.m b/src/question/question3_14.m
new file mode 100644
index 0000000000000000000000000000000000000000..46eed0a7e43f232e3a52ea683ebe6b326c8948eb
--- /dev/null
+++ b/src/question/question3_14.m
@@ -0,0 +1,34 @@
+%% Question 3.14 – Comparaison entre réponse fréquentielle théorique et FFT
+clear; clc; close all;
+
+% Paramètres
+g = 0.7;
+tau = 5;
+N = 1024;
+
+% Vecteurs du filtre
+a = [1, zeros(1, tau - 1), g];
+b = 1;
+
+% Calcul de la réponse impulsionnelle
+x = [1; zeros(N-1, 1)];
+h = filter(b, a, x);
+
+% Réponse par FFT
+H_fft = abs(fft(h));
+H_fft = H_fft(1:N/2+1);  % On garde la moitié utile (fréquences positives)
+nu = linspace(0, 0.5, N/2+1);  % fréquence réduite
+
+% Réponse théorique
+H_th = 1 ./ sqrt(1 + 2*g*cos(2*pi*nu*tau) + g^2);
+
+% Affichage comparé
+figure;
+plot(nu, H_fft, 'r', 'LineWidth', 1.5); hold on;
+plot(nu, H_th, 'b--', 'LineWidth', 1.5);
+xlabel('Fréquence réduite (\nu)');
+ylabel('|H(\nu)|');
+legend('FFT (numérique)', 'Théorique');
+title('Comparaison des réponses fréquentielles (FFT vs théorie)');
+grid on;
+saveas(gcf, 'comp_fft_theorie_delay.png');
diff --git a/src/question/question3_18.m b/src/question/question3_18.m
new file mode 100644
index 0000000000000000000000000000000000000000..bddf45e88a3baf5517877791ad85fb77fddc4423
--- /dev/null
+++ b/src/question/question3_18.m
@@ -0,0 +1,40 @@
+%% Question 3.18 – Test de la fonction effet_delay_filtre
+clear; clc;
+
+% Charger le signal audio
+[x, Fe] = audioread('single_tone_piano1.wav');
+x = x(:,1);  % ne garder qu'un canal si stéréo
+
+% Paramètres imposés
+delay_sec = 0.25;
+g = 0.9;
+K = 10;  % mentionné, mais pas utilisé ici
+
+% Application de l'effet delay avec filtre
+y = effet_delay_filtre(x, delay_sec, g, Fe);
+
+% Sauvegarde du fichier audio demandé
+audiowrite('piano_delay_filtre.wav', y, Fe);  % <-- LIGNE ESSENTIELLE
+
+% Génération des figures temporelles pour le rapport
+t = (0:length(x)-1) / Fe;
+
+% Figure 1 : signal original
+figure;
+plot(t, x, 'b');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Signal original : single\_tone\_piano1.wav');
+grid on;
+xlim([0 max(t)]);
+saveas(gcf, 'signal_original_filtre_test.png');
+
+% Figure 2 : signal avec effet delay filtré
+figure;
+plot(t, y, 'r');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Signal avec effet delay (via filtre)');
+grid on;
+xlim([0 max(t)]);
+saveas(gcf, 'signal_delay_filtre.png');
diff --git a/src/question/question3_19.m b/src/question/question3_19.m
new file mode 100644
index 0000000000000000000000000000000000000000..3d69849c08a5fd037897b2cded8291c659e82bfb
--- /dev/null
+++ b/src/question/question3_19.m
@@ -0,0 +1,23 @@
+clear; clc;
+
+Fe = 44100;             % fréquence d'échantillonnage
+delay_sec = 0.25;       % retard en secondes
+tau = round(delay_sec * Fe);  % conversion en échantillons
+g = 0.9;
+
+% Coefficients du filtre delay
+b = 1;
+a = [1, zeros(1, tau - 1), g];
+
+% Calcul de la réponse en fréquence
+[H, f] = freqz(b, a, 2048, Fe);  % 2048 points sur [0, Fe/2]
+
+% Affichage du module en dB
+figure;
+plot(f, 20*log10(abs(H)), 'r', 'LineWidth', 1.5);
+xlabel('Fréquence (Hz)');
+ylabel('Amplitude (dB)');
+title('Réponse en fréquence du filtre delay filtré');
+grid on;
+xlim([0 Fe/2]);
+saveas(gcf, 'reponse_freq_delay_filtre.png');  % pour le rapport
diff --git a/src/question/question3_3.m b/src/question/question3_3.m
new file mode 100644
index 0000000000000000000000000000000000000000..2534c136d7360bb714bc46426e6810911dd41077
--- /dev/null
+++ b/src/question/question3_3.m
@@ -0,0 +1,24 @@
+clear all; close all; clc;
+
+% Charger les signaux
+load('signal_excitation.mat');  % Charge xe1, xe2, fe
+
+% Autocorrélation des deux signaux
+r1 = xcorr(xe1, 'normalized');
+r2 = xcorr(xe2, 'normalized');
+
+% Axe temporel pour affichage
+l1 = length(xe1);
+l2 = length(xe2);
+lags1 = -(l1-1):(l1-1);
+lags2 = -(l2-1):(l2-1);
+
+% Affichage
+figure;
+subplot(2,1,1);
+plot(lags1, r1); title('Autocorrélation de xe1');
+xlabel('Décalage'); ylabel('Amplitude'); grid on;
+
+subplot(2,1,2);
+plot(lags2, r2); title('Autocorrélation de xe2');
+xlabel('Décalage'); ylabel('Amplitude'); grid on;
diff --git a/src/question/question3_4.m b/src/question/question3_4.m
new file mode 100644
index 0000000000000000000000000000000000000000..6a0227739bc1ef1240f751c73692c721acf2a07a
--- /dev/null
+++ b/src/question/question3_4.m
@@ -0,0 +1,27 @@
+clear all; close all; clc;
+
+% Charger les signaux d'excitation et leur fréquence d'échantillonnage
+load('signal_excitation.mat');  % variables : xe1, xe1, fe
+
+% Étape 1 – Simuler l'effet de la pièce sur le signal xe1
+y = simule_piece(xe1, fe);   
+
+% (optionnel) Écouter le signal en sortie
+soundsc(y, fe);
+
+% Étape 2 – Calcul de l’intercorrélation R_yx(u)
+r_est = xcorr(y, xe1);       % intercorrélation entre sortie et excitation
+lags = -(length(xe1)-1):(length(y)-1);  % axe des décalages
+
+% Étape 3 – Centrer sur la partie causale (à partir du pic)
+[~, i_max] = max(r_est);
+r_causale = r_est(i_max:end);  % on garde seulement la partie causale
+temps = (0:length(r_causale)-1) / fe;  % axe temporel en secondes
+
+% Étape 4 – Affichage de la réponse impulsionnelle estimée
+figure;
+plot(temps, r_causale, 'LineWidth', 1.5);
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Réponse impulsionnelle estimée de la pièce');
+grid on;
diff --git a/src/question/question3_5.m b/src/question/question3_5.m
new file mode 100644
index 0000000000000000000000000000000000000000..36d9bba7c0ba074e0603ade6acbad5ded3468a83
--- /dev/null
+++ b/src/question/question3_5.m
@@ -0,0 +1,42 @@
+%% Question 3.6 – Application de la réverbération via convolution directe
+clear; clc; close all;
+
+% 1. Charger un signal audio à traiter
+[x, fe] = audioread("single_tone_guitar_nylon_string_a2.wav");  % fichier .wav à définir
+x = x(:,1);  % Ne garder qu'un canal si le signal est stéréo
+
+% 2. Charger ou générer la réponse impulsionnelle h
+load('signal_excitation.mat');        % contient fe, xe1
+h = simule_piece(xe1, fe);            % réponse impulsionnelle simulée
+
+% 3. Appliquer la réverbération via convolution classique + mesurer le temps
+tic;
+y = effet_reverb(x, h);
+t_reverb = toc;
+
+fprintf('Temps de calcul de la convolution classique : %.6f secondes\n', t_reverb);
+
+% 4. Écoute du signal d'origine et du signal réverbéré
+disp('Lecture du signal original...');
+soundsc(x, fe);
+pause(2);
+disp('Lecture du signal réverbéré...');
+soundsc(y, fe);
+
+% 5. Sauvegarder le résultat
+y = y / max(abs(y));  % Normalisation entre -1 et 1
+audiowrite('signal_reverbere.wav', y, fe);
+
+% 6. Tracer un aperçu des signaux
+t = (0:length(x)-1) / fe;
+figure;
+plot(t, x, 'b'); hold on;
+plot(t, y, 'r');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+legend('Original', 'Avec réverbération');
+title('Comparaison des signaux original et réverbéré');
+grid on;
+
+% 7. Sauvegarder la figure
+saveas(gcf, 'reverbationnnnnn.png');
diff --git a/src/question/question3_6.m b/src/question/question3_6.m
new file mode 100644
index 0000000000000000000000000000000000000000..7620daca3708c5bbe76788d3118ede8b315e3125
--- /dev/null
+++ b/src/question/question3_6.m
@@ -0,0 +1,41 @@
+%% Question 3.6 – Application de la réverbération via convolution directe
+clear; clc; close all;
+
+% 1. Charger un signal audio à traiter
+[x, fe] = audioread("single_tone_guitar_nylon_string_a2.wav");  % fichier .wav à définir
+x = x(:,1);  % Ne garder qu'un canal si le signal est stéréo
+
+% 2. Charger ou générer la réponse impulsionnelle h
+load('signal_excitation.mat');        % contient fe, xe1
+h = simule_piece(xe1, fe);            % réponse impulsionnelle simulée
+
+% 3. Appliquer la réverbération via convolution classique + mesurer le temps
+tic;
+y = effet_reverb(x, h);
+t_reverb = toc;
+
+fprintf('Temps de calcul de la convolution classique : %.6f secondes\n', t_reverb);
+
+% 4. Écoute du signal d'origine et du signal réverbéré
+disp('Lecture du signal original...');
+soundsc(x, fe);
+pause(2);
+disp('Lecture du signal réverbéré...');
+soundsc(y, fe);
+
+% 5. Sauvegarder le résultat
+audiowrite('signal_reverbere.wav', y, fe);
+
+% 6. Tracer un aperçu des signaux
+t = (0:length(x)-1) / fe;
+figure;
+plot(t, x, 'b'); hold on;
+plot(t, y, 'r');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+legend('Original', 'Avec réverbération');
+title('Comparaison des signaux original et réverbéré');
+grid on;
+
+% 7. Sauvegarder la figure
+saveas(gcf, 'reverbationnnnnn.png');
diff --git a/src/question/question3_7.m b/src/question/question3_7.m
new file mode 100644
index 0000000000000000000000000000000000000000..4c3f8b82bacb3f442876a647caa99b8387bed4b2
--- /dev/null
+++ b/src/question/question3_7.m
@@ -0,0 +1,39 @@
+%% Question 3.7 – Application de la réverbération via convolution rapide (FFT)
+clear; clc; close all;
+
+% 1. Charger le signal audio
+[x, fe] = audioread("single_tone_guitar_nylon_string_a2.wav");
+x = x(:,1);  % un seul canal si stéréo
+
+% 2. Charger la réponse impulsionnelle simulée
+load('signal_excitation.mat');
+h = simule_piece(xe1, fe);
+
+% 3. Appliquer la convolution rapide + mesurer le temps
+tic;
+y_fft = effet_reverb_fft(x, h);
+t_fft = toc;
+
+fprintf('Temps de calcul (convolution FFT) : %.6f secondes\n', t_fft);
+
+% 4. Normalisation
+y_fft = y_fft / max(abs(y_fft));  % éviter le clipping
+
+% 5. Écoute et export
+soundsc(x,fe)
+pause(length(x(:,1))/fe+1);
+soundsc(y_fft, fe);
+
+audiowrite('signal_reverbere_fft.wav', y_fft, fe);
+
+% 6. Affichage comparatif
+t = (0:length(x)-1) / fe;
+figure;
+plot(t, x, 'b'); hold on;
+plot(t, y_fft(1:length(x)), 'r');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+legend('Original', 'Réverbéré (FFT)');
+title('Réverbération via convolution rapide (FFT)');
+grid on;
+saveas(gcf, 'reverb_fft_guitare.png');
diff --git a/src/question/reponse_freq_delay_filtre.png b/src/question/reponse_freq_delay_filtre.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1097feeecb3b861368128c7809cc0452013d785
Binary files /dev/null and b/src/question/reponse_freq_delay_filtre.png differ
diff --git a/src/question/reponse_impulsionnelle_causale.png b/src/question/reponse_impulsionnelle_causale.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b0b805a7695b9c8f55d46be0890cf423e84633b
Binary files /dev/null and b/src/question/reponse_impulsionnelle_causale.png differ
diff --git a/src/question/reverb_fft_guitare.png b/src/question/reverb_fft_guitare.png
new file mode 100644
index 0000000000000000000000000000000000000000..30ac757b6f917c70538bf71570f87d2705b3c6eb
Binary files /dev/null and b/src/question/reverb_fft_guitare.png differ
diff --git a/src/question/reverbationnnnnn.png b/src/question/reverbationnnnnn.png
new file mode 100644
index 0000000000000000000000000000000000000000..149bf9629105e0c34580447a48a602f7431a6008
Binary files /dev/null and b/src/question/reverbationnnnnn.png differ
diff --git a/src/question/reverberationvf.ong.fig b/src/question/reverberationvf.ong.fig
new file mode 100644
index 0000000000000000000000000000000000000000..3f7fcc56395411fef8196130a72e0e8a9f3b3851
Binary files /dev/null and b/src/question/reverberationvf.ong.fig differ
diff --git a/src/question/sawtooth_filtered.wav b/src/question/sawtooth_filtered.wav
new file mode 100644
index 0000000000000000000000000000000000000000..1d0625fbb47f78af027bb47b205249f07fbd6f5c
Binary files /dev/null and b/src/question/sawtooth_filtered.wav differ
diff --git a/src/question/signal_delay_025s_g09.png b/src/question/signal_delay_025s_g09.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c3f6b2c45b34ac9e4542a1948ad97a8585ca3b4
Binary files /dev/null and b/src/question/signal_delay_025s_g09.png differ
diff --git a/src/question/signal_delay_filtre.png b/src/question/signal_delay_filtre.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c2075adb9a17fd84fc61751c073e8e9a1506a7b
Binary files /dev/null and b/src/question/signal_delay_filtre.png differ
diff --git a/src/question/signal_excitation.mat b/src/question/signal_excitation.mat
new file mode 100644
index 0000000000000000000000000000000000000000..3cb1b3eceba9c5fd2bbc8b31fbe33ffdd7cfe1ba
Binary files /dev/null and b/src/question/signal_excitation.mat differ
diff --git a/src/question/signal_original.png b/src/question/signal_original.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cc13b96e5c43e1891a3574d7c78e41d08aa6167
Binary files /dev/null and b/src/question/signal_original.png differ
diff --git a/src/question/signal_original_filtre_test.png b/src/question/signal_original_filtre_test.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c0bb94da339a119d56c01878f67bfb067b466d0
Binary files /dev/null and b/src/question/signal_original_filtre_test.png differ
diff --git a/src/question/signal_reverbere.wav b/src/question/signal_reverbere.wav
new file mode 100644
index 0000000000000000000000000000000000000000..179106f0f7edf1485a46e6df6ad319edce440706
Binary files /dev/null and b/src/question/signal_reverbere.wav differ
diff --git a/src/question/signal_reverbere_fft.wav b/src/question/signal_reverbere_fft.wav
new file mode 100644
index 0000000000000000000000000000000000000000..27dd8a72c924da5fad0a3259fcfaac9069b7c400
Binary files /dev/null and b/src/question/signal_reverbere_fft.wav differ
diff --git a/src/question/signaux_q23.png b/src/question/signaux_q23.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fa4f5a7bd1e8d763055cde6784dbb53565f3205
Binary files /dev/null and b/src/question/signaux_q23.png differ
diff --git a/src/question/simule_piece.m b/src/question/simule_piece.m
new file mode 100644
index 0000000000000000000000000000000000000000..717c5bb63786b67d87c2e0987d2b267bfe48425b
--- /dev/null
+++ b/src/question/simule_piece.m
@@ -0,0 +1,14 @@
+function [ y ] = simule_piece( x,fech )
+%ENTREE : x=signal émis par le haut-parleur
+%         fech=fréquence d'échantillonnage de x
+%SORTIE : y=signal capté par le microphone dans la pièce
+%%
+
+load('empreinte_ac')
+if fech~=fe, error('Fréquence d''échantillonnage incorrecte'), end
+empreinte=empreinte(1:80000);
+y=conv(x,empreinte);
+
+
+end
+
diff --git a/src/question/single_tone_guitar_nylon_string_a2.wav b/src/question/single_tone_guitar_nylon_string_a2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..b36d25495e30cebbaac2cb248e629bddf8bdb2bc
Binary files /dev/null and b/src/question/single_tone_guitar_nylon_string_a2.wav differ
diff --git a/src/question/single_tone_piano1.wav b/src/question/single_tone_piano1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..af184b832ca44b0a28441e62e7ade80f617c00e5
Binary files /dev/null and b/src/question/single_tone_piano1.wav differ
diff --git a/src/question/spectres_q23.png b/src/question/spectres_q23.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2153c98ca14ee37497bc46bf9d740864cd53291
Binary files /dev/null and b/src/question/spectres_q23.png differ
diff --git a/src/question/square_filtered.wav b/src/question/square_filtered.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0df4bbbd0c7e689611646a5689835365a845e02a
Binary files /dev/null and b/src/question/square_filtered.wav differ
diff --git a/src/question/synth_additive.wav b/src/question/synth_additive.wav
new file mode 100644
index 0000000000000000000000000000000000000000..69f38a8fdb8b7916ffdaf8df5991d648d72e6704
Binary files /dev/null and b/src/question/synth_additive.wav differ
diff --git a/src/question/synth_piano1_TFDI.wav b/src/question/synth_piano1_TFDI.wav
new file mode 100644
index 0000000000000000000000000000000000000000..3d1f8b0c03555aa2f47e194988faae76ee1b4b75
Binary files /dev/null and b/src/question/synth_piano1_TFDI.wav differ
diff --git a/src/question/synth_soustractive.wav b/src/question/synth_soustractive.wav
new file mode 100644
index 0000000000000000000000000000000000000000..cba9ab17168c2f743c45e95dcd0f0d5a286fc358
Binary files /dev/null and b/src/question/synth_soustractive.wav differ
diff --git a/src/question/synthese_TFD_inverse.wav b/src/question/synthese_TFD_inverse.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9ce35555e98f28d12828f783d4375b8ad8c3aaff
Binary files /dev/null and b/src/question/synthese_TFD_inverse.wav differ
diff --git a/src/question/synthese_harmonique_piano1.wav b/src/question/synthese_harmonique_piano1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..b6293a4edd59f18a9481f4c28251dba7fbda728c
Binary files /dev/null and b/src/question/synthese_harmonique_piano1.wav differ
diff --git a/src/question/synthese_piano1.wav b/src/question/synthese_piano1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a1d12f9e29de7b7e58a4abe41d9eff57c1346fa3
Binary files /dev/null and b/src/question/synthese_piano1.wav differ
diff --git a/src/question/synthese_piano1_ADSR.wav b/src/question/synthese_piano1_ADSR.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a1d12f9e29de7b7e58a4abe41d9eff57c1346fa3
Binary files /dev/null and b/src/question/synthese_piano1_ADSR.wav differ
diff --git a/src/question/synthese_piano1_sans_ADSR.wav b/src/question/synthese_piano1_sans_ADSR.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0a2b60922c90670ab710e414c2e0ef0decbec64f
Binary files /dev/null and b/src/question/synthese_piano1_sans_ADSR.wav differ
diff --git a/src/question/synthetic_piano_ADSR.wav b/src/question/synthetic_piano_ADSR.wav
new file mode 100644
index 0000000000000000000000000000000000000000..db99ac86e822754ec1e2c4b3903127bd5f65b70a
Binary files /dev/null and b/src/question/synthetic_piano_ADSR.wav differ
diff --git a/src/question/synthetic_piano_IFFT.wav b/src/question/synthetic_piano_IFFT.wav
new file mode 100644
index 0000000000000000000000000000000000000000..91cc867692580854d3e6104206fee3b8fecf5bc7
Binary files /dev/null and b/src/question/synthetic_piano_IFFT.wav differ
diff --git a/src/question/test_effet_delay.m b/src/question/test_effet_delay.m
new file mode 100644
index 0000000000000000000000000000000000000000..1f1d68fdca993f91816a2677647afe872ca00b56
--- /dev/null
+++ b/src/question/test_effet_delay.m
@@ -0,0 +1,30 @@
+[x, Fe] = audioread('single_tone_piano1.wav');
+x = x(:,1);  % garder un seul canal si stéréo
+
+% Appliquer effet delay
+y = effet_delay(x, 0.25, 0.9, Fe);  % delay de 250 ms, g = 0.9
+
+% Écoute + export audio
+soundsc(y, Fe);
+audiowrite('accord_piano_delay.wav', y, Fe);
+
+% Créer axe temporel
+t = (0:length(x)-1) / Fe;
+
+% --- Figure 1 : signal original ---
+figure;
+plot(t, x, 'b');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Signal original : single\_tone\_piano1.wav');
+grid on;
+saveas(gcf, 'signal_original.png');
+
+% --- Figure 2 : signal traité ---
+figure;
+plot(t, y(1:length(x)), 'r');
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Signal avec effet delay');
+grid on;
+saveas(gcf, 'signal_delay_025s_g09.png');
diff --git a/src/question/untitled11.m b/src/question/untitled11.m
new file mode 100644
index 0000000000000000000000000000000000000000..9b3f47d10687f7f625ab322dc4df020e7c9c6634
--- /dev/null
+++ b/src/question/untitled11.m
@@ -0,0 +1,43 @@
+% Paramètres de base
+fe = 44100;               % Fréquence d’échantillonnage
+f1 = 220.37;              % Fréquence fondamentale du piano (à ajuster selon ton cas)
+A = [1, 0.7, 0.5, 0.3, 0.2, 0.15, 0.1, 0.05];  % Amplitudes relatives des 8 harmoniques
+% Enveloppe ADSR (type piano)
+attack = 0.02;    % 20 ms
+decay = 0.15;     % 150 ms
+sustain = 0.1;    % 100 ms
+release = 0.4;    % 400 ms
+sustain_level = 0.3;
+dur = attack + decay + sustain + release;
+t = linspace(0, dur, round(dur * fe));  % Axe temporel
+% Construction de l'enveloppe ADSR
+env = [linspace(0, 1, round(attack * fe)), ...
+      linspace(1, sustain_level, round(decay * fe)), ...
+      sustain_level * ones(1, round(sustain * fe)), ...
+      linspace(sustain_level, 0, round(release * fe))];
+% Corriger la taille au cas où
+if length(env) < length(t)
+   env = [env, zeros(1, length(t) - length(env))];
+elseif length(env) > length(t)
+   env = env(1:length(t));
+end
+% Synthèse du son par addition des 8 harmoniques
+y = zeros(size(t));
+for n = 1:8
+   y = y + A(n) * sin(2 * pi * f1 * n * t);
+end
+% Application de l'enveloppe
+y = y .* env;
+% Normalisation
+y = y / max(abs(y));
+% Lecture du son 
+soundsc(y, fe);
+% Sauvegarde du son
+audiowrite('synthetic_piano_ADSR.wav', y, fe);
+% Tracé de l'enveloppe
+figure;
+plot(t, env, 'LineWidth', 1.5);
+xlabel('Temps (s)');
+ylabel('Amplitude');
+title('Enveloppe ADSR - Son synthétique de piano');
+grid on;
\ No newline at end of file
diff --git a/src/question/untitled2.asv b/src/question/untitled2.asv
new file mode 100644
index 0000000000000000000000000000000000000000..bb8fc7f6ec64dcf279fccc7b12ffaa266289b5c0
--- /dev/null
+++ b/src/question/untitled2.asv
@@ -0,0 +1,44 @@
+%% Question 2.1 – Spectre du signal carré et dent de scie
+
+clear; close all; clc;
+
+% --- Paramètres ---
+Fe = 44100;         % Fréquence d’échantillonnage (Hz)
+f0 = 440;           % Fréquence fondamentale (Hz)
+T = 1 / f0;         % Période du signal (s)
+duree = 0.05;       % Durée du signal (s)
+N = round(Fe * duree);   % Nombre d’échantillons
+t = (0:N-1) / Fe;         % Axe temporel
+
+% --- Génération des signaux ---
+x_carre = square(2*pi*f0*t);      % Signal carré centré entre -1 et 1
+x_dent  = sawtooth(2*pi*f0*t);    % Signal dent de scie centré entre -1 et 1
+
+% --- Transformées de Fourier ---
+X_carre = fft(x_carre);
+X_dent  = fft(x_dent);
+f = (0:N-1)*(Fe/N);               % Axe fréquentiel
+
+% --- Normalisation et passage en dB ---
+X_carre_dB = 20*log10(abs(X_carre)/max(abs(X_carre)));
+X_dent_dB  = 20*log10(abs(X_dent)/max(abs(X_dent)));
+
+% --- Affichage des spectres ---
+figure;
+
+subplot(2,1,1);
+plot(f(1:N/2), X_carre_dB(1:N/2), 'b');
+xlabel('Fréquence (Hz)');
+ylabel('Amplitude (dB)');
+title('Spectre du signal carré (FFT)');
+xlim([0 5000]); grid on;
+
+subplot(2,1,2);
+plot(f(1:N/2), X_dent_dB(1:N/2), 'r');
+xlabel('Fréquence (Hz)');
+ylabel('Amplitude (dB)');
+title('Spectre du signal dent de scie (FFT)');
+xlim([0 5000]); grid on;
+
+% --- Sauvegarde de la figure ---
+saveas(gcf, 'q21_spectres_carre_dent.png');
diff --git a/src/question/xcorr_signaux.png b/src/question/xcorr_signaux.png
new file mode 100644
index 0000000000000000000000000000000000000000..fcf012f3b312db29183aa41b1b2659b20629a314
Binary files /dev/null and b/src/question/xcorr_signaux.png differ