Realizacije funkcija prenosa sa konačnom tačnošću izračunavanja

Digitalna obrada signala, Vladimir Petrović

U ovom notebook-u ćemo implementirati jednu realizaciju FIR filtra i uvesti osnovne alate za analizu implementacija sa konačnom tačnošću izračunavanja u aritmetici sa fiksnim zarezom.

Implementacija direktne realizacije FIR filtra

U ovim primerim ćemo uraditi najjednostavniji primer realizacije filtara - direktnu realizaciju FIR filtra. Ona se može realizovati pomoću elemenata za kašnjenje kao na slici ispod.

U narednoj ćeliji ćemo definisati funkciju koja implementira direktnu realizaciju FIR filtra.

Iskoristimo ovu funkciju za filtriranje signala:

Implementacija sa konačnom tačnošću uz pomoć predstave brojeva sa fiksnim zarezom

Filtri se u hardveru realizuju sa konačnom tačnošću. Ne samo u hardveru, vrlo često se za obradu signala koriste posebni procesori za digitalnu obradu signala (DSP procesori) koji mogu biti optimizovani za malu potrošnju, pa u tom slučaju nemaju floating point jedinicu. Prilikom dizajna bilo kog hardverskog sistema za obradu signala uobičajena je praksa da se algoritam najpre napiše u predstavi sa pokretnim zarezom, a zatim se sve vrednosti prevedu u predstavu sa fiksnim zarezom i algoritam se optimizuje tako da daje zadovoljavajuće performanse sa što manje bita. Tek tada se prelazi na hardversku realizaciju.

Za predstavu brojeva sa fiksnim zarezom u Pajtonu koristićemo paket fxpmath. Pre korišćenja ga, naravno, moramo instalirati iz komandne linije komandom pip install fxpmath, a možemo to uraditi i direkto iz notebook-a. Sažeta dokumentacija za ovaj paket, data je ovde.

Osnovna klasa iz ovog paketa je Fxp. Kreiranjem objekta ove klase zadajemo vrednost broja ili niza koji konvertujemo u predstavu sa fiksnim zarezom i format izlaznog rezultata. Format podrazumeva definiciju da li su brojevi označeni iili neoznačeni, ukupan broj bita za predstavu broja, zatim broj bita za predstavu razlomljenog dela broja (desno od decimalnog zareza), ponašanje kod prekoračenja ('saturate' ili 'wrap') i način zaokruživanja ('floor', 'trunc', 'around', 'ceil', 'fix'). Podrazumevano, brojevi su označeni. Format se može zadati i stringom, a čitanjem polja dtype možemo dobiti predstavu formata u obliku stringa.

Podaci različitih formata mogu ulaziti u izračunavanja. Pre izračunavanja je neophodno konvertovati podatke u željeni format rezultata. Konverzija se najjednostavnije izvodi tako što se ponovo pozvoe konstruktor klase Fxp sa novim formatom, ali je moguće menjati i pojedinačne opcije.

Množenje će podrazumevano dati rezultat čije su bitske širine jednake zbiru bitskih širina činilaca, sabiranje će uvek biti urađeno tako da se ne dešava prekoračenje. Ako rezultate želimo da zaokružimo na manje bitske širine, to je najlakše uraditi konverzijom.

Treba još napomenuti da su Pajtonove biblioteke za predstavu brojeva sa fiksnim zarezom po pravilu veoma spore. Zbog toga se u profesionalne svrhe za evaluaciju performansi algoritama mnogo češće koristi C, ali to prevazilazi okvire ovog kursa.

Implementirajmo direktnu realizaciju filtra u predstavi sa fiksnim zarezom. U narednoj funkciji se smatra da množači na svom izlazu daju podrazumevane bitske širine (zbir bitskih širina ulaza). Ovo je najčešći slučaj u hardverskim realizacijama, pa je zbog toga tako odabrano. Izlazni format je definisan posebno i prosleđuje se funkciji. Primetiti da se nakon svakog sabiranja bitska širina sume povećava za 1, pa se finalno može dobiti rezultat koji ima mnogo više bita nego što je neophodno. Zbog toga je i uvedeno opciono podešavanje formata izlaza.