Professional Documents
Culture Documents
Golic
Golic
Golic
UVOD
Pretraivanje muzikih informacija (eng. Music Information Retrieval MIR) 1)
predstavlja jednu interdisciplinarnu nauku koja datira jo od 1960. godine, a svoj procvat
doivljava devedesetih godina prolog vijeka, paralelno sa razvojem raunara, interneta i
digitalnih audio formata. Jedan od kljunih problema koji se ovde javlja je omoguavanje
efikasnog pristupa ogromnim kolekcijama muzikih sadraja, kao i pronalaenje
algoritama za analiziranje, obradu, pretragu i arhiviranje tih sadraja. U poreenju sa
tradicionalnim pretraivanjem tekstualnih informacija, pretraivanje muzikih informacija
je mnogo kompleksniji proces jer zahtijeva razmatranje nekoliko razliitih reprezentacija
informacionog sadraja, koji moe biti dat u formi digitalnog audia (mp3, wav, wma i sl.)
kao i u formi simbolikih podataka (MIDI, notna transkripcija, tekst pjesme itd.).
Automatsko prepoznavanje akorda ve nekoliko godina predstavlja problem od
interesa, u kontekstu pretraivanja muzikih informacija. Stoga su vreni razni pokuaji
implementacije odgovarajueg sistema, koristei postojee znanje iz digitalne obrade
signala kao i iz oblasti statistikog modelovanja i prepoznavanja govornih sekvenci.
Akord u muzici se sastoji od nekoliko tonova razliite visine koji zvue
istovremeno, ili odvojeno ako pritom ostavljaju utisak sazvuja. Najee su to skupovi tri
ili vie tonova razliite visine, koji se tvore dodavanjem razliitih tonskih intervala
osnovnom tonu. Jedan od mnogih naina klasifikovanja akorda je razvrstavanje prema
broju tonova koji se koriste u njihovoj grai, gdje ton odreuje stepen u dijatonskoj skali,
bez obzira na to u kojoj se oktavi pojavljuje. Akordi koji koriste tri tona zovu se trikordi,
akordi koji koriste etiri tona tetrakordi, pet tonova pentakordi a akordi sa est razliitih
tonova zovu se heksakordi. Tako na primjer, akord C-dur se sastoji od osnovnog tona (C),
velike terce (E) i kvinte (G) dok se akord C-mol dobija dodavanjem sniene (male) terce i
kvinte osnovnom tonu pa imamo niz C-Es-G.
Reanje akorda u vremenu, odnosno akordska progresija, ini osnovu harmonije u
jednom muzikom djelu. Analiziranje cjelokupne harmonijske strukture kompozicije
najee poinje sa obiljeavanjem svakog pojedinog akorda. Iz tog razloga, automatsko
obiljeavanje akorda je veoma korisno za nekog ko se esto susree sa harmonijskom i
muzikolokom analizom. Jednom kada se odredi harmonijski sadraj, sekvenca akorda
moe biti koritena za dalju strukturalnu analizu, gdje se na viem nivou posmatranja mogu
identifikovati fraze i forme muzikog djela.
Sekvenca akorda moe takoe predstavljati solidnu reprezentaciju muzikog
signala za koritenje u sve prisutnijim aplikacijama koje obrauju probleme pretraivanja
muzikih baza podataka, segmentacije muzike, identifikacije muzikih i harmonijskih
slinosti kao i problem audio thumbnailinga tj. kreiranja kratkih reprezentativnih uzoraka
muzikog sadraja. Zbog navedenih, kao i zbog mnogih drugih razloga, problem
automatskog prepoznavanja akorda je u posljednje vrijeme privukao mnoge istraivae iz
oblasti pretraivanja muzikih informacija.
http://www.ismir.net
ij
= 1, i
jk
= 1, j
(2.1)
b
k
pri emu, u svakom koraku ( t t + 1 ), sistem izvri jedan prelaz (makar to bilo isto stanje)
i nakon toga emituje vidljive simbole (vidljivo stanje).
2.3.1 Evaluacija
Vjerovatnoa da je model generisao sekvencu vidljivih stanja V T je:
rmax
P (V T ) = P (V TrT ) P (rT ),
(2.2)
r =1
P(rT ) = P( (t ) (t 1)),
(2.3)
t =1
i u sutini predstalja proizvod svih aij koji odgovaraju skrivenoj sekvenci stanja. U
jednaini (2.3), (T ) = 0 je posljednje, apsorbujue stanje koje emituje jedinstveno
vidljivo stanje v0 . Zbog pretpostavke da emisione vjerovatnoe zavise samo od skrivenih
stanja, prvi faktor u proizvodu jednaine (2.2) se moe zapisati kao:
T
(2.4)
t =1
P (V ) = P (v(t ) (t )) P ( (t ) (t 1)),
T
(2.5)
r =1 t =1
j (t ) = 1
v (t )
i (t 1)aij b jk
i
t = 0, j poetno stanje
t = 0, j = poetno stanje
(2.6)
inae
for t t + 1
c
3.
j (t ) i (t 1)aij bvjk(t )
i =1
4.
until t = T
5. return P(V T ) 0 (T )
6. end
10
i (t ) = 1
v ( t +1)
aij b jk j (t + 1)
j
t = T , i konano stanje
t = T , i = konano stanje
(2.7)
ostalo
for t t 1
c
4.
until t = 1
5. return P(V T ) i (0), za poznato poetno stanje
6. end
P(V T ) P( )
.
P(V T )
(2.8)
11
U praksi su gotovo svi modeli tipa s lijeva na desno (npr. kod prepoznavanja govora) kao
na slici 2.4.
Viterbijev algoritam
1. initialize path {}, t 0
2.
for t t + 1
3.
k 0
4.
for k k + 1
c
5.
k (t ) bvjk( t ) i (t 1)aij
i =1
6.
7.
until k = c
j ' arg max j (t )
8.
9.
10.
11.
until t = T
return path
end
12
U ovom sluaju razmilja se na slian nain kao kod algoritma unaprijed, samo to
se u svakom vremenskom koraku, umjesto sume rauna maksimum proizvoda j (2) a j 2
za svako j. Na taj nain se u datom koraku odreuje najvjerovatnije stanje tj. stanje koje
ima najveu vjerovatnou da bude posjeeno. Sekvenca tih stanja predstavlja
najvjerovatniji put kroz model.
Broj raunskih operacija koje treba izvriti je O(c 2T ) . Neki algoritmi koriste kao
veliinu logaritam vjerovatnoe ( log i (t ) ) i raunaju ukupnu vjerovatnou kao sumu tih
logaritama.
13
ij (t ) =
i (t 1)aij b jk j (t )
(2.9)
P(V T )
t =1
T
ij
(t ) , dok je ukupan (oekivani) broj prelaza na j sa bilo kog drugog stanja dat sa
ij (t ) . Estimat od aij , oznaen sa aij se rauna kao odnos izmeu oekivanog broja
t =1
a ij =
t =1
ij
(t )
.
t =1
ij
(2.10)
(t )
14
b jk =
t =1 i
T
ij
t =1
(t )vk
.
ij
(2.11)
(t )
do z z + 1
3.
4.
5.
aij ( z ) aij ( z )
6.
b jk ( z ) b jk ( z )
7.
15
16
(3.1)
m=0
gdje k oznaava frekvenciju, n vrijeme a w[m] je prozor duine N. Nakon toga rauna se
hromagram signala tj. potrebno je spektar signala preslikati u PCP (Pitch Class Profile)
obiljeja.
PCP obiljeja su 12-dimenzionalni vektori, kod kojih svaki element odgovara
intenzitetu polutona, odnosno hrome. Hromagram preslikava tonove iste vrijednosti hrome,
nezavisno od oktave, u istu PCP klasu (PCP bin). Preslikavanje frekvencije u PCP se
ostvaruje koritenjem logaritamske karakteristike jednako temperovane muzike skale [8].
Kod jednako temperovane skale rastojanje od oktave podijeljeno je na 12 jednakih
intervala (polustepena), posmatrajui frekvenciju u logaritamskoj razmjeri. Na taj nain su
dva tona udaljena jedan od drugog za polustepen ako im frekvencije stoje u odnosu:
1
12
f 2 = 2 f1 = 2 f1.
12
(3.2)
17
Slika 3.1 Frekvencije i tonovi klavira koji odgovaraju jednako temperovanoj skali.
fi = 2 f j = 2 f j .
12
(3.3)
fi
.
fj
(3.4)
18
f
p = 12 log 2
f ref
(3.5)
Zadravanjem ostatka dijeljenja po modulu 12, eliminie se uticaj oktave kojoj frekvencija
pripada:
f
p = 12 log 2
mod 12
f
ref
(3.6)
k =
2
k , k = 0,1, 2,..., N 1.
N
(3.7)
k =
2
k , k = 0,1, 2,..., N 1.
NTs
(3.8)
k
k
= Fs , k = 0,1, 2,..., N 1.
NTs N
(3.9)
k Fs
p (k ) = 12 log 2
N f ref
{0,1, 2,...,11}
(3.10)
i predstavlja
19
PCP[ p, n] =
X[k , n] .
(3.11)
k: p ( k )= p
20
Inicijalizacija HMM-a
21
Pjesme.txt
22
23
http://www.guitar-pro.com
http://www.gprotab.net
24
(4.1)
Na ovaj nain je dobijena matrica koja sadri poetak, kraj i labelu svakog akorda u
MIDI fajlu (Slika 4.4).
25
Slika 4.4 - Matrica sa akordima. Druga i trea kolona daju poetak i kraj (u sekundama) svakog tona
(kolona 1) u okviru akorda. Broj u etvrtoj koloni predstavlja osnovni ton akorda a broj 12 u petoj koloni
oznaava postojanje male terce.
http://midconverter.com
26
Slika 4.5 Primjer PCP matrice. U vrsti 13 je dat vremenski trenutak u kojem je raunat PCP (centar
prozora STFT-a).
Slika 4.6 Grafiki prikaz PCP vektora F-dur (''Hey Jude'', t=1,3s).
27
Akord
Oznaka
C
1
C#
2
D
3
D#
4
E
5
F
6
F#
7
G
8
G#
9
A
10
B
11
H
12
G#m
21
Am
22
Bm
23
Hm
24
Akord
Oznaka
Cm
13
C#m
14
Dm
15
D#m
16
Em
17
Fm
18
F#m
19
Gm
20
28
29
30
31
32
34
Ostale pjesme sadre u veoj mjeri ''netipine'' akorde, a neke od njih i anrovski
odstupaju od veine pjesama Beatlesa. U okviru trening skupa podataka nije bilo
dovoljnog broja pojavljivanja ovih akorda, kao i prelaza izmeu njih, pa model nije
dovoljno obuen da bi dao dobar rezultat prepoznavanja.
Pjesma
A Hard Day's Night
A taste of honey
Across the Universe
Act Naturally
All I've Got To Do
All my loving
All You Need Is Love
And I Love Her
And Your Bird Can Sing
Baby It's You
Don't Let Me Down
Help
Hey Jude
ObLaDi ObLaDa
Please Please Me
Roll Over Beethoven
Tell Me Why
Ticket to Ride
While My Guitar Gently Weeps
Yellow Submarine
You've Really Got A Hold On Me
Rezultat [%]
65,8135
28,6378
66,5552
81,0945
66,6667
56,9252
39,0273
26,2087
21,7042
77,6952
73,6739
60,5416
80,4176
4,6615
66,6250
29,2453
47,8955
40,1648
17,9974
9,5361
21,9842
36
6. ZAKLJUAK
Oblast pretraivanja muzikih informacija (Music Information Retrieval), kao
interdisciplinarna nauka, u posljednje vrijeme privlai sve vei broj istraivaa. Ovo nije
iznenaujue s obzirom na mogunosti koje MIR aplikacije pruaju kako u akademskom,
edukativnom domenu tako i u domenu zabave. Sve do unazad par godina, sa stanovita
muzikologije, raunari nisu imali veliku primjenu u analizi muzikog zapisa. Koriteni su
prosto za snimanje, uvanje i reprodukciju i nudili su pojedine alate u pogledu produkcije i
obrade. Meutim, sada postaje mogue obuiti raunar da prepozna osnovne muzike
elemente, kao to su ritam, melodija, harmonija, tempo i sl.
U ovom radu pokazano je kako se uz pomo raunara moe napraviti sistem za
automatsko prepoznavanje akorda, koritenjem skrivenih Markovljevih modela. Akordi se
tretiraju kao skrivena stanja modela dok se za obiljeja koriste 12-dimenzionalni PCP
vektori. Koriteni su simboliki podaci (MIDI) kako za generisanje labela tako i za
kreiranje audio fajlova. Akcenat je stavljen na automatsko generisanje labela trening
skupa, koje se koriste za obuavanje modela i iz kojih se, zajedno sa audio informacijama,
direktno estimiraju parametri HMM-a.
Nakon obuavanja modela, audio fajl nepoznate sekvence akorda se dovodi na ulaz
sistema i primjenjuje se Viterbijev algoritam koji pronalazi najvjerovatniji put kroz sistem,
odnosno najvjerovatniju sekvencu.
Rezultati dobijeni testiranjem na pjesmama Beatlesa pokazuju da je mogue dobiti
visoku tanost prepoznavanja akorda, pod uslovom da se odabere adekvatan skup podataka
za obuavanje. Izbor trening skupa kao i procjena koliine informacija potrebnih za
obuavanje modela predstavljaju moda i najzahtjevniji dio cjelokupnog problema.
U buduem radu bi trebalo obratiti panju na sljedee stvari:
7. PRILOG
MIDIakordi.m
function gitara=MIDIakordi(ime)
%Funkcija koja odreuje akorde u MIDI fajlu. Svakom pojedinanom PCP
%vektoru dodijeljen je jedan akord (skriveno stanje).
midiime=[ime '.mid'];
midi=readmidi(midiime);
[note,endtime] = midiInfo(midi,0);
gitara=note(:,[3 5 6]); %Uzimamo samo kolone 'note number',
%'start time' i 'end time'.
[vrstagit kolonagit]=size(gitara);
matricakraj=gitara(:,3);
k=1;
while k<=vrstagit
38
trenkraj=matricakraj(k);
indeksi=find(matricakraj==trenkraj);
[vrsteindeksi koloneindeksi]=size(indeksi);
osnovni=gitara(indeksi(1),1);
for i=2:vrsteindeksi
osnovni=min(osnovni,gitara(indeksi(i),1));
end
for i=1:vrsteindeksi
gitara(indeksi(i),4)=rem(osnovni,12);
end
k=k+vrsteindeksi;
end
%Rastojanje 'osnovni ton-mala terca': rem((X1-X2),12)==3.
for i=1:vrstagit
gitara(1,5)=0;
end
k=1;
while k<=vrstagit
trenkraj=matricakraj(k);
indeksi=find(matricakraj==trenkraj);
[vrsteindeksi koloneindeksi]=size(indeksi);
for i=1:vrsteindeksi
if rem(((gitara(indeksi(i),1))-(gitara(indeksi(i),4))),12)==3
for i=1:vrsteindeksi
gitara(indeksi(i),5)=12;
end
end
end
k=k+vrsteindeksi;
end
HMMoip.m
%Obuavanje HMM-a i prepoznavanje sekvence akorda. Svaki put uzimamo
%razliit skup podataka (fajlova) za obuavanje i raunamo procenat
%uspjenosti prepoznavanja za fajl s kojim nismo obuavali model.
%Na kraju dobijene rezultate (procente) usrednjimo.
%(Prije pokretanja skripte potrebno je pokrenuti HMMinic.m
%ili uitati fajl PCPcel21.mat)
%------------------------------------------------------------------%Izdvajanje pjesme za prepoznavanje:
%----------------------------------[vrstaPCP kolonaPCP]=size(PCPcel);
brojfajlova=vrstaPCP-1;
for j=1:vrstaPCP
PCPnep=PCPcel(j,:);
%PCP vektori nepoznate pjesme.
PCPobuka=PCPcel;
PCPobuka(j,:)=[];
%Uklanjanje vektora nepoznate pjesme
%iz trening seta.
39
%Obuavanje HMM-a:
%-----------------for i=1:brojfajlova
[brvrsta brkolona]=size(PCPobuka{i,1});
for k=1:brkolona
obsData{i}(:,k)=PCPobuka{i,1}(1:12,k);
hiddenData{i}(k)=PCPobuka{i,1}(14,k);
end
end
[initState1, transmat1, mu1, Sigma1] = gausshmm_train_observed(obsData, hiddenData, ...
24,'cov_type','diag');
%Prepoznavanje sekvence akorda:
%-----------------------------vjerobs=mixgauss_prob(PCPnep{1,1}(1:12,:), mu1, Sigma1);
sekvenca_akorda = viterbi_path(initState1, transmat1, vjerobs);
%Raunanje procenta pogoenih frejmova (akorda):
%----------------------------------------------clc
pogodjeno=find(sekvenca_akorda==PCPnep{1,1}(14,:));
procenat(j)=((length(pogodjeno))/(length(sekvenca_akorda)))*100;
end
%Usrednjeni procenat:
%-------------------procenat
suma=sum(procenat);
srprocenat=suma/length(procenat)
HMMinic.m
close all, clear all,clc
%Importovanje audio fajlova i formiranje elijskog polja PCPcel.
%Vrste odgovaraju pojedinim fajlovima. U prvoj eliji vrste su smjeteni
% PCP vektori a u drugoj i treoj akordi za svaki vektor.
%--------------------------------------------------------------nazivipjesama=input('Unesite ime txt fajla sa naslovima pjesama: ','s');
disp(' ')
brojfajlova=input('Unesite broj audio fajlova koje elite importovati: ');
str=[nazivipjesama '.txt'];
fid = fopen(str);
celija = textscan(fid, '%s', 'delimiter', '.');
naslovi=celija{1};
for i=1:brojfajlova
[Yime Fs]=wavread(naslovi{i});
PCPcel{i,1}=PCP(Yime,Fs);
PCPcel{i,2}=MIDIakordi(naslovi{i});
PCPcel{i,3}=unique(PCPcel{i,2}(:,[3 4 5]),'rows');
end
%--------------------------------------------------------------------%Kodovaemo akorde na sljedei nain:
40
% C=1 C#=2 D=3 D#=4 E=5 F=6 F#=7 G=8 G#=9 A=10 B=11 H=12; Cm=13
C#m=14
% Dm=15 D#m=16 Em=17 Fm=18 F#m=19 Gm=20 G#m=21 Am=22 Bm=23 Hm=24
%--------------------------------------------------------------------for i=1:brojfajlova
[brvrsta brkolona]=size(PCPcel{i,1});
for k=1:brkolona
PCPt=PCPcel{i,1}(13,k);
krajakorda=find(PCPcel{i,3}(:,1)>=PCPt);
indeks=0;
if length(krajakorda)~=0
indeks=krajakorda(1);
end
if indeks==0
PCPcel{i,1}(14,k)=PCPcel{i,3}(length(PCPcel{i,3}),2)+PCPcel{i,3}(length(PCPcel{i,3}),3)+1;
else
PCPcel{i,1}(14,k)=PCPcel{i,3}(indeks,2)+PCPcel{i,3}(indeks,3)+1;
end
end
end
41
LITERATURA
[1]
L.R. Rabiner, ''A tutorial on Hidden Markov models and selected applications
in speech recognition'', Proceedings of the IEEE, vol. 77, no.2, pp. 257-286,
1989.
[2]
R.O. Duda, P.E. Hart, D.G. Stork, Pattern Classification, 2nd edition, John
Wiley and Sons, 2001.
[3]
[4]
[5]
http://ccrma.stanford.edu/~jos/mus423h/Real_Time_Chord_Recognition_Musi
cal.html
posjeeno: decembar 2007.
[6]
http://en.wikipedia.org/wiki/Pitch_classes
posjeeno: decembar 2007.
[7]
[8]
http://en.wikipedia.org/wiki/Equal_temperament
posjeeno: decembar 2007.
[9]
[10]
J. Bilmes, What HMMs can do, Dept of EE, University of Washington, 2002.
[11]
http://www.kenschutte.com/midi
posjeeno: decembar 2007.
[12]
http://www.sengpielaudio.com/calculator-notenames.htm
posjeeno: decembar 2007.
[13]
http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html
posjeeno: decembar 2007.
[14]
http://en.wikipedia.org/wiki/Music_theory
posjeeno: decembar 2007.
[15]
http://en.wikipedia.org/wiki/Circle_of_fifths
posjeeno: decembar 2007.
42
SADRAJ
1.
UVOD ................................................................................................... 1
2.
2.2
2.3
HMM PREGLED........................................................................... 16
3.
4.
5.
4.1
4.2
4.3
4.4
5.2
5.3
6.
ZAKLJUAK...................................................................................... 37
7.
PRILOG.............................................................................................. 38
MATLAB SKRIPTE I FUNKCIJE.................................................................... 38
LISTA OZNAKA I SKRAENICA ..................................................................... 41
LITERATURA............................................................................................ 42