56 lines
1.7 KiB
Plaintext
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);
|