import pylab as py
import numpy as np
def sin(f = 1., T = 1., Fs = 128., phi =0. ):
'''
(float, float, float, float) -> (numpy.ndarray, numpy.ndarray)
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
Zwraca macierz amplitud i czasu.
'''
dt = 1.0/Fs
t = np.arange(0,T,dt)
s = np.sin(2*np.pi*f*t + phi)
return (s,t)
def delta(t0=0.5, T=1.0 ,Fs = 128.):
'''
(float, float, float) -> (numpy.ndarray, numpy.ndarray)
Generowanie funkcji delta. Zwraca macierz amplitud i czasu.
t0: położenie maksimum
T: czas trwania sygnału
Fs: częstość próbkowania
'''
dt = 1.0/Fs
t = np.arange(0,T,dt)
d = np.zeros(len(t))
d[np.ceil(t0*Fs)]=1
return (d,t)
def gabor(f = 1., T = 1., Fs = 128., phi =0., t0 = 0.0, std = 1.0 ):
'''
(float, float, float, float, float, float) -> (numpy.ndarray, numpy.ndarray)
Generowanie funkcji Gabora. Zwraca macierz amplitud i czasu.
f: częstość oscylacji
T: czas trwania sygnału
Fs: częstość próbkowania
phi: faza
t0: położenie maksimum
std: odchylenie standardowe
'''
dt = 1.0/Fs
t = np.arange(0,T,dt)
g = np.cos(2*np.pi*f*(t-t0)+phi)*np.exp(-0.5*(t-t0)**2/(std**2))
return (g, t)
import numpy as np
from numpy.fft import fft, fftfreq, fftshift
def widmo_dB(s, N_fft, F_samp):
'''
(numpy.ndarray, int, float) -> (numpy.ndarray, numpy.ndarray)
s: sygnał
N_fft: ilość punktów DTF
F_samp: częstość próbkowania
Oblicza widmo mocy w skali decybelowej. Zwraca macierz mocy i częstości
'''
S = fft(s,N_fft)/np.sqrt(N_fft)
S_dB = 20*np.log10(np.abs(S))
F = fftfreq(N_fft, 1.0/F_samp)
return (fftshift(S_dB),fftshift(F))