Filtry: Różnice pomiędzy wersjami

Z Brain-wiki
Linia 187: Linia 187:
  
 
Różna dla różnych częstości zmiana amplitudy jest kwintesencją i celem całego procesu filtrowania, w którym z sygnału usuwamy (w praktyce raczej osłabiamy) niechciane częstości.  
 
Różna dla różnych częstości zmiana amplitudy jest kwintesencją i celem całego procesu filtrowania, w którym z sygnału usuwamy (w praktyce raczej osłabiamy) niechciane częstości.  
Jednak wywołana tym procesem zmiana faz dla różnych częstości nie jest już tak oczywista. Weźmy sygnał złożony z dwóch oscylacji, o częstościach <math>\omega</math> i <math>2 *\omega</math>.
+
Jednak wywołana tym procesem zmiana faz dla różnych częstości nie jest już tak oczywista. Weźmy sygnał złożony z dwóch oscylacji, o częstościach <math>\omega</math> i <math>2 *\omega</math>:
  
 +
<div align="center">
 
:<math>x(t) = sin(\omega t) + sin(2 * \omega t)</math>
 
:<math>x(t) = sin(\omega t) + sin(2 * \omega t)</math>
 +
</div>
 +
  
 
Suma tych dwóch składowych (niebieskie krzywe) na poniższym rysunku przedstawiona jest kolorem czerwonym:
 
Suma tych dwóch składowych (niebieskie krzywe) na poniższym rysunku przedstawiona jest kolorem czerwonym:
  
[[Plik:Phase1.png|500px|bezramki]]
+
[[Plik:Phase1.png|500px|center|bezramki]]
 +
 
 +
Przesuńmy teraz fazę obydwu sygnałów składowych o tę samą wartość, na przykład <math>\pi/2</math>, i ponownie dodajmy do siebie. Odpowiada to sytuacji, kiedy po przejściu przez filtr sygnału <math>x(t) = sin(\omega t) + sin(2 * \omega t)</math> dostajemy <math>y(t) = sin(\omega t + \pi/2) + sin(2 * \omega t + \pi/2)</math>
 +
 
  
lalala
+
[[Plik:Phase2.png|500px|center|bezramki]]
  
  
[[Plik:Phase2.png|500px|bezramki]]
+
Po przejściu przez system, opóźniający fazę <math>\phi</math> jednolicie dla wszystkich częstości, sygnał wyjściowy wygląda zupełnie inaczej, niż sygnał wejściowy, gdyż przed ponownym "złożeniem", każdy z sygnałów składowych został przesunięty o inny odcinek czasu, który dla częstości <math>\omega</math> wynosi <math>\phi/{\omega}</math>:
 +
 
 +
<div align="center">
 +
:<math>\displaystyle sin(\omega t + \phi) = sin\left(\,\,\omega (t + \phi/{\omega}) \,\, \right)</math>
 +
</div>
 +
 
 +
Żeby otrzymać sygnał, którego wszystkie skłądowe będą przesunięte o ten sam odcinek czasu <math>t</math>, trzeba fazę przesuwać '''liniowo''' w zależności od częstości:
 +
 
 +
<div align="center">
 
[[Plik:Phase3.png|500px|bezramki]]
 
[[Plik:Phase3.png|500px|bezramki]]
 
+
</div>
  
 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"

Wersja z 15:43, 22 lip 2024

AS/ Funkcja przejścia i filtry

Cyfrowe filtry liniowe niezmiennicze w czasie [math]x[n] \longrightarrow \boxed{LTI} \longrightarrow y[n][/math] opisuje liniowe równanie różnicowe o stałych współczynnikach


[math] \displaystyle y[n] = \sum_{k=1}^K a_k y[n-k] + \sum_{l=0}^L b_l x[n-l] [/math]


gdzie [math]a_i[/math] i [math]b_i[/math] to współczynniki, [math]x[n][/math] to sygnał wejściowy, a [math]y[n][/math] — wyjście; w ogólniejszej postaci można je zapisać jako


[math] \displaystyle \sum_{k=0}^K a_k y[n-k] = \sum_{l=0}^L b_l x[n-l] [/math]


Funkcja przejścia (transfer function)

Stosując transformatę [math]Z[/math] możemy powyższe równanie z dziedziny czasu przenieść do dziedziny częstości:


[math] \displaystyle \mathcal{Z}\left\{\sum_{k=0}^K a_k y[n-k] \right\} = \mathcal{Z}\left\{ \sum_{l=0}^L b_l x[n-l] \right\} [/math]


