Gotovo vsi poznate tonski način izbiranja številke na telefonu (DTMF – Dual Tone Multiple Frequency). V bistvu za vsako pritisnjeno tipko telefon pošlje kratek zvočni signal sestavljen iz dveh čistih sinusov po naslednjem sistemu.
Najprej preizkusite generator signalov DTMF:
SIS:Vaja09:Digitalni filtri:generateDTMF - Naložil: Narmotur
, ki je napisan v Matlabu. Funkcija vrne vektor zvočnega signala, ki ga lahko poslušate s funkcijo sound (vzorčevalna frekvenca je 8000 Hz).Napišite program zaporedje=razpoznaj_DTMF(x), ki bo z uporabo pasovno prepustnih filtrov poskušal prepoznati, kakšno zaporedje telefonskih tipk je bilo pritisnjeno v vhodnem signalu x. Uporabite 7 pasovno prepustnih filtrov (tipe in rede filtrov izberite sami), ki bodo prepuščali le bolj ali manj ozko frekvenčno okolico zgoraj navedenih frekvenc (697 Hz, 770 Hz , 852 Hz, itd.). V kolikor amplituda pri dveh filtriranih signalih presega določeni prag, vemo katera tipka je bila pritisnjena. Namesto funkcije filt uporabite funkcijo filtfilt, ki izniči vpliv zakasnitve filtrov.
Signal, ki ga dobite z generatorjem signalov DTMF, ne vsebuje nikakršnega šuma. V realnosti pa lahko vaš program vsebuje tudi govor ali šum. Testni program na sistemu bo preizkusil vaš program z različnimi stopnjami šuma. Šum se ponavadi naredi tako, da signalu prištejemo naključne vrednosti. Nivo dodanega šuma merimo s faktorjem SNR (razmerje signal/šum), ki ga merimo v decibelih (dB). Nižja, ko je vrednost SNR, močneje je šum prisoten. Pri SNR = 20 dB je šum po moči stokrat šibkejši od signala. Pri SNR = 10 dB je šum po moči desekrtat šibkejši od signala. Ko je SNR=0 dB, je moč šuma enaka moči signala.
Na sistemu za vaje se bo signalu iz generatorja DTMF šum dodal s funkcijo awgn:
signalPlusSum = awgn(signal,10,'measured')
.
Število doseženih točk bo bo pri tej nalogi odvisno od robustnosti vašega programa s testnimi primeri. Za pravilo delujoč program, ki dela pri šumu 20 dB dobite 15 točk. 20 dodatnih točk pa bo mogoče doseči z odpornostjo na šum – najboljša rešitev bo nagrajena z 10 dodatnimi točkami (skupaj torej 25 točk), druga najboljša z 9, tretja z 8 in tako naprej, dokler ne zmanjka točk.
Pozor! Naloga morate rešiti v časovnem prostoru.
Po vzoru primera 36 iz predavanj, zapišite lastni primer redefiniranja in prekrivanja
metod. Zapišite vsaj dva primera metod tako za prekrivanje kot redefiniranje.
V nalogi uporabite tudi manipulatorje nad izpisom v datoteko!
Nalogo 11.1 dopolnite z naslednji tremi izjemami:
Prikažite uporabo izjem.
Razširite nalogo 9.1 tako, da:
Po vzoru primera 29 iz predavanj napišite lasten program iz področja generiËnega programiranja. Naloga naj obsega naslednje:
Primer 30 iz predavanj popravite tako, da boste lahko prejeli parametre poljubne dolžine v funkciji mediana(…). Funkcija mediana vrne srednjo vrednost (natanko enako elementov je manjših in večjih od vrednosti mediane).
Nalogo si lahko poenostavite tako, da so parametri ob klicu funkcije mediana urejeni po velikosti!
Izpeljite razred Multipraktik, ki je hkrati Sekljalnik in Mesalnik. Multipraktik ima dodatno lastnost naziv (string).
Sekljalnik ima lastnost noz (string), razred Mesalnik pa lastnost velikost_posode (double). Sekljalnik in Mesalnik hkrati dedujeta iz razreda ElektricnaNaprava, ki ima dodatno lastnost moc (int). Vsi razredi imajo metodo vrni_niz (string).
V komentar programa zapiši še en primer karo dedovanja.
Primer karo dedovanja:
Osnovni tip: Računalnik
1. vrsta: Osebni
2. vrsta: Strežnik
3. vrsta: Prenosni
4. vsrta: Sluzbeni
Možnost:
Prenosni računalnik je lahko tudi Sluzbeni
torej lahko podedujemo lastnosti is Prenosni in Sluzbeni.
Pri nalogi 9.1 oz. 9.2 lahko opazite, da člani družine niso urejeni po imenih, ampak tako kot so dodani.
S pomočjo SLT knjižnice in sort funkcije uredite člane v razredu Druzina po abecednem vrstnem redu.
Pri sort uporabite za primerjavo funkcijo, kot argument funkcije sort.
Naknadno preučite in demonstrirajte uporabo map, tako da dajete kot iskani ključ ime člana, kot vrednost pa objekt tega člana.
Nalogo 9.1 dopolnite tako da prekrijete operator << za izpis družine in dodajte prijateljski funkciji:
Napišite razred DruzinskiClan z lastnostmi: ime (string), leto_rojstva (int) in funkcija (mati, oce, sin, hci).
Zapišite konstruktorje, metodo izpis ter metode get in set za vse lastnosti.
Nato napišite razred Druzina z naslednjimi lastnostmi: priimek (string) in polje članov (uporabite vector).
Slednja lastnost naj bo tipa DruzinskiClan. Razred Druzina ima naslednje metode:
Nato prekrij operatorje nad razredom Družinam < (manjše), > (večje) in == (enako).
Družine primerjajte po številu družinskih članov.
Prekrijte še operator + (plus), ki vrača vsoto družinskih članov.
Za lažje razumevanje si oglejmo glavni program in njegov izpis.
Druzina:Prelogar Oce : Ime:Matej rojen-a:1970 Mati: Ime:Sara rojen-a:1971 otroki so: Ime:Marija rojen-a:2008 Ime:Martin rojen-a:2005 Ime:Janez rojen-a:2006 Druzina steje 5 clanov. Druzina:Music Oce : Ime:Tomaz rojen-a:1970 Mati: Ime:Lidija rojen-a:1971 otroki so: Ime:Maj rojen-a:2007 Ime:Zarja rojen-a:2001 Druzina Prelogar je vecja od druzine Music. Za druzini potrebujemo mizo za 9 oseb. Press any key to continue . . .