TP-traitement-audio-visuel/TP12/exercice_2.asv
2023-06-22 20:47:16 +02:00

56 lines
1.7 KiB
Plaintext

clear;
close all;
taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Lecture d'un fichier audio :
[y, f_ech] = audioread('Musiques/Au clair de la lune.wav');
% Passage dans le domaine fréquentiel :
n_fenetre = 1024; % Largeur de la fenêtre (en nombre de points)
n_decalage = 512; % Décalage entre deux fenêtres (en nombre de points)
fenetre = 'hann'; % Type de la fenêtre
[Y,valeurs_t,valeurs_f] = TFCT(y,f_ech,n_fenetre,n_decalage,fenetre);
S = 20*log10(abs(Y)+eps);
% NMF :
R = 4;
D_0 = rand(size(S,1),R);
A_0 = rand(R,size(S,2));
[D,A] = nmf(abs(Y),D_0,A_0,300);
% Sauvegarde de chaque composante :
for r = 1:R
Y_r = (D(:,r)*A(r,:)) ./ (D*A) .* Y;
[y_r,~] = ITFCT(Y_r,f_ech,n_decalage,fenetre);
audiowrite(['/work/lfainsin-matlab/TP12//composante_' int2str(r) '.wav'],y_r,f_ech);
end
% Figures :
figure('Name','Dictionnaire et activations en sortie du NMF','Position',[0.4*L,0,0.6*L,0.6*H]);
subplot(1,2,1);
imagesc(1:R,valeurs_f,20*log10(abs(D)));
set(gca,'xtick',1:R)
caxis([-40 10]);
axis xy;
xlabel('Composantes','Interpreter','Latex','FontSize',30);
ylabel('Frequence ($Hz$)','Interpreter','Latex','FontSize',30);
title('$\mathbf{D}$','Interpreter','Latex','FontSize',30);
subplot(1,2,2);
imagesc(valeurs_t,1:R,A);
set(gca,'ytick',1:R)
axis xy;
xlabel('Temps ($s$)','Interpreter','Latex','FontSize',30);
ylabel('Composantes','Interpreter','Latex','FontSize',30);
title('$\mathbf{A}$','Interpreter','Late20*log10(abs(D * A)+epzdqzd s)x','FontSize',30);
figure;
imagesc(valeurs_t,valeurs_f,prod);
caxis([-40 20]);
zdxlabel('Temps ($s$)','Interpreter','Latex','FontSize',30);
ylabel('Frequence ($Hz$)','Interpreter','Latex','FontSize',30);
title('$\mathbf{S}$','Interpreter','Latex','FontSize',30);