Analiza Sygnałów

Jak wygenerować sygnał o znanym wzorze analitycznym?

Za pomocą Pythona nie można stworzyć ciągłego sygnału - program nie potrafi stworzyć ciągłej funkcji \(sin(x)\) np. dla przedziału \([-1,1]\). Potrafi on jednakże wyszukać wartości, jakie reprezentuje dana funkcja dla jakiegoś argumentu.

Na przykład:

import numpy
# ważne - należy zaimportować bibliotekę numpy.
# bez tego funkcje nie będą działać.

print numpy.sin(5)
otrzymujemy wynik:
-0.95892427466313845

Wykorzystując fakt, że Python może podać nam wartość funkcji nie tylko dla jednego argumentu, można stworzyć tablicę liczb dla których chcemy otrzymać wyniki. Na przykład:

import numpy
# tworzymy tablicę liczb
a = ([1,2,3])

print numpy.sin(a)
I otrzymujemy wyniki - również w tablicy:
array([ 0.84147098,  0.90929743,  0.14112001])

Jeżeli więc chcemy wykonać symulację ciągłego sygnału, musimy utworzyć zmienną będącą wektorem, w którym "odstęp" między kolejnymi liczbami jest bardzo mały. Pomaga w tym funkcja arange. Np.

import numpy

t = numpy.arange(t_0, t_k, 1./Fs)
# t_0 oznacza tu początek przedziału (np. przedziału czasu)
# t_k oznacza koniec przedziału (otwarty)
# Fs oznacza częstotliwość - ile chcemy otrzymać liczb w jednostce czasu;
# wobec tego 1./Fs oznacza "jak często" chcemy wybierać liczby - tj. okres próbkowania

Możemy więc stworzyć jakąś funkcję okresową — sinus czy cosinus od utworzonego wektora t.

Tworzy to bazę do dalszych obliczeń.

Należy zdefiniować czym w naszym przypadku jest \(t_0\), \(t_k\) oraz \(F_s\). Im większa jest wartość \(F_s\), tym bardziej wygenerowane wyniki będą przypominać funkcję ciągłą.

Po ich zdefiniowaniu można również modyfikować funkcję, np. utworzyć
numpy.sin(2*numpy.pi*t)
lub o częstości (kołowej) na przykład 3:
numpy.sin(3*t)
lub też dodać fazę początkową (czyli „przemieścić” oryginalną funkcję periodyczną), na przykład
numpy.sin(t+0.5)
autor: Maja Domagała, ostatnia modyfikacja: 10.04.2016