Ćwiczenia 1
Dokumentacja modułu scipy.signal
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:
http://docs.scipy.org/doc/scipy-0.14.0/reference/signal.html
Sygnały ciągłe i dyskretne
Próbkowanie w czasie
Proszę powtórzyć sobie pojęcia:
- częstość próbkowania
- częstość Nyquista
- aliasing
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. W komputerach nie mamy dostępu do sygnału ciągłego. Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu).
Proszę wytworzyć wektor reprezentujący czas „prawie” ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.
# -*- coding: utf-8 -*-
import pylab as py
import numpy as np
t = np.arange(0,1,0.001) # czas 'prawie ciągły'
Teraz proszę wygenerować dwie sinusoidy: jedną o częstości -1 a drugą o częstości 9. Dla przypomnienia wyrażenie:
- [math] s(t) = \sin(2 \pi f t)[/math] możemy w pythonie zapisać:
s = np.sin(2*np.pi*f*t)
Proszę wykreślić obie sinusoidy.
http://haar.zfb.fuw.edu.pl/edu/index.php/TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach
Teraz proszę spróbkować czas i nasze „prawie” ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się wycinkami). Na tle „prawie” ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze widoczne proponuję użyć markerów x oraz +.
Proszę zaobserwować wzajemne położenie punktów. Czy można odróżnić sinusoidę o częstości −1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? Jak można uogólnić tą obserwację?
*
Błąd kwantyzacji
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter). Charakteryzują się one określoną ilością bitów N, za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych R jest dzielony na [math]2^N[/math] poziomów. Błąd kwantyzacji szacujemy jako nie większy niż [math] \frac{R}{2^{N+1}} [/math].
Zadanie:
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to ±200 μV.
Zadanie:
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2. W tym celu proszę wykonać następujące kroki:
- wygenerować „prawie” ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)
- spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)
- proszę skwantować spróbkowane wartości
- Proszę wykreślić na jednym rysunku
- oryginalny sygnał
- sygnał spróbkowany w czasie
- sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji py.step)
- *
Sygnały testowe
Generowanie sygnałów testowych
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:
- czętość próbkowania
- czas trwania
- amplituda
Przykład sinus
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie. Poniższy kod implementuje i testuje funkcję
- [math] \sin(f,T,Fs,\phi) = \sin(2*\pi f t)[/math] dla [math]t \in \{0,T\}[/math]
# -*- coding: utf-8 -*-
import pylab as py
import numpy as np
def sin(f = 1, T = 1, Fs = 128, phi =0 ):
'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania
Domyślnie wytwarzany jest sygnał reprezentujący
1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz
'''
dt = 1.0/Fs
t = np.arange(0,T,dt)
s = np.sin(2*np.pi*f*t + phi)
return (s,t)
(s,t) = sin(f=10,Fs=1000)
py.plot(t,s)
py.show()
Przykład: eksport sygnału do pliku binarnego
- dwa kanały , np sin 10 Hz i sin 21 Hz
- podgląd w matplotlibie
Przykład: wczytanie sygnału do SVAROGA
- zrzuty odpowiednich okienek
Delta
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:
- [math] \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.[/math]
def delta(t0=0.5, T=1 ,Fs = 128):
dt = 1.0/Fs
t = np.arange(0,T,dt)
d = np.zeros(len(t))
d[np.ceil(t0*Fs)]=1
return (d,t)
Zadanie:
Analogicznie do powyższych przykładów proszę zaimplementować iprzetestować funkcje generujące:
- funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie.
- [math] g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot \cos(2 \pi f t + \phi); [/math]
- Szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.
- pochodna gaussa
- połowka gaussa