[math] \displaystyle \sum_{k=0}^K a_k \mathcal{Z}\left\{ y[n-k]\right\} = \sum_{l=0}^L b_l \mathcal{Z} \left\{x[n-l]\right\} [/math]


[math] \displaystyle \sum_{k=0}^K a_k z^{-k} Y(z) = \sum_{l=0}^L b_l z^{-l} X(z) [/math]


[math] \displaystyle Y(z) \sum_{k=0}^K a_k z^{-k} = X(z) \sum_{l=0}^L b_l z^{-l} [/math]


Dla systemu przyczynowego dostajemy:

[math] \displaystyle \frac{Y(z)}{X(z)} \equiv H(z) = \frac{\sum_{l=0}^L b_l z^{-l}}{\sum_{k=0}^K a_k z^{-k}} [/math]

Filtry

Funkcja przejścia [math]H(z)[/math] pozwala spójnie przedstawić działanie filtra LTI na sygnał [math]x[/math] w przestrzeni transformaty [math]\mathcal{Z}[/math]:


[math] \displaystyle Y(z)=H(z)X(z)=\frac{b_0 + b_1 z^{-1}+\dots +b_{L} z^{-L}}{a_0+a_1 z^{-1}+\dots +a_{K} z^{-K}}X[z] [/math]


gdzie [math]X(z)[/math] to transformata [math]\mathcal{Z}[/math] filtrowanego sygnału (wejścia), [math]Y(z)[/math] — wyjścia, a [math]H(z)[/math] to wprowadzona powyżej funkcja przejścia filtra. Filtrowanie w przestrzeni transformaty Z odpowiada przemnożeniu transformaty sygnału przez transformatę funkcji przejścia filtru. Zobaczmy, co się stanie z widmem sygnału po przefiltrowaniu. Weźmy w tym celu [math]z = e^{i\omega}[/math]. Wówczas transmitancja jest funkcją częstości [math]\omega[/math]. Konkretnej częstości [math]\omega_k[/math] przypisuje ona liczbę zespoloną, którą można wyrazić jako [math]A_k e^{i \phi_k}[/math].

[math] \displaystyle Y[e^{i\omega}]=H[e^{i\omega}]X[e^{i\omega}]=\frac{b_0+b_1 e^{-i\omega}+\dots +b_L e^{-i L\omega}}{a_0+a_1 e^{-i\omega}+\dots +a_K e^{-i K\omega}}X[e^{i\omega}] [/math]

W dziedzinie częstości sygnał wyrażony jest przez współczynniki Fourierowskie. Dla konkretnej częstości współczynnik taki [math]X_k = |X_k| e^{i \theta_k}[/math] (liczba zespolona) mówi z jaką amplitudą i jaką fazą exponens zespolony o danej częstości ([math]z_k = e^{i\omega_k}[/math]) wchodzi w skład sygnału.

Działanie filtru na sygnał w dziedzinie częstości polega na przemnożeniu składowej sygnału o częstości [math]f_k[/math] przez liczbę [math]A_k e^{i \phi_k}[/math]:

[math]Y(f_k) = A_k e^{i \phi_k} |X_k| e^{i \theta_k} = A_k |X_k| e^{i ( \phi_k +\theta_k)} e^{i 2\pi f_k} [/math]

W wyniku filtrowania sinusoidalna składowa sygnału o danej częstości może zmienić amplitudę i fazę, ale nie zmienia częstości. Zera i bieguny filtra to odpowiednio miejsca zerowe licznika i mianownika funkcji przenoszenia.

Finite Impulse Response (FIR) — filtr o skończonej odpowiedzi impulsowej

Jeśli w równaniu

[math] \displaystyle \sum_{k=0}^K a_k y[n-k] = \sum_{l=0}^L b_l x[n-l] [/math]

położymy [math]a_i = 0[/math] poza [math]a_0=1[/math], dostaniemy

[math] \displaystyle y[n] = \sum_{l=0}^L b_l x[n-l] [/math]

W funkcji przejścia mianownik będzie stały i dostaniemy

[math] \displaystyle Y[z]=H[z]X[z]=\left(b_0+b_1 z^{-1}+\dots +b_L z^{-L}\right) X[z] [/math]


a w dziedzienie czasu, z pełnego równania

[math] \displaystyle y[n] = b_0 x[n]+ b_1 x[n-1] + \dots + b_L x[n-L] \,\,\, - \,\,\, a_1 y[n-1] - \dots - a_K y[n-K] [/math]

