of 21 /21
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

Identifikacija pjesme pomoću isječka korištenjem …...Sve pjesme su postavljene na frekvenciju uzorkovanja 44100 što je inaĉe standardna CD kvaliteta i snimljene su u mono formatu

  • Author
    others

  • View
    3

  • Download
    0

Embed Size (px)

Text of Identifikacija pjesme pomoću isječka korištenjem …...Sve pjesme su postavljene na frekvenciju...

  • 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