Išči po prispevkih:

Home | Izobraževanje, Znanost


Slepo razločevanje akustičnih signalov s pomočjo statistike (cocktail party problem)

By: leskovsek


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:

 

Not yet Rated

Kliknite na XML znak in spremljajte kategorijo [Izobraževanje, znanost] preko RSS!



publikacije.net - portal svobodnega znanja









Powered by Article Dashboard