TP-traitement-audio-visuel/TP10/exercice_4.m
2023-06-22 20:47:16 +02:00

78 lines
2.4 KiB
Matlab
Executable file

% clear;
close all;
taille_ecran = get(0, 'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Paramètres :
n_fenetre = 4096; % Largeur de la fenêtre (en nombre d'échantillons)
n_decalage = 2048; % Décalage entre deux fenêtres (en nombre d'échantillons)
fenetre = 'hann'; % Type de la fenêtre
f_min_bruit = 4000; % Fréquence min du bruit généré
f_max_bruit = 12000; % Fréquence max du bruit généré
SNR = 10; % Ratio signal/bruit (élevé => peu bruité)
% Chargement de l'enregistrement
% load enregistrement;
[Y_s, valeurs_tau, valeurs_f] = TFCT(y, f_ech, n_fenetre, n_decalage, fenetre);
S_s = 20 * log10(abs(Y_s) + eps);
% Génération du bruit :
y_b = (2 * rand(length(y), 1) - 1);
[Y_b, valeurs_tau, valeurs_f] = TFCT(y_b, f_ech, n_fenetre, n_decalage, fenetre);
f_min_bruit_ligne = round(f_min_bruit / (f_ech / 2) * size(Y_b, 1));
f_max_bruit_ligne = round(f_max_bruit / (f_ech / 2) * size(Y_b, 1));
Y_b([1:f_min_bruit_ligne - 1 f_max_bruit_ligne + 1:end], :) = 0;
Y_b = Y_b / SNR;
S_b = 20 * log10(abs(Y_b) + eps);
% Ajout du bruit :
Y_sb = Y_s + Y_b;
S_sb = 20 * log10(abs(Y_sb) + eps);
[y_sb, ~] = ITFCT(Y_sb, f_ech, n_decalage, fenetre);
% À faire :
Y_debruite = debruitage(Y_sb, Y_b);
[y_debruite, ~] = ITFCT(Y_debruite, f_ech, n_decalage, fenetre);
% Affichage du signal et du bruit :
% figure('Name', 'Signal et bruit', 'Position', [0.4 * L, 0, 0.6 * L, 0.6 * H]);
% subplot(2, 2, 1);
% imagesc(valeurs_tau, valeurs_f, S_s);
% axis xy;
% xlabel('Temps ($s$)', 'Interpreter', 'Latex');
% ylabel('Frequence ($Hz$)', 'Interpreter', 'Latex');
% title('Signal');
%
% subplot(2, 2, 2);
% imagesc(valeurs_tau, valeurs_f, S_b);
% axis xy;
% xlabel('Temps ($s$)', 'Interpreter', 'Latex');
% ylabel('Frequence ($Hz$)', 'Interpreter', 'Latex');
% title('Bruit');
figure('units','normalized','outerposition',[0 0 1 1])
imagesc(valeurs_tau, valeurs_f, S_sb);
axis xy;
xlabel('Temps (s)');
ylabel('Frequence (Hz)');
drawnow;
export_fig(gcf, "saves/" + filename + "_bruit.png", '-png', '-painters', '-m2');
audiowrite("saves/" + filename + "_bruit.wav", y_sb, f_ech);
S_dn = 20 * log10(abs(Y_debruite) + eps);
figure('units','normalized','outerposition',[0 0 1 1])
imagesc(valeurs_tau, valeurs_f, S_dn);
axis xy;
xlabel('Temps (s)');
ylabel('Frequence (Hz)');
drawnow;
export_fig(gcf, "saves/" + filename + "_denoised.png", '-png', '-painters', '-m2');
audiowrite("saves/" + filename + "_denoised.wav", y_debruite, f_ech);