Analisi di segnali in SciPy -...

29
Analisi di segnali in SciPy Marco D. Santambrogio – [email protected] Luca Cerina – [email protected] Emanuele Del Sozzo – [email protected] Lorenzo Di Tucci – [email protected] Giuseppe Natale – [email protected] Marco Rabozzi – [email protected] Alberto Scolari – [email protected] Ver. aggiornata al 18 Novembre 2016

Transcript of Analisi di segnali in SciPy -...

Page 1: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Analisi di segnali in SciPy

Marco D. Santambrogio – [email protected] Cerina – [email protected] Del Sozzo – [email protected] Di Tucci – [email protected] Natale – [email protected] Rabozzi – [email protected] Scolari – [email protected]. aggiornata al 18 Novembre 2016

Page 2: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

SciPy

• SciPy è un modulo di Python orientato al calcolo scientifico

• I sotto-moduli di SciPy permettono di agire su diversi applicazioni, come interpolazione, integrazione, ottimizzazione, elaborazione di immagini, statistica, algebra lineare, analisi di segnali, …

• SciPy è disegnato per operare in modo efficiente su array NumPy, quindi conviene importare anche NumPy quando si usa SciPy

• La documentazione di ScyPy è disponibile a questo link:http://docs.scipy.org/doc/scipy/reference/

2

Page 3: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Moduli SciPy

I principali moduli disponibili all’interno di SciPy sono:

3

Sotto-modulo Applicazione

scipy.cluster Quantizzazionevettoriale/Kmeansscipy.constants Costantifisicheematematichescipy.fftpack TrasformatadiFourierscipy.integrate Integrazionescipy.interpolate Interpolazionescipy.io Input&outputdidatiscipy.linalg Algebralinearescipy.ndimage Immaginin-dimensionali

Page 4: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Moduli SciPy

Noi ci concentreremo solamente sull’elaborazione di segnali

4

Sotto-modulo Applicazione

scipy.odr Regressioneortogonalescipy.optimize Ottimizzazionescipy.signal Elaborazionedisegnaliscipy.sparse Matricisparsescipy.spatial Algoritmiestrutturedatispazialiscipy.special Funzionimatematichespecialiscipy.stats Statistica

Page 5: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Filtri a tempo discreto

• I filtri a tempo discreto possono essere classificati in Finite Impulse Response (FIR) e Infinite Impulse Response (IIR)

• SciPy permette di usare entrambi I tipi di filtri tramite varie funzioni, come firwin, firwin2, iirdesign e iirfilter

• SciPy mette a dispozione anche altri tipi di filtri (mediano, Wiener, Hilbert, ecc.)

• Guardate la documentazione o usare help(signal) per vedere quali altri filtri sono a disposizione

5

Page 6: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

firwin

• La funzione firwin permette di creare un filtro basato sul metodo delle finestre

• In base agli argomenti dati alla funzione, è possibile ottenere diversi tipi di filtri (passa basso, passa banda, ecc.)

6

output=signal.firwin(numtaps,cutoff,width=None,window=‘hamming’,pass_zero=True,scale=True,nyq=1.0)

Lunghezzadelfiltro(numerodicoefficienti)

Frequenzeditagliofloatolista(banda)

Larghezzadellaregioneditransizione

Finestradausare

SeTrue,ilguadagnoallafrequenza0è1

SeTrue,Icoefficientisonoscalatiperottenere1comerisposta

infrequenzaadunacertafrequenza

FrequenzadiNyquist

NdarrayIcoefficientidel

filtroFIR

Page 7: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

freqz

• Una volta calcolati i coefficienti, la funzione freqz, calcola le risposte in frequenza di un filtro digitale

7

w,h=signal.freqz(b,a=1,worN=None,whole=0,plot=None)

Numeratoredelfiltrolineare

Numerodifrequenzedacomputareintornoalcerchio

unitarioDefault=512frequenze

Se0,lefrequenzesonocalcolateda0allafrequenzadiNyquist

SeTrue,da0a2𝜋

E’possibilepassareunafunzionechedisegnidirettamenteweh

w:lefrequenzenormalizzaacuièstatacomputatah(ndarray)h:larispostainfrequenza(ndarray)

Denominatoredelfiltrolineare

Page 8: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio filtro FIR usando la funzione firwin

8

Frequenzeditaglionormalizzate

Page 9: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Applicare filtri sui dati

• Una volta generato un filtro FIR/IIR, è possibile applicarlo su dei dati che devono essere filtrati

• Le principali funzioni che si possono usare sono:• lfilter: filtra i dati su una dimensione applicando un filtro

FIR/IIR• filtfilt: applica un doppio filtro sui dati

9

Page 10: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

lfilter e filtfilt

10

output=signal.lfilter(b,a,x,axis=-1,zi=None)

b,a:vettoredeicoefficientidelnumeratore(denominatore) Datidiinput

Asselungoilqualeapplicareilfiltro

Condizioneinizialeperilritardodelfiltro

output=signal.filtfilt(b,a,x,axis=-1,padtype=‘odd’,padlen=None,method=‘pad’,irlen=None)

Datifiltrati

Datifiltrati

Page 11: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio di filtro sui dati

11

Page 12: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio di filtro sui dati

12

Page 13: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Analisi spettrale

• SciPy fornisce funzioni per calcolare la densità spettrale

