Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Konstrukcje i Technologie w Aparaturze Elektronicznej Ćwiczenie nr 5 Temat: Przetwarzanie A/C. Implementacja filtrów cyfrowych. Opracował: dr inż. A. Holiczer Białystok, 2013 1
I. Wprowadzenie Mając opracowaną metodę komunikacji z użytkownikiem za pomocą wybranych urządzeń (w naszym przypadku wyświetlacz LED oraz klawiatura matrycowa), można przystąpić do realizacji kolejnych procedur pomocniczych. Pierwszą z nich będzie uruchomienie obsługi przetwornika analogowocyfrowego oraz przeprowadzenie filtracji cyfrowej za pomocą filtru o nieskończonej odpowiedzi impulsowej czwartego rzędu. Celem ćwiczenia jest opracowanie procedury uruchomienia przetwornika analogowo-cyfrowego oraz implementacja filtru czwartego rzędu w postaci kanonicznej. Przed przystąpieniem do ćwiczenia należy zaprojektować filtr cyfrowy. Procedura ta zostanie szczegółowo opisana w niniejszej instrukcji po to, aby w przyszłości mogła stanowić swego rodzaju pomoc podczas realizacji tego rodzaju filtrów. Zakładamy, iż należy zrealizować filtr dolnoprzepustowy Butterwortha rzędu czwartego o częstotliwości odcięcia 1 Hz. Aby pominąć zagadnienia teoretyczne związane z projektem posłużymy się darmowym oprogramowaniem SciLab. Zakładając, że częstotliwość próbkowania przetwornika będzie wynosiła 10 Hz można wywołać procedurę projektowania filtru metodą prototypu analogowego w postaci: [hz] = iir(4, 'lp', 'butt', [0.1, 0], [0, 0]); q=poly(0,'q'); hzm = horner(hz, 1/q); Zmienna q oznacza człon opóźniający o transmitancji z -1. Po podstawieniu q = z -1 otrzymujemy następującą transmitancję filtru: = 0.0048243 + 0.0192974 + 0.0289461 + 0.0192974 + 0.0048243 1 2.369513 + 2.3139884 1.0546654 + 0.1873795 Charakterystyka częstotliwościowa opisanego powyżej filtru została przedstawiona na Rys. 1. Rys. 1. Charakterystyka amplitudowa projektowanego filtru. 2
W celu możliwości weryfikacji poprawności działania filtru na Rys. 2 oraz Rys. 3 zamieszczono odpowiedzi skokową i impulsową na wymuszenie o amplitudzie jednostkowej. Rys. 2. Odpowiedź skokowa implementowanego filtru. Rys. 3. Odpowiedź impulsowa implementowanego filtru. Aby zaimplementować filtr należy przede wszystkim przypomnieć jego transmitancję oraz strukturę kanoniczną (Rys. 4). = + + + + 1 + + + + Rys. 4. Schemat blokowy filtru w postaci kanonicznej. Jak zostało to zaprezentowane na powyższym schemacie, do obliczeń oraz realizacji filtru będzie nam potrzebny szereg zmiennych, a mianowicie: współczynniki licznika b[0]..b[4], współczynniki mianownika a[1]..a[4], wartości na wyjściach poszczególnych członów opóźniających q[0]..q[4], 3
zmienne reprezentujące wejście i wyjście: in oraz out. Pierwszą czynnością, jaką powinniśmy wykonać to zadeklarowanie zmiennej strukturalnej reprezentującej implementowany przez nas filtr. Można tego dokonać w następujący sposób: #define FILTER_MAX_ORDER 6 typedef struct unsigned char Order:7; unsigned char FIR:1; unsigned char SmplPos; float a[filter_max_order+1]; float b[filter_max_order+1]; float q[filter_max_order+1]; float out; varfilter; gdzie w zmiennej Order deklarujemy rząd filtra, a w zmiennej FIR będziemy przechowywać informację, czy jest to filtr o skończonej, czy nieskończonej odpowiedzi impulsowej. Przed przystąpieniem do filtracji sygnału należy tak zbudowaną strukturę odpowiednio zainicjować. Można tego dokonać za pomocą prostej procedury: void FilterInit(varFilter *flt, unsigned char order, float *num, float *den) unsigned char i; flt->order = order; if (den!= NULL) for(i=0;i<=flt->order;i++) flt->a[i] = - *(den+i); flt->b[i] = *(num+i); flt->q[i] = 0; flt->fir = 0; else for(i=0;i<=flt->order;i++) flt->b[i] = *(num+i); flt->q[i] = 0; flt->fir = 1; flt->smplpos = order; Dodatkowo powyższa procedura w przypadku wskazania mianownika jako pustego wskaźnika (NULL) ustawi flagę FIR jako prawdziwą, co zaowocuje skróceniem procedur obliczeniowych w głównej procedurze aktualizacji stanu filtra. Procedura filtracji również nie jest zbyt skomplikowana i polega jedynie na odpowiednim mnożeniu i dodawaniu. Stworzono w niej pomocnicze zmienne typu float w celu obliczania sum częściowych pochodzących z licznika i mianownika transmitancji. Nazwano je num oraz den. Jako wartości wejściowe wprowadzamy wskaźnik do struktury opisującej filtr oraz wartość wejściową filtra w aktualnym kroku. Funkcja zwraca wartość wyjściową filtru, a oprócz tego przechowuje ją w 4
zmiennej strukturalnej typu varfilter. Procedura obliczania wartości wyjściowej filtru cyfrowego została przedstawiona poniżej. float FilterUpdate(varFilter *flt, float in) unsigned char i, pos; flt->q[flt->smplpos] = in; flt->out = 0; for(i=1;i<=flt->order;i++) pos = (flt->smplpos+i)%(flt->order+1); if (flt->fir == 0) flt->q[flt->smplpos]+=flt->a[i]*flt->q[pos]; flt->out += flt->b[i]*flt->q[pos]; flt->out += flt->b[0]*flt->q[flt->smplpos]; if (--flt->smplpos == 255) flt->smplpos = flt->order; return flt->out; II. Program ćwiczeń 1. Zaimplementować opisane wyżej procedury w plikach dsp.c oraz dsp.h. 2. Zainicjować strukturę filtru ze współczynnikami wyznaczonymi w instrukcji. 3. Dokonać symulacji i wyznaczyć odpowiedzi skokowe oraz impulsowe filtru. Wyznaczyć czas wykonywania procedury obliczeniowej przy założeniu wartości rezonatora kwarcowego znajdującego się w zestawie uruchomieniowym. 4. Zainicjować przetwornik A/C w procesorze, ustawić multiplekser na kanał "CH0". 5. Opracować procedurę wyzwalania przetwornika z częstotliwością 10 Hz i jej synchronizacji z pętlą główną programu. Procedury dotyczące wyzwalania przetwornika oraz przechwytywania danych powinny być wykonywane w ramach obsługi przerwań. Obliczanie wartości wyjściowej filtru musi znajdować się w programie głównym. 6. Odpowiednio przeskalować i wyświetlić wynik pomiaru (napięcie na wejściu przetwornika A/C) na wyświetlaczu LED. III. Zawartość sprawozdania Sprawozdanie powinno zawierać: listingi wykorzystywane podczas realizacji poszczególnych zadań, zdjęcia potwierdzające poprawność działania programu, spostrzeżenia i wnioski nasuwające się w trakcie oraz po przeprowadzeniu ćwiczenia. IV. Wymagania BHP W trakcie realizacji programu ćwiczenia należy przestrzegać zasad omówionych we wstępie do ćwiczeń, zawartych w: Regulaminie porządkowym w laboratorium oraz w Instrukcji obsługi urządzeń elektronicznych znajdujących się w laboratorium z uwzględnieniem przepisów BHP. Regulamin i instrukcja są dostępne w pomieszczeniu laboratoryjnym w widocznym miejscu. 5
Załącznik A. Schemat ideowy zestawu ZL3AVR (www.btc.pl). 6
Załącznik B. Schemat montażowy zestawu ZL3AVR (www.btc.pl). 7