Author
others
View
3
Download
0
Embed Size (px)
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Identifikacija pjesme pomoću isječka korištenjem wavelet transformacije Napredne metode digitalne obrade signala
Ana Ljaljić i Ivana Penc
Zagreb 1/16/2012
2
Sadržaj
1. Uvod ..................................................................................................... 3
2. Kontinuirana wavelet transformacija .................................................... 4
3. Diskretna wavelet transformacija ......................................................... 6
4. Obrada signala i stvaranje baze .......................................................... 7
5. Wavelet obrada s wcoher funkcijom .................................................... 8
6. Drugi naĉin prepoznavanja isjeĉka pjesme ....................................... 10
7. Rezultati, testiranja i problemi............................................................ 12
8. Zakljuĉak ............................................................................................ 15
9. Literatura ............................................................................................ 16
10. Dodatak 1: KOD ................................................................................ 17
3
1. Uvod
Napredak tehnologije i raĉunarstva donio je neslućene mogućnosti ĉojveĉanstvu i
otvorio prostor za nova istraživanja i napretke. Nesumnjivo najbitnije je bilo naći
kvalitetnu metodu za analizu i obradu signala na efikasan, detaljan i pouzdan naĉin.
Algoritmi i teorije koje su postojale nisu mogle pružiti dovoljno kvalitetan uvid u
prirodu signala i bio je neophodno potreban novi koncept koji će sa sobom donijeti i
novi naĉin razmišljanja. Kao kompromis izmeĊu vremenske i frekvencijske analize
signala javio se wavelet.
Wavelet analiza je zanimljiva nova metoda za rješavanje teških inženjerskih
problema, a sa ciljem da se nadiĊu nedostaci Fourierove transformacije, sa
savremenim primjenama u kompresiji podataka, obradi slike i zvuka, prepoznavanju
oblika, raĉunalnoj grafici ili obradi biomedicinskih signala. Sa rastućim zahtjevima,
potencijal wavelet transformacije i interes za nju je veći nego ikad
U okviru ovog projekta je cilj bio napraviti sustav za detekciju isjeĉka pjesme
korištenjem wavelet transformacije. Pri tome su korištena dva pristupa. Jedan se
zasniva na kontinuiranoj wavelet transformaciji i analizi koherencije isjeĉka i tražene
pjesme dok se drugi zasniva na diskretnoj wavelet transformaciji i proraĉunatom
tempu pjesme. Ova sustava su implementirana u programskom okruženju Matlab.
4
2. Kontinuirana wavelet transformacija
Ideja koja se krije iza svake transfomacije je da se signal predstavi u obliku koji je
pogodan za odreĊenu obradu. Pored mnogobrojnih transformacija koje su razvijene
u oblasti obrade signala, uglavnom se istiĉu one koje transformiraju signal u njegovu
frekvencijsku domenu. Primjer takve transformacije je i Fourierova transformacija
(FT). Kada se FT primjeni na signal, dobiju se informacije o tome koje su
frekvencijske komponente prisutne u signalu (frekvencijski spektar). MeĊutim, ono
što se gubi je informacija o vremenu kada se pojedinaĉne komponente javljaju, pa je
to loša strana ove transformacije za neke primjene.
Prednost wavelet transfomacije u obradi signala je njena mogućnost da signal
predstavi u vremensko-frekvencijskoj domeni tj. u domeni vrijeme-skala, i tako
prikaže podatke na vjerodostojniji naĉin. Ideja koja se krije iza vremensko-
frekvencijske reprezentacije je da se željeni signal “isjeĉe” na nekoliko dijelova, a
onda analizira svaki od dijelova posebno. Jasno je da će analizirajući signal na ovaj
naĉin dati više informacija o tome kada se javljaju razliĉite frekvencijske komponente,
ali se tako postavlja i novi problem – kako isjeći željeni signal? Da bi se saznalo koje
sve frekvencijske komponente postoje u signalu u svakom vremenskom trenutku,
potrebno je taj signal sjeći Diracovim impulsom. Problem koji ovako nastaje je što
odsjecanje signala odgovara konvoluciji izmeĊu korisnog signala i signala za
odsjecanje (prozora, engl. window) tj. Diracovog impulsa. Kako je konvolucija u
vremenskoj domeni isto što i množenje u frekvencijskoj, i kako FT od Diracovog
impulsa sadrži sve moguće frekvencije, frekventne komponente signala će biti
razlivene svugdje po frekventnoj osi. Dakle, u ovom sluĉaju imamo drugi krajnji
sluĉaj: koliĉina informacija o vremenu je odliĉna, tj. sa visokim nivoom detalja,
odnosno rezolucije, ali nemamo nikakvu frekvencijsku rezoluciju, što je suprotno od
FT. Ovaj problem je poznat kao Heisenbergov princip neodreĊenosti, koji govori o
nemogućnosti da se u isto vrijeme znaju toĉne frekvencije i toĉan trenutak vremena
kada se ove frekvencije javljaju.
Wavelet transformacija je možda najbolje riješenje da se nadiĊu negativne osobine
Fourierove transformacije. U wavelet analizi korištenje potpuno promjenjive
(skalabilne) funkcije kao prozor za odsjecanje rješava problem odsjecanja signala.
Prozor se pomijera po signalu i za svaku poziciju se raĉuna konvolucija. Ovaj se
proces ponavlja više puta sa malo kraćim (ili dužim) prozorom za svaki novi ciklus.
Razlog zbog koga se ovo ovako radi je da bi se drugaĉije postupalo s razliĉitim
frekvencijskim komponentama signala. Naime, kada je prozor za odsjecanje mali,
promatraju se visokofrekvencijske komponente signala (jer imaju manju periodu pa
se mogu obuhvatiti prozorom), i pritom će biti dobra rezolucija u vremenu. A kada se
širina prozora poveća, od znaĉaja će biti niskofrekvencijske komponente (jer one
imaju veću periodu), i bit će bolja frekvencijska rezolucija. Na kraju će rezultat biti
kolekcija vremensko-frekvencijskih reprezentacija signala sa razliĉitim rezolucijama.
5
Fourierovom analizom signal se predstavlja pomoću sinusnih funkcija dok se kod
waveleta prikazuje tzv. wavelet funkcijama. Sve wavelet funkcije generirane su iz iste
funkcije, koja se zove osnovna ili mother wavelet funkcija, postupkom skaliranja i
pomaka koji je prikazan na slici 1.
Slika 1. Analizirajuća wavelet funkcija
Kontinuirana wavelet transformacija je definirana kao:
, gdje su
x(t) analitiĉki oblik korisnog signala,
ψ*(t) analitiĉki oblika konjugirano kompleksnog wavelet signala ψ(t).
6
Transformirani signal je funkcija dvije promjenjive, t i s, pomaka (u vremenu) i skale,
respektivno. y (t) je funkcija kojom se vrši transformacija (odsjecanje), i naziva se
majka wavelet (engl. mother wavelet). Naziv majka implicira da se funkcije sa
razliĉitom veliĉinom prozora (engl. region of support) koje se koriste u transformaciji
mogu izvesti iz jedne glavne funkcije tj. majke wavelet. Drugim rijeĉima, majka
wavelet je prototip za generiranje svih funkcija za odsjecanje.
Wavelet transformacija se izraĉunava tako što se kontinuirano skalabilni signal y (t)
kontinuirano pomijera po signalu x(t), raĉunajući pritom korelaciju izmeĊu njih. Ovako
promatrano, wavelet analiza predstavlja mjeru sliĉnosti izmeĊu funkcija baze
(waveleta) i samog signala.
3. Diskretna wavelet transformacija
Diskretna wavelet transformacija koristi filtarsku strukturu koja signal razlaže na
niskopropusnu i visokopropusnu granu. Signal se u svakoj grani nakon filtriranja
decimira, te se na niskopropusnu granu ponovno spaja ista struktura. Postupak se
ponavlja N puta da bi se dobila diskretna wavelet transformacija u N razina (Slika 2).
Rezolucija u frekvenciji raste u svakoj slijedećoj iteraciji, dok vremenska rezolucija
pada.
Slika 2. Diskretna wavelet transformacija u N razina
7
4. Obrada signala i stvaranje baze
. Kako bi se napravila baza pjesama koja će se koristiti u obradi, primjenjen je
program Free MP3 WMA WAV converter i nekoliko je pjesama pretvoreno u .wav
format. Kako bi se dobili odsjeĉci za testiranje programa, korišten je Direct WAV MP3
Splitter. Odsjeĉci su duljine oko 10 sekundi, koliko se pretpostavlja da bi bilo
optimalno.
U obradi je korišteno 8 pjesama i 16 odsjeĉaka, po dva od svake pjesme. Za svaku
pjesmu jedan od odsjeĉaka je negdje od poĉetka pjesme, a drugi je od sredine ili
kraja.
Pjesme se nalaze u folderu pjesme koji sadrži cijele pjesme i folderu split_pjesme koji
sadrži isjeĉke pjesama. Tako je napravljena testna baza na kojoj se kasnije testirao
program.
Sve pjesme su postavljene na frekvenciju uzorkovanja 44100 što je inaĉe standardna
CD kvaliteta i snimljene su u mono formatu radi brže i lakše obrade, iako se može
koristiti i stereo.
8
5. Wavelet obrada s wcoher funkcijom
Problem razmatran u ovom projektu je bio kako primjeniti wavelet transformaciju
za identifikaciju pjesama. Waveleti se koriste većinom za poboljšanje nekih aspekata
ili dodavanja i upravljanja znaĉajkama. UporeĊivanje se vrši uglavnom drugim
metodama.
Wavelet koherencija se ispostavila najuĉinkovitijom metodom usporedbe. Jedan od
novih toolbox-a u Matlabu je i Matlab Wavelet Toolbox koji je u verziji R2011b donio
razna poboljšanja. Za realizaciju ovog projekta je korištena funkcija wcoher.
WCOH = wcoher(Sig1,Sig2,Scales,wname) je funkcija koja vraća wavelet
koherenciju dva signala Sig1 i Sig2, na skali Scales te koristi jedan od kontinuiranih
waveleta po izboru. Korišten je Morlet wavelet jer je davao povoljno brza i dobra
rješenja. Ulazni signali trebaju biti iste duljine za uporeĊivanje koherencije.
Morletov wavelet dobio je ime po Jean Morletu, a originalno je formiran ĉak 1984.
godine.
Slika 3. Primjer Morletove funkcije
9
Ulazni signali za uporeĊivanje koherencije trebaju biti iste duljine. Ĉinjenica da su ĉak
i sliĉni uzorci po nekim aspektima dobro koherentni je korištena za identifikaciju
odsjeĉka.
Kada se uĉita odsjeĉak kojeg treba identificirati, sve pjesme se dijele na komade
duljine toga odsjeĉka i raĉuna se koherentnost. Odsjeĉak koji se pokaže
najkoherentnijim je ujedno i odsjeĉak tražene pjesme. Najkoherentniji odsjeĉak se
nalazi iz matrice koherentnosti zbrajajući koliko ima pozitivnih vrijednosti u wcoher
matrici koja se u sluĉaju korištenja Morletovog waveleta sastoji od nula i jedinica.
U sluĉaju korištenja npr. kompleksnog Morletovog waveleta, umjesto jedinica će
tamo biti kompleksni brojevi.
Radi brže realizacije je korištena prvo decimaciju faktorom 32.
Drugi naĉin, takoĊer moguć za odreĊivanje pjesme je analizom tempa funkcijom koja
detektira najizraženije karakteristike tempa koristeći diskretnu wavelet transformaciju.
Može se vidjeti tempo odsjeĉka i tempo pjesama u bazi te odrediti kojoj pjesmi
odsjeĉak pripada.
10
6. Drugi način prepoznavanja isječka pjesme
Druga korištena metoda za prepoznavanje isjeĉka pjesme se zasniva na usporedbi
tempa isjeĉka i tražene pjesme. Ovaj algoritam se, za razliku od prethodnog zasniva
na diskretnoj wavelet transformaciji. Dijagram toka algoritma korištenog za detekciju
tempa je prikazan na slici ispod.
Slika 4. Dijagram toka algoritma za detekciju
Ulaz u sustav je isjeĉak pjesme u bilo kojem formatu minimalnog trajanja od 5
sekundi. U suprotnom proraĉun tempa neće biti pouzdan.
Potom se na ulazni signal primjenjuje diskretna wavelet transformacija da bi se signal
prebacio iz vremenske u frekvencijsku domenu za daljnju analizu. Izlazi nakon
transformacije su niskofrekvencijske komponente (aproksimacije) i
visokofrekvencijske komponente (detalji). Nakon prolaska istog signala kroz
niskopropusni i visokopropusni filtar se dobivaju dva signala jednakog broja uzoraka
kao poĉetni. Da bi se to sprijeĉilo, izlazi iz niskopropusnog i visokopropusnog filtra se
11
decimiraju faktorom 2, nakon ĉega se dobiju DWT koeficijenti (cA i CD). Na slici
ispod je prikazan ogledni rezultat ovakve dekompozicije signala.
Slika 5. Ogledni rezultat dekompozicije signala
Jasno je vidljivo da se izlaz visokopropusnog filtra sastoji pretežno od
visokofrekvencijskog šuma, dok su aproksimacijski koeficijenti puno manje
zašumljeni od orginalnog signala S. Proces dekompozicije može biti iteriran nekoliko
puta u svrhu dobivanja što više komponenti niže rezolucije. U ovom algoritmu su
korištene 4 razine dekompozicije za dobivanje koeficijenata detalja od cD1 do cD4.
Ove 4 razine su sasvim dovoljne za odreĊivanje tempa pjesme jer se na većoj razini
detalja miješa signal pjesme sa vanjskim smetnjama.
Nakon proraĉuna koeficijenata detalja, na svaku razinu se primjenjuje detekcija
vrhova. To se radi jer se za vrhove DWT koeficijenata pretpostavlja da su otkucaji u
pjesmi. Ta ĉinjenica može poslužiti za daljnju detekciju intervala meĊu otkucajima u
pjesmi. Taj se proces sastoji od dva koraka: punovalno ispravljanje i tehnika klizećeg
prozora.
Kako se DWT koeficijenti sastoje i od pozitivnih i od negativnih vrijednosti, potrebno
je izvesti punovalno ispravljanje radi lakše detekcije vrha (jer vrh može imati i
pozitivan i negativan predznak) nakon ĉega je moguća detekcija vrhova metodom
lokalnih maksimuma. Iste pronalazimo tako da se klizećim prozorom preĊe uzduž
svih DWT koeficijenata.
Iz ovih skupljenih podataka je još samo potrebno modelirati histogram na ĉijoj x-osi
se nalazi interval meĊu otkucajima, a na y-osi uĉestalost pojavljivanja tog intervala.
Isĉitavanjem intervala za koji histogram ima najveću amplitudu se dobiva traženi
tempo isjeĉka pjesme koji se zatim usporeĊuje sa tempima pjesama iz baze da bi se
odredili o kojoj je rijeĉ.
12
7. Rezultati, testiranja i problemi
Izabere se jedan odsjeĉak iz baze pjesama, u ovom sluĉaju odsjeĉak iz pjesme
Stupify, odsjeĉak se uĉita iz baze odsjeĉaka. Potom se dani odsjeĉak usporedi
programom s wavelet kontinuiranom koherencijom koja koristi Morletov wavelet te se
kao rezultat dobije detektirana pjesma:
Slika 6. Detektirana pjesma
Može se i grafiĉki vidjeti rezultat koherencije dva najkoherentnija odsjeĉka:
Slika 7. Dva najkoherentnija dijela
13
Vidljivo je da je koherentnost odsjeĉka i neke druge pjesme loša:
Slika 8. Koherencija odsječka i „krive“ pjesme
Glavni opis koda:
Iz glavnog programa pozivanjem funkcije usporedba se odreĊuje koherentnost
svih odsjeĉaka, dalje se raĉuna suma matrice tih koherentnosti. Kada se naĊe
najbolji odsjeĉak, funkcijom detekcija.m odreĊuje se kojoj pjesmi taj odsjeĉak
pripada..
Pripadne scales se odreĊuju gledanjem skalograma razliĉitih skala i odluĉivanjem za
onu s najviše maksimuma i minimuma na skalogramu.
Kod pozivanja funkcije usporedba.m korišteni su decimirani signali radi mnogo brže
usporedbe koja i dalje daje dobre rezultate.
14
Empirijski se može zakljuĉiti da koherencija nema smisla za odsjeĉke kraće od tri ili
ĉetiri sekunde zato što pjesme općenito sadrže mnogo sliĉnih ili ĉak istih dijelova,
posebno pjesme istog žanra.
Prikladnima za usporedbu su se pokazale pjesme od oko deset sekundi koje sadrže
dovoljno informacija za toĉnu i pouzdanu usporedbu.
Drugi naĉin:
U alternativnom programu koji je implementiran, se nalazi tempo pjesama i na
osnovi njega zakljuĉuje o kojoj pjesmi se radi. To je brži, ali mnogo nepouzdaniji
naĉin jer je tempo dosta promjenjiva i općenita stvar.
Ipak se dobivaju dosta dobri rezultati:
Slika 9. Usporedba tempa isječka i pjesme
15
Vidljivo je da se odsjeĉak pjesme Stupify i sama pjesma tempom jako dobro
podudaraju.
8. Zaključak
Unatoĉ povoljnim rezultatima, ovakva wavelet obrada isjeĉaka i pjesama u
Matlabu u svrhu njihove identifikacije nije najbolje rješenje. Najviše je zahtjevno
vremenski iako postoji puno mogućnosti za nadogradnju sustava.
Usporedba pjesama u npr C jeziku gledanjem bitova dala bi puno bolje, toĉnije i brže
rješenje. Moguće je takoĊer i u objektnim jezicima sa sustavom baza pjesama.
Ipak, ovaj projekt je dao uvid u veliku mogućnost waveleta u svim podruĉjima rada s
audio zapisima i njihovom manipulacijom.
16
9. Literatura
[1] PREDAVANJA IZ NMDOS-A 2011./2012., D. SERŠIĆ
[2] HTTP://WWW.MATHWORKS.COM/HELP/TOOLBOX/WAVELET/REF/WCOHER.HTML, ZAGREB SIJEĈANJ 2012.
[3] HTTP://WWW.MATHWORKS.COM/PRODUCTS/WAVELET/, ZAGREB SIJEĈANJ 2012.
[4] A PRIMER ON WAVELETS AND THEIR SCIENTIFIC APPLICATIONS, JAMES S. WALKER
[5] HTTP://SOUNDLAB.CS.PRINCETON.EDU/PUBLICATIONS/2001_AMTA_AADWT.PDF, sijeĉanj 2012.
17
Dodatak 1: KOD
PROJEKT:
Pokreni.m
close all ; clear all ; clc
%% ucitavanje pjesama i dijelova pjesama % u files(n).data/files_split(n).data se nalaze wavread podaci pjesama % u files(n).name/files_split(n).name se nalazi ime pjesme ili odsjecka % u files(n)/files_split(n) se nalaze opceniti podaci cd pjesme files=dir('*.wav'); for n=1:length(files); files(n).data=wavread(files(n).name); end cd ..
cd split_pjesme3 files_split=dir('*.wav'); for n=1:length(files_split); files_split(n).data=wavread(files_split(n).name); end cd ..
%% Racunanje usporedbi za sve clc clear duljina duzina broj dio dijelovi %zelimo identificirati odsjecak I=input('Koji odsjecak zelite identificirati: ') y=files_split(I).data; duzina=length(files_split(I).data);
k=1; broj=zeros([1 8]);
for j=1:8 pomocni=files(j).data; duljina= floor(length(pomocni)/length(files_split(I).data)); broj(j)=duljina;
for i=1:duljina dio(i,:)=pomocni(1+duzina*(i-1):duzina*(i)); dijelovi(k,:)=dio(i,:); k=k+1; end
end
%%
18
clear scales us_org s sum suma us_org=decimate(y,32,'fir'); T=1/44100*32; a3 = scal2frq(1, 'morl', T) / 150; % najbolja skala step = 0.25; octave = a3 * 2.^([-9:step:2+(1/step-1)*step]/12); % Octave=3
scales = [octave 2*octave 4*octave]; % skala za 3 oktave s=zeros([1 sum(broj)]);
%% scales=scales(1:3:end); for i=1:sum(broj) us_privremen=decimate(dijelovi(i,:),32,'fir'); WCOH=usporedba(us_org,us_privremen,scales); s(i)=suma(scales,WCOH); end
%% konacno racunamo detektiranu pjesmu
pjesma=detekcija(s,broj,files)
Usporedba.m
function [WCOH] = usporedba(x1,x2,scales)
WCOH = wcoher(x1,x2,scales,'morl');
end
Suma.m
function [su] = suma(scales,WCOH) suma=0; for i=1:length(scales) for j=1:length(WCOH) if WCOH(i,j)>=0; suma=suma+1; end end end su=suma; end
Detekcija.m
function [pjesma]= detekcija(s,broj,files)
for i=1:length(s) if max(s)==s(i) num=i;
19
end end
zbroj=0; for i=1:length(broj) zbroj=broj(i)+zbroj; if num
20
result(numsong).bpm = indexbpm3; result(numsong).accuracy = accuracy3; end end
%% ispisani i vide se slicnosti u tempu isjecaka pjesama i orginalne pjesme
for i=1:length(D) PJESMA = D(i).name result(1,i).bpm display ('----------') end
Peakdetection.m
%%program procita sve pjesme iz folder-a pjesme i odredi im tempo close all; clear all; clc;
timesforloop = 4;
%Procitaj sve pjesme iz foldera pjesme cd pjesme_druge D=dir('*.wav'); for n=1:length(D); D(n).data=wavread(D(n).name); end cd .. %% for numsong=1:length(D) if (D(numsong).isdir == 0) file=strcat('pjesme_druge\',D(numsong).name); clear d; clear dstereo;
if strcmp(file(end-2:end),'wav') SIZ=wavread(file,'size'); [dstereo,sr] = wavread(file,min(SIZ(1),44100*180)); end
if min(SIZ)==1 d=dstereo; peakdetection;
for i=1:timesforloop+1 indexbpm3(1:3,i)=indexbpm(i); accuracy3(1:3,i)=accuracy(i); end end
result(numsong).bpm = indexbpm3; result(numsong).accuracy = accuracy3;
21
end end
%% ispisani i vide se slicnosti u tempu isjecaka pjesama i orginalne pjesme
for i=1:length(D) PJESMA = D(i).name result(1,i).bpm display ('----------') end