Home | Izobraževanje, Znanost
1. NAMEN NALOGE Namen naloge je opisati problem mešanja akustičnih signalov in obrazložiti teoretično ozadje postopkov za njihovo ločevanje. V nalogi bom zagovarjal tezo, da postopki ločevanja delujejo zgolj zaradi fizikalnih omejitev virov signalov (bodisi akustičnih, EEG, EMG, ...) pri računalniško generiranem naključnem signalu pa popolnoma spodletijo. Sprva se bom lotil statistične analize posameznih akustičnih signalov in njihove trenutne mešanice, ter jih primerjal s računalniško generiranimi naključnimi signali in njihovimi mešanicami in kasneje preizkusil algoritem ICA (Independent Component Analysis) na obeh mešanicah signalov in s tem preveril svojo tezo. 2. TEZA NALOGE Akustični signal, ki ga proizvaja nek fizikalni vir (v nadaljevanju: vir), je seveda naključni signal, saj ga - pod predpostavko, da vir ni predvidljiv - ne moremo napovedovati v prihodnosti. Kljub temu pa se tak signal v določenih pogledih obnaša popolnoma predvidljivo, saj mora slediti vsem fizikalnim omejitvam klasične (Newtonove) fizike, pod katerimi njegov vir obratuje. Popolnoma samoumevno je namreč, da amplituda akustičnega signala ne more v kateremkoli trenutku drastično poskočiti ali upasti, ker takih energetskih preskokov v fiziki našega velikostnega razreda ne poznamo. Vsi akustični signali so potemtakem frekvenčno in velikostno omejeni, saj bi neskončno visoka frekvenčna vsebina potrebovala neomejeno energije za realizacijo v fizikalnem prostoru. Vemo tudi, da se frekvenčna karakteristika skozi čas ne more drastično spreminjati (pod predpostavko, da smo vzeli dovolj veliko okno za določitev posamezne frekvenčne slike), saj bi to pomenilo da vir skozi čas spreminja svoje akustične značilnosti, da se fizikalni vir torej spreminja izven nekih tolerančnih meja. Vse te omejitve fizikalnega sveta nam torej omogočajo, da lahko mešanico popolnoma naključnih signalov uspešno ločujemo, pod predpostavko da njihovi viri med seboj niso statistično odvisni. Več statistično odvisnih virov se namreč - fizikalno gledano - obnaša kot en sam vir. 3. OPIS PROBLEMA "COCKTAIL PARTY" Primer tovrstnega ločevanja je sposobnost poslušalca, da razločuje posamezne govorce iz akustične mešanice večih govorcev. Tak problem se v tehniki pogosto navaja kot "Cocktail party problem". Naš cilj je iz mešanice signalov izločiti signale, ki predstavljajo možne komponente mešanice in so medsebojno čimbolj statistično neodvisni, saj predpostavljamo, da so tudi viri med seboj neodvisni. 4. PODROČJA UPORABE REŠITVE ZA OMENJENI PROBLEM Aplikativnost omenjenega postopka ločevanja signalov se lahko nanaša na kakršnekoli enodimenzijske signale ali časovne vrste. S pomočjo razširitve pa se ga lahko aplicira tudi na večrazsežne signale. Najpogostejša področja uporabe so: - biomedicinska tehnika in diagnostika (razločevanje EEG signalov) - obdelava zvoka ali slike (izločanje motenj) - govorna, komunikacijska tehnika (razločevanje govorcev) - geofizika in seizmologija - ekonomija - analiza časovnih vrst 5. ZAJEM SIGNALOV Svojo tezo bom potrdil na primeru dveh govorjenih signalov in dveh naključno generiranih signalov. Sprva sem akustične signale zajemal ločeno, z namenom določanja statistične odvisnosti med njima. 5.1 Predobdelava: Signalu sem izločil enosmerno komponento z odštevanjem srednje vrednosti v okolju Matlab: s1=s1-mean(s1); s2=s2-mean(s2); Nato sem signal normaliziral do velikosti 1 za najmočnejši vzorec: s1max=max(s1); s1=s1*((1/s1max)-.05); % -.05 to avoid clipping s2max=max(s2); s2=s2*((1/s2max)-.05); % -.05 to avoid clipping 6. GENERIRANJE NAKLJUČNIH SIGNALOV: g1=rand(254001,1); g1=(g1*2)-1; g2=rand(254001,1); g2=(g2*2)-1; Iz grafične predstavitve signalov v časovnem prostoru je razvidno, da imajo umetno generirani signali mnogo večje energijo. Ta lastnost izhaja iz dejstva, da je človeški glas izredno dinamičen signal, za razliko od naključnega signala, ki ima vrednosti med 0 in 1 porazdeljene enakomerno. Ta lastnost nam bo zmotila določene ocene lastnosti signalov, kar bomo morali dodatno upoštevati. 7. PRIMERJAVA STATISTIČNIH LASTNOSTI SIGNALOV s1, s2 in g1, g2 Ocenjevanje statistične neodvisnosti signalov s1 in s2: 7.1 križna korelacija signalov: plot(xcorr(g1,g2)), title('xcor(g1,g2)'); Kot vidimo križna korelacija pri signalih g1 in g2 dosega mnogo večje vrednosti. Predpostavljam, da je razlog v tem, da imata signala g1 in g2 večjo moč kot signala s1 in s2. Signale g1 in g2 bom normaliziral glede na moč signalov s1 in s2: % RMS adjust faktor=(sum(s1.^2)+sum(s2.^2))/(sum(g1.^2)+sum(g2.^2)); g1=g1*sqrt(faktor); g2=g2*sqrt(faktor); In ponovno izračunal križno korelacijo: plot(xcorr(g1,g2)), title('xcor(g1,g2)'); Sedaj križna korelacija dosega mnogo manjše vrednosti kot pri signalih s1 in s2, kar skupaj z nejno enakomerno simetrično obliko namiguje na večjo neodvisnost signalov g1 in g2 kot signalov s1 in s2. 7.2 frekvenčni spekter signalov: Akustična signala izkazujeta močno frekvenčno omejenost medtem ko se naključna signala obnašata kot beli šum (frekvenčno neomejena). 7.3 Sploščenost porazdelitve (kurtosis) Za ocenjevanje statistične neodvisnosti signalov se pogosto uporablja tudi spremenljivka: "Sploščenost porazdelitve" (ang. Kurtosis). kurtosis: kurtosis(s1) ans = 7.3964 kurtosis(s2) ans = 8.8602 kurtosis(g1) ans = 1.7922 kurtosis(g2) ans = 1.8009 Ogledal si bom kakšno je relativno odstopanje sploščenosti signalov s1, s2 od njunega povprečja: abs(kurtosis(s1)-kurtosis(s2))/((kurtosis(s1)+kurtosis(s2))/2) ans = 0.1801 In ogledal si bom še kakšno je relativno odstopanje sploščenosti signalov g1, g2 od njunega povprečja: abs(kurtosis(g1)-kurtosis(g2))/((kurtosis(g1)+kurtosis(g2))/2) ans = 0.0048 S testom sploščenosti bi potemtakem lahko sklepali, da sta signala g1 in g2 statistično manj medsebojno odvisna kot signala s1 in s2, kar seveda ni mogoče. Vzrok za to napako je neprimerni način uporabe sploščenosti, saj sem jo izračunal iz celotnega odseka signala (velikost 254'000 vzorcev). Oglejmo si kakšna je odvisnost sploščenosti od velikosti zajetega okna: V nadaljevanju bom sploščenost izračunal na manjših oknih (64 vzorcev) in obravnaval njihovo povprečje. for j = 1:15000, kurtosis_s1(j)=kurtosis(s1(12*(j):12*(j+1),1)); kurtosis_s2(j)=kurtosis(s2(12*(j):12*(j+1),1)); kurtosis_g1(j)=kurtosis(g1(12*(j):12*(j+1),1)); kurtosis_g2(j)=kurtosis(g2(12*(j):12*(j+1),1)); end kurtosis_s1=sum(kurtosis_s1); kurtosis_s2=sum(kurtosis_s2); kurtosis_g1=sum(kurtosis_g1); kurtosis_g2=sum(kurtosis_g2); abs(kurtosis_s1-kurtosis_s2)/((kurtosis_s1+kurtosis_s2)/2) abs(kurtosis_g1-kurtosis_g2)/((kurtosis_g1+kurtosis_g2)/2) ans = 0.0014 ans = 0.0051 Relativna razlika med sploščenostjo signalov g1 in g2 je torej večja kot med signali s1 in s2, tako kot smo pričakovali. 7.4 anova test: Anova test (analysis of variance between groups) je zbirka statističnih modelov, za ocenitev variance med posameznimi skupinami podatkov. V našem primeru bom kot skupino podatkov predstavil celotni časovni vektor posameznega signala. anova test za signale s1 in s2: Vrednost P nam pove, kakšna je verjetnost za statistično odvisnost med skupinama vrednosti. Rezultat P=0 nam pove, da sta signala popolnoma neodvisna medseboj, kljub temu pa je algoritem pri ocenjevanju odvisnosti naredil napako, ki jo ocenjuje na vrednost 2871. Naslednji diagram predstavlja razporeditev vzorcev v posamezne razrede in njihovo možno grupiranje oz. rojenje (clustering). anova test za signale g1 in g2: Tudi pri generiranih signalih je P=0, kar pomeni da vzorci med seboj niso statistično odvisni, a vendar je tukaj ocenjena napaka enaka 0, kar pomeni, da lahko to trdimo z večjo verjetnostjo. Naslednji diagram predstavlja razporeditev vzorcev v posamezne razrede in njihovo možno grupiranje oz. rojenje (clustering) za generirane signale. Kot vidimo se vzorci razvrščajo s precej bolj določljivimi linearnimi mejami. 8. TRENUTNA MEŠANICA SIGNALOV: matlab seštevanje: mix1=(0.3*s1+0.2*s2); mix2=(0.1*s1+0.6*s2); normalizacija: mix1=mix1*((1/(max(abs(mix1))))); mix2=mix2*((1/(max(abs(mix2))))); 9. TRENUTNA MEŠANICA SIGNALOV g1 in g2 matlab seštevanje: mixg1=mixg1*(1/(max(abs(mixg1)))); mixg2=mixg2*(1/(max(abs(mixg2)))); 10. LOČEVANJE SIGNALOV 10.1 INDEPENDENT COMPONENT ANALYSIS (ICA) ICA je računska metoda za ločevanje mešanic signalov v njihove aditivne subkomponente (torej osnovne komponente). S tem postopkom lahko iz mešanic razločujemo osnovne signale pod predpostavko, da ti osnovni signali niso porazdeljeni po Gaussu in da niso medsebojno odvisni. ICA je iterativni algoritem, ki postopoma zmanjšuje statistično neodvisnost signalov. Pred samo iteracijo se izvede še centriranje signala (centering), frekvenčna izravnava (whitening) in dimenzijska redukcija (dimensionality reduction). Vsi algoritmi ICA potrebujejo vsaj toliko različnih meritev mešanic, kot je osnovnih component, katere želimo razlikovati. To pomeni, da sta v primeru “cocktail party problem” v sobi z dvema govorcema potrebna tudi dva mikrofona, ki zaznavata skupno mešanico. Da zadostim temu pogoju, bom ustvaril dve različni linearni kombinaciji osnovnih signalov. 10.2 LOČEVANJE MEŠANIC S POMOČJO ALGORITMA JADE JADE je ena od različic algoritma ICA, kjer se celotna iteracija izvede brez vmesnih adaptacij algoritma (batch executed) in je zaradi tega izredno uporaben na mnogih področjih (mobilna telefonija, biomedicinski signali, radarski sistemi), je pa zaradi svoje neadaptivnosti manj primeren za razreševanje problemov, kjer nastopa ogromno šuma, odbojev, ali pa kjer je sistem slabše modeliran. Najpomembnejša lastnost JADE algoritma je ta, da deluje brez predhodnega uglaševanja in je aplikativen za široko naravo problemov. Pri ločevanju akustičnih virov je znano, da se algoritem JADE dobro obnese pri ločevanju akustičnih virov, kadar niso zajeti v akustičnim ambientu, temveč v t.i. gluhi sobi. Pri mojem poizkusu sem signale zajemal popolnoma ločeno in sem jih zmešal (trenutne mešanice) naknadno v računalniku. Kasneje pa bom preizkusil algoritem še na dejanskih mešanicah posnetih v akustičnem okolju, kjer predpostavljam da se algoritem ne bo dobro obnesel. Ločena akustična signala sta za poslušanje na voljo v mapi z meritvami pod imeni sprvi.wav in sdrugi.wav, izgledata pa sledeče: Ločena generirana signala sta za poslušanje na voljo v mapi z meritvami pod imeni gprvi.wav in gdrugi.wav, izgledata pa sledeče: 10.3 OCENJEVANJE NAPAKE Napako sem ocenjeval kot vsoto absolutnih kvadratov relativne napake za posamezni vzorec: napaka_s=(sum(abs(sprvi-s1).^2))+(sum(abs(sdrugi-s2).^2)) napaka_g=(sum(abs(gprvi-g1).^2))+(sum(abs(gdrugi-g2).^2)) napaka_s = 1.5961e+004 napaka_g = 1.7741e+005 11. ZAJEMANJE PROSTORSKE MEŠANICE SIGNALOV Za ilustracijo principa uporabe algoritma ICA pri ločevanju mešanice signalov bom predstavil ločevanje prostorske mešanice signalov posnetih simultano. Prostorsko mešanico dveh govorcev sem zajemal s dvema identičnima dinamičnima mikrofonoma, SHURE SM58 BETA, postavljenima glede na govorca v kvadratno postavitev s stranicami 200cm: slika: postavitev mikrofonov v odnosu do govorcev pri zajemanju prostorske mešanice signalov Zajeta signala sta za poslušanje na voljo pod imenom cocktail1.wav in cocktail2.wav, izgledata pa sledeče: 12. LOČEVANJE PROSTORSKE MEŠANICE SIGNALOV Za ločevanje sem ponovno uporabil JADE algoritem: Xc=[cocktail1, cocktail2]'; B=jade(Xc,2); S=B*Xc; cocktailprvi=S(1,:)'; cocktaildrugi=S(2,:)'; cocktailprvi=cocktailprvi*(1/(max(abs(cocktailprvi)))); cocktaildrugi=cocktaildrugi*(1/(max(abs(cocktaildrugi)))); In dobil sledeče rezultate: Katere lahko poslušamo v datotekah cocktailprvi.wav in cocktaildrugi.wav Napake ne moremo izračunati, ker posamezni osamljeni signali niso na voljo. Če poslušamo datoteke, pa ugotovimo, da razločevanje ni bilo uspešno. Predpostavljam da razlog za slabo ločevanje v tem, da oba mikrofona zaznavata zelo podobna signala. V naslednjem eksperimentu sta govorca postavljena bližje mikrofonom, in sicer na razdalji 100cm: In pri postavitvi 50cm sledeče: 13. ZAKLJUČEK Svojo tezo sem uspešno potrdil, saj je bila napaka pri ločevanju mešanic generiranih signalov več kot 10X večja kot pri ločevanju mešanic akustičnih signalov (napaka_s = 1.5961e+004, napaka_g = 1.7741e+005). Ilustrativni poskusi ločevanja prostorkih mešanic so bili manj uspešni (napake ne morem oceniti, ker nimam referenčne meritve), kar smo ravnotako pričakovali že iz samih lastnosti algoritma JADE. 14. REFERENCE: Samo Beguš: Slepo ločevanje akustičnih izvorov (diplomska naloga), Ljubljana 2001 Tomislav Canjuga: Slepo ločevanje akustičnih izvorov (diplomska naloga), Ljubljana 2004 Edwin L. Crow, Frances A. Davis, Margaret W. Maxfield: Statistics Manual, New York 1996 Produri S.R.S Rao: Variance Components Estimation, Mixed models, methodologies and applications Jean-Francois Cardoso: Blind signal separation: statistical principles, Proceedings of the IEEE, 1998 15. PRILOGA: matlab skripta za obdelavo zajetih signalov close all clear all s1 = wavread ('s1.wav'); s2 = wavread ('s2.wav'); % izrezi okno s1=s1([1000:255000]); s2=s2([1000:255000]); figure(1) subplot(1,2,1), plot (s1), title 's1', axis([0 +254000 -1 +1]), title('s1'); subplot(1,2,2), plot (s2), title 's2', axis([0 +254000 -1 +1]), title('s2'); % remove offset s1=s1-mean(s1); s2=s2-mean(s2); % normalize s1max=max(abs(s1)); s1=s1*(1/s1max); s2max=max(abs(s2)); s2=s2*(1/s2max); % listen to the preprocessed signals wavwrite(s1, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\preproc_s1.wav'); wavwrite(s2, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\preproc_s2.wav'); % plot preprocessed signals figure subplot(1,2,1), plot (s1), title 's1', axis tight, title('s1 preproc'); subplot(1,2,2), plot (s2), title 's2', axis tight, title('s2 preproc'); %xcorr figure plot(xcorr(s1,s2)), title ('corr s1 s2') %spectrum figure plot(linspace(0, 40000, 254001), abs(fft(s1))), title('spectrum s1'), axis ([0 20000 0 1500]) figure plot(linspace(0, 40000, 254001), abs(fft(s2))), title('spectrum s2'), axis ([0 20000 0 1500]) %anova %anova1(s1,s2); % mixing the signal mix1=(0.3*s1+0.2*s2); mix2=(0.1*s1+0.6*s2); % normalize mix1, mix2 mix1=mix1*((1/(max(abs(mix1))))); mix2=mix2*((1/(max(abs(mix2))))); %listen to the mix wavwrite(mix1, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\mix1.wav'); wavwrite(mix2, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\mix2.wav'); % plot the mix figure plot(mix1), axis([0 +254000 -1 +1]), title('mix1 norm'); figure plot(mix2), axis([0 +254000 -1 +1]), title('mix2 norm'); %generiranje g1 in g2 g1=rand(254001,1); g1=(g1*2)-1; g2=rand(254001,1); g2=(g2*2)-1; figure subplot(1,2,1), plot (g1), title 'g1', axis tight, title('g1'); subplot(1,2,2), plot (g2), title 'g2', axis tight, title('g2'); wavwrite(g1, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\g1.wav'); wavwrite(g2, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\g2.wav'); %xcorr figure plot(xcorr(g1,g2)), title('xcor(g1,g2)'); % RMS adjust faktor=(sum(s1.^2)+sum(s2.^2))/(sum(g1.^2)+sum(g2.^2)); g1=g1*sqrt(faktor); g2=g2*sqrt(faktor); %xcorr popravljen figure plot(xcorr(g1,g2)), title('xcor(g1,g2)'); % kurtosis abs(kurtosis(s1)-kurtosis(s2))/((kurtosis(s1)+kurtosis(s2))/2) abs(kurtosis(g1)-kurtosis(g2))/((kurtosis(g1)+kurtosis(g2))/2) %popravljen kurtosis for j = 1:3000, kurtosis_s1(j)=kurtosis(s1(64*(j):64*(j+1),1)); kurtosis_s2(j)=kurtosis(s2(64*(j):64*(j+1),1)); kurtosis_g1(j)=kurtosis(g1(64*(j):64*(j+1),1)); kurtosis_g2(j)=kurtosis(g2(64*(j):64*(j+1),1)); end kurtosis_s1=sum(kurtosis_s1); kurtosis_s2=sum(kurtosis_s2); kurtosis_g1=sum(kurtosis_g1); kurtosis_g2=sum(kurtosis_g2); abs(kurtosis_s1-kurtosis_s2)/((kurtosis_s1+kurtosis_s2)/2) abs(kurtosis_g1-kurtosis_g2)/((kurtosis_g1+kurtosis_g2)/2) %spectrum figure plot(linspace(0, 40000, 254001), abs(fft(g1))), title('spectrum g1'), axis ([0 20000 0 1500]) figure plot(linspace(0, 40000, 254001), abs(fft(g2))), title('spectrum g2'), axis ([0 20000 0 1500]) %anova %anova1(g1,g2); % mixing the signal mixg1=0.3*g1+0.2*g2; mixg2=0.1*g1+0.6*g2; % normalize mix mixg1=mixg1*(1/(max(abs(mixg1)))); mixg2=mixg2*(1/(max(abs(mixg2)))); %listen to the mixg wavwrite(mixg1, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\mixg1.wav'); wavwrite(mixg2, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\mixg2.wav'); % plot the mixg figure plot(mixg1), axis([0 +254000 -1 +1]), title('mixg1_norm'); figure plot(mixg2), axis([0 +254000 -1 +1]), title('mixg2_norm'); %jade X=[mix1, mix2]'; B=jade(X,2); S=B*X; sprvi=S(1,:)'; sdrugi=S(2,:)'; sprvi=sprvi*(1/(max(abs(sprvi)))); sdrugi=sdrugi*(1/(max(abs(sdrugi)))); figure subplot(1,2,1), plot (sprvi), title 'g1', axis tight, title('sprvi'); subplot(1,2,2), plot (sdrugi), title 'g2', axis tight, title('sdrugi'); wavwrite(sprvi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\sprvi.wav'); wavwrite(sdrugi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\sdrugi.wav'); Xg=[mixg1, mixg2]'; B=jade(Xg,2); S=B*Xg; gprvi=S(1,:)'; gdrugi=S(2,:)'; gprvi=gprvi*(1/(max(abs(gprvi)))); gdrugi=gdrugi*(1/(max(abs(gdrugi)))); figure subplot(1,2,1), plot (gprvi), title 'g1', axis tight, title('gprvi'); subplot(1,2,2), plot (gdrugi), title 'g2', axis tight, title('gdrugi'); wavwrite(gprvi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\gprvi.wav'); wavwrite(gdrugi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\gdrugi.wav'); %error napaka_s=(sum(abs(sprvi-s1).^2))+(sum(abs(sdrugi-s2).^2)) napaka_g=(sum(abs(gprvi-g1).^2))+(sum(abs(gdrugi-g2).^2)) % LOČEVANJE PROSTORSKE MEŠANICE SIGNALOV %200cm cocktail1 = wavread ('cocktail1.wav'); cocktail2 = wavread ('cocktail2.wav'); figure subplot(1,2,1), plot (cocktail1), title 'g1', axis tight, title('cocktail1'); subplot(1,2,2), plot (cocktail2), title 'g2', axis tight, title('cocktail2'); Xc=[cocktail1, cocktail2]'; B=jade(Xc,2); S=B*Xc; cocktailprvi=S(1,:)'; cocktaildrugi=S(2,:)'; cocktailprvi=cocktailprvi*(1/(max(abs(cocktailprvi)))); cocktaildrugi=cocktaildrugi*(1/(max(abs(cocktaildrugi)))); wavwrite(cocktailprvi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktailprvi.wav'); wavwrite(cocktaildrugi, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktaildrugi.wav'); figure subplot(1,2,1), plot (cocktailprvi), title 'g1', axis tight, title('cocktailprvi'); subplot(1,2,2), plot (cocktaildrugi), title 'g2', axis tight, title('cocktaildrugi'); %100cm cocktail1_100 = wavread ('cocktail1_100.wav'); cocktail2_100 = wavread ('cocktail2_100.wav'); figure subplot(1,2,1), plot (cocktail1_100), title 'g1', axis tight, title('cocktail1_100'); subplot(1,2,2), plot (cocktail2_100), title 'g2', axis tight, title('cocktail2_100'); Xc=[cocktail1_100, cocktail2_100]'; B=jade(Xc,2); S=B*Xc; cocktailprvi_100=S(1,:)'; cocktaildrugi_100=S(2,:)'; cocktailprvi_100=cocktailprvi_100*(1/(max(abs(cocktailprvi_100)))); cocktaildrugi_100=cocktaildrugi_100*(1/(max(abs(cocktaildrugi_100)))); wavwrite(cocktailprvi_100, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktailprvi_100.wav'); wavwrite(cocktaildrugi_100, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktaildrugi_100.wav'); figure subplot(1,2,1), plot (cocktailprvi_100), title 'g1', axis tight, title('cocktailprvi_100'); subplot(1,2,2), plot (cocktaildrugi_100), title 'g2', axis tight, title('cocktaildrugi_100'); %50cm cocktail1_50 = wavread ('cocktail1_50.wav'); cocktail2_50 = wavread ('cocktail2_50.wav'); figure subplot(1,2,1), plot (cocktail1_50), title 'g1', axis tight, title('cocktail1_50'); subplot(1,2,2), plot (cocktail2_50), title 'g2', axis tight, title('cocktail2_50'); Xc=[cocktail1_50, cocktail2_50]'; B=jade(Xc,2); S=B*Xc; cocktailprvi_50=S(1,:)'; cocktaildrugi_50=S(2,:)'; cocktailprvi_50=cocktailprvi_50*(1/(max(abs(cocktailprvi_50)))); cocktaildrugi_50=cocktaildrugi_50*(1/(max(abs(cocktaildrugi_50)))); wavwrite(cocktailprvi_50, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktailprvi_50.wav'); wavwrite(cocktaildrugi_50, 44100, 'O:\Personal\Fax\podiplomc-1\cocktail-party\cocktaildrugi_50.wav'); figure subplot(1,2,1), plot (cocktailprvi_50), title 'g1', axis tight, title('cocktailprvi_50'); subplot(1,2,2), plot (cocktaildrugi_50), title 'g2', axis tight, title('cocktaildrugi_50');
Ta prispevek je na portalu publikacije.net objavil/a leskovsek dne 2008-02-24.
Ocenite prispevek:
5 out of 54 out of 53 out of 52 out of 51 out of 5
Not yet Rated
publikacije.net - portal svobodnega znanja