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).