Na spletu lahko najdemo alternativno izvedbo pesmice Čuk se je oženil. Napišite funkcijo function zaporednje=zaporedje_tonov(signal, fvz), ki uporablja ST-DFT, da ugotovite zaporedje tonov v njej.
Najpreprostejša rešitev bo ta, da za vsak stolpec v matriki B pogledate pri kateri frekvenci imate maksimalno amplitudo, nato pa frekvenco povežete s tonom. Trenutke tišine določite tako, da zahtevate, da maksimalna aplituda presega nek poprej določen prag.
Izdelajte funkcijo B=my_stdft(x,WINDOW), kjer je x vhodni signal, WINDOW pa dolžina enega kosa (soda vrednost). Izhod je 2D kompleksna matrika z izračunano STDFT.
Pri računanju predpostavite 50 % prekrivanje, vsak kos pred uporabo FFTja pomnožite s Hammingovim oknom. Pri FFTju uporabite za dolžino signala 256. Na pozabite izločiti nepotrebnih podatkov v rezultatu FFTja.
Vaši rezultati se bodo primerjali z rezultati že vgrajene funkcije – primerjale se bodo amplitude saj je imaginarna komponenta negativna naši (max(abs(abs(B1)-abs(B2))))!
V primeru, da imamo signal, v katerem nastopa relativno malo frekvenc, lahko pretvorbo v frekvenčni prostor izkoristimo tudi za izgubno stiskanje podatkov (za ta namen se pogosteje uporablja kosinusna in valčna transformacija).
V našem primeru bomo poskusili stisniti tone, ki nastopajo pri prejšnji nalogi. Postopek stiskanja pa bo naslednji:
signal pretvorimo v frekvenčni prostor, delali bomo v pravokotnih koordinatah
obe amplitudi (kosinus in sinus) pri frekvencah, pri katerih je absolutna amplituda kosinusov manjša od podanega praga, postavimo na 0
podatke stisnemo z uporabo naslednjih pravil:
Primer: X=[9 3+2i 0 0 5+3i 0 8+9i....] bi stisnili v vektor [9 0 3 2 0 4 5 3 0 2 8 9].
Napišite še postopek za dekompresijo, ki bo ponovno razširil stisnjeni posnetek. Za pretvorbo iz frekvenčnega v časovni prostor uporabite funkcijo ifft.
Oddati morate postopek za kompresijo in dekompresijo, oddajte pa tudi tekstovno datoteko, v kateri opišite, kako se je kompresija obnesla (kakšen signal, prag, dosežena kvaliteta, razmerje velikosti) .
Zgradba vašega programa naj bo naslednja:
POZOR! Podatki, ki so zrcaljeni čez polovico so tudi konjugirani (imaginarnemu delu se spremeni predznak. npr. če X(2)=2+3i, potem X(end)=2-3i). Uporabite vgrajeno funkcijo conj.
Ko glasbeniki igrajo na glasbila, ustvarjajo tone. Vsak ton je definiran s točno določeno frekvenco (npr. ton a1 ima frekvenco 440 Hz). Frekvence tonov lahko razberemo iz “tabele tonskih frekvenc”.
V kolikor nam glasbena teorija ne leži najbolje ali pa nimamo absolutnega posluha, lahko posamezen ton ugotovimo s pomočjo DFT-ja. Pogoj za to je, da v signalu nastopa le en ton. V tem primeru lahko signal pretvorimo v frekvenčni prostor, ter poiščemo frekvenco, pri kateri je amplituda največja (v polarnih koordinatah). S pomočjo tabele tonskih frekvenc lahko nato ugotovimo, ta kateri ton gre.
Napišite funkcijo ton=ugotovi_ton(signal, fvz), ki kot vhod sprejme posnet signal in vzorčevalno frekvenco, kot izhod pa vrne ton (v obliki niza – npr. ‘C1′). Pričakujete lahko tone od C1 do C2. V kolikor najdena frekvenca ne ustreza natančno tonu, vrnite ton, ki je najbližji zaznani frekvenci.
Za test lahko uporabite posnetke tonov A, C, E, ki so bili pobrani s te strani.
Napišite funkcijo za konvolucijo z uporabo FFT y=moja_konvolucija(x, h) (3t). Dolžina izhodnega signala mora biti enaka vsoti dolžin signala x ter impulznega odziva h zmanjšane za 1 (length(x)+length(h)-1) (n:-3t). Da boste kompatibilni z matlabovo funkcijo conv, uporabite še drugi parameter pri fft, ki pove, kako dolžino signala naj uporabi (dodajo se ničle na začetek in konec signala).
Vas zanima kako izgleda kolokvij pri predmetu Uvod v računalniško geometrijo? Klik spodaj …
Po uspešnem seznanjanju z osnovami knjižnice MFC je čas, da spoznamo še nekaj novih grafičnih elementov. Te elemente boste uporabili v preprosti igrici ‘Hitri prsti’. Pri igrici ‘Hitri prsti’ vam naj računalnik naključno izbira znake iz tipkovnice in jih naj izpisuje na pogovorno okno. Naloga za uporabnika pa je pritiskanje tipk, ki ustrezajo izpisanim znakom. Grobe zahteve za igrico so:
- naključen izpis znakov na pogovorno okno (samo črke in številke!)
- znaki se izpisujejo v določenem časovnem intervalu
- igra naj omogoča nastavljanje časovnega intervala z drsnikom (slider)
- prikaz trajanja časovnega intervala s ‘progress bar’
- igra naj ima opcijo Start in Stop
- sproti naj izpisuje število pravilno izbranih znakov, število zgrešenih znakov, število zamujenih znakov in izbran znak.
Pri izdelavi igrice boste potrebovali:
- pridobljeno znanje iz prvih dveh vaj
- MFC razred CProgressCtrl
- MFC razred CSliderCtrl
- MFC razred CEdit
- MFC razred CString
- MFC sporočilo WM_TIMER
Za opise izbranih razredov in njihovih metod uporabite pomoč MSDN.