Skip to content
Snippets Groups Projects
Commit e2686c39 authored by TeodoreAutuly's avatar TeodoreAutuly
Browse files

THE END

parent 67ebc840
No related branches found
No related tags found
No related merge requests found
% analyse_delay.m
fe = 44100;
tau = 500; % délai en échantillons
g = 0.7; % coefficient d'atténuation
N = 5; % nombre d'échos à afficher
L = tau*N + 1; % longueur du signal
x = zeros(1, L); x(1) = 1; % impulsion de Dirac
b = [1, zeros(1, tau-1)]; % Numérateur
a = [1, zeros(1, tau-1), g]; % Dénominateur
h = filter(b, a, x);
figure;
stem(0:L-1, h, 'filled');
title('Réponse impulsionnelle du filtre à délai');
xlabel('Échantillon k');
ylabel('h(k)');
grid on;
Nfft = 8192;
nu = linspace(0, 1, Nfft); % Fréquences réduites
H_theo = 1 ./ (1 + g * exp(-2j * pi * nu * tau));
% Réponse en fréquence numérique (DFT de la réponse impulsionnelle)
H_num = fft(h, Nfft);
figure;
subplot(2,1,1);
plot(nu, abs(H_theo), 'r-', 'LineWidth', 2); hold on;
plot(nu, abs(H_num), 'b--', 'LineWidth', 1.2);
legend('Théorique', 'Numérique', 'Location', 'NorthEast');
title('Module de la réponse en fréquence du filtre à délai');
xlabel('Fréquence réduite \nu'); ylabel('|H(\nu)|'); grid on;
xlim([0 0.5]); % Zoom sur la première moitié du spectre
set(gca, 'FontSize', 14);
subplot(2,1,2);
plot(nu, unwrap(angle(H_theo)), 'r-', 'LineWidth', 2); hold on;
plot(nu, unwrap(angle(H_num)), 'b--', 'LineWidth', 1.2);
legend('Théorique', 'Numérique', 'Location', 'NorthEast');
title('Phase de la réponse en fréquence du filtre à délai');
xlabel('Fréquence réduite \nu'); ylabel('Phase (rad)'); grid on;
xlim([0 0.5]);
set(gca, 'FontSize', 14);
\ No newline at end of file
% Analyse de la réponse en fréquence de l'effet de delay filtré (effet_delay_filtre)
delay_time = 0.25; % secondes
g = 0.9;
K = 10;
fe = 44100;
tau = round(delay_time * fe);
Nfft = 8192;
H_delay_filtre = fft(h_delay_filtre, Nfft);
f = linspace(0, fe/2, Nfft/2+1);
figure;
plot(f, abs(H_delay_filtre(1:length(f))), 'LineWidth', 2);
title('Module de la réponse en fréquence de l''effet de delay filtré');
xlabel('Fréquence (Hz)'); ylabel('|H_{delay filtré}(f)|'); grid on;
function y = effet_delay(x, delay_time, g, fe)
% effet_delay - Applique un effet de delay récursif à un signal x
% x : signal d'entrée
% delay_time: temps du delay (en secondes)
% g : coefficient d'amortissement
% fe : fréquence d'échantillonnage (Hz)
% y : signal de sortie
tau = round(delay_time * fe); % délai en échantillons
b = [1, zeros(1, tau-1)]; % Numérateur
a = [1, zeros(1, tau-1), g]; % Dénominateur
y = filter(b, a, x);
end
function y = effet_delay_filtre(x, delay_time, g, K, fe)
% effet_delay_filtre - Effet de delay avec filtre moyenne glissante dans la boucle
% x : signal d'entrée
% delay_time: temps du delay (en secondes)
% g : coefficient d'amortissement
% K : longueur du filtre moyenne
% fe : fréquence d'échantillonnage (Hz)
% y : signal de sortie
tau = round(delay_time * fe); % délai en échantillons
N = length(x);
y = zeros(size(x));
for k = 1:N
% Calcul de la somme glissante sur K échantillons retardés
somme = 0;
for n = 0:K-1
idx = k - tau - n;
if idx > 0
somme = somme + y(idx);
end
end
y(k) = x(k) - g/K * somme;
end
end
File added
File added
% Test de la fonction effet_delay sur un accord de piano
[x, fe] = audioread('wav/piano_chord.wav');
delay_time = 0.25; % secondes
G = 0.9;
K = 10;
y = effet_delay_filtre(x, delay_time, G, K, fe);
audiowrite('piano_delay_filtre.wav', y, fe);
figure;
plot((0:length(y)-1)/fe, y);
title('Accord de piano avec effet de delay filtré');
xlabel('Temps (s)'); ylabel('Amplitude'); grid on;
% Affichage de la réponse en fréquence du signal filtré
y_fft = fft(y, 4096);
f = linspace(0, fe/2, length(y_fft)/2+1);
H = abs(y_fft(1:length(f)));
figure;
plot(f, H, 'LineWidth', 2);
title('Réponse en fréquence du signal avec effet de delay filtré');
xlabel('Fréquence (Hz)'); ylabel('|H(f)|'); grid on;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment