This is an old revision of the document!


Această temă este veche. NU o faceți pe aceasta.

Temă

Această temă are termen limită de predare 21 Noiembrie 23:59, până când va fi încărcată pe curs.upb.ro și va fi prezentată la laborator în săptămâna următoare. Dacă tema va fi încărcată după termenul limită va avea o penalizare de minim 30%, apoi câte 10% pentru fiecare zi peste termenul limită.

Tema valorează 10% din punctajul cursului.

Enunț tema: pdf

Date : Date

tema_octave.m
% Tema PS 2021
% Autor: Andrei Nicolicioiu
 
clear all 
close all
 
% [audio_train,labels_train, audio_test,labels_test] = load_data();
load('data.mat')
plot_figs = true
 
% For faster results use just a fraction of each audio file 
% The results will be poorer but the speed would improve
% select a fraction of alpha percents of each file 
alpha = 1 / 1000;
b = floor(size(audio_train,1) / 2 - alpha * size(audio_train,1) / 2 + 1);
e = floor(size(audio_train,1) / 2 + alpha * size(audio_train,1) / 2);
audio_train_small = audio_train(b:e,:);
b = floor(size(audio_train,1) / 2 - alpha * size(audio_train,1) / 2 + 1);
e = floor(size(audio_train,1) / 2 + alpha * size(audio_train,1) / 2);
audio_test_small = audio_test(b:e,:);
 
% calculam vectorii de trasaturi pentru fiecare fisier din datasetul de train si de  test
% get_features primeste toate sunetele din set date intr-o matrice (audio_train)
% de dimensiune: numar_ensantioane x numar_sunete si returnează toate
% featurile acestor sunete intr-o matrice (feat_train) de dimensiune numar_sunete x (2*M)
% alaturi de setul de filtre h folosite (filters) reprezentat de o matrice de dimeniune K x M
 
% TODO: calculati featurile folosind un set de M filtre Gammatone
% plot_figs == true afisati figurile cerute in tema
 
[filters, feat_train] = get_features(audio_train, fs, plot_figs);
[filters, feat_test] = get_features(audio_test, fs, plot_figs);
 
% size(audio_train) = numar_ensantioane x numar_sunete = 160704 x 300
% size(feat_train)  = numar_sunete x (2*M) = 300 x 24
% size(filters)     = K  x   M
 
% antrenam un clasificator
model = train_sc(feat_train,labels_train,'LDA');
 
% prezicem clasele pentru datasetul de train si de test
results_train = test_sc(model,feat_train);
results_test = test_sc(model,feat_test);
 
% calculam acuratetea pe train si test
acc_train = mean(results_train.classlabel(:) == labels_train(:));
acc_test  = mean(results_test.classlabel(:) == labels_test(:));
 
sprintf('Accuracy on train: %0.2f', acc_train)
sprintf('Accuracy on test: %0.2f', acc_test)
 
 
% TODO: verificati calitativ cateva exemple din setul de test. 
% comparati clasa corecta si clasa presiza cu sunetul auzit
 
% alegem random un fisier audio si verificam daca am clasificat corect
% labels_name = ["Dog"; "Rooster"; "Rain" ; "Waves"; "Fire"; "Baby"; ...
%     "Sneezing"; "Clock"; "Helicopter"; "Chainsow"];
% 
% r = round(rand() * 100);
% sound(audio_test(:,r),fs);
% sprintf('Clasa corecta: %s', labels_name(labels_test(r),:))
% sprintf('Clasa prezisa: %s', labels_name(results_test.classlabel(r),:))

Dacă folosiți MATLAB, utilizați acest schelete de cod:

tema_matlab.m
% Tema PS 2021
% Autor: Andrei Nicolicioiu
 
clear all 
close all
 
% [audio_train,labels_train, audio_test,labels_test] = load_data();
load('data.mat')
 
plot_figs = true
 
% For faster results use just a fraction of each audio file 
% The results will be poorer but the speed would improve
% select a fraction of alpha percents of each file 
alpha = 1 / 1000;
b = floor(size(audio_train,1) / 2 - alpha * size(audio_train,1) / 2 + 1);
e = floor(size(audio_train,1) / 2 + alpha * size(audio_train,1) / 2);
audio_train_small = audio_train(b:e,:);
b = floor(size(audio_train,1) / 2 - alpha * size(audio_train,1) / 2 + 1);
e = floor(size(audio_train,1) / 2 + alpha * size(audio_train,1) / 2);
audio_test_small = audio_test(b:e,:);
 
% calculam vectorii de trasaturi pentru fiecare fisier din datasetul de train si de  test
% get_features primeste toate sunetele din set date intr-o matrice (audio_train)
% de dimensiune: numar_ensantioane x numar_sunete si returnează toate
% featurile acestor sunete intr-o matrice (feat_train) de dimensiune numar_sunete x (2*M)
% alaturi de setul de filtre h folosite (filters) reprezentat de o matrice de dimeniune K x M
 
% TODO: calculati featurile folosind un set de M filtre Gammatone
% plot_figs == true afisati figurile cerute in tema
[filters, feat_train] = get_features(audio_train, fs, plot_figs);
[filters, feat_test] = get_features(audio_test, fs, plot_figs);
 
% size(audio_train) = numar_ensantioane x numar_sunete = 160704 x 300
% size(feat_train)  = numar_sunete x (2*M) = 300 x 24
% size(filters)     = K  x   M
 
% antrenam un clasificator
lda=fitcdiscr(feat_train,labels_train,'discrimType','pseudoLinear' );
 
% prezicem clasele pentru datasetul de train si de test
results_train = predict(lda,feat_train);
results_test = predict(lda,feat_test);
 
 
% calculam acuratetea pe train si test
acc_test  = mean(results_test(:) == labels_test(:));
acc_train = mean(results_train(:) == labels_train(:));
 
sprintf('Accuracy on train: %0.2f', acc_train)
sprintf('Accuracy on test: %0.2f', acc_test)
 
 
% TODO: verificati calitativ cateva exemple din setul de test. 
% comparati clasa corecta si clasa presiza cu sunetul auzit
 
% alegem random un fisier audio si verificam daca am clasificat corect
% labels_name = {'Dog';'Rooster'; 'Rain' ; 'Waves';'Fire';'Baby';...
%     'Sneezing';'Clock';'Helicopter';'Chainsow'};
% labels_name = string(labels_name);
% 
% r = round(rand() * 100);
% sound(audio_test(:,r),fs);
% sprintf('Clasa corecta: %s', labels_name(labels_test(r)))
% sprintf('Clasa prezisa: %s', labels_name(pred_test(r)))

ps/tema_2021.1668792859.txt.gz · Last modified: 2022/11/18 19:34 by ionut.gorgos
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0