• Ad esempio, si può usare il metodo del periodogramma o il metodo di Welch

13

f,Pxx=signal.periodogram(x,fs=1.0,window=None,nfft=None,detrend=‘constant’,return_onesided=True,scaling=‘density’,axis=-1)

f,Pxx=signal.welch(x,fs=1.0,window=‘hanning’,nperseg=256,noverlap=None,nfft=None,detrend=‘constant’,return_onesided=True,scaling=‘density’,axis=-1)

x =serietemporaledeivalorimisurati

fs =requenzadicampionamento

f =ArraydifrequenzecampionatePxx =densitàspettraledix

Page 14: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio con metodo del periodogramma

14

Plotinscalalogaritmica

Punticasualisecondounadistribuzionenormalescale=deviazionestandardsize=shapedioutput

Page 15: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio con metodo di Welch

15

Plotinscalalogaritmica

Punticasualisecondounadistribuzionenormalescale=deviazionestandardsize=shapedioutput

Page 16: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Altri filtri

• SciPy fornisce altri tipi di filtri che possono essere applicati ad immagini

• E’ possibile applicare filtri di covoluzione e correlazione:• Edge detection• Blur• …

16

Page 17: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio filtro su immagine

17

Ilmodulomiscforniscevariefunzionalitàcomeimmaginisucuiapplicarefiltri

ApplicaunaconvoluzioneaidueinputusandolatrasformatadiFourierveloce

Page 18: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Accesso a file con NumPy e SciPy

• Anche NumPy e SciPy forniscono funzioni per agire su filehttp://docs.scipy.org/doc/numpy/reference/routines.io.html

• Le funzioni:np.load(nomeFile, …)

np.save(nomeFile, array, …)

servono per caricare e salvare un array NumPy su file .npy, .npz

18

Page 19: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Accesso a file con NumPy e SciPy

• La funzione:np.savez(nomeFile, *args, **kwds)

permette di salvare più array NumPy sotto forma di un dizionario (file .npz)

• Le funzioni:np.loadtxt(nomeFile, …)

np.savetxt(nomeFile, array, …)

servono per caricare e salvare un array NumPy su file di testo

19

Page 20: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio accesso file con NumPy

20

Page 21: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esercizio 1

Dato il segnale ecg presente nel file ecg.txt, scrivere un programma Python che applica un filtro FIR sul segnale per eliminare i 50HzIl segnale ecg è stato campionato a 1KHzRappresentare sia un grafico della risposta in frequenza che del segnale prima e dopo il filtro

21

Page 22: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Soluzione 1

22

Page 23: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

MATERIALE AGGIUNTIVO SUI FILTRI

23

Page 24: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

firwin2

• La funzione firwin2 permette di definire risposte in frequenza arbitrarie specificando una lista di frequenze e i loro relativi guadagni

24

output=signal.firwin2(numtaps,freq,gain,nfreqs=None,window=‘hamming’,nyq=1.0,antisymmetric=False)

Lunghezzadelfiltro(numerodicoefficienti)

Listadifrequenzecampione

ListadiguadagniFinestradausare Seilrisultanteimpulsoèsimmetrico

oantisimmetrico

FrequenzadiNyquist

NdarrayIcoefficientidel

filtroFIR

Dimensionedellameshdiinterpolazione

Page 25: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio filtro FIR usando la funzione firwin2

25

Page 26: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Filtri IIR - iirfilter• SciPy fornisce due funzioni per I filtri IIR: iirdesign e iirfilter

• E’ possibile impostare il tipo di filtro da applicare

26

output=signal.iirfilter(N,Wn,rp=None,rs=None,btype=‘band’,analog=False,ftype=‘butter’,output=‘ba’)

Ordinedelfiltro

PerIfiltridiChebyshevoellittici,èl’oscillazione(ripple)massimanellabandapassante

PerIfiltridiChebyshevoellittici,èl’attenuazioneminima

nellabandaeliminata

TipodifiltroIIRdaprogettare:• Butterworth• ChebyshevI• ChebyshevII• Causer/elliptic• Bessel/Thomson

Tipodioutput:• Numeratore/denominatore(‘ba’)• Polo-zero(‘zpk’)• Sezionidisecondoordine(‘sos’)

Frequenzaangolare(perfiltrianalogici)Normalizzatatra0a1(perfiltridigitali)

Tipodifiltro:- bandpass- lowpass- highpass- bandstop

SeTrue,restituisceunfiltroanalogico,digitalealtrimenti

Page 27: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Filtri IIR - iirdesign

27

output=signal.iirdesign(wp,ws,gpass,gstop,analog=False,ftype=‘ellip’,output=‘ba’)

wp ews sono,rispettivamente,lefrequenzepassaedeliminabanda

gpass egstop sono,rispettivamente,laperditamassimainbandapassanteelaminimaattenuazioneineliminabanda

Stessiargomentiiirfilter

Page 28: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio filtro IIR digitale

28

Page 29: Analisi di segnali in SciPy - xph.necst.itxph.necst.it/2017/software/lessons/Lesson_3_PYNQ_part2.pdf · Frequenze di taglio float o lista (banda) Larghezza della regione di transizione

Esempio filtro IIR analogico

29

freqs calcolalarispostainfrequenzadiunfiltroanalogico