Lab. Równania różnicowe i filtracja FIR (PDF 221 kB)
Transkrypt
Lab. Równania różnicowe i filtracja FIR (PDF 221 kB)
Wstęp do cyfrowego przetwarzania sygnałów – laboratorium Temat: Równania różnicowe i filtracja FIR Imię i nazwisko: Data ćwiczenia: Data oddania sprawozdania: Ocena: 1. Realizacja obliczeń równań różnicowych z uwzględnieniem warunków początkowych. Zakładając, że na wejściu układu dyskretnego opisanego równaniem różnicowym K M k =1 m=2 y[ n ] = ¦ a k ⋅ x[ n − k ] − ¦ bm ⋅ y[ n − m ] występuje znany sygnał, możemy stwierdzić, że sygnał wyjściowy możemy obliczyć dopiero wtedy, gdy znamy jeszcze dodatkowo M poprzednich próbek wyjściowych układu. Podanie tych wartości określa warunki początkowe w układzie [1]. Implementacja funkcji w środowisku Matlab realizującej rozwiązywanie równań różnicowych z uwzględnieniem warunków początkowych jest następująca: function [wynik] = row_roz (a,b,x,y_poc) x_len = length (x); a_len = length (a); b_len = length (b); y_poc_len = length (y_poc); d = zeros (1, x_len + a_len -1); %macież d x_temp = zeros (1, x_len+2*(a_len-1)); y_temp = zeros (1, x_len + a_len -1 + b_len-1 + y_poc_len); y = zeros (1, x_len + a_len -1 + b_len-1); for n = 1 : x_len %wypełnianie x_temp przesuniętym x x_temp(n+a_len-1) = x(n); end for n = 1 : y_poc_len %wstawienie warunków początkowych do y_temp y_temp(y_poc_len-n+1) = y_poc(n); end for n = 1 : x_len + a_len - 1 for m = 1 : a_len d(n) = d(n) + x_temp(n-m+a_len)*a(m); end end for n = 1 : length(y_temp) - y_poc_len if ( n <= length(d) ) y_temp(y_poc_len+n) = d(n)*b(1); end if (b_len > 1) %jeżeli wpisano jakiś wektor b, to liczymy... for m = 1 : b_len-1 y_temp(y_poc_len+n) = y_temp(y_poc_len+n) - y_temp(y_poc_len+n-m)*b(m+1); (C) 2004 STUDENT.NET.PL :: Wszelkie prawa zastrzeżone end end end for n = 1 : length (y) y(n) = y_temp(n+y_poc_len); end %przepisanie wyników do y wynik = y; Przy czym należy zaznaczyć, iż w tej notacji zamieniono miejscami oznaczenia współczynników a i b. W innych funkcjach Matlaba współczynniki te są nazwane odwrotnie, niż ma to miejsce tutaj. Wektor warunków początkowych y_pocz powinien być nie dłuższy niż wektor współczynników b pomniejszony o 1, gdyż współczynnik b(1) jest zawsze równy 1. Jako, że próbki wejściowe są indeksowane od 1, kolejne wartości wektora warunków początkowych określają y(0), y(-1)...y(-M+1). W ciągu próbek wyjściowych uwzględniane są jedynie próbki dla dodatniej półosi czasu. Jest to pewną różnicą w stosunku do działania funkcji FILTER, gdyż funkcja ta daje na wyjściu wszystkie próbki wyjściowe razem z warunkami początkowymi. 2. Działanie filtru FIR. Splot. Twierdzenie o splocie. Filtr FIR realizuje operację splotu ciągu wejściowego z odpowiedzią impulsową daną współczynnikami filtru. y[n] = x[n] ∗ h[n] = m= M ¦ x[n]h[n − m] m =0 Filtr ten nie posiada sprzężenia zwrotnego, zatem jest on zawsze stabilny, gdyż suma modułów wszystkich współczynników odpowiedzi impulsowej jest skończona. Ponadto nie istnieje takie skończone wymuszenie, które spowodowałoby odpowiedź filtru rosnącą do nieskończoności. W celu wykazania jednoznaczności działania filtru FIR oraz operacji splotu dokonano filtracji prostego sygnału za pomocą wcześniej napisanej funkcji ROW_ROZ (h,x,1) oraz stosując wprost operację splotu conv (h,x). Sygnał wejściowy (rys. 1) i wynik filtracji (rys. 2) można zaobserwować na poniższych wykresach: rys. 1 rys. 2 Zgodnie z oczekiwaniami rezultaty filtracji są identyczne. Na rysunku 2 widać dwa wykresy, które się pokrywają. Zgodnie z twierdzeniem o splocie: y[n] = x[n] ∗ h[n] = IFFT [ X [m]H [m]] odwrotna transformata Fouriera z iloczynu widm sygnału wejściowego i odpowiedzi impulsowej (transmitancji) równa jest splotowi ciągu wejściowego i odpowiedzi impulsowej, czyli odpowiedzi filtru na dane wymuszenie. W celu praktycznej weryfikacji tego twierdzenia policzono widma sygnału wejściowego oraz odpowiedzi impulsowej filtru. Widma te przemnożono przez siebie, a następnie wyznaczono transformatę odwrotną z iloczynu widm. Wynik tej operacji przedstawiono na wykresie razem z wynikiem splotu. Rezultat był identyczny z rysunkiem 2. Stąd wniosek, iż przedstawione powyżej metody obliczania odpowiedzi filtru są równoważne i dają się łatwo implementować. W punkcie tym zrezygnowano z przytaczania definicji sygnałów i współczynników filtru użytych jako przykładu, gdyż zostanie to szczegółowo pokazane w punkcie kolejnym. (C) 2004 STUDENT.NET.PL :: Wszelkie prawa zastrzeżone 3. Opóźnienie fazowe Ważne jest, aby filtr posiadał liniową charakterystykę fazową, ponieważ wtedy każda składowa jest opóźniana o tyle samo, a opóźnienie grupowe, będące pochodną fazy, jest stałe i nie dochodzi do dyspersji. Przypadkiem idealnym jest filtr o zerowej fazie, gdzie żadne składowe nie są opóźniane. W celu zaobserwowania opóźnienia fazowego stworzono zaszumiony przebieg sinusoidalny i poddano go filtracji filtrem dolnoprzepustowy 5-tego rzędu, o częstotliwości odcięcia równej 0.382 * fs/2. fs=200; f=2; t=0:1/fs:1; b=butter (5,.382); x = sin (2*pi*f*t); for i=1 : length (x) x(i) = x(i) + 0.1 * rand; end y = 2.86*filtfilt (b,1,x); yy = 1.68* filter (b,1,x); plot (t,x,t,y,'--',t,yy,':'); Wyniki przedstawiono na wykresie: Współczynniki przy funkcjach filtracji wprowadzono w celu wyrównania amplitud sygnałów na wykresie. rys. 3 rys. 4 Na rysunku 3 widać przebieg wejściowy (zaszumiony sinus), przebieg y będący w fazie z przebiegiem wejściowym oraz przebieg yy, który jest opóźniony w fazie w stosunku do poprzednich dwóch sygnałów. Opóźnienie fazowe przebiegu yy widać dokładniej na zbliżeniu (rys. 4). Funkcja FILTFILT filtruje przebieg filtrem o zerowej charakterystyce fazowej, natomiast filtr z funkcji FILTER posiada niezerową charakterystykę fazową. literatura: [1] A. Dąbrowski. Przetwarzanie sygnałów przy użyciu procesorów sygnałowych, Poznań 2000 (C) 2004 STUDENT.NET.PL :: Wszelkie prawa zastrzeżone