Artur Rykala
5SST
Warszawa 19.01.2002
Pawel Przybylek
5SST
Dokumentacja koncowa z II projektu z UCYF
Temat: Filtry cyfrowe o skonczonej odpowiedzi impulsowej (FIR)
1. Analiza problemu
Sygnaly uzyteczne sa na ogól odbierane w obecnosci szumu (niekoniecznie bialego) i
innych sygnalów zaklócajacych. Usuniecie zaklócen i szumów z sygnalu odbieranego w taki
sposób, aby sygnal uzyteczny nie zostal nadmiernie znieksztalcony, jest podstawowym
zadaniem filtru cyfrowego. Np. jesli znane pasmo czestotliwosci sygnalów uzytecznych, a
widmo energetyczne zaklócen i szumów kolorowych lezy poza tym pasmem, to aby uniknac
znieksztalcen sygnalu, filtr powinien miec stala (rózna od zera) charakterystyke amplitudowa
w tym pasmie (pasmie przepustowym filtru) i liniowa charakterystyke fazowa.
Charakterystyka poza pasmem przepustowym powinna przyjmowac wartosci bliskie zeru
(pasmo zaporowe).
Rys.1 Filtry: a) filtr analogowy z harmonicznie zaszumionym sygnalem wejsciowym i harmonicznym
sygnalem wyjsciowym o zredukowanym szumie; b) cyfrowy odpowiednik filtru analogowego
Problem jest o wiele trudniejszy, jesli widmo zaklócen pokrywa sie czesciowo z widmem
sygnalu uzytecznego. Odfiltrowanie zaklócen prowadzi do powstania znieksztalcen sygnalu.
Warto zaznaczyc, ze przez termin filtry cyfrowe rozumie sie nie tylko uklady sluzace do
eliminacji (odfiltrowania) zaklócen, lecz równiez uklady stosowane do celowego
przeksztalcania danego sygnalu w inny sygnal. Przykladem moga byc np. filtry rózniczkujace,
filtry Hilberta (stosowane do tworzenia sygnalu analitycznego) lub tez bank (zestaw) filtrów
pasmowych (o stalych pasmach lub stalych dobrociach). Te ostanie sa coraz czesciaj
stosowane w analizie czasowo-czestotliwosciowej sygnalów, co w jezyku matematycznym
oznacza dekompozycje sygnalu wzgledem funkcji bazowych. Metody te wykorzystuje sie w
kompresji sygnalu, wystarczy przeslac wspólczynniki rozwiniecia (zamiast próbek sygnalu) i
po stronie odbiorczej dokonac syntezy sygnalu na podstawie znajomosci funkcji bazowych.
Rys.2 Roznego rodzaju filtry wraz z przedzialami tolerancji: a) dolnoprzepustowy;
b)srodkowoprzepustowy; c)górnoprzepustowy d) srodkowozaporowy
Jedna z klas filtrów sa filtry o skonczonej odpowiedzi impulsowej SOI (ang. FIR –
Finite Impulse Resonse). Do uzyskania biezacej próbki sygnalu wyjsciowego wykorzystuja
próbke biezaca i próbki przeszle sygnalu wejsciowego, nie korzystajac z zadnych przeszlych
próbek sygnalu wyjsciowego. Dysponujac skonczonym ciagiem róznych od zera próbek
sygnalu wejsciowego, filtr SOI zawsze ma na wyjsciu skonczonej dlugosci ciag niezerowych
próbek sygnalu wejsciowego, skad bierze sie nazwa tego typu filtrów. Jezeli sygnal
wejsciowy staje sie nagle ciagiem zerowych wartosci, to sygnal wyjsciowy tez bedzie ciagiem
próbek zerowych.
Rys.3 Przykladowy filtr SOI 4 rzedu (4 ogniowy)
Rys.4 Przykladowy filtr NOI
W porównaniu do filtrów o nieskonczonej odpowiedzi impulsowej NOI (nie bedziemy sie
nimi tu zajmowac), filtry SOI posiadaja liniowa charakterystyke fazowa. Dzieje sie to jednak
kosztem dlugosci filtru. Aby uzyskac taka sama charakterystyke amplitudowa jak filtr NOI
nalezy uzyc znacznie dluzszego filtru SOI.
Rys.5 Przyklady charakterystyk filtrów SOI o róznych dlugosciach
Rys.6 Charakterystyka filtru NOI i SOI nalozona na tym samym rysunku
2. Opis sposobu rozwiazania problemu:
Na rys.4 widzimy przykladowa budowe filtru SOI. Sklada sie on z zestawy
przechowujacego próbki wejsciowe, ukladu modyfikujacego wartosci próbek, ukladu
sumujacego zmodyfikowane próbki.
Ze wzgledu na przyjete zalozenia:
- próbki wchodzace sa 16-bitowe;
- próbki reprezentowane w kodzie NKB, czyli wszystkie dodatnie;
- stworzyc filtr dolnoprzepustowy;
- filtr 6-rzedu, gdyz budowa filtrów wyzszego rzedu bedzie analogiczna;
- pasmo przepustowe to ok. 0,3 fs;
przyjeto nastepujacy sposób projektowania.
a) uklad przechowujacy próbki wejsciowe
Uklad przechowujacy próbki powinien miec dlugosc równa rzedowi filtru + 1 dla próbki o 0
opóznieniu. Powinien umozliwiac filtrowanie sygnalów o róznych czestotliwosciach
wzglednych dlatego wykorzystuje sie wejscie zegarowe clk. Pozadana jest równiez
mozliwosc sterowania pozwoleniem na zmiane wartosci rejestrów.
Stworzono
zestaw7
skladajacy sie z 7 rejestrów o wejsciu i wyjsciu równoleglym, sterowanych
sygnalami
clk
i
loa
. Uklad w formie gotowego symbolu oraz z struktura wewnetrzna znajduje
sie w Zalacznikach graficznych pkt a).
Sam rejestr 16-bitowy zostal stworzony przy pomocy pliku tekstowego. Jego zawartosc
znajduje sie w Zalacznikach tekstowych pkt a). Zrezygnowano z gotowych rejestrów gdyz
rejestry ze standardowej biblioteki posiadaly wiele funkcji dodatkowych, które nie byly
potrzebne do tego projektu, co powodowalo, ze zajmowaly one wiecej miejsca w ukladzie
(dazymy do minimalizacji jego).
b) uklad modyfikujacy wartosci próbek (uklad mnozacy)
Stworzenie ukladu mnozacego nie jest wielkim problemem. Trudnoscia jest wyznaczenie
odpowiednich wartosci wag dla ukladu mnozacego. Do wyznaczenia ich posluzono sie
pakietem MATLAB w wersji 5.3. Do tego celu stworzono skrypt umozliwiajacy wyznaczenie
wartosci poszczególnych próbek oraz dodatkowo pokazujacy transmitancje utworzonego
filtru, widmo sygnalu wejsciowego i przetworzonego.
Fs=100;
t=(1:100)/Fs;,
s1=sin(2*pi*t*5); s2=sin(2*pi*t*15); s3=sin(2*pi*t*30);
s=s1+s2+s3;
plot(t,s);
N=6
[F]=[0 0.2 0.3 0.33 0.6 1]
[A]=[0.89 0.89 0.89 0.61 0.2 0.1]
[B]=remez(N,F,A);
B
[H,w]=freqz(B,1,512);
plot(w*Fs/(2*pi),abs(H));
sf=filter(B,1,s);
plot(t,sf);
xlabel('Time (seconds)');
ylabel('Time waveform');
axis([0 1 -1 1]);
S=fft(s,512);
SF=fft(sf,512);
w=(0:255)/256*(Fs/2);
plot(w,abs([S(1:256)' SF(1:256)']));
xlabel('Frequency (Hz)');
ylabel('Mag. of Fourier transform');
Funkcja biblioteczna, która umozliwia nam obliczenie wspólczynników to remez .
Dobierano takie parametry dla funkcji remez, aby transmitancja filtru w pasmie
przepustowym nie przekroczyla 1.
Po kilku iteracjach wyznaczono nastepujace wspólczynniki dla poszczególnych próbek:
B
: -0.0406 0.0704 0.2381 0.4652 0.2381 0.0704 -0.0406
z
-0
z
-1
z
-2
z
-3
z
-4
z
-5
z
-6
Gdzie potega oznacza przesuniecie próbki w czasie (opóznienie).
Rys.7 Transmitancja uzyskanego filtru
Rys.8 Widmo sygnalu oryginalne(niebieski) go i po filtracji(zielkony)
Realizacja ukladu byla mozliwa na kilka sposobów:
a) wykorzystanie gotowych modulów zawartych w ALTERZE (megafunkcje);
b) wykorzystanie mechanizmu mnozenie implementowanego w procesorach
sygnalowych, stalopozycyjnych;
c) próba przyblizenia wartosci wspólczynników wielomianem postaci
y=1/2
0
+1/2
1
+1/2
2
+....+1/2
n
;
d) inne sposoby.
Rozwiazanie:
ad a) Megafunkcje nadaja sie do tego ukladu, jednak ich zajetosc powierzchni ukladu
powoduje, ze zalaczenie ich jako ukladu mnozacego nie nadaje sie do implementacji;
ad b) W procesorach stalopozycyjnych implementuje sie dzielenie jako mnozenie danej
liczby przez inna reprezentowana na X bajtach. Jezeli argument jest reprezentowany na
Y bajtach to wynik takiego dzialania bedzie na X+Y bajtach. Dodatkowo dzielnik
traktuje sie jako liczbe z przedzialu od 0 do 1, co powoduje, ze nie osiagniemy
przepelnienia (przeniesienia na ostatnich bitach wyniku). Po wykonaniu takiego
dzialania nalezy tylko zinterpretowac odpowiednio wynik. Aby uzyskac oczekiwana
wartosc nalezy z wyniku (tu o dlugosci X+Y) pominac Y najmniej znaczacych bitów.
Przyklad:
X=16 bitów, liczba =25437
binarnie=01100011 01011101
Y=16 bitów, mnoznik = 0,3
binarnie=01001100 11001101
Oczekiwany wynik to 7631
Po przemnozeniu:
X+Y=32 bity liczba=00011101 11001110 11001010 00011100
Po odrzuceniu najmniej znaczacych bitów mamy:
00011101 11001111, a to jest równe 7631
Algorytm ten daje dobre wyniki, ale równiez wymaga odpowiednio duzej powierzchni
w ukladzie.
ad c) Przyblizenie wagi za pomoca takiego wielomianu jest mozliwe, gdyz suma takiego
szeregu wynosi 2. Jest mozliwe wykorzystanie tego przyblizenia, ale liczba sumatorów
bylaby dosc duza.
Uwagi do powyzszych rozwiazan:
Wszystkie rozwiazania powyzsze zajmuja znaczaca powierzchnie ukladu.
Mozliwe byloby ich wykorzystanie, gdyby stworzyc 1 uklad mnozacy, a nastepnie prze
pomocy jego obliczac wagi poszczególnych galezi. Koszt takiego rozwiazania to przede
wszystkim zmniejszenie powierzchni (w stosunku do 1 galaz=1 uklad mnozacy), ale
równiez zmniejszenie czestotliwosci granicznej dla filtru (gdyz uklad musialby czekac
na obsluzenie po kolei wszystkich galezi).
Zdecydowano sie na inne rozwiazanie.
ad d) Mozna próbowac przyblizyc poszczególne wagi nie calym wielomianem z pkt. C, a
jedynie 1 z elementów szeregu postaci 1/2
n
.
Zaproponowano nastepujace wartosci w stosunku do pierwotnych:
B: -0.0406 0.0704 0.2381 0.4652 0.2381 0.0704 -0.0406
z
-0
z
-1
z
-2
z
-3
z
-4
z
-5
z
-6
B’: -0.0625 0.0625 0.2500 0.5000 0.2500 0.0635 -0.0625
Po zasymulowaniu w MATLABIE nowy filtr ma nastepujace charakterystyki:
Rys.9 Transmitancja filtru dla nowych wspólczynników
Rys.10 Dla nowego filtru: widmo sygnalu oryginalnego (niebieski) i po filtracji(zielony)
Widac, ze w nowym filtrze nastapila poprawa transmitancji dla pasma przepustowego, teraz
wynosi ok. 1. Nastapilo to kosztem poszerzenia pasma przejsciowego oraz zwiekszeniem
poziomu listków bocznych.
Przyjeto taki schemat realizacji.
Budowa con1620:
Uklad ten zbudowany zostal edytorze tekstowym jako uklad przesuwajacy bity o zadana
liczbe w prawo. Do realizacji tego ukladu nie wykorzystano rejestrów przesuwajacych, a
jedynie „przesunieto polaczenia” wychodzace na uklad sumujacy. Przesuniecie
spowodowalo, ze uklad dziala jakby dzielil sygnaly z poszczególnych galezi o zadana potege
2. Dodatkowo uklad dostosowuje szerokosc wyjscia z galezi na wejscie sumatorów.
Zawartosc pliku tekstowego opisujacego uklad zawarta jest w Zalacznikach tekstowych
pkt. b) a symbol ukladu zawarty jest w Zalacznikach graficznych pkt. b).
c) uklad sumujacy przemnozone próbki
Uklad sumujacy zostal oparty o gotowe bloki wygenerowane przez megafunkcje
lpm_add_sub. Powodem do wykorzystania tej funkcji jest jej szybkosc. Wlasny uklad
sumujacy mial znacznie dluzszy czas dzialania, przy czym zajetosc ukladu jest do przyjecia.
Próbki przychodzace z ukladu mnozacego con1620 zostaja rozszerzone do 20 bitów.
Spowodowane jest to kolejna wartoscia szerokosci dodawanego slowa. Musimy przyjac
równiez wiekszy zakres gdyz w przypadku szczególnym tj. gdy przyjdzie 5 próbek o
maksymalnej wartosci, na wyjsciu sumatora pojawi sie przetworzona próbka o wartosci
równej 2,125 wartosci maksymalnej. Dlatego równiez wymagane jest rozszerzenie zakresu o
co najmniej 2 bity.
Uklad sumujacy dziala w ten sposób, ze najpierw sumuje wszystkie sygnaly pochodzace od
dodatnich wag filtru, równolegle dodaje sygnaly pochodzace od ujemnych wag. Nastepnie
sprawdza czy suma dodatnich galezi jest wieksza od sumy ujemnych galezi. Na tej podstawie
ustala znak wyniku. Dalej przesyla wynik oraz znak (1 dla liczby ujemnej).
Porównywanie liczb oraz ustalanie znaku nastepuje w module com20bit (opis w
Zalacznikach tekstowych pkt. c).
Pliki graficzne przedstawiajace rozmieszczenie i polaczenie poszczególnych sumatorów
przedstawiono w Zalacznikach graficznych pkt. c.
d) uklad sprawdzajacy nasycenie wyniku
Uklad sprawdza czy nie nastapilo nasycenie wyniku na 16 bitach (a dokladniej, czy pojawila
sie 1 któryms na bicie bardziej znaczacym od 16). Jesli tak, nastepuje podanie na wyjsciu
maksymalnej liczby reprezentowanej na 16 bitach tj. 0xFFFF.
Plik zawierajacy opis ukladu zawarty jest w Zalacznikach tekstowych pkt. d. W
Zalacznikach graficznych pkt. d przedstawiony jest symbol modulu.
Po polaczeniu wszystkich bloków w calosc otrzymujemy nastepujaca strukture:
Rys.11 Zrealizowany filtr z wyszczególnionymi blokami logiczno-operacyjnymi
3. Symulacje zaprojektowanego ukladów
Na wejsciu podano wektor zlozony z nastepujacych wartosci:
0, 0, 400, 800,800,100,100,65535,65535,65535,0,0
Na wyjsciu powinny pojawiac sie nastepujace wartosci, stan poczatkowy przyjmiemy jako
zaladowanie do rejestru pierwszej nie zerowej wartosci:
Na wyjsciu:
I
y=-400/16=-25
II
y=-800/16+400/16=-25
III
y=-800/16+800/16+400/4=100
IV
y=-1000/16+800/16+800/4+400/2=388
V
y=-1000/16+1000/16+800/4+800/2+400/4=700
VI
y=-65535/16+1000/16+1000/4+800/2+800/4+400/16=-3158
VII
y=-65535/16+65535/16+1000/4+1000/2+800/4+800/16-400/16=975
VIII
y=-65535/16+65535/16+65535/4+1000/2+1000/4+800/16-800/16=17133
IX
y=-0/16+65535/16+65535/4+65535/2+1000/4+1000/16-800/16=53507
Takie wartosci powinny sie pojawic na wyjsciu ukladu.
Rys.12 Symulacja przebiegu czasowego w zbudowanym ukladzie.
Widac, ze uklad zachowuje sie zgodnie z oczekiwaniami. Dwie pierwsze nie zerowe wartosci
na wyjsciu oraz 3158 sa ze znakiem -, gdyz stan znak przyjmuje VCC.
Pominieto zmieszczenie symulacji poszczególnych elementów, gdyz podczas tworzenia filtru,
przed przystapieniem do nastepnej fazy projektu dokladnie symulowano dotychczasowy
uklad. W razie jakis nieprawidlowosci symulacja calego ukladu powinna dac wynik
negatywny, tak sie jednak nie stalo.
4. Analiza rozwiazania, ograniczenia oraz parametry.
Uklad sklada sie z 2 zasadniczych czesci:
I-sekwencyjnej : zestaw rejestrów zestaw7
II-kombinacyjnej: pozostala czesc tj. con1620, add_6, spr_nasyc
Podstawowe ograniczenie wynika z szybkosci dzialania czesci kombinacyjnej. Najdluzsza
sciezka, która propaguje sygnal daje opóznienie:129,4 ns
Opóznienie dawane przez czesc sekwencyjna wynosi: 10,9 ns
Zajetosc ukladu wynosi 287 LCs dla ukladu serii FLEX10K .
Nie jest mozliwe podanie zajetosci poszczególnych modulów gdyz w wyniku optymalizacji
czesc LCs jest niepotrzebna i jest pomijana przez kompilator Krytycznym modulem jest
con1620, który sam zajmuje kilkadziesiat LCs, a po zlaczeniu z innymi modulami jego udzial
drastycznie spada.
Bibliografia:
1. Adam Dabrowski „Przetwarzanie sygnalów przy uzyciu procesorów sygnalowych”
2. Richard G. Lyons „Wprowadzenie do cyfrowego przetwarzania sygnalów”
3. T.Luba, B.Zbierzchowski ” Komputerowe projektowanie ukladów cyfrowych”
4. A.Wojtkiewicz „Cyfrowe przetwarzanie sygnalów-cwiczenia laboratoryjne”
Zalaczniki tekstowe:
a) plik opisujacy rejestr 16 bitowy
SUBDESIGN
reg16
%Uklad majacy za zadanie przekazywanie danych 16 bitowych " rejestr 16
bitowy"
posiada wejscie zezwalajace na zmniane stanu.
%
(
d[15..0], load, clk
:
INPUT
;
% wejscie rejestru %
q[15..0]
:
OUTPUT
;
% wyjscie rejestru %
)
VARIABLE
ff[15..0]
:
DFFE
;
BEGIN
ff[].clk=clk;
ff[].ena=load;
ff[].d=d[];
q[]=ff[].q;
END;
b) plik opisujacy uklad mnozacy con1620
SUBDESIGN
con1620
(
i[15..0], i_1[15..0], i_2[15..0], i_3[15..0], i_4[15..0], i_5[15..0],
i_6[15..0]
:
INPUT;
o[19..0], o_1[19..0], o_2[19..0], o_3[19..0], o_4[19..0], o_5[19..0],
o_6[19..0]
:
OUTPUT;
)
%
"Uproszczony" uklad mnozacy tj przesuwajacy bity o zadana liczbe,
podaje we wlasciwe miejsce na wyjsciu
poprawne wartosci juz po przesunieciu %
BEGIN
o[11..0]=i[15..4];
o[19..12]=
GND
;
o_1[11..0]=i_1[15..4];
o_1[19..12]=
GND
;
o_2[13..0]=i_2[15..2];
o_2[19..14]=
GND
;
o_3[14..0]=i_3[15..1];
o_3[19..15]=
GND
;
o_4[13..0]=i_4[15..2];
o_4[19..14]=
GND
;
o_5[11..0]=i_5[15..4];
o_5[19..12]=
GND
;
o_6[11..0]=i_6[15..4];
o_6[19..12]=
GND
;
END;
c) plik opisujacy uklad porównujacy com20bit
SUBDESIGN
comp20bit
(
a_i[19..0], b_i[19..0]
:
INPUT
;
a_o[19..0], b_o[19..0], znak
:
OUTPUT
;
)
% Jesli a_i jest wieksze od b_i, to trzeba zamienic kanaly (szyny)%
BEGIN
IF
(a_i[]>b_i[])
THEN
a_o[]=a_i[];
b_o[]=b_i[];
znak=
GND
;
%wynik jest liczba dodatnia%
ELSE
a_o[]=b_i[];
b_o[]=a_i[];
znak=
VCC
;
%wynik jest liczba ujemna %
END IF
;
END
;
d) plik opisujacy spr_nasyc
SUBDESIGN
spr_nasyc
(
i[19..0]
:
INPUT
;
o[15..0]
:
OUTPUT
;
)
BEGIN
IF
((i19#i18#i17#i16))
THEN
o[15..0]=B"
1111111111111111
";
ELSE
o[15..0]=i[15..0];
END IF;
END
;
Zalaczniki graficzne:
a) rysunki przedstawiajace strukture zestaw7
Opis: Symbol gotowego do uzycia modulu zestaw7
Opis: struktura wewnetrzna ukladu zestaw7 wraz z polaczeniami u wyprowadzeniami
b) rysunki przedstawiajace con1620
Opis: symbol gotowego do uzycia modulu con1620
c) rysunki przedstawiajace uklad add_6
Opis: struktura wewnetrzna modulu add_6
Opis: symbol ukladu add_6
d) rysunki przedstawiajace spr_nasyc
Opis: symbol ukladu spr_nasyc