Spis treści. Widmo mocy. Obliczanie mocy sygnału. Analiza_sygnałów_-_ćwiczenia/Fourier_4

Podobne dokumenty
Twierdzenie o splocie

Laboratorium Przetwarzania Sygnałów Biomedycznych

Weryfikacja hipotez statystycznych

Spis treści. Wstęp. Regresja

Zadanie: Filtr adaptywny

DYSKRETNA TRANSFORMACJA FOURIERA

Zadania z rysowania i dopasowania funkcji

Laboratorium Przetwarzania Sygnałów Biomedycznych

CYFROWE PRZETWARZANIE SYGNAŁÓW

Stacjonarność i ergodyczność

Model autoregresyjny stochastycznego szeregu czasowego

Analiza szeregów czasowych: 2. Splot. Widmo mocy.

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

Algorytmy, które estymują wprost rozkłady czy też mapowania z nazywamy algorytmami dyskryminacyjnymi.

Celem tych ćwiczeń jest zapoznanie się z klasyfikacją za pomocą sieci neuronowych.

SMOP - wykład. Rozkład normalny zasady przenoszenia błędów. Ewa Pawelec

Analiza szeregów czasowych: 2. Splot. Widmo mocy.

Zjawisko aliasingu. Filtr antyaliasingowy. Przecieki widma - okna czasowe.

Laboratorium Przetwarzania Sygnałów. Ćwiczenie 2. Analiza widmowa

2. Założenie niezależności zakłóceń modelu - autokorelacja składnika losowego - test Durbina - Watsona

2. P (E) = 1. β B. TSIM W3: Sygnały stochastyczne 1/27

1 Estymacja i analiza względnych zmian gęstości energii sygnału EEG w przestrzeni czasczęstość

Laboratorium Przetwarzania Sygnałów

Układy stochastyczne

Ćwiczenie 3. Właściwości przekształcenia Fouriera

( x) Równanie regresji liniowej ma postać. By obliczyć współczynniki a i b należy posłużyć się następującymi wzorami 1 : Gdzie:

LABORATORIUM PROCESÓW STOCHASTYCZNYCH

Testowanie hipotez statystycznych.

ĆWICZENIE III ANALIZA WIDMOWA SYGNAŁÓW DYSKRETNYCH. ver.3

Wnioskowanie statystyczne. Statystyka w 5

Sposoby opisu i modelowania zakłóceń kanałowych

Laboratorium Przetwarzania Sygnałów. Ćwiczenie 2. Filtracja i korelacja sygnałów dyskretnych

ZAJĘCIA II. Zmienne losowe, sygnały stochastyczne, zakłócenia pomiarowe

Szczegółowy program kursu Statystyka z programem Excel (30 godzin lekcyjnych zajęć)

CYFROWE PRZETWARZANIE SYGNAŁÓW

DYSKRETNE PRZEKSZTAŁCENIE FOURIERA C.D.

Laboratorium Przetwarzania Sygnałów. Ćwiczenie 3. Filtracja i korelacja sygnałów dyskretnych

Ćwiczenie 4. Filtry o skończonej odpowiedzi impulsowej (SOI)

Statystyka. Rozkład prawdopodobieństwa Testowanie hipotez. Wykład III ( )

Wykład 3 Hipotezy statystyczne

Monitorowanie i Diagnostyka w Systemach Sterowania na studiach II stopnia specjalności: Systemy Sterowania i Podejmowania Decyzji

LABORATORIUM PODSTAW TELEKOMUNIKACJI

Podstawy Przetwarzania Sygnałów

Ćwiczenie 3,4. Analiza widmowa sygnałów czasowych: sinus, trójkąt, prostokąt, szum biały i szum różowy

Generowanie sygnałów na DSP

Kartkówka 1 Opracowanie: Próbkowanie częstotliwość próbkowania nie mniejsza niż podwojona szerokość przed spróbkowaniem.

2. Próbkowanie Sygnały okresowe (16). Trygonometryczny szereg Fouriera (17). Częstotliwość Nyquista (20).

ALGORYTMICZNA I STATYSTYCZNA ANALIZA DANYCH

