Transcript

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 <= zbroj pjesma=files(i).name; break end end

end

DRUGI NAčIN:

Pokreni.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

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