3. VJEŽBA Projektiranje FIR filtara metodom vremenskih otvora FIR filtri su filtri s konačnim impulsnim odzivom (engl. Finite Impulse Response), a jedan od načina njihovog projektiranja je metoda s vremenskim otvorima. Kod projektiranja filtra ovom metodom, potrebno je najprije definirati oblik željene idealne frekvencijske jω karakteristike filtra H id (e ). Inverznom Fourierovom transformacijom se zatim izračunavaju uzorci impulsnog odziva koji je za općenit slučaj beskonačnog trajanja, prema izrazu: π 1 jω jnω hid = H id ( e ) e dω, - < n <. (3.1) π π jω Radi jednostavnosti, često se odabire karakteristika ( e ) 8 H nulte faze, tj. kreće se od realne frekvencijske karakteristike koja je po odsječcima konstantna (iznosa 0 ili 1). Takva karakteristika se uobičajeno u engleskoj literaturi naziva brick-wall karakteristika, jer ima beskonačno uska prijelazna područja, što kao posljedicu ima beskonačni impulsni odziv. S obzirom da je frekvencijska karakteristika čisto realna funkcija, rezultirajući impulsni odziv je h n = h n (širi se jednako na obje strane). uvijek simetričan oko ishodišta n=0, tj. [ ] [ ] id Iako je izvedba takvih idealnih filtara nemoguća, metodom vremenskih otvora se jω projektiraju filtri koji aproksimiraju idealnu karakteristiku H id ( e ) i imaju konačan impulsni odziv. Postupak skraćivanja impulsnog odziva provodi se prema izrazu: h h[ n] = id id id [ n] w[ n], za n S, (3.) 0, inace odnosno množenjem idealnog impulsnog odziva h id [ n] s uzorcima [ n] w koji predstavljaju neki od poznatih vremenskih otvora, također simetričnih oko ishodišta. U gornjem izrazu je sa S definiran skup indeksa za koje su w [ n], a time i h [ n] različiti od 0. Taj skup indeksa ovisi o tome da li je red filtra N paran ili neparan broj te je za oba slučaja definiran u drugom retku tablice 3.1. Red rezultirajućeg filtra bit će jednak N, ako vremenski otvor ima N+1 uzorak različit od nule. Opisanim postupkom dobiva se impulsni odziv nekauzalnog sustava. Da bi se takav sustav mogao realizirati, potrebno ga je pretvoriti u kauzalni što se postiže jednostavnim vremenskim pomakom niza h [ n] za N uzoraka u desno. Kao posljedica toga, fazna karakteristika više nije jednaka nuli, već postaje linearna s nagibom N. Ako je impulsni odziv kauzalnog FIR filtra dan s: h c N [ n] = bn [ n l] l = 0 b nalaze iz skraćenog impulsnog odziva [ n] tada se koeficijenti n trećem retku tablice 3.1, ovisno o parnosti reda filtra N. δ, (3.3) h prema izrazima danim u Već je rečeno da idealni filtar s kojim se ulazi u postupak projektiranja ima pojačanje u području propuštanja jednako 1 te beskonačno gušenje (vrijednost 0) u području gušenja. Različitim rasporedom tih područja moguće je ostvariti filtre slijedećih tipova: niski propust
(LP), pojasni propust (BP), visoki propust (HP) i pojasna brana (BS). Za LP i HP filtre definira se granična frekvencija ω na rubu između područja propuštanja i područja gušenja [ 0 ] c ω c,π, a za BP i BS definiraju se dvije frekvencije ω l i ω h, za koje vrijedi ω l < ωh. Te frekvencije određuju područje propuštanja (za BP), odnosno područje gušenja (za BS). Ako je red FIR filtra N paran broj, potrebno je odrediti N + 1 uzorak impulsnog odziva idealnog filtra simetrično oko nule za indekse n S, gdje je skup S definiran u drugom retku tablice 3.1, lijevi stupac. Izrazi za izračunavanje uzoraka idealnih impulsnih odziva za sva četiri tipa filtara su također dani u lijevom stupcu tablice. Tablica 3.1 Tipovi idealnih filtara ovisni o parnosti reda filtra N N paran N neparan N N S =,,, n S K S N + 1 N 1 =, K,, n S N N + 1 b i = h i, za i = 0, K, N b i = h i, za i = 0, K, N hbp hbs hlp sin( nωc ), n 0 = n ω π c, za n= 0 π n(ω cos h + ωl ) n(ω sin h ωl ), n 0 = πn ωh ωl, za n= 0 π hhp sin(nω c ), n 0 = nπ ω c 1, za n= 0 π n( ω + ) ( ) cos h ωl n ω sin h ωl, n 0 = πn ω 1- h ωl, za n= 0 π hbp h lp = 1 π n + 1 n + h cos 1 sin n + ωc = 1 n + π l sin 1 h l ( ω + ω ) n + ( ω ω ) ne postoji ne postoji Ako je N neparan broj, tada je potrebno odrediti N + 1 uzorak impulsnog odziva idealnog filtra simetrično oko nule, što se uz skup indeksa n S (pripadni S definiran u drugom retku desnog stupca tablice 3.1) realizira pomakom za 1/ uzorka. Impulsni odzivi idealnih filtara računaju se za n + 0.5 = N,..., 0.5,0.5,..., N. Izrazi za LP i BP filtre dani su u desnom stupcu tablice. Međutim, BS i HP filtre nije moguće realizirati neparnim redom filtra. Treba se naime sjetiti da su impulsni odzivi FIR filtara dobiveni na ovaj način ili jω H e može prikazati kao suma kosinusa ili sinusa množenih simetrični ili asimetrični, pa se ( ) koeficijentima koji ovise o h [ n]. Za neparni N, tj. parni broj uzoraka impulsnog odziva (FIR TIP ) treba sumirati članove oblika [ m] cos( ( m 0.5)) b ω. HP i BS filtri bi na π trebali imati 9
1, a kad se uvrsti ω = π ispada da je b [ m] cos( ± π / ) = 0! Za TIP 3 to vrijedi za neparni broj uzoraka jer u pripadnom izrazu treba izračunati sinus od π što daje 0, a ne 1. Ako se u postupku projektiranja FIR filtra koristi pravokutni vremenski otvor, čiji su svi koeficijenti w n[ ] jednaki jedan, tada se to svodi na jednostavno odrezivanje beskonačnog idealnog impulsnog odziva na dužinu N +1. Zanemarivanjem preostalog dijela impulsnog odziva, unosi se greška koja mijenja željenu idealnu amplitudno-frekvencijsku karakteristiku. Greška može biti manja (pogotovo u području gušenja) ako se umjesto pravokutnog vremenskog otvora koriste otvori zvonolikog oblika koji prema rubu intervala postepeno guše uzorke impulsnog odziva. Neki od njih su: Bartlettov, Hammingov, Hannov i Blackmanov. Broj uzoraka vremenskog otvora L mora biti za jedan veći od reda filtra N, L = N +1. Za parni, odnosno neparni L, vremenski otvori su mogu izračunati za indekse n S, prema izrazima danim u tablici 3.. Tablica 3. Tipovi vremenskih otvora ovisni o parnosti širine otvora L L neparan L paran L 1 L 1 L L S =, K,, n S S =,, 1, n S K n L 1 w [] bart n = 1 1 n + w bart = 1 L w ha = α + ( 1 α) cos, L 1 = α + ( 1 α ) α = 0.54 Hamming α = 0.5 Hann πn w ha 1 π n + cos L 1 πn 4πn w black = 0. 4 + 0. 5cos + 0. 08cos L 1 L 1 w black 1 1 π n + 4π n + = 0.4 + 0.5cos + 0.08cos L 1 L 1 Neka karakteristična svojstva prethodno navedenih vremenskih otvora zbirno su prikazana u tablici 3.3 na slijedećoj strani. Vremenski otvori u frekvencijskoj domeni imaju valovit oblik s glavnom laticom na frekvenciji ω = 0, širine ovisne o tipu otvora i broju uzoraka, kako je prikazano u trećem stupcu tablice 3.3. Vrhovi bočnih latica padaju s porastom frekvencije, a relativni odnosi amplituda glavne i najviše bočne latice dani su za navedene otvore u drugom stupcu navedene tablice (ne ovise o N!). Ako navedene vremenske otvore koristimo za projektiranje FIR filtara, dobivena amplitudno-frekvencijska karakteristika filtra ovisit će i o svojstvima primijenjenog otvora u frekvencijskoj domeni, jer je proizišla kao rezultat konvolucije spektra idealnog filtra i spektra otvora. Tako će širina prijelaznog područja filtra zavisiti o širini glavne latice korištenog otvora, a najveće pojačanje filtra u području gušenja (zadnji stupac tablice 3.3), zavisit će o odnosima amplituda glavne i najviše bočne latice vremenskog otvora. 30
Tablica 3.3 Karakteristike vremenskih otvora Tip prozora Valovitost bočne latice (db) Širina glavne latice Max pojačanje filtra u području gušenja(db) Pravokutni -13 4π/(N+1) -1 Bartlett-ov -5 8π/N -5 Hann-ov -31 8π/N -44 Hamming-ov -41 8π/N -53 Blackman-ov -57 1π/N -74 FIR filtri s koeficijentima izračunatim na prethodno objašnjen način mogu se realizirati na više načina. Najjednostavniji način, koji direktno proizlazi iz jednadžbe diferencija kojom se može opisati ovaj sustav, prikazan je za red filtra N na slici 3.1. Realizacija je ostvarena elementima za kašnjenje, zbrajalima i množilima s konstantom, pri čemu konstante predstavljaju upravo izračunate koeficijente filtra. x[n] z -1 z -1 z -1 z -1 b 0 b 1 b b 3 b N-1 b N y[n] Slika 3.1 Blok shema direktne realizacije FIR filtra IMPLEMENTACIJA FIR FILTARA Za implementaciju filtara općenito se najčešće koriste procesori za digitalnu obradu signala (engl. Digital Signal Processor, DSP). Kod implementacije je potrebno voditi računa o više aspekata koji će biti opisani i diskutirani u nastavku. Kvantizacija Rad u digitalnoj domeni podrazumijeva ne samo da su svi signali diskretizirani u vremenu već i da su diskretizirani po vrijednostima (amplitudi). To također znači da su i vrijednosti svih koeficijenata kod množenja kao i svi rezultati množenja i zbrajanja diskretne vrijednosti. Te vrijednosti nisu bilo koje već moraju biti jednake jednom od mogućih K diskretnih nivoa. Postupak kojim se to ostvaruje naziva se kvantizacija. Broj K je najčešće B broj koji je potencija broja, pa vrijedi K =, pri čemu je B broj bita registara procesora ili drugog digitalnog sustava u kojima se pohranjuju uzorci signala i koeficijenti. Pretvorba bilo koje realne vrijednosti u jedan od K diskretnih nivoa radi se tako da se dotični realni broj pomnoži s brojem K i zatim od rezultata uzme samo cijeli dio. Kod toga, međutim, decimalni dio rezultata utječe na to da li će cijeli broj biti prvi manji ili prvi veći kvantizacijski nivo u odnosu na rezultat, pa postoji nekoliko mogućnosti kako slijedi: 31
a) odsijecanje prema dolje Za pozitivne vrijednosti, decimalni dio rezultata se ignorira i kao vrijednost uzima samo preostali cijeli dio. Negativne realne vrijednosti se zamjenjuju s prvim negativnijim cijelim brojem. Pošto je kvantizirana vrijednost uvijek ili jednaka ili manja od realne, greška uslijed kvantizacije je između -1 i 0. b) odsijecanje prema nuli Za pozitivne vrijednosti, ponašanje je isto kao pod a), ali za negativne vrijednosti se uzima prvi pozitivniji cijeli broj. Za pozitivne uzorke je kvantizirani broj uvijek manji od realnog, dok je za negativne uvijek veći (manje negativan). Zbog toga se greška kvantizacije nalazi u intervalu od -1 do 1. c) zaokruženje na najbliži cijeli broj Za pozitivne brojeve čiji je decimalni dio manji od 0.5, odabire se prvi manji cijeli broj, dok se za one čiji je decimalni dio veći ili jednak 0.5 odabire prvi veći cijeli broj. Za negativne brojeve je obrnuto. Ako je decimalni dio manji ili jednak 0.5, odabire se prvi pozitivniji cijeli broj, a za one druge odabiremo prvi negativniji. Ako se primjenjuje ova metoda, greška uslijed kvantizacije je uvijek između -0.5 i 0.5. Tipični primjeri za sve tri metode dani su u tablici 3.4 koja slijedi. Tablica 3.4 Primjeri kvantizacije signala Realni broj a) b) c) 1.9 1 1 1.5 1 1 1.1 1 1 1 0.9 0 0 1 0.5 0 0 1 0.1 0 0 0-0.1-1 0 0-0.5-1 0 0-0.9-1 0-1 -1.1 - -1-1 -1.5 - -1-1 -1.9 - -1 - Prikaz brojeva s predznakom pomoću dvojnog komplementa Iako na tržištu postoje DSP procesori koji mogu obavljati matematičke operacije u aritmetici pomičnoga zareza (engl. floating point) sa 7 decimalnih znamenki mantise i ogromnom dinamikom, još uvijek se najčešće koriste procesori s cjelobrojnom aritmetikom (engl. fixed point) zato što su jeftiniji, brži i jednostavniji. Kod ovakvih procesora, brojevi se najčešće prikazuju u obliku dvojnog komplementa (engl. two's complement) koji omogućava rad s pozitivnim i negativnim cijelim brojevima. Raspon brojeva koji se mogu prikazati s B bita (1 bit za predznak i B-1 bit za vrijednost) dan je u prva dva retka tablice 3.5. Radi usporedbe, u istom tom B-bitnom registru može se običnim binarnim zapisom prikazati cijeli broj bez predznaka između 0 i B -1. 3
Tablica 3.5 Vezano uz prikaz brojeva u dvojnom komplementu uz B bita najveći pozitivni broj B 1 1 najmanji negativni broj 1 B najveći pozitivni produkt B 1 B 1 B ( ) ( ) = B 1 B 1 B najveći negativni produkt ( 1) ( ) > Na blok shemi prikazanoj na slici 3.1, vidljivo je da se kod realizacije filtra koriste zbrajala. Kod toga je prikaz cijelih brojeva u dvojnom komplementu pogodan jer se za operacije zbrajanja (oduzimanja) može koristiti obično binarno zbrajalo (engl. adder). Promatrajmo to na 8-bitnom primjeru i zbrojimo dva broja prikazana u dvojnom komplementu, 7 i -13. Pripadne vrijednosti u registrima su 7 (07h) i 43 (F3h). Sa 'h' su označeni heksadecimalni, a sa 'b' će biti označeni binarni brojevi dok su brojevi u decimalnom prikazu bez ikakve oznake. Binarnim zbrajanjem sadržaja registara 07h + F3h = FAh dobiva se broj koji predstavlja vrijednost -6 koja je upravo jednaka sumi ta dva broja. Ova činjenica vrijedi općenito. Podsjetnik: koji negativni broj je prikazan u registru jednostavno je odrediti ako se broju invertiraju bitovi i doda 1 (u primjeru FAh=1111 1010b, invertiramo 0000 0101b i dodamo 1 0000 0110b, dakle to je -6). Za realizaciju algoritama digitalne obrade signala, pored zbrajala potrebno je i množilo (engl. multiplier). Većina DSP procesora ima ugrađene, sklopovski podržane naredbe za realizaciju funkcije množenja. Postoje dvije vrste množila i to: bez predznaka (engl. unsigned) i s predznakom (engl. signed). Kod množila bez predznaka, produkt dva cijela broja bez predznaka prikazana s B bita je ponovno cijeli broj, ali dvostruke širine, tj. prikazan sa B bita. To se lako vidi ako pomnožimo dva najveća broja koji se mogu prikazati s B bita, ( B -1) ( B -1) < ( B -1), npr. 55 55=6505<65535. Množila s predznakom tretiraju ulazne faktore kao brojeve u dvojnom komplementu, pa produkt izračunavaju kao produkt apsolutnih vrijednosti faktora, a predznak podešavaju prema predznacima faktora (prema XOR funkciji najviših bitova faktora). Raspon rezultata množila s predznakom dan je u trećem i četvrtom retku tablice 3.5. Vidljivo je dakle da je produkt sada moguće prikazati kao broj u dvojnom komplementu s registrom širine B-1, a ne B. Prikaz brojeva u obliku frakcija Pošto se kao rezultati proračuna nekog filtra pojavljuju koeficijenti množenja koji nisu cijeli brojevi već decimalni, postavlja se pitanje kako realizirati potrebne matematičke operacije na cjelobrojnim procesorima. Ako se svi koeficijenti i signal u svim točkama sustava tako skaliraju da im se vrijednosti nalaze između -1 i 1, tada se za prikaz takvih brojeva može koristiti frakcionalna aritmetika. Veza između cjelobrojne i frakcionalne aritmetike je jednostavna: samo treba cjelobrojnu B-bitnu vrijednost u dvojnom komplementu podijeliti brojem B-1, što je dano primjerom za B=3 u tablici 3.6. Tablica 3.6 Usporedba cjelobrojne i frakcionalne aritmetike cjelobrojna -4-3 - -1 0 1 3 frakcionalna -1-0.75-0.5-0.5 0 0.5 0.5 0.75 Ovaj prikaz je samo jedna naša interpretacija stvarnog broja u registru, a sve operacije nad tim brojevima se ostvaraju kako je već opisano za cijele brojeve. Da to vrijedi i za množenje, promotrimo na jednostavnom primjeru. Za gornji primjer, B=3, pomnožimo 33
brojeve -0.75 i 0.5. Ovi brojevi imaju pripadne cjelobrojne reprezentante u dvojnom komplementu jednake -3 i, koji se množe klasičnim množilom s predznakom. Kao produkt dobiva se vrijednost -6 u registru širine B-1. Frakcionalni pandan ovog broja dobivamo tako da broj podijelimo s B- što upravo daje vrijednost -6/16 = -0.375 = -0.75 0.5. Ako se nakon operacije množenja produkt širine B-1 želi skratiti na istu širinu koju imaju i faktori (tj. B bita), tada je potrebno od produkta uzeti najviših B bita. Tih B bita predstavljaju novu B-bitnu frakciju dobivenu kvantizacijom dugačke frakcije. Kvantizacija se može izvesti na tri poznata načina: običnim odsijecanjem, odsijecanjem simetrično oko nule i zaokruživanjem. Za gore navedeni primjer, promatrajmo obično odsijecanje na B bita. Vrijednost u registru širine B-1 je -6 ili binarno 11010b. Uzmimo najviša tri bita 110b što odgovara cijelom broju -, odnosno frakciji -0.5. Pošto broj -0.375 ne postoji u 3-bitnim frakcijama uzimamo prvu manju vrijednost koja postoji. Klasična realizacija FIR filtra u frakcionalnoj aritmetici Postupkom projektiranja FIR filtra dobivamo koeficijente b 0 do b N. Ti koeficijenti su realni brojevi beskonačne točnosti. Da bi se filtar mogao realizirati B-bitnom frakcionalnom aritmetikom, potrebno je ove koeficijente kvantizirati na B-bitne frakcije (prije kvantizacije se koeficijenti prema potrebi mogu skalirati). Ova kvantizacija može se obaviti na tri već navedena načina. Signal na ulazu u filtar koji je predstavljen realnim brojem, također je potrebno kvantizirati na B-bitnu frakciju, a tu operaciju obavlja A/D pretvornik Kao što se vidi na slici 3.1, uzorke sa ulaza treba proslijediti na elemente za kašnjenje 1 z. Elementi za kašnjenje se realiziraju kao memorijske lokacije širine B bita. Sadržaji tih memorijskih lokacija nazivaju se stanja filtra, a kod FIR filtara odgovaraju zakašnjelim uzorcima ulaza. Stanja se množe s pripadnim koeficijentima, a dobiveni umnošci međusobno zbrajaju. Da bi greška uslijed operacija nad brojevima fiksne širine bila što manja, produkti širine B-1 se obično ne skraćuju na širinu B, već se zbrajanje obavlja nad produktima pune širine B-1. Tada je i izlaz filtra frakcionalna vrijednost širine B-1, koju prije D/A pretvorbe (iste rezolucije od B bita kao i A/D), treba kvantizirati na širinu B. Za konkretnu implementaciju na jednom DSP procesoru pogledati slijedeće poglavlje. ZA ONE KOJI ŽELE ZNATI VIŠE Realizacija FIR filtra na DSP procesoru Implementacija FIR filtra provedena je na DSP procesoru AD181 ugrađenom na DSP maketi. Ovaj DSP procesor je 16-bitni procesor s cjelobrojnom aritmetikom koji dakle radi sa 16-bitnim internim registrima. Ulazni argumenti aritmetičko-logičkih operacija su 16-bitni. Zbrajalo je 16-bitno, a množilo 3-bitno. U sklopu množila postoji još jedan akumulator koji je 40-bitni (3 bita + 8 bita proširenja). Akumulator se od običnog zbrajala razlikuje po tome što je jedan od ulaznih argumenata, kao i izlazni registar sa sumom jedan te isti fiksno određen registar. Struktura akumulatora prikazana je na slici 3.. Pošto kod realizacije FIR filtra imamo više uzastopnih množenja uz akumulaciju rezultata (broj množenja odgovara redu filtra) postoji opasnost od izlaska iz dinamike (rezultat se više ne može prikazati u danom registru). Radi toga se akumulatori redovito izvode kao registri dvostruke širine uz nekoliko bita proširenja s lijeve strane, tj. u postupku računanja dozvoljava se privremena vrijednost u akumulatoru koja je veća od 1. Ukoliko se to proširenje sastoji od C bita, tada možemo provesti ukupno C množenja uz akumuliraciju rezultata bez opasnosti od izlaska iz dinamike. Pošto je D/A pretvornik 34
također 16-bitni samo se 16-bita gornje riječi uzima kao izlaz filtra. Da bi se smanjila pogreška uslijed ispuštanja donje riječi provodi se zaokruženje gornje riječi, tek nakon provedenih svih N množenja i pribrajanja. Pri tome treba provjeriti da li je rezultat unutar tražene dinamike, tj. da li je rezultat potpuno sadržan u gornjoj riječi. To znači da svi bitovi proširenja i najviši bit gornje riječi moraju biti jednaki (0 za pozitivni odnosno 1 za negativni broj). Ukoliko to nije zadovoljeno, potrebno je provesti zasićenje, tj. u akumulator upisati najveći pozitivni, odnosno najmanji negativni iznos. Time se sprečava da izlaz filtra poprimi pogrešan iznos (predznak) u slučaju prekoračenja dinamike. Jasno je da izlazni uzorak u tom slučaju nije dobro izračunat. Opisane metode osiguravaju malu pogrešku uslijed efekata konačne preciznosti. Akumulator Proširenje Gornja riječ Donja riječ zaokruženje Cjelobrojni dio Slika 3. Frakcionalni dio Struktura akumulatora Filtar je realiziran prema prikazanoj blok shemi na slici 3.1. Listing programa koja radi s 16 bitnim koeficijentima filtra i 16 bitnim ulaznim signalom dan je u nastavku. {Dio 1} {Definicija modula i konstanti}.module/ram SFIR; {Ime programa}.const N=45; {Red filtra} {Definicija ulaznih točaka u modul}.entry ZAGLAVLJE;.ENTRY OBRADA; {Definicija varijabli}.var/pm/ram/circ COEFS[N]; {Koeficijenti filtra}.var/dm/ram/circ DELAY[N]; {Stanja filtra}.var/dm/ram sampl_rate; {Frekvencija otipkavanja}.global sampl_rate; {Ucitavanje koeficijenata iz datoteke prilikom linkanja}.init COEFS : <SFIR.CFS>; {Dio } {Ovaj dio se izvodi samo jednom kod inicijalizacije filtra} ZAGLAVLJE: I4=^COEFS; {Pokazivac na koeficijente} I=^DELAY; {Pokazivac na stanja} L4=%COEFS; {Cirkularno adresiranje} L=%DELAY; M=1; {Ofset registri} M4=1; CNTR=N; MX0=0; DO CLD UNTIL CE; CLD: DM(I,M)=MX0; {Inicijalno brisanje stanja} RTS; {Dio 3} {Ovaj dio programa se izvodi za svaki otipkani uzorak} OBRADA: {U MX1 nalazi se ulazni podatak} DM(I,M)=MX1; 35
CNTR=N-1; {Inicijalizacija akumulatora i prvih dvaju multiplikatora} MR=0, MX0=DM(I,M), MY0=PM(I4,M4); {Konvolucija} DO CONV UNTIL CE; CONV: MR=MR+MX0*MY0(SS), MX0=DM(I,M), MY0=PM(I4,M4); MR=MR+MX0*MY0(RND); {Zaokruživanje rezultata} IF MV SAT MR; {Zasićenje u slučaju preljeva} MX1=MR1; {Izlazni podatak se vraća u MX1} RTS;.ENDMOD; Program se u grubo može podijeliti na tri dijela. U prvom dijelu se provodi definicija konstanti i rezervacija memorije za varijable. Ovaj dio se koristi od strane prevodioca prilikom prevođenja programa. U drugom dijelu, koji se poziva jednom na početku izvršavanja programa, provodi se inicijalizacija stanja filtra (brisanje sadržaja memorijskih lokacija u kojima će se čuvati stanja filtra) te inicijalizacija internih registara procesora (I, M i L) koji će se koristiti za indirektno adresiranje memorije. Treći dio programa se izvršava za svaki ulazni uzorak. Očitani uzorak s A/D pretvornika ulazi u rutinu (na mjestu labele obrada) preko registra MX1, a na izlazu iz rutine registar MX1 sadržava izlazni uzorak iz filtra. Taj uzorak se pri idućem ulaznom uzorku šalje na D/A pretvornik. U prikazanom programu treba uočiti slijedeću liniju: MR=MR+MX0*MY0(SS), MX0=DM(I,M), MY0=PM(I4,M4); Ova linija prikazuje pravu moć DSP procesora jer se istovremeno, u jednom ciklusu (u našem slučaju 30ns), provodi više nezavisnih operacija i to: Prva naredba: multiplikacija brojeva s predznacima (oznaka SS) jednog koeficijenta (MY0) i jednog stanja filtra (MX0) uz pribrajanje sumi prethodno dobivenih multiplikacija koja je već prisutna u registru MR Druga naredba: učitavanje u registar MX0 novog stanja sa memorijske lokacije u podatkovnoj memoriji (DM) koja je adresirana adresnim registrom I Treća naredba: učitavanje u registar MY0 novog koeficijenta sa memorijske lokacije iz programske memorije (PM) koja je adresirana adresnim registrom I4 Inkrementiranje (povećavanje za jedan) indeksnih registara (I i I4) koji služe za pristup koeficijentima i stanjima (u sklopu druge i treće naredbe) Iterativnim ponavljanjem gornje linije (DO petlja) za sve koeficijente i stanja dobiva se iznos izlaznog uzorka. U gornjem programu nedostaje dio za komunikaciju sa A/D i D/A pretvornikom (preko jednog ulaznog i jednog izlaznog registra procesora) koji nije interesantan sa stanovišta funkcioniranja filtra. Za slučaj s koeficijentima duljine 3 bita (stanja i ulazni podaci su i dalje 16-bitni) stvari su složenije jer je množilo na ovom DSP-u 16-bitno te se množenje mora provoditi u tri koraka na slijedeći način: 1. Pomnožiti stanje s donjom riječi koeficijenta (donjih 16 bita). Pomaknuti dobiveni rezultat 16 bitova u desno (dijeljenje s 16 ) 3. Pribrojiti dobivenom rezultatu umnožak stanja i gornje riječi koeficijenta (gornjih 16 bita) 36
Zadatak za pripremu Za niskoopropusni FIR filtar, granične frekvencije ωc = 0.15 π i reda N=5 projektiran pomoću Hamming-ovog vremenskog otvora, izračunati h c [ n] i H c ( z) pripadnog kauzalnog filtra. Provesti kvantizaciju koeficijenata zaokruživanjem na najbliži cijeli broj sa 6 bita (5+1 predznak). Prikazati koeficijente u cjelobrojnom i frakcionalnom zapisu dvojnog komplementa. Nacrtati blok shemu filtra sa upisanim frakcijama. Izračunati frekvencijsku jω karakteristiku filtra ( ) H c e (ovo je FIR TIP pogledati u materijalima sa predavanja), te skicirati amplitudno i fazno frekvencijsku karakteristiku filtra. Koristiti potrebne relacije iz teoretskog dijela vježbi. Rješenje zadatka: 37
Praktična vježba MATLAB PROGRAM ZA IZRAČUNAVANJE KOEFICIJENATA FIR FILTRA 1. Napisati Matlab program (skriptu) kojim se izračunavaju koeficijenti niskopropusnog FIR filtra granične frekvencije wc korištenjem pravokutnog i Blackmanovog vremenskog otvora te prikazuju amplitudno i fazno frekvencijske karakteristike otvora i dobivenog FIR filtra. Slijediti upute u nastavku. a) Red filtra N unijeti korištenjem naredbe input. Napisati izraz za broj uzoraka vremenskog otvora L koji ujedno odgovara dužini konačnog impulsnog odziva FIR filtra. b) Unos granične frekvencije wc filtra unijeti korištenjem naredbe input. c) Ispitati da li je N paran broj pomoću funkcije rem (ostatak kod dijeljenja), rem(n,), a zatim ovisno o tom uvjetu prema teoretskom dijelu pripreme definirati vektore indeksa n za nekauzalni impulsni odziv idealnog filtra (oko 0). Koristiti if-then-else strukturu. d) U sklopu prethodno napisane if-then-else strukture ovisno o parnosti N napisati i izraze za uzorke impulsnog odziva idealnog niskopropusnog filtra hlp (izrazi u tablici 3.1). ZA PARNI N PAZI! Postoji uzorak na indeksu n = 0, tj. hlp(n/+1) za koji bi izraz za izračunavanje uzoraka impulsnog odziva rezultirao nulom u nazivniku. Da se pojednostavni izračunavanje uzoraka u ovom slučaju, izraz treba primijeniti za sve indekse, pa i za n = 0 usprkos tome što se Matlab žali na dijeljenje s nulom. U slijedećoj naredbi zatim treba vrijednost uzorka u n = 0 posebno izračunati prema danom izrazu. e) Na prvoj slici (prije ove i svake nove slike reći prethodno figure) prikazati hlp sa stem uz odgovarajuće indekse vektora n. f) Definirati vremenske otvore. Izraziti pravokutni otvor w1 dužine L korištenjem naredbe ones(1,l). Uzorci Blackmanovog otvora w ovise o parnosti N, a treba ih izračunati za prethodno definirani skup indeksa n. Stoga se u već postojećoj if-then-else strukturi može dodati i izračun uzoraka w prema izrazima iz tablice 3.. g) Prikazati vremenske otvore w1 i w na drugoj slici sa stem naredbom na malo drugačiji način i to: stem(n,[w1' w'],'filled');. Objašnjenje: prethodno smo definirali retke w1 i w. Korištenjem operatora ' (transpozicija) ih pretvaramo u stupčane vektore. To je dakako samo privremeno (za prikaz) jer se kao transponirani vektori nigdje neće pohraniti. Ovo je potrebno jer se navedenim izrazom mogu prikazati uzorci (i više) stupčana vektora na jednom grafu uz istu x-os. Isti oblik prikaza se može primijeniti i kod naredbe plot. Opcija 'filled' označava da će kružići na vrhu uzoraka biti ispunjeni. (PAZI! Izraz ne radi u Matlabu 4. Za taj Matlab primijeniti stem dva puta uz hold on naredbu između dva prikaza.) h) Izračunati frekvencijske karakteristike vremenskih otvora w1 i w. Za to se koristi funkcija freqz na način: [W1,om]=freqz(w1,1,K);. Funkcija traži slijedeće ulazne parametre. Prvi broj predstavlja koeficijente brojnika razlomljene racionalne funkcije. U našem slučaju su to koeficijenti impulsnog odziva vremenskog otvora. Drugi broj predstavlja koeficijente nazivnika kojih u slučaju FIR filtara (što i sami vremenski otvori na određeni način predstavljaju) nemamo pa se stavlja broj 1. Treći broj K definira broj frekvencijskih 38
točaka od 0 do π u koliko se evaluira karakteristika koja je inače kontinuirana funkcija od frekvencije. Treba prije poziva funkcije definirati K=104. Vrijednosti W1 predstavljaju kompleksne vrijednosti frekvencijske karakteristike za frekvencije sadržane u vektoru om. i) Na trećoj slici prikazati amplitudne karakteristike vremenskih otvora. Koristiti subplot naredbu, pa na gornjem grafu prikazati amplitude dobivene funkcijom abs( ), a u donjem grafu prikazati amplitude u db pomoću 0*log10(abs( )). Kod toga u plot naredbi koristiti isti princip kao pod točkom g) s razlikom da su rezultati primjene funkcije freqz već stupčani vektori pa ih ne treba transponirati. Također je radi boljeg snalaženja zgodno frekvencijsku os prikazati normiranu s π (tada vrijednost frekvencije 1 odgovara π). Dakle, naredba za prikaz treba izgledati ovako: plot(om/pi,[abs(w1) abs(w)]). Za prikaz amplitude u db napraviti analogno. j) Na temelju uzoraka vremenskih otvora w1 (pravokutnog) i w (Blackman-ovog ) i uzoraka impulsnog odziva idealnog filtra hlp realizirati pripadne FIR filtre. k) Na četvrtoj slici prikazati impulsne odzive dobivenih filtara h1 i h kako je to učinjeno pod točkom g). l) Izračunati frekvencijske karakteristike filtara kako je to učinjeno pod točkom h) m) Korištenjem funkcije subplot na petoj slici prikazati amplitudne karakteristike u db (na gornjem grafu) i fazne karakteristike filtara (na donjem) kako je to učinjeno pod točkom i). Podsjetnik, fazna karakteristika izračunava se sa funkcijom angle( ). U prikazu, vrijednost fazne karakteristike podijeliti s π radi boljeg očitanja.. Izvesti program uz N=30 i graničnu frekvenciju wc=0.*pi i promotriti prve tri slike. Na trećoj slici bi se trebali vidjeti amplitudni spektri vremenskih otvora radi usporedbe. Očito je međutim da spektre treba najprije nekako normirati da bi imali jednako pojačanje za DC komponentu prije nego se uspoređuju. To se može ostvariti tako da se sumiraju uzorci svakog pojedinog otvora i zatim sami uzorci otvora podijele sa dobivenim sumama. Dakle, treba nakon definiranja uzoraka otvora napisati slijedeće: w11=w1/sum(w1); i w=w/sum(w);. Ako se sada u linijama koda u kojima se izračunavaju frekvencijske karakteristike otvora, zamijene w1 i w sa w11 i w i ponovno izvede program, moći će se lijepo vidjeti odnos amplitudnih spektara ova dva otvora. Ova akcija ima veze samo sa usporedbom spektara otvora. Filtre treba raditi sa uzorcima otvora kakvi jesu, dakle w1 i w. Zatvoriti dakle sve slike i ponovno izvesti program s istim parametrima, ali uz gornje izmjene. Proučiti sada sliku s prikazima spektara otvora. Povećati ju preko cijelog ekrana. Uočiti postojanje 'latica'. Uočiti da mjesta prolaska gornje krivulje (apsolutne vrijednosti frekv. karakt.) kroz nulu odgovaraju mjestima beskonačnog gušenja na donjoj krivulji izraženoj u db. Kako je definirana glavna latica? Koji otvor rezultira širom glavnom laticom? Odrediti okvirno širine g. latica i usporediti ih sa onima u trećem stupcu tablice 3.3 uz N=30. Na prikazu u db ustanoviti koliko gušenje odgovara visini najviše bočne latice. Da bi se to lakše ustanovilo kliknuti na dotični graf na toj slici i u Matlabu otipkati axis([0 1-100 0]). Tom naredbom ograničit će se raspon y-osi od 0 do -100 db. Usporediti svoja zapažanja sa iznosima u drugom stupcu tablice 3.3. Koji otvor rezultira većim gušenjem bočnih latica? 39
Izvesti sada program uz N=55 i wc=0.*pi i usporediti slike spektara otvora dobivene uz obje vrijednosti N. Kliknuti u graf i ponoviti axis naredbu. Provjeriti sada koliko je gušenje boč. latica, a kolike su širine gl. latica oba otvora. Što se od toga promijenilo s povećanjem N? 3. Sada promotriti slike impulsnih odziva konačnih FIR filtara dobivenih uz obje vrijednosti N, te njihove amplitudne i fazne spektre. Za grafove amplitudnih spektara primijeniti naredbu axis([0 1-100 5]). Koji filtar (dobiven od pravokutnog ili od Blackmanovog otvora) rezultira većim gušenjem u području gušenja? Da li se gušenje i kako mijenja sa N? Ustanoviti koliko je okvirno to gušenje i te brojke usporediti s brojkama u zadnjem stupcu tablice 3.3. Promotriti prijelazna područja filtara. Da li ovise o tipu vrem. otvora? Da li ovise o N? MATLAB APLIKACIJA - UTJECAJ KVANTIZACIJE KOEFICIJENATA NA SVOJSTVA PROJEKTIRANIH FILTARA 4. U komandnom prozoru MATLAB-a pokrenuti program vj3 unosom naredbe vj3 <ENTER>. Na najgornjem padajućem izborniku u gornjem desnom kutu grafičkog sučelja treba odabrati opciju Projektiranje filtara, a na izborniku Odabir prikaza odabrati Kvantizacija koeficijenata radi proučavanja efekata kvantizacije koeficijenata na svojstva filtra. Za odabrani broj bita na koji se kvantiziraju koeficijenti prikazuje se amplitudnofrekvencijska karakteristika filtra izračunata sa nekvantiziranim i kvantiziranim koeficijentima te pripadni odzivi na jediničnu stepenicu (uz odabranu opciju Odziv na step). Uz slijedeće parametre: red filtra 0, Niski propust, graničnu frekvenciju 0.5 i pravokutni vremenski otvor, odabrati 8 bita za kvantizaciju i izredati sve tri metode kvantizacije. Ponoviti postupak za manji broj bita (npr. 4 bita). Opisati kako broj bita za kvantizaciju koeficijenata utječe na izgled amplitudno-frekv. karakteristike? Koja metoda kvantizacije koeficijenata rezultira nešto lošijim karakteristikama filtra u odnosu na druge dvije? Za jedan odabir broja bita i metode kvantizacije pogledati kvantiziranu frekv. karakteristiku i odziv na jediničnu stepenicu. Zašto uz odsijecanje prema nuli odziv na step izgleda vrlo loše (pogledati izgled ampl.-frekv. karakteristike na niskim frekvencijama)? REALIZACIJA PROJEKTIRANIH FIR FILTARA NA DSP PROCESORU 5. U ovom zadatku bit će provedena realizacija projektiranih filtara i filtracija na DSP procesoru. Osim toga će se na temelju istih kvantiziranih koeficijenata i kvantiziranih ulaznih uzoraka prikupljenih s makete provesti simulacija filtracije u Matlabu pomoću funkcije filter te će biti napravljena usporedba rezultata dobivenih uz oba postupka. U istoj aplikaciji vj3 kao u prethodnom zadatku, s padajućeg menija Odabir prikaza odabrati opciju DSP maketa. Namjestiti željene parametre filtra na temelju kojih će Matlab program izračunati koeficijente: Pojasni propust, red 40, granične frekvencije 0. i 0.3 40
(normirano sa π), Hammingov otvor, te frekvenciju očitavanja 8 khz. Pritiskom na tipku Start DSP (16-bita) bit će generiran program za filtraciju za DSP te će dobiveni 16-bitni koeficijenti i sam program biti preneseni na maketu. Program na DSP maketi se automatski pokreće i provodi filtraciju koju možemo pratiti na osciloskopu. Najprije odrediti granične frekvencije pojasa propuštanja filtra izražene u Hz, pri čemu ovdje normirana granična frekvencija 1 odgovara frekvenciji otipkavanja. Provjeriti rad filtra. Na kraju odabrati neku proizvoljnu ulaznu frekvenciju na maketi, pritisnuti tipku interrupt te pritiskom na tipku obrada (16 bita) prenijeti snimljene podatke s makete na PC. Otvara se prozor u kojem su prikazana oba filtrirana signala (Matlab i DSP) te razlika među njima. Kolika je ta razlika? Jedina razlika između dva postupka leži u činjenici da su operacije izvedene na DSP-u u cjelobrojnoj aritmetici, a u Matlabu u aritmetici pomičnog zareza. S obzirom da su i cjelobrojno množilo i akumulator na DSP-u u slučaju filtracije s 16-bitnim koeficijentima takve preciznosti da sadržavaju potpuni rezultat, nema apsolutno nikakve razlike u oba slučaja, tj. greška je nula. Svi međučvorovi su maksimalne točnosti kolika treba za prikaz rezultata što je u neku ruku i posljedica same FIR strukture jer nigdje osim eventualno na izlazu ne treba kvantizirati rezultate. Za one koji žele i više MATLAB APLIKACIJA - VREMENSKI OTVORI 6. U sklopu Matlab aplikacije odabrati opciju Vremenski otvori na padajućem izborniku u gornjem desnom kutu grafičkog sučelja. Za zadani broj točaka vremenskog otvora L, prikazuje se izgled otvora u vremenskoj domeni (gornja slika) i pripadni spektar (frekvencijska domena). Opisati dobivene karakteristike, te analizirati odnose širina glavnih latica i gušenje bočnih latica u ovisnosti o broju uzoraka vremenskog otvora, odnosno tipu otvora. MATLAB APLIKACIJA - PROJEKTIRANJE FIR FILTARA 7. Vremenskim otvorima promatranim u prethodnoj točci će se u nastavku vježbe projektirati nerekurzivni (FIR) filtri. Za to odabrati opciju Projektiranje filtara. Za zadani red filtra N, korištenjem odabranog vremenskog otvora projektira se željeni filtar (LP, HP, BP ili BS) zadanih graničnih frekvencija. Za početak odabrati red filtra 0, Niski propust, graničnu frekvenciju 0.5 i pravokutni vremenski otvor. Postupak projektiranja je demonstriran kroz nekoliko slika. Najprije se prikazuje amplitudno-frekvencijska karakteristika idealnog filtra i pripadni (beskonačni) impulsni odziv (opcija Idealan filtar). Množenjem impulsnog odziva s odabranim vremenskim otvorom (opcija Impulsni odziv idealnog filtra) provodi se skraćivanje impulsnog odziva na broj uzoraka koji odgovara redu filtra. Pripadna frekvencijska karakteristika (opcija Frekvencijska karak. filtra) uspoređena je s idealnom. Za različite tipove filtara, redova filtara i primijenjenih vremenskih otvora promotriti pojedine korake postupka projektiranja filtra metodom vremenskih otvora. 41