Spis treści. Optymalizacja jednowymiarowa

Szeregi czasowe, analiza zależności krótkoi długozasięgowych

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania. Podstawy Automatyki

FFT i dyskretny splot. Aplikacje w DSP

Często spotykany jest również asymetryczny rozkład gamma (Г), opisany za pomocą parametru skali θ i parametru kształtu k:

Definicja. x(u)h (u t)e i2πuf du. F x (t,f ;h) = Krótko czasowa transformata Fouriera Ciągłą transformata falkowa

Ćwiczenia z przetwarzania tablic 2D

Algorytmy detekcji częstotliwości podstawowej

CYFROWE PRZTWARZANIE SYGNAŁÓW (Zastosowanie transformacji Fouriera)

Testowanie hipotez statystycznych.

Badanie widma fali akustycznej

Rozdział 1 PODSTAWOWE POJĘCIA I DEFINICJE

Równania różniczkowe zwyczajne

8. Analiza widmowa metodą szybkiej transformaty Fouriera (FFT)

Statystyka matematyczna Testowanie hipotez i estymacja parametrów. Wrocław, r

Układy i Systemy Elektromedyczne

Statystyka i opracowanie danych Podstawy wnioskowania statystycznego. Prawo wielkich liczb. Centralne twierdzenie graniczne. Estymacja i estymatory

Kolokwium ze statystyki matematycznej

KORELACJE I REGRESJA LINIOWA

Zaawansowane algorytmy DSP

Egzamin / zaliczenie na ocenę*

POLITECHNIKA OPOLSKA

EGZAMIN MAGISTERSKI, czerwiec 2014 Matematyka w ekonomii i ubezpieczeniach

Ważne rozkłady i twierdzenia c.d.

Weryfikacja hipotez statystycznych, parametryczne testy istotności w populacji

Tablica Wzorów Rachunek Prawdopodobieństwa i Statystyki

Szczegółowy program kursu Statystyka z programem Excel (30 godzin lekcyjnych zajęć)

Wykład Centralne twierdzenie graniczne. Statystyka matematyczna: Estymacja parametrów rozkładu

Temat: BADANIE ZGODNOŚCI ROZKŁADU CECHY (EMPIRYCZNEGO) Z ROZKŁADEM TEORETYCZNYM TEST CHI-KWADRAT. Anna Rajfura 1

Rozdział 8. Regresja. Definiowanie modelu

PDF created with FinePrint pdffactory Pro trial version

RÓWNOWAŻNOŚĆ METOD BADAWCZYCH

Laboratorium Techniki ultradźwiękowej w diagnostyce medycznej

Wyznaczanie budżetu niepewności w pomiarach wybranych parametrów jakości energii elektrycznej

Prawdopodobieństwo i rozkład normalny cd.

Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L

Ćwiczenie 6 Projektowanie filtrów cyfrowych o skończonej i nieskończonej odpowiedzi impulsowej

METODY STATYSTYCZNE. Studia stacjonarne, semestr zimowy 2017/2018. Motto III: In God we trust. All others must bring data (z internetu)

SPRZĘTOWA REALIZACJA FILTRÓW CYFROWYCH TYPU SOI

Obliczanie niepewności rozszerzonej metodą analityczną opartą na splocie rozkładów wielkości wejściowych

Generatory takie mają niestety okres, po którym sekwencja liczb powtarza się.

Teoria Sygnałów. Inżynieria Obliczeniowa II rok 2018/19. Wykład 10. ( t) Wykorzystanie transformacji Fouriera w analizie korelacyjnej

9. Dyskretna transformata Fouriera algorytm FFT

Metoda największej wiarygodności

Funkcje dwóch zmiennych

Ważne rozkłady i twierdzenia

Porównanie generatorów liczb losowych wykorzystywanych w arkuszach kalkulacyjnych

WNIOSKOWANIE STATYSTYCZNE

LABORATORIUM AKUSTYKI MUZYCZNEJ. Ćw. nr 12. Analiza falkowa dźwięków instrumentów muzycznych. 1. PODSTAWY TEORETYCZNE ANALIZY FALKOWEJ.

