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

Podobne dokumenty