pozostaje

[math] \displaystyle y(n) = b_0 *x[n] + b_1 *x[n-1] + \dots + b_L *x[n-L] [/math]


Jeśli współczynniki [math]b_i[/math] zapiszemy jako sekwencję [math]b[i][/math], działanie takiego filtra LTI na sygnał [math]x[n][/math] w dziedzinie czasu będze wyglądała tak:


[math] \displaystyle y(n) = b[0]*x[n] + b[1]*x[n-1] + \dots + b[L]*x[n-L] = b[n]*x[n] [/math]


Taki filtr nazywamy filtrem o skończonej odpowiedzi impulsowej (Finite Impulse Response, FIR), bo odpowiedź na impuls kończy się po [math]L[/math] próbkach. Inna nazwa to średnia biegnąca (Moving Average, MA).


Infinite Impulse Response (IIR) — filtr o nieskończonej odpowiedzi impulsowej

Jeśli w równaniu

[math] \displaystyle \sum_{k=0}^K a_k y[n-k] = \sum_{l=0}^L b_l x[n-l] [/math]

położymy [math]b_i = 0[/math] poza [math]b_0=1[/math], dostaniemy

[math] \displaystyle \sum_{k=0}^K a_k y[n-k] = x[n] [/math]

w funkcji przejścia licznik będzie stały

[math] \displaystyle Y[z]=H[z]X[z]=\frac{1}{a_0+a_1 z^{-1}+\dots +a_{K} z^{-K}}X[z] [/math]


Operacja splotu działa tu na sekwencji wyjściowej:

[math] y[n] = x[n] - a[1]*y[n-1] - \dots - a[n_a]*y[n-K] [/math]

dlatego taki filtr nazwać można filtrem rekursywnym, autoregresyjnym (AR), lub filtrem o nieskończonej odpowiedzi impulsowej (Infinite Impulse Response IIR), bo potencjalnie raz wzbudzony (sekwencją jednostkową) może dowolnie długo produkować niezerowe wyjście. Faza filtrowanego sygnału zaburzana jest nieliniowo (nonlinear phase filter)


Liniowe i nieliniowe przesunięcie fazy

Jak ustaliliśmy powyżej, filtry liniowe odpowiadają mnożeniu poszczególnych składowych sygnału wejściowego [math]x[n][/math] przez liczbę zespoloną, mającą charakterystyczną dla danego filtra amplitudę i fazę, które dla każdej częstości [math]\omega[/math] można wyliczyć z funkcji przenoszenia [math]H(\omega)[/math].

Różna dla różnych częstości zmiana amplitudy jest kwintesencją i celem całego procesu filtrowania, w którym z sygnału usuwamy (w praktyce raczej osłabiamy) niechciane częstości. Jednak wywołana tym procesem zmiana faz dla różnych częstości nie jest już tak oczywista. Weźmy sygnał złożony z dwóch oscylacji, o częstościach [math]\omega[/math] i [math]2 *\omega[/math]:

[math]x(t) = sin(\omega t) + sin(2 * \omega t)[/math]


Suma tych dwóch składowych (niebieskie krzywe) na poniższym rysunku przedstawiona jest kolorem czerwonym:

Phase1.png

Przesuńmy teraz fazę obydwu sygnałów składowych o tę samą wartość, na przykład [math]\pi/2[/math], i ponownie dodajmy do siebie. Odpowiada to sytuacji, kiedy po przejściu przez filtr sygnału [math]x(t) = sin(\omega t) + sin(2 * \omega t)[/math] dostajemy [math]y(t) = sin(\omega t + \pi/2) + sin(2 * \omega t + \pi/2)[/math]


Phase2.png


Po przejściu przez system, opóźniający fazę [math]\phi[/math] jednolicie dla wszystkich częstości, sygnał wyjściowy wygląda zupełnie inaczej, niż sygnał wejściowy, gdyż przed ponownym "złożeniem", każdy z sygnałów składowych został przesunięty o inny odcinek czasu, który dla częstości [math]\omega[/math] wynosi [math]\phi/{\omega}[/math]:

[math]\displaystyle sin(\omega t + \phi) = sin\left(\,\,\omega (t + \phi/{\omega}) \,\, \right)[/math]

Żeby otrzymać sygnał, którego wszystkie skłądowe będą przesunięte o ten sam odcinek czasu [math]t[/math], trzeba fazę przesuwać liniowo w zależności od częstości:

Phase3.png