Zakładamy, że są niezależnymi zmiennymi podlegającymi (dowolnemu) rozkładowi o skończonej wartości oczekiwanej i wariancji.

Wersja do wydruku - bez części teoretycznej

Oszacowanie i rozkład t

Transkrypt:

Analiza_sygnałów_-_ćwiczenia/Fourier_4 Spis treści 1 Widmo mocy 1.1 Obliczanie mocy sygnału 1.1.1 Zadanie 1: Moc i energia sygnału w dziedzinie czasu 1.1.2 Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości 1.2 Periodogram: widmo mocy okienkowanego sygnału 1.2.1 Zadanie 3: Obliczanie periodogramu 2 Sygnały stochastyczne 2.1 Stacjonarność i ergodyczność 2.2 Zadanie 4: Estymacja widma sygnału stochastycznego 2.3 Oszacowanie błędu transformaty Fouriera dla białego szumu 2.4 Zadanie 5: Metoda Welcha 2.5 Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha 2.6 Zadanie 7: Estymacja widma mocy metodą wielookienkową Thomsona (multitaper) 2.6.1 Zestawy okien ortogonalnych 2.6.2 Estymacja widma mocy 2.7 Zadanie 8 3 Co musimy z tego zapamiętać Widmo mocy Obliczanie mocy sygnału Zadanie 1: Moc i energia sygnału w dziedzinie czasu Proszę: wygenerować sygnał sinusoidalny o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz. narysować ten sygnał przy pomocy funkcji pylab.stem, obliczyć i narysować przebieg mocy w czasie wartości próbki sygnału : moc w danej chwili to kwadrat obliczyć energię tego sygnału przyrosty czasu między próbkami : energia to suma mocy mnożonej przez Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy. Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania

1. Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału #!/usr/bin/env python3 # -*- coding: utf-8 -*- import pylab as py import numpy as np from numpy.fft import rfft,rfftfreq def widmo_mocy(s,fs,okno): okno= # znormalizuj okno s = # zokienkuj sygnał S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji <tt>rfft</tt> P = # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. P = # Unormuj widmo dzieląc przez częstość próbkowania P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. if len(s)%2 ==: # dokładamy moc z ujemnej części widma P[1:-1] *=2 else: P[1:] *=2 F = # Korzystając z funkcji <tt>rfftfreq</tt> obliczamy częstości, dla których policzone są współczynniki Fouriera. return F,P # część testująca fs =100 T = 3 f = 10.3 # sygnał testowy dt = 1.0/fs t = np.arange(,t,dt) s = np.sin(2*np.pi*f*t ) # okno prostokątne okno = np.ones(len(s)) moc_w_czasie =... (F, moc_w_czestosci) = widmo_mocy(s, Fs=fs, okno = okno) dt = 1/fs

energia_w_czasie =... energia_w_czestosci =... py.subplot(3,1,1) py.plot(t,s) py.title('sygnal') py.subplot(3,1,2) py.plot(t,moc_w_czasie) py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie)) py.subplot(3,1,3) py.plot(f,moc_w_czestosci) py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci)) py.show() Periodogram: widmo mocy okienkowanego sygnału Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole: sygnał: okienko: okienko znormalizowane: widmo mocy sygnału okienkowanego, czyli periodogram: Zadanie 3: Obliczanie periodogramu Proszę napisać funkcję obliczającą periodogram. Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem. Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. Sygnały stochastyczne Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to zmienne losowe. Można je opisać podając własności rozkładu, z którego pochodzą. Często w opisie takich zmiennych posługujemy się momentami rozkładów. Jak

