Funkcje okna to zestawy operatorów matematycznych wpływających na kształt sygnału w naszym oknie, które również wpływają na kształt oraz właściwości widma analizowanej ramki sygnału. Generowana przez nas funkcja okna powinna mieć tą samą długość, co nasza ramka, więc nałożenie (użycie) jej polega na przemnożeniu konkretnych elementów obu wektorów przez siebie. Widmo sygnału po użyciu funkcji okna najlepiej jest normalizować względem widma samego okna. Należy w tym celu po wyliczeniu wartości dla okna wyliczyć dla nich widmo z tymi samymi parametrami jak będzie to robione dla każdej ramki i zapamiętać maksymalną wartość jeżeli chodzi o decybele dla niego, a następnie odejmować tą wartość od widma w każdej ramce sygnału. Sygnał będzie wtedy znormalizowany do 0 względem funkcji okna. Poniżej przykład kodu (tylko proszę nie wykonywać go za każdym razem w pętli!).

# frame - ramka sygnału
# w - wartości wyliczone dla funkcji okna
g = np.max(20*np.log10( np.abs(scipy.fftpack.fft(w,fsize))))
w_frame=w*frame
w_frame_spec=(20*np.log10( np.abs(scipy.fftpack.fft(w_frame,fsize)))-g

Funkcje okna mogą być różnego rodzaju funkcjami matematycznymi. Poniżej zaprezentowano trzy z takich funkcji: prostokątne, Blackman i Hamming. Każde z nich zostało przedstawione za pomocą dwóch zestawów wykresów. Pierwszy pokazuje samo okno i jego widmo znormalizowane do 0 (odjęta wartość maksymalna). Drugi zestaw pokazuje jak prezentuje się on zastosowanie naszych funkcji okna dla pewnego sygnału sinusoidalnego (dla przykładu nie są ważne jego parametry). Zestaw składa się z wyglądu sygnału oraz dwóch wykresów widma ogólnego wyśrodkowanego na 0 oraz przybliżonego jego fragmentu (oba znormalizowane). Proszę zwrócić uwagę i porównywać jak znacząco zmienia się stosunek wierzchołka do reszty sygnału.

Okno w próbkach i jego widmo - okno prostokątne

Ramka sygnału wymnożona przez okno i jej widma - okno prostokątne

Okno w próbkach i jego widmo - okno Blackman

Ramka sygnału wymnożona przez okno i jej widma - okno Blackman

Okno w próbkach i jego widmo - okno Hamming

Ramka sygnału wymnożona przez okno i jej widma - okno Hamming

Funkcji jest znacznie, więcej niż tylko te pokazane na przykładach poniżej kilka więcej oraz sposobu jak je wygenerować wewnątrz Pythona. Sprawdzić parametry z dokumentacją.

w = np.ones(wsize,) # okno prostokątne
w = np.hamming(wsize) 
w = np.blackman(wsize)
w = scipy.signal.windows.blackmanharris(wsize)
w = scipy.signal.windows.gaussian(wsize,std=?)
w = scipy.signal.windows.exponential(wsize,tau=?)
w = scipy.signal.windows.triang(wsize)

Uwaga pamiętajcie, żeby wyświetlić sobie okna przed analizą ich wyników, żeby zobaczyć czy okno ma jakiś sens.