Quantcast
Channel: the-sciences
Viewing all articles
Browse latest Browse all 72

Vokoder na kanalu u Matlab

$
0
0

Original: https://sethares.engr.wisc.edu/vocoders/channelvocoder.html 

William A. Sethares (Bill)

Što je vokoder kanala?

Vokoder kanala djeluje kao banka filtera koja razbija dva dolazna izvora zvuka (nosač i modulator) u kompatibilna frekvencijska područja. Omotač unutar svakog podopsega modulatora nameće se na odgovarajući podpojas nosača i rezultirajući zvukovi se sabiraju. Kao što je prikazano dolje, ispravljačka nelinearnost praćena niskopropusnim filterom približava se omotaču zvuka unutar opsega. Vokoder kanala može se koristiti za generiranje klasičnog robotskog glasa kada se modulira govorom, a našao je opsežnu upotrebu kao specijalni efekt u Hollywoodu.

Vokoder kanala može se protumačiti kao banka filtera koja nameće omotač jednog zvuka (modulatora) na valni oblik drugog (nosača). Operacija omotača (predstavljena ovdje primjenom ispravljačke nelinearnosti g(x) praćene niskopropusnim filtrom) primjenjuje se odvojeno unutar svakog frekvencijskog opsega.

Moderne implementacije vokodera kanala obično zamjenjuju banke filtera FFT-ima. To je brže računski kada se koristi mnogo opsega, a nelinearnost i niskopropusno filtriranje mogu se lako postići pomoću veličine FFT-a. Byung Park je ovo programirao kao dio svog magistarskog projekta, a ovdje se pojavljuje (Matlab) kod. Datoteka “pomoć” za chanvocoder.m glasi:

function y = chanvocoder(carrier, modul, chan, numband, overlap)
% y = chanvocoder(carrier, modul, chan, numband, overlap)
% Channel Vocoder modulira signal nosača modulacijskim signalom
% chan = broj kanala (npr., 512)
% numband = broj opsega (<chan) (npr., 32)
% overlap = preklapanje prozora (npr., 1/4)
% napisali Park i Sethares 2005.

Kao što vidite, šanvokoderu su potrebna dva signala. Modulator je obično glas (govorite jasno i polako), a nosač je obično skladno bogat izvor zvuka (poput organa, sintisajzera ili obojene buke). Oboje moraju imati jednak broj pjesama, tj. Oboje moraju biti mono ili oboje stereo. Možete odabrati broj kanala (FFT-ovi su dužine 2*chan) i broj opsega (u koliko frekventnih opsega treba razbiti signal), kao i količinu preklapanja između uzastopnih FFT-okvira. Zvuk će se mijenjati ovisno o ovim vrijednostima. Tipično ćete koristiti chanvocoder.m sa zvučnim datotekama u .wav formatu. Na primjer, pretpostavimo da postoji .wav datoteka nazvana “carrier22.wav” i druga koja se zove “modulator22.wav.” Tipičan način pozivanja vokodera je:

modfile = 'modulator22';
carfile = 'carrier22';
outfile = 'vocodedsound.wav'
[modul, sr1] = wavread(modfile);
[carrier, sr2] = wavread(carfile);
if sr1~=sr2, disp('stope uzorkovanja se ne podudaraju'); end
y = chanvocoder(carrier, modul, 512, 16, .2);
wavwrite(y,sr1,16,outfile)

Ovo čita dvije zvučne datoteke pomoću naredbe wavread, provjerava podudaraju li se brzine uzorkovanja (ako nisu, nećete dobiti ono što očekujete), poziva funkciju chanvocoder, a zatim zapisuje izlaz kao drugu zvučnu datoteku koju možete slušati u Matlab ili koristeći bilo koji audio program sposoban za reprodukciju .wav datoteka. Da biste mogli provjeriti radi li sve, evo gore navedenih datoteka nosača modulatora, zajedno s rezultatima trebali biste čuti gornju skriptu. (Možda ćete trebati kliknuti desnim gumbom da biste preuzeli ove datoteke.) Nakon preuzimanja, pobrinite se da su one (zajedno sa samom funkcijom chanvocoder.m) postavljene na Matlab putanju. Trebali biste moći pokrenuti program i dobiti isti izlaz kao “vocodedsound.wav.” Korištenjem različitih zvukova nosača i modulatora možete stvoriti razne efekte. Možda će vas zanimati da uporedite ovu implementaciju sa Zerius Vocoder om na C jeziku – vidjet ćete da rade slično, i zaista, gornje test datoteke (carrier22 i modulator22) preuzete su sa Zerius web stranice.

 

 

 


Viewing all articles
Browse latest Browse all 72

Trending Articles