można sobie wyobrazić rozkłady, z których pochodzą próbki? Można sobie wyobrazić, że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. Jeśli jest zbiorem zdarzeń ( ) i każde z tych zdarzeń ma przypisaną funkcję zwaną realizacją procesu, to proces stochastyczny może być zdefiniowany jako zbiór funkcji: gdzie są losowymi funkcjami czasu. Procesy stochastyczne można opisywać przez wartości oczekiwane liczone po realizacjach. Dla przypomnienia wartość oczekiwaną liczymy tak: średnia procesu w chwili to suma wartości zaobserwowanych w chwili we wszystkich realizacjach ważona prawdopodobieństwem wystąpienia tej realizacji. Poniżej mamy przykład wytwarzania procesu złożonego z dwóch realizacji po 50 próbek oraz estymowania jego wartości średniej. Każda próbka jest niezależną zmienną losową z rozkładu normalnego o średniej 0 i wariancji 1: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import pylab as py t = np.arange(,50,1) # realizacja 1 x1 = np.random.randn(t.size) # realizacja 2 x2 = np.random.randn(t.size) # średnia procesu xm = 0.5*(x1+x2) # ilustracja py.subplot(3,1,1) py.stem(t,x1) py.title('realizacja 1') py.subplot(3,1,2)

py.stem(t,x2) py.title('realizacja 2') py.subplot(3,1,3) py.stem(t,xm,'r') py.title('średnia procesu') Stacjonarność i ergodyczność Stacjonarność: Jeśli dla procesu stochastycznego wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia i autokorelacja nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające. Ergodyczność: Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie. Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatorach momentów statystycznych. Zadanie 4: Estymacja widma sygnału stochastycznego Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu. Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum (stochastycznego). wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i szumu gaussowskiego dla każdej realizacji oblicz widmo mocy wykreśl wszystkie otrzymane widma na wspólnym wykresie Proszę obejrzeć otrzymane widma. Zaobserwuj jakiego rzędu jest niepewność wyniku. Czy podobny problem występuje dla sygnału bez szumu? Skonstruuj funkcję rysującą średnie widmo wraz z przedziałem ufności. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Nov 8 11:45:15 2016 @author: admin """

# -*- coding: utf-8 -*- import pylab as py import numpy as np import scipy.stats as st from numpy.fft import rfft,rfftfreq def periodogram(s, okno, F_samp): peiodogram sygnału s okno - synał będzie przez nie przemnożony w czasie F_samp- częstość próbkowania s = s*okno N_fft = len(s) S = rfft(s,n_fft) P = S*S.conj()/np.sum(okno**2) P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów F = rfftfreq(n_fft, 1/F_samp) if len(s)%2 ==: # dokładamy moc z ujemnej części widma P[1:-1] *=2 else: P[1:] *=2 return (F,P) def sin(f = 1, T = 1, Fs = 128, phi = ): 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 1Hz i zerowej fazie próbkowanego 128 Hz dt = 1.0/Fs t = np.arange(,t,dt) s = np.sin(2*np.pi*f*t + phi) return (s,t) def szum(mu =, sigma = 1, T = 1, Fs = 128): szum gaussowski o zadanej: średniej mu wariancji sigma**2 długości T, częstości próbkowania Fs dt = 1.0/Fs t = np.arange(,t,dt) s =...

return (s,t) def dwadziescia_realizacji(fs): * wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20hz, T=1s, Fs =100Hz) i szumu gassowskiego * dla każdej realizacji oblicz widmo mocy * wykreśl wszystkie otrzymane widma na wspólnym wykresie for i in range(20): (s,t) =... #realizacja sinusa (sz,t) =...#realizacja szumu syg =...# sygnał będący sumą powyższych (F, moc_w_czestosci) = widmo_mocy(syg, Fs=FS) py.plot(f,moc_w_czestosci) py.show() def srednie_widmo(fs): # Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. zbior_widm = np.zeros((20,fs/2+1)) for i in range(20): (s,t) =... #realizacja sinusa (sz,t) =...#realizacja szumu syg =...# sygnał będący sumą powyższych okno =... (moc_w_czestosci, F) = periodogram(syg, Fs=FS,okno = okno) zbior_widm[i][:] =...#zapamiętaj widmo i-tej realizacji srednie_w =...# usrednij widma po realizacjach przedzial_d = np.zeros(len(f)) # tablice na dolną i górną granicę przedziału ufności przedzial_g = np.zeros(len(f)) for f in F: # dla każdej częstości znajdujemy granice przedziałów ufności przedzial_d[f] = st.scoreatpercentile(..., 2.5) przedzial_g[f] = st.scoreatpercentile(..., 97.5) py.plot(f,srednie_w,'r') # rysujemy średnią py.plot(f,przedzial_d,'b')# rysujemy granicę dolną py.plot(f,przedzial_g,'b')# rysujemy granicę górną py.show() FS =100.0 dwadziescia_realizacji(fs) srednie_widmo(fs)

Oszacowanie błędu transformaty Fouriera dla białego szumu Niech - sygnał stochastyczny, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum), Jego transformata Fouriera jest liczbą zespoloną Wówczas, część rzeczywista i urojona są nieskorelowanymi zmiennymi losowymi o średniej zero i równych wariancjach. Ponieważ transformata Fouriera jest operacją liniową więc składowe i mają rozkłady normalne. Wielkość: jest sumą kwadratów dwóch niezależnych zmiennych normalnych. Wielkość ta podlega rozkładowi o dwóch stopniach swobody. Możemy oszacować względny błąd dla danej częstości : Dla rozkładu : i, gdzie jest ilością stopni swobody. W naszym przypadku więc mamy, Oznacza to, że dla pojedynczego binu częstości w widmie 100%. względny błąd wynosi Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki: Pierwsza to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy : Zakładając, że biny częstości są niezależne estymator ma rozkład o ilości stopni swobody równej. Względny błąd takiego estymatora to:. Druga

to podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości: gdzie jest estymatą składowej o częstości w oparciu o fragment sygnału. Ilość stopni swobody wynosi w tym przypadku zatem względny błąd wynosi:. Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości. Zadanie 5: Metoda Welcha Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją welch. Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. # -*- coding: utf-8 -*- import pylab as py import numpy as np from numpy.fft import rfft, rfftfreq from scipy.signal import welch def sin(f = 1, T = 1, Fs = 128, phi = ): 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 1Hz i zerowej fazie próbkowanego 128 Hz dt = 1.0/Fs t = np.arange(,t,dt) s = np.sin(2*np.pi*f*t + phi) return (s,t) def periodogram(s, okno, F_samp): peiodogram sygnału s okno - synał będzie przez nie przemnożony w czasie F_samp- częstość próbkowania

s = s*okno N_fft = len(s) S = rfft(s,n_fft) P = S*S.conj()/np.sum(okno**2) P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów F = rfftfreq(n_fft, 1/F_samp) if len(s)%2 ==: # dokładamy moc z ujemnej części widma P[1:-1] *=2 else: P[1:] *=2 return (F,P) Fs = 100.0 (x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = ) N = len(x) # długość sygnału okno = np.hamming(n) okno/=np.linalg.norm(okno) py.subplot(2,1,1) (F,P) = periodogram(x,okno,fs) py.plot(f,p) py.title('periodogram'+' energia: '+ str(np.sum(p))) #periodogram py.subplot(2,1,2) Nseg =20 N_s = N/Nseg okno = np.hamming(n_s) okno/=np.linalg.norm(okno) (F, P) = welch(...) py.plot(f,p) py.title('periodogram Welcha'+' energia: '+ str(nseg*np.sum(p))) py.show() Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha 1. wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego 2. dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana

3. wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1)) 4. Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl na wspólnym wykresie (subplot(2,1,2)) Co można powiedzieć o rozdzielczości i względnym błędzie obu metod? bl_wzg = np.std(s,axis = 0)/np.mean(S,axis = 0) gdzie S jest tablicą zawierającą widma dla każdej z realizacji. #!/usr/bin/env python3 # -*- coding: utf-8 -*- import pylab as py import numpy as np from numpy.fft import rfft, rfftfreq from scipy.signal import welch import scipy.stats as st from matplotlib.font_manager import FontProperties font = FontProperties('Arial') def periodogram(s, okno, F_samp): peiodogram sygnału s okno - synał będzie przez nie przemnożony w czasie F_samp- częstość próbkowania s = s*okno N_fft = len(s) S = rfft(s,n_fft) P = S*S.conj()/np.sum(okno**2) P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów F = rfftfreq(n_fft, 1/F_samp) if len(s)%2 ==: # dokładamy moc z ujemnej części widma P[1:-1] *=2 else: P[1:] *=2 return (F,P) def realizacja(t,fs): dt = 1.0/Fs t = np.arange(,t,dt) # jedna realizacja sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego o std 5-krotnie większym niż amplituda sinusoidy s =... return s

T=10.0 Fs = 100.0 N = T*Fs okno = np.blackman(n) # okno blakmana dla periodogramu ile_okien = 10 Nw = N/ile_okien okno_w =...#okno blackmana dla welcha N_rep = 100 S_perio = np.zeros((n_rep,n/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych S_welch = np.zeros((n_rep,nw/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych for i in range(n_rep):#wygeneruj 100 realizacji sygnału s =...#sygnał (F_p, P) =...# jego periodogram S_perio[i,:] =...# zachowaj periodogram tej realizacji na później (F_w, P_w) =... # widmo Welcha S_welch[i,:] =...# zachowaj widmo Welcha tej realizacji na później # poniżej robimy wykresy py.figure(1) py.subplot(3,1,1) py.plot(f_p,np.mean(s_perio,axis = ),'r', F_p, st.scoreatpercentile(s_perio, 2.5,axis =),'b', F_p, st.scoreatpercentile(s_perio,97.5,axis =),'b' ) py.title(u'periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font) py.ylabel('v^2/hz') py.subplot(3,1,2) py.plot(f_w,np.mean(s_welch,axis = ),'r', F_w, st.scoreatpercentile(s_welch, 2.5,axis =),'b', F_w, st.scoreatpercentile(s_welch,97.5,axis =),'b' ) py.title('welch: średnie widmo realizacji wraz z 95% CI', fontproperties = font) py.ylabel('v^2/hz') py.subplot(3,1,3) py.plot(f_p,...) # błąd względny ( std/mean *100)w % dla periodogramu py.plot(f_w,...) # błąd względny w % dla Welcha py.ylim([,250]) py.xlabel('częstość Hz', fontproperties = font) py.ylabel('%') py.legend(('periodogram','welch'))

py.title('błąd względny', fontproperties = font) py.show() Zadanie 7: Estymacja widma mocy metodą wielookienkową Thomsona (multitaper) Jeśli nie mamy do dyspozycji dostatecznie długiego sygnału stacjonarnego i ergodycznego aby astosować metodę Welcha pomocne może być wykorzystanie zestawów okien ortogonalnych (Discrete Prolate Spheroidal Sequences- DPSS). Ponieważ są ortogonalne więc widma estymowane periodogramem z każdym z tych okienek stanowią niezależne estymaty gęstości mocy. Ich wartość średnia ma mniejszą wariancję niż estymata za pomocą pojedynczego periodogramu. Oczywiście nie ma nic za darmo: za mniejszą wariancję płacimy szerokością piku. Metoda ta została zaproponowana w pracy: D. J. Thomson, Spectrum Estimation and Harmonic Analysis, Proceedings of the IEEE, vol. 70, no. 9, pp. 1055 1096, 1982 Zestawy okien ortogonalnych Najpierw zobaczmy jak wyglądają sekwencje okien. Moduł zawierający funkcję do generowania takiej sekwencji można ściągnąć stąd: http://www.fuw.edu.pl/~jarekz/dpss.py # -*- coding: utf-8 -*- import pylab as py import numpy as np from dpss import dpss_window NW = 2 # szerokość pasma w którym zlokalizowane są piki główne okien K = 2*NW-1 # liczba okien N = 100 # rozmiar okna py.figure(1) w, eigen = dpss_window(n, NW, K) # generujemy okna for i, eig in enumerate(eigen): py.plot(w[i,:]) # kolejno wykreślamy wszystkie okna py.legend(range(len(eigen))) py.show() print(eigen) # sprawdzamy czy okna są ortogonalne print('iloczyny skalarne sekwencji okien:') for i in range(len(eigen)): for j in range(i,len(eigen)): print('okno '+str(i)+' z oknem '+str(j)+': '+'{:.5f}'.format( np.dot(w[i,:],w[j,:]) ) )

Estymacja widma mocy Proszę napisać funkcję do estymacji mocy metodą wielookienkową. Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę (F,P) gdzie P widmo mocy, F skala częstości. Przykładowe wywołanie takiej funkcji powinno wyglądać tak: (S,F) = mtm(s, NW = 3, Fs = 128) Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez periodogram z oknem prostokątnym. Algorytm do zastosowania wewnątrz funkcji: 1. 2. 3. 4. 5. 6. Oblicz maksymalną liczbę okienek K = 2*NW-1 Oblicz długość sygnału wygeneruj serię okienek dpss dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i- tego okienka będzie to: Si = np.abs(fft(s*w[i]))**2 uśrednij widma otrzymane dla wszystkich okienek wygeneruj oś częstości (fftfreq) Uzupełnij poniższy kod: # -*- coding: utf-8 -*- import pylab as py import numpy as np from dpss import dpss_window from numpy.fft import rfft,rfftfreq from matplotlib.font_manager import FontProperties font = FontProperties('Arial') def sin(f = 1, T = 1, Fs = 128, phi = ): 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 1Hz i zerowej fazie próbkowanego 128 Hz... return (s,t) def periodogram(s, okno, Fs):

peiodogram sygnału s okno - synał będzie przez nie przemnożony w czasie F_samp- częstość próbkowania... return (F,P) def mtm(s, NW, Fs): estymacja widma w oparciu o metodę Multiteper D. J. Thomson, Spectrum Estimation and Harmonic Analysis, Proceedings of the IEEE, vol. 70, no. 9, pp. 1055 1096, 1982. x - sygnał N -ilość punktów okna NW - iloczyn długości okna w czasie i szerokości w częstości K - ilość okien funkcja zwraca estymatę mocy widmowej K = 2*NW-1 N = len(s) w, eigen =...# wygeneruj sekwencję okien DPSS P_tmp = for i in range(k): #dla każdego okna (F,Pi)=...# oblicz periodogram P_tmp+=...# dodaj do zmiennej tymczasowej P =...# moc jest średnią z periodogramów dla poszczególnych okien F = rfftfreq(n,1.0/fs) return (F, P) #prezentacja widma Fs = 200.0 # częstość próbkowania # tworzymy sygnał testowy (s1,t) = sin(f=10.2,fs=fs) (s2,t) = sin(f=17.2,fs=fs) s = s1+s2+np.random.randn(len(t)) py.figure(1) NW = 2 # ustalamy szerokość pasma (F_m,P_m) =... # estymujemy widmo metodą mtm (F_p,P_p) =... # estymujemy widmo metodą periodogram z oknem prostokątnym # wykreślamy wyniki py.plot(f_m,p_m) py.plot(f_p,p_p,'g') # opisy wykresu

py.xlabel('częstość [Hz]', fontproperties = font) py.ylabel('gestość mocy V^2/Hz', fontproperties = font) py.title('porównanie estymat gęstości mocy: wielokoienkowej i periodogramu', fontproperties = font) py.legend(('wielookienkowa','periodogram')) # test zacowania energii print('test zachowania energii:') print( 'energia w czasie = \t\t'+ '{:.5f}'.format(... )) print( 'energia w mtm = \t\t'+ '{:.5f}'.format(... )) print( 'energia w periodogramie = \t'+ '{:.5f}'.format(... )) py.show() Zadanie 8 Proszę wykonać ilustrację średniej wraz z przedziałami ufności 95% oraz błędu względnego w estymatorze wielookienkowym (dla porównania periodogram), analogicznie jak w zadaniu 6. Co musimy z tego zapamiętać Jak definiujemy moc sygnału i energię w dziedzinie czasu w analizie sygnałów? Jak definiujemy gęstość energii i energię sygnału w dziedzinie częstości? Jak estymować periodogram? Co to znaczy że sygnał jest stochastyczny? Co to znaczy że sygnał jest stacjonarny i ergodyczny? Jaki jest błąd względny widma białego szumu estymowanego za pomocą periodogramu? Metody zmniejszenia błędu względnego: metoda Welcha i metoda wielookienkowa Thomsona - na czym polegają, jakie są podobieństwa i różniece w stosowaniu tych metod? W jakich sytuacjach wybrać metodę Welcha a w jakich Thomsona? Analiza_sygnałów_-_ćwiczenia/Fourier_4