diff --git a/src/wav/question_3_17.m b/src/wav/question_3_17.m new file mode 100644 index 0000000000000000000000000000000000000000..bfc270de8f0a3769ffa042236fe73575c8d4485a --- /dev/null +++ b/src/wav/question_3_17.m @@ -0,0 +1,54 @@ +function y = effet_delay_filtre(x, delay_time, g, K, Fe) +% effet_delay_filtre - effet de delay avec filtre de moyenne glissante dans la boucle +% +% Entrées : +% x : signal d'entrée +% delay_time : durée du delay (en secondes) +% g : coefficient d'amortissement +% K : longueur de la moyenne glissante +% Fe : fréquence d'échantillonnage (en Hz) +% +% Sortie : +% y : signal de sortie après application du filtre + + N = length(x); % Longueur du signal + tau = round(delay_time * Fe); % Retard en échantillons + y = zeros(size(x)); % Initialisation du signal de sortie + + for k = 1:N + % Indices pour le filtre glissant + sum_term = 0; + for n = 0:K-1 + idx = k - tau - n; + if idx > 0 + sum_term = sum_term + y(idx); + end + end + y(k) = x(k) - (g / K) * sum_term; + end +end +% Charger le signal (par exemple un piano) +[x, Fe] = audioread('single_tone_guitar_nylon_string_a3.wav'); % Remplace 'piano.wav' par le bon fichier si besoin +x = x(:,1); % Si le son est stéréo → mono + +% Paramètres du delay +tau_sec = 0.001; % Delay en secondes +g = 0.9; % Coefficient d'amortissement +K = 10; % Longueur de la moyenne glissante + +% Application du filtre avec delay et moyenne glissante +y = effet_delay_filtre(x, tau_sec, g, K, Fe); + +% Écoute du résultat +soundsc(y, Fe); + +% Sauvegarde du fichier audio +audiowrite('piano_delay_filtre.wav', y, Fe); + +% Affichage temporel (optionnel) +t = (0:length(y)-1)/Fe; +plot(t, y); +xlabel('Temps (s)'); +ylabel('Amplitude'); +title('Signal après effet delay avec filtre moyenne glissante'); +grid on;