Ćwiczenia 3: Różnice pomiędzy wersjami

Z Brain-wiki
m
Linia 2: Linia 2:
  
 
== Twierdzenie o splocie ==
 
== Twierdzenie o splocie ==
Na pierwszych ćwiczeniach poznaliśmy poznaliśmy operację [[Systemy_liniowe_niezmiennicze_w_czasie#Splot|splotu]] jako efekt działania systemu liniowego niezmienniczego w czasie. Poznaliśmy wówczas jego [[Systemy_liniowe_niezmiennicze_w_czasie#W.C5.82asno.C5.9Bci_splotu|własności]].
+
<!--Na pierwszych ćwiczeniach poznaliśmy poznaliśmy operację [[Systemy_liniowe_niezmiennicze_w_czasie#Splot|splotu]] jako efekt działania systemu liniowego niezmienniczego w czasie. Poznaliśmy wówczas jego [[Systemy_liniowe_niezmiennicze_w_czasie#W.C5.82asno.C5.9Bci_splotu|własności]].
Okazuje się, że gdy rozważamy sprzężone ze sobą za pomocą transformaty Fouriera dziedziny czasu i częstości splot ma wiele wspólnego z mnożeniem. Związek ten można zapisać jako  
+
Okazuje się, że gdy rozważamy sprzężone ze sobą za pomocą transformaty Fouriera dziedziny czasu i częstości splot ma wiele wspólnego z mnożeniem. Związek ten można zapisać jako -->
 +
Przypomnijmy sobie poznane na wykładzie
 
[[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|Twierdzenie o splocie:]]  
 
[[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|Twierdzenie o splocie:]]  
 
<equation id="uid2">
 
<equation id="uid2">
Linia 24: Linia 25:
 
<ul>
 
<ul>
 
<li>
 
<li>
zamiana splotu na mnożenie
+
pozwala na zamianę splotu na mnożenie
 
<li>
 
<li>
 
daje wgląd w okienkowanie
 
daje wgląd w okienkowanie
 
<li>
 
<li>
łatwo zrozumieć działanie filtrów
+
łatwiej można zrozumieć działanie filtrów
 
</ul>
 
</ul>
  
Linia 38: Linia 39:
 
from scipy import signal
 
from scipy import signal
 
w = signal.bartlett(10)
 
w = signal.bartlett(10)
print(w)
+
plt.plot(w,'o')
 +
plt.show()
 
</source>
 
</source>
  
 
===Badanie własności okien===
 
===Badanie własności okien===
 
+
====Zadanie 1: Własności różnych okien====
* Wykreśl okienko Bartletta o długości 100 i 101 próbek.
+
* Proszę wykreślić okienko Bartletta o długości 100 i 101 próbek.
  *
+
   
<!--
 
<source lang = python>
 
import numpy as np
 
import matplotlib.pyplot as py
 
 
 
window = np.bartlett(101)
 
py.plot(window)
 
py.title("okno Bartletta")
 
py.ylabel("Amplituda")
 
py.xlabel(u"próbki")
 
py.show()
 
</source>
 
-->
 
 
* Proszę wykreślić widmo amplitudowe okna Bartletta o długości 101 próbek w skali [[wikipl:Decybel|dB]] (<tt>20*np.log10(.)</tt>), raz korzystając z fft o naturalnej długości okna <tt>W = fft(okno)</tt>, a drugi raz korzystając z przedłużenia zerami (w tym przypadku dostaniemy interpolowaną wersję widma) <tt>W = fft(okno, 2048)</tt>. Proszę zwrócić uwagę na charakterystyczne elementy: szerokość piku głównego, szybkość zanikania listków bocznych, zera.  
 
* Proszę wykreślić widmo amplitudowe okna Bartletta o długości 101 próbek w skali [[wikipl:Decybel|dB]] (<tt>20*np.log10(.)</tt>), raz korzystając z fft o naturalnej długości okna <tt>W = fft(okno)</tt>, a drugi raz korzystając z przedłużenia zerami (w tym przypadku dostaniemy interpolowaną wersję widma) <tt>W = fft(okno, 2048)</tt>. Proszę zwrócić uwagę na charakterystyczne elementy: szerokość piku głównego, szybkość zanikania listków bocznych, zera.  
  
Linia 72: Linia 61:
 
</source>
 
</source>
  
  *<!--
+
   
<source lang = python>
+
* A jakie własności ma poznane na poprzednich zajęciach okno prostokątne? Najprościej można je zrobić tak: <tt>window = np.ones(N)</tt>. Proszę wykonać analogiczne rysunki jak dla okna Bartletta.
import numpy as np
 
from numpy.fft import fft, fftshift
 
import matplotlib.pyplot as py
 
 
 
window = np.bartlett(51)
 
 
 
W = fft(window)/len(window)
 
# rysować będziemy w skali logarytmicznej
 
widmo = abs(fftshift(W))
 
widmo_dB = 20*np.log10(widmo)
 
f = np.linspace(-0.5,0.5,len(W))
 
py.subplot(2,1,1)
 
py.plot(f,widmo_dB)
 
py.axis('tight')
 
 
 
W_zeropadded = fft(window, 2048) / len(window)
 
widmo_zeropadded = abs(fftshift(W_zeropadded))
 
f = np.linspace(-0.5,0.5,len(W_zeropadded))
 
widmo_dB_zeropadded = 20*np.log10(widmo_zeropadded)
 
py.subplot(2,1,2)
 
py.plot(f ,widmo_dB_zeropadded)
 
py.title("widmo okna Bartletta")
 
py.ylabel(u"Wartość [dB]")
 
py.xlabel(u"znormalizowana częstość")
 
py.axis('tight')
 
py.show()
 
</source>
 
-->
 
* A jakie własności ma okno prostokątne? Najprościej można je zrobić tak: <tt>window = np.ones(N)</tt>. Proszę wykonać analogiczne rysunki jak dla okna Bartletta.
 
  
 
* Proszę porównać przebiegi czasowe i własności widmowe pozostałych okien dostępnych w <tt>scipy.signal</tt>, m.in.:  
 
* Proszę porównać przebiegi czasowe i własności widmowe pozostałych okien dostępnych w <tt>scipy.signal</tt>, m.in.:  
Linia 111: Linia 71:
  
 
===Własności okien w działaniu===
 
===Własności okien w działaniu===
==== Okienko i szerokość prążka w widmie ====
+
====Zadanie 2: Okienko i szerokość prążka w widmie ====
 
* Wygeneruj sinusoidę o częstości <math>f=10.2</math> Hz fazie 0, czasie trwania <math>T=1</math> s, i częstości próbkowania <math>Fs=100</math> Hz
 
* Wygeneruj sinusoidę o częstości <math>f=10.2</math> Hz fazie 0, czasie trwania <math>T=1</math> s, i częstości próbkowania <math>Fs=100</math> Hz
 
* Wygeneruj okno prostokątne o długości równej długości sinusoidy.
 
* Wygeneruj okno prostokątne o długości równej długości sinusoidy.
Linia 119: Linia 79:
  
 
* Proszę porównać widma otrzymane dla poszczególnych typów okienek.
 
* Proszę porównać widma otrzymane dla poszczególnych typów okienek.
*
 
<!--
 
<source lang = python>
 
# -*- coding: utf-8 -*-
 
 
import pylab as py
 
import numpy as np
 
from numpy.fft import  fft, fftfreq, fftshift
 
 
 
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 1Hz 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)
 
def widmo_dB(s, N_fft , F_samp):
 
    S = fft(s,N_fft)/np.sqrt(N_fft)
 
    S_dB = 20*np.log10(np.abs(S))
 
    F = fftfreq(N_fft, 1/F_samp)
 
    return (fftshift(S_dB),fftshift(F))
 
 
F_samp = 100.0
 
(x,t) = sin(f = 10.2, T =1.0, Fs = F_samp, phi = 0)
 
 
#
 
py.subplot(3,3,1)
 
okno = np.ones(len(x))/np.sqrt(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany prostokątem')
 
#
 
py.subplot(3,3,2)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego prostokątem')
 
py.ylim((-50,10))
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,3)
 
py.plot(F,Okno)
 
py.title('widmo prostokąta')
 
 
###
 
#
 
py.subplot(3,3,4)
 
okno = np.blackman(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany Blackmanem')
 
#
 
py.subplot(3,3,5)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego Blackmanem')
 
py.ylim((-50,10))
 
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,6)
 
py.plot(F,Okno)
 
py.title('widmo Blackmana')
 
#
 
py.subplot(3,3,7)
 
okno = np.hamming(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany Hamming')
 
#
 
py.subplot(3,3,8)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego Hamming')
 
py.ylim((-50,10))
 
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,9)
 
py.plot(F,Okno)
 
py.title('widmo Hamming')
 
 
  
py.show()
 
  
</source>
+
==== Zadanie 3: Wpływ okienkowania na wykrywalność składowych o różnej amplitudzie ====
-->
 
====Wpływ okienkowania na wykrywalność składowych o różnej amplitudzie ====
 
 
* Wygeneruj sygnał będący sumą dwóch sinusoid o fazie 0, czasie trwania <math>T=1</math> s, i częstości próbkowania <math>Fs=100</math> Hz. Jedna niech ma częstość <math>f=10.2</math> Hz. Częstość drugiej, w kolejnych zapuszczeniach skryptu proszę zmieniać od 11,4 do 16,4 Hz z krokiem co 0,5 Hz.
 
* Wygeneruj sygnał będący sumą dwóch sinusoid o fazie 0, czasie trwania <math>T=1</math> s, i częstości próbkowania <math>Fs=100</math> Hz. Jedna niech ma częstość <math>f=10.2</math> Hz. Częstość drugiej, w kolejnych zapuszczeniach skryptu proszę zmieniać od 11,4 do 16,4 Hz z krokiem co 0,5 Hz.
 
* Jaki jest wpływ okienek na możliwości rozróżnienia dwóch częstości?
 
* Jaki jest wpływ okienek na możliwości rozróżnienia dwóch częstości?
 
* Proszę powtórzyć iteracje dla przypadku gdy druga z sinusoid ma 10-krotnie niższą amplitudę.
 
* Proszę powtórzyć iteracje dla przypadku gdy druga z sinusoid ma 10-krotnie niższą amplitudę.
  
*
 
<!--
 
<source  lang = python>
 
# -*- coding: utf-8 -*-
 
 
import pylab as py
 
import numpy as np
 
from numpy.fft import  fft, fftfreq, fftshift
 
 
 
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 1Hz 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)
 
def widmo_dB(s, N_fft , F_samp):
 
    S = fft(s,N_fft)/np.sqrt(N_fft)
 
    S_dB = 20*np.log10(np.abs(S))
 
    F = fftfreq(N_fft, 1/F_samp)
 
    return (fftshift(S_dB),fftshift(F))
 
 
F_samp = 100.0
 
(x1,t) = sin(f = 10.2, T =1.0, Fs = F_samp, phi = 0)
 
 
(x2,t) = sin(f = 11.4+0.5*1, T =1.0, Fs = F_samp, phi = 0)
 
x = x1 + 1*x2 #0.1*
 
#
 
py.subplot(3,3,1)
 
okno = np.ones(len(x))/np.sqrt(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany prostokątem')
 
#
 
py.subplot(3,3,2)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego prostokątem')
 
py.ylim((-50,10))
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,3)
 
py.plot(F,Okno)
 
py.title('widmo prostokąta')
 
 
###
 
#
 
py.subplot(3,3,4)
 
okno = np.blackman(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany Blackmanem')
 
#
 
py.subplot(3,3,5)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego Blackmanem')
 
py.ylim((-50,10))
 
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,6)
 
py.plot(F,Okno)
 
py.title('widmo Blackmana')
 
#
 
py.subplot(3,3,7)
 
okno = np.hamming(len(x))
 
s = x*okno
 
py.plot(t,s)
 
py.title(u' sygnał okienkowany Hamming')
 
#
 
py.subplot(3,3,8)
 
(S,F) = widmo_dB(s,len(s),F_samp)
 
py.plot(F,S)
 
py.title(u'widmo sygnału okienkowanego Hamming')
 
py.ylim((-50,10))
 
 
#widmo okna
 
 
(Okno, F) = widmo_dB(okno,1024,F_samp)
 
py.subplot(3,3,9)
 
py.plot(F,Okno)
 
py.title('widmo Hamming')
 
 
 
py.show()
 
  
</source>
 
-->
 
 
=== Okienkować możemy też w częstości===
 
  
 +
===Okienkować możemy też w częstości===
 +
====Zadanie 4: Konstrukcja prostego filtru====
 
* Proszę wykreślić widmo, a następie obliczyć i wykreślić [[%C4%86wiczenia_2#Transformaty_rzeczywiste_i_Hermitowskie|odwrotną transformatę Fouriera dla sygnału rzeczywistego]] zadanego w dziedzinie częstości przez (poniższy kod definiuje sygnał w dodatniej części widma):
 
* Proszę wykreślić widmo, a następie obliczyć i wykreślić [[%C4%86wiczenia_2#Transformaty_rzeczywiste_i_Hermitowskie|odwrotną transformatę Fouriera dla sygnału rzeczywistego]] zadanego w dziedzinie częstości przez (poniższy kod definiuje sygnał w dodatniej części widma):
 
<source lang = python>
 
<source lang = python>
Linia 324: Linia 99:
  
 
* Koncepcyjnie najprostszym filtrem jest operacja przemnożenia widma sygnału przez okienko w dziedzinie częstości a następnie zastosowanie odwrotnej transformaty Fouriera. Co stanie się z sygnałem w dziedzinie czasu, a co w dziedzinie częstości, jeśli chcielibyśmy przefiltrować go pasmowo przy użyciu filtra pasmowo przepustowego z poprzedniego punktu?
 
* Koncepcyjnie najprostszym filtrem jest operacja przemnożenia widma sygnału przez okienko w dziedzinie częstości a następnie zastosowanie odwrotnej transformaty Fouriera. Co stanie się z sygnałem w dziedzinie czasu, a co w dziedzinie częstości, jeśli chcielibyśmy przefiltrować go pasmowo przy użyciu filtra pasmowo przepustowego z poprzedniego punktu?
* <!--
 
<source lang = python>
 
# -*- coding: utf-8 -*-
 
 
import pylab as py
 
import numpy as np
 
from numpy.fft import  irfft,fftshift
 
 
S= np.zeros(128)
 
S[21:28] = 1
 
  
s = fftshift(irfft(S))
+
====Zadanie 5: Porównanie działania najprostszych filtrów fft na biały szum====
py.subplot(2,1,1)
+
 
F = range(len(S))
+
* Proszę wytworzyć sygnał będący białym szumem o długości 256 próbek.
py.stem(F,S)
+
* Policz transformatę rzeczywistą tego sygnału.
py.subplot(2,1,2)
+
* Przygotuj dwa okna w dziedzinie częstości (w części dodatniej)  o długości 129:  
t = range(len(s))
+
** okno prostokątne  z jedynkami w punktach 20:30
py.plot(t,s)
+
** okno Gaussowskie <tt>np.exp(-((F-25.0)/5)**2)</tt>
py.show()
+
* Przemnóż widmo sygnału przez każde z okien i oblicz odwrotną transformatę Fouriera.  
</source>
+
* Zilustruj wyniki rysunkiem opisanym przez poniższą tabelkę:
-->
 
* Porównajmy działanie najprostszych filtrów fft na biały szum.
 
** Proszę wytworzyć sygnał będący białym szumem o długości 256 próbek.
 
** Policz transformatę rzeczywistą tego sygnału.
 
** Przygotuj dwa okna w dziedzinie częstości (w części dodatniej)  o długości 129:  
 
*** okno prostokątne  z jedynkami w punktach 20:30
 
*** okno Gaussowskie <tt>np.exp(-((F-25.0)/5)**2)</tt>
 
** Przemnóż widmo sygnału przez każde z okien i oblicz odwrotną transformatę Fouriera.  
 
** Zilustruj wyniki rysunkiem opisanym przez poniższą tabelkę:
 
  
  
Linia 368: Linia 124:
 
|Przebieg czasowy odwrotnej tr. Fouriera iloczynu widma szumu i okna Gaussowskiego
 
|Przebieg czasowy odwrotnej tr. Fouriera iloczynu widma szumu i okna Gaussowskiego
 
|}
 
|}
*
 
<!--
 
<source lang = python>
 
# -*- coding: utf-8 -*-
 
 
import pylab as py
 
import numpy as np
 
from numpy.fft import  irfft,rfft,fftshift
 
 
 
szum = np.random.randn(128*2-2)
 
SZum = rfft(szum)
 
 
S_prost= np.zeros(128)
 
S_prost[20:30]=1
 
s_prost = fftshift(irfft(S_prost))
 
 
t = np.arange(len(s_prost))
 
F = np.arange(len(S_prost))
 
S_gauss = np.exp(-((F-25.0)/5)**2)
 
s_gauss = fftshift(irfft(S_gauss))
 
 
py.subplot(4,2,1)
 
py.stem(F,S_prost)
 
 
py.subplot(4,2,3)
 
py.plot(t,s_prost)
 
 
 
py.subplot(4,2,5)
 
py.plot(t,szum)
 
 
py.subplot(4,2,7)
 
filtrowanySygnal = fftshift(irfft(SZum*S_prost))
 
py.plot(filtrowanySygnal)
 
 
 
 
py.subplot(4,2,2)
 
py.stem(F,S_gauss)
 
 
py.subplot(4,2,4)
 
py.plot(t,s_gauss)
 
 
  
py.subplot(4,2,6)
 
py.plot(t,szum)
 
 
py.subplot(4,2,8)
 
filtrowanySignal = fftshift(irfft(SZum*S_gauss))
 
py.plot(filtrowanySignal)
 
 
py.show()
 
 
</source>
 
-->
 
  
 
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_3
 
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_3

Wersja z 19:21, 1 lis 2016

Analiza_sygnałów_-_ćwiczenia/Fourier_3

Twierdzenie o splocie

Przypomnijmy sobie poznane na wykładzie Twierdzenie o splocie:

[math] g(t)=\left(s * h\right)(t)\quad \Rightarrow \quad G(f)=S(f)\cdot H(f) [/math]

To twierdzenie działa też w drugą stronę:

[math] G(f)=\left(S * H\right)(f)\quad \Rightarrow \quad g(t)=s(t)\cdot h(t) [/math]

W praktyce oznacza to tyle, że jeśli w jednej dziedzinie jakieś dwa sygnały przez siebie przemnożymy, to w drugiej dziedzinie transformaty tych sygnałów splatają się. Własność ta ma bardzo ważne konsekwencje, np. przy estymacji widma skończonego fragmentu sygnału. Dlaczego?

Wyobraźmy sobie, że mamy nieskończenie długi sygnał. Oprócz niego mamy też funkcję, która jest niezerowa tylko na skończonym odcinku. Funkcję taką będziemy nazywać oknem. Pobranie fragmentu sygnału można wyobrazić sobie jako efekt pomnożenia badanego sygnału przez okno. Ta operacja mnożenia w dziedzinie czasu, w dziedzinie częstości odpowiada splotowi widma sygnału z widmem okna. Aby uzyskać sygnał o skończonej długości odrzucamy wyzerowane odcinki. FFT widzi taki skończony odcinek jako periodyczne przedłużenie. Widać, że w praktyce estymowania widma zawsze mamy do czynienia z widmami będącymi splotem widma sygnału i widma okna, ponieważ zawsze pracujemy z sygnałami o skończonej długości.

Zastosowania

  • pozwala na zamianę splotu na mnożenie
  • daje wgląd w okienkowanie
  • łatwiej można zrozumieć działanie filtrów

Okienka

Wstęp

  • Jakie są dostępne okna w scipy.signal? Proszę odwiedzić stronę z dokumentacją.
  • Jak wyglądają te okienka?
from scipy import signal
w = signal.bartlett(10)
plt.plot(w,'o')
plt.show()

Badanie własności okien

Zadanie 1: Własności różnych okien

  • Proszę wykreślić okienko Bartletta o długości 100 i 101 próbek.
  • Proszę wykreślić widmo amplitudowe okna Bartletta o długości 101 próbek w skali dB (20*np.log10(.)), raz korzystając z fft o naturalnej długości okna W = fft(okno), a drugi raz korzystając z przedłużenia zerami (w tym przypadku dostaniemy interpolowaną wersję widma) W = fft(okno, 2048). Proszę zwrócić uwagę na charakterystyczne elementy: szerokość piku głównego, szybkość zanikania listków bocznych, zera.

Przydatna może być tu funkcja do obliczania widma (proszę przeanalizować kod i w razie wątpliwości poprosić o objaśnienie):

import numpy as np
from numpy.fft import  fft, fftfreq, fftshift

def widmo_dB(s, N_fft, F_samp):
    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))


  • A jakie własności ma poznane na poprzednich zajęciach okno prostokątne? Najprościej można je zrobić tak: window = np.ones(N). Proszę wykonać analogiczne rysunki jak dla okna Bartletta.
  • Proszę porównać przebiegi czasowe i własności widmowe pozostałych okien dostępnych w scipy.signal, m.in.:
    • blackman(M)
    • hamming(M)
    • hanning(M)
    • kaiser(M, beta)

Własności okien w działaniu

Zadanie 2: Okienko i szerokość prążka w widmie

  • Wygeneruj sinusoidę o częstości [math]f=10.2[/math] Hz fazie 0, czasie trwania [math]T=1[/math] s, i częstości próbkowania [math]Fs=100[/math] Hz
  • Wygeneruj okno prostokątne o długości równej długości sinusoidy.
  • Zokienkuj sygnał mnożąc sinusoidę przez okienko
  • Wykreśl zokienkowany sygnał, widmo zokienkowanego sygnału, widmo okienka
  • Powtórz powyższe kroki dla okienek Bartletta, Hanna, Hamminga i Blackmana. Przy wykreślaniu widma zokienkowanego sygnału ustal zakres osi pionowej na [-50 10] (zastosuj py.ylim((-50,10))
  • Proszę porównać widma otrzymane dla poszczególnych typów okienek.


Zadanie 3: Wpływ okienkowania na wykrywalność składowych o różnej amplitudzie

  • Wygeneruj sygnał będący sumą dwóch sinusoid o fazie 0, czasie trwania [math]T=1[/math] s, i częstości próbkowania [math]Fs=100[/math] Hz. Jedna niech ma częstość [math]f=10.2[/math] Hz. Częstość drugiej, w kolejnych zapuszczeniach skryptu proszę zmieniać od 11,4 do 16,4 Hz z krokiem co 0,5 Hz.
  • Jaki jest wpływ okienek na możliwości rozróżnienia dwóch częstości?
  • Proszę powtórzyć iteracje dla przypadku gdy druga z sinusoid ma 10-krotnie niższą amplitudę.


Okienkować możemy też w częstości

Zadanie 4: Konstrukcja prostego filtru

S = np.zeros(128)
S[21] = 1
  • Proszę wykreślić okienko prostokątne w częstości, pozycja 1 w binach częstości od 21 do 30, a następnie wykreślić odpowiadający mu sygnał w dziedzinie czasu.
  • Koncepcyjnie najprostszym filtrem jest operacja przemnożenia widma sygnału przez okienko w dziedzinie częstości a następnie zastosowanie odwrotnej transformaty Fouriera. Co stanie się z sygnałem w dziedzinie czasu, a co w dziedzinie częstości, jeśli chcielibyśmy przefiltrować go pasmowo przy użyciu filtra pasmowo przepustowego z poprzedniego punktu?

Zadanie 5: Porównanie działania najprostszych filtrów fft na biały szum

  • Proszę wytworzyć sygnał będący białym szumem o długości 256 próbek.
  • Policz transformatę rzeczywistą tego sygnału.
  • Przygotuj dwa okna w dziedzinie częstości (w części dodatniej) o długości 129:
    • okno prostokątne z jedynkami w punktach 20:30
    • okno Gaussowskie np.exp(-((F-25.0)/5)**2)
  • Przemnóż widmo sygnału przez każde z okien i oblicz odwrotną transformatę Fouriera.
  • Zilustruj wyniki rysunkiem opisanym przez poniższą tabelkę:


okno prostokątne w częstości okno Gaussowskie w częstości
przebieg czasowy odwrotnej tr. Fouriera okna Prostokątnego przebieg czasowy odwrotnej tr. Fouriera okna Gaussowskiego
przebieg czasowy szumu przebieg czasowy szumu
Przebieg czasowy odwrotnej tr. Fouriera iloczynu widma szumu i okna prostokątnego Przebieg czasowy odwrotnej tr. Fouriera iloczynu widma szumu i okna Gaussowskiego


Analiza_sygnałów_-_ćwiczenia/Fourier_3