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

115 lines
2.9 KiB
Matlab
Executable file

clear;
close all;
chemin = '/mnt/n7fs/ens/tp_jmelou/Shazam/Morceaux/';
fichiers = dir([chemin '*.wav']);
% Chargement de la base de données :
load bdd;
% Paramètres :
duree_extrait = 10; % Durée des extraits (en secondes)
n_fenetre = 512; % Largeur de la fenêtre (en nombre de points)
n_decalage = 256; % Décalage entre deux fenêtres (en nombre de points)
fenetre = 'hann'; % Type de la fenêtre
N_tests = 100; % Nombre de tests
nb_reconnus = 0;
f = waitbar(0,'Starting');
for i = 1:N_tests
% Lecture d'un fichier audio tiré aléatoirement :
numero_morceau = randi(length(fichiers));
[y,f_ech] = audioread([chemin fichiers(numero_morceau).name]);
% Extrait de durée variable, tiré aléatoirement :
debut_extrait = randi(length(y)-f_ech*duree_extrait);
y = y(debut_extrait:debut_extrait+f_ech*duree_extrait-1);
% Calcul du sonagramme :
[Y,valeurs_t,valeurs_f] = TFCT(y,f_ech,n_fenetre,n_decalage,fenetre);
S = 20*log10(abs(Y)+eps);
% Calcul des pics spectraux :
[pics_t,pics_f] = pics_spectraux(S);
% Calcul des paires :
paires = appariement(pics_t,pics_f);
if length(paires)<1
nb_reconnus = nb_reconnus+1;
continue;
end
% Calcul des identifiants :
identifiants = indexation(paires);
% Comparaison des identifiants :
resultats = recherche_simplifiee(identifiants,bdd);
if length(resultats)<1
continue;
end
[C,ia,ic] = unique(resultats,'rows','stable');
h = accumarray(ic,1);
[m,ind] = max(h);
numero_reconnu = C(ind,1);
if numero_reconnu==numero_morceau
nb_reconnus = nb_reconnus+1;
end
waitbar(i/N_tests,f,sprintf('Progress: %d %%',floor(i/N_tests*100)));
end
fprintf('Precision : %4.1f %% \n',nb_reconnus/N_tests*100);
close(f);
nb_reconnus = 0;
f = waitbar(0,'Starting');
for i = 1:N_tests
% Lecture d'un fichier audio tiré aléatoirement :
numero_morceau = randi(length(fichiers));
[y,f_ech] = audioread([chemin fichiers(numero_morceau).name]);
% Extrait de durée variable, tiré aléatoirement :
debut_extrait = randi(length(y)-f_ech*duree_extrait);
y = y(debut_extrait:debut_extrait+f_ech*duree_extrait-1);
% Calcul du sonagramme :
[Y,valeurs_t,valeurs_f] = TFCT(y,f_ech,n_fenetre,n_decalage,fenetre);
S = 20*log10(abs(Y)+eps);
% Calcul des pics spectraux :
[pics_t,pics_f] = pics_spectraux(S);
% Calcul des paires :
paires = appariement(pics_t,pics_f);
if length(paires)<1
nb_reconnus = nb_reconnus+1;
continue;
end
% Calcul des identifiants :
identifiants = indexation(paires);
% Comparaison des identifiants :
resultats = recherche_avancee(identifiants, paires(:,3), bdd);
if length(resultats)<1
continue;
end
[C,ia,ic] = unique(resultats,'rows','stable');
h = accumarray(ic,1);
[m,ind] = max(h);
numero_reconnu = C(ind,1);
if numero_reconnu==numero_morceau
nb_reconnus = nb_reconnus+1;
end
waitbar(i/N_tests,f,sprintf('Progress: %d %%',floor(i/N_tests*100)));
end
fprintf('Precision : %4.1f %% \n',nb_reconnus/N_tests*100);
close(f);