|
|
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika) |
Linia 1: |
Linia 1: |
− | =Koncepcja drgania uogólnionego. Transformata Hilberta=
| |
− | ==Wstęp==
| |
− | Sygnałem najczęściej występującym w przyrodzie oraz najczęściej stosowanym w technice jest sygnał harmoniczny o postaci:
| |
− | <equation>
| |
− | <math>x(t) = A \sin(\omega t + \varphi_0)</math>
| |
− | </equation>
| |
− | gdzie: <br>
| |
− | <math>t</math> — chwila czasu <br>
| |
− | <math>A</math> — amplituda sygnału,<br>
| |
− | ω — częstość sygnału,<br>
| |
− | φ<math>_0</math> — faza początkowa sygnału.<br>
| |
| | | |
− | Okazuje się, że istnieje szeroka klasa sygnałów rzeczywistych, które można przedstawić w postaci tzw. drgania uogólnionego:
| |
− | <equation>
| |
− | <math>x(t) = A(t) \sin(\Omega(t)\cdot t)</math>
| |
− | </equation>
| |
− |
| |
− | gdzie: <br>
| |
− | <math>t</math> — chwila czasu <br>
| |
− | <math>A(t)</math> — amplituda chwilowa sygnału ''x''(''t'') (jego obwiednia),<br>
| |
− | Ω(t) — częstość chwilowa sygnału ''x''(''t''),<br>
| |
− |
| |
− | Do klasy sygnałów, które mogą być reprezentowane w postaci drgania uogólnionego, należą m.in. wszystkie sygnały o ograniczonej energii i ograniczonej mocy średniej przedziałami ciągłe i bez składowej stałej (tzw. sygnały przestrzeni <math>L^2</math>).
| |
− | W celu przedstawienia sygnału <math>x(t)</math> jako drgania uogólnionego należy wpierw wyznaczyć jego ''sygnał analityczny'' ''z''(''t''), który zdefiniowany jest w następujący sposób:
| |
− |
| |
− | <equation>
| |
− | <math>z(t) = x(t) + ix_H(t)\;</math>
| |
− | </equation>
| |
− |
| |
− | gdzie: <br>
| |
− | <math>i=\sqrt{-1}</math><br>
| |
− | <math>x_H(t)</math> — transformata Hilberta sygnału <math>x(t)</math>.<br>
| |
− |
| |
− | Transformatę Hilberta <math>x_H(t)</math> sygnału <math>x(t)</math> i transformatę do niej odwrotną definiujemy jak poniżej:
| |
− | <equation>
| |
− | <math>
| |
− | x_H(t) = \frac{1}{\pi}\int_{-\infty}^{\infty} \frac{x(\tau)}{t - \tau}d\tau
| |
− | </math>
| |
− | </equation>
| |
− | <br>
| |
− | <equation>
| |
− | <math>
| |
− | x(t) = -\frac{1}{\pi}\int_{-\infty}^{\infty} \frac{x_H(\tau)}{t - \tau}d\tau
| |
− | </math>
| |
− | </equation>
| |
− |
| |
− | '''Uwaga praktyczna:'''
| |
− | do wyznaczania sygnału analitycznego korzysta się z jego następującej własności:
| |
− | Widmo sygnału analitycznego odpowiadającego sygnałowi rzeczywistemu jest zerowe
| |
− | dla ujemnych częstości, zaś dla dodatnich częstości ma podwojoną amplitudę:
| |
− | <math>x_a = F^{-1}\left(F(x)\cdot 2U\right)</math>
| |
− | gdzie ''F'' — transformacja Fouriera, a ''U'' funkcja schodkowa.
| |
− | Metoda ta zaimplementowana jest w funkcji <tt>scipy.signal.hilbert</tt>
| |
− |
| |
− | Jak można zauważyć, sygnał analityczny jest funkcją zespoloną, w związku z czym można go przedstawić w postaci:
| |
− | <equation>
| |
− | <math>
| |
− | z(t) = \left|z(t)\right|e^{i\varphi(t)}
| |
− | </math>
| |
− | </equation>
| |
− | gdzie (patrz równanie (3)):<br>
| |
− | <math>
| |
− | \begin{array}{l}
| |
− | \left|z(t)\right| = \sqrt{x^2(t) + x^2_H(t)} \\
| |
− | \\
| |
− | \varphi(t) = \mathrm{arc\,tg}(\frac{x_H(t)}{x(t)})
| |
− | \end{array}
| |
− | </math>
| |
− | <br>
| |
− |
| |
− | Wielkości te służą do wyznaczania chwilowej fazy φ (wzór powyżej), chwilowej amplitudy ''A'' (obwiedni) oraz chwilowej częstości Ω sygnału <math>x(t)</math>:
| |
− |
| |
− | <math>
| |
− | \begin{array}{l}
| |
− | A(t)=\left|z(t)\right| \\
| |
− | \\
| |
− | \Omega(t) = \frac{d\varphi(t)}{dt}
| |
− | \end{array}
| |
− | </math>
| |
− |
| |
− | co umożliwia przedstawienie sygnału ''x''(''t'') w postaci drgania uogólnionego:
| |
− | <equation>
| |
− | <math>x(t) = A(t) \sin(\Omega(t)\cdot t)</math>
| |
− | </equation>
| |
− |
| |
− | Porównując powyższy wzór ze wzorem na funkcję harmoniczną:
| |
− | <equation>
| |
− | <math>x(t) = A \sin(\omega t + \varphi_0)</math>
| |
− | </equation>
| |
− |
| |
− | widzimy, że sygnały nieharmoniczne charakteryzują się zmienną w czasie amplitudą i częstością oraz nie mają określonej fazy początkowej. Ten ostatni parametr jednak również może być wyznaczony, pod warunkiem iż określimy go względem pewnej stałej w czasie częstości ω<sub>0</sub>(''t''):
| |
− | <equation>
| |
− | <math>\varphi(t)=\omega_0\cdot t + \varphi_0(t)</math>
| |
− | </equation>
| |
− | gdzie: <br>
| |
− | <math>\varphi_0(t)</math> — faza chwilowa sygnału <math>x(t)</math>.<br>
| |
− |
| |
− | Faza chwilowa jest zatem zdefiniowana jednoznacznie, ale tylko względem określonej częstości <math>\omega_0</math>. W przypadku gdy analizujemy sygnały szerokopasmowe, wyznaczenie fazy chwilowej jest możliwe po przefiltrowaniu sygnału filtrem pasmowo-przepustowym.
| |
− |
| |
− | ==Ćwiczenia symulacyjne==
| |
− | Proszę zaimplementować funkcje generujące następujące przebiegi czasowe (oznaczenia: ''F<sub>s</sub>'' — częstość próbkowania, ''T'' — czas trwania w sekundach, [[STATLAB:%C4%86wiczenia_1#Sygna.C5.82y_testowe|analogicznie do tego]]):
| |
− | * sinusoida o zadanej częstości ''f'' i fazie <math>\phi</math>: <tt>y = sin(f, phi, Fs, T)</tt>,
| |
− | * funkcja Gabora o zadanym położeniu szerokości i częstości <tt>y = gabor(t0, sigma, omega, Fs, T)</tt>:
| |
− | : <math>g_1(t) = \exp\left(-\frac{(t-t_0)^2}{2 \sigma^2}\right)\cdot \cos\left(\omega(t-t_0) \right)</math>.
| |
− |
| |
− | ===Ćwiczenie 1===
| |
− | * Wygeneruj 2-sekundowy odcinek sygnału Gabora o pozycji w czasie ''t''<sub>0</sub> = 1 s, częstości 16 Hz, skali 0,1 s i częstości próbkowania 128 Hz.
| |
− | * Wyznacz i narysuj amplitudę chwilową sygnału Gabora.
| |
− |
| |
− | ===Ćwiczenie 2===
| |
− | <!--* Wygeneruj 2-sekundowy odcinek sygnału o pozycji w czasie ''t''<sub>0</sub> = 1 s, częstości 20 Hz, skali 0,1 s.-->
| |
− | * Wyznacz i narysuj amplitudę chwilową sygnału sinusoidalnego, o częstości 16 Hz i częstości próbkowania 128 Hz.
| |
− | * Wyznacz i narysuj fazę chwilową sygnału sinusoidalnego, korzystając ze związku:
| |
− |
| |
− | <equation>
| |
− | <math>\varphi(t)=\omega_0\cdot t + \varphi_0(t)</math>
| |
− | </equation>
| |
− |
| |
− | ===Ćwiczenie 3===
| |
− | Wygeneruj dwa sygnały sinusoidalne o tej samej częstości 32 Hz i częstości próbkowania 128 Hz, ale różnych fazach początkowych. Pierwszy sygnał powinien mieć fazę początkową równą 0, drugi sygnał sinusoidalny powinien mieć fazę początkową równą π/4. Za pomocą transformaty Hilberta wyznacz różnicę faz symulowanych sygnałów.
| |
− | ===Ćwiczenie 4===
| |
− | To ćwiczenie jest ku przestrodze.
| |
− | Wytwórz sygnał będący sumą dwóch sinusoid: jednej o częstości 30 i drugiej o częstości 32 Hz. Wykreśl przebieg sygnału i jego amplitudy chwilowej.
| |
− |
| |
− |
| |
− | ==Ćwiczenia na danych pomiarowych==
| |
− |
| |
− | ===Ćwiczenie 1===
| |
− | W zebranych sygnałach SSVEP wybierz zapisy dla trzech różnych częstości stymulacji (po jednym dla każdej częstości). Do analizy wybierz trzy kanały EEG, dla których sygnał SSVEP jest a) bardzo wyraźny; b) widoczny, ale słabszy; c) w zasadzie niewidoczny. Do analizy wybierz fragmenty od 2 sekund przed rozpoczęciem stymulacji do 2 sekund po jej zakończeniu.
| |
− |
| |
− | Dla każdej wybranej częstości stymulacji wybrane kanały EEG przefiltruj filtrem wąskopasmowym przepuszczającym częstości skupione wokół tej częstości stymulacji. Do przefiltrowanych sygnałów zastosuj transformację Hilberta, wyznacz amplitudę i częstość chwilową. Wyznacz fazę chwilową dla ω<sub>0</sub> równej częstości stymulacji. Wypróbuj dwa sposoby filtrowania: „w jedną stronę” (<tt>filter</tt>) i „w obie strony” (<tt>filtfilt</tt>).
| |
− |
| |
− | Wyrysuj przefiltrowane sygnały wraz z wyliczoną amplitudą chwilową. Do rysunku dodaj wykres sygnału triggera aby widać było początek i koniec stymulacji. Narysuj też wykres zależności częstości chwilowej i fazy chwilowej od czasu.
| |