GNU Octave: esempi di Digital Signal Processing

21
GNU Octave: esempi di Digital Signal Processing Ing. Andrea Spadaccini [email protected] Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Universit` a di Catania 20 Maggio 2009

Transcript of GNU Octave: esempi di Digital Signal Processing

Page 1: GNU Octave: esempi di Digital Signal Processing

GNU Octave: esempi di Digital Signal Processing

Ing. Andrea [email protected]

Dipartimento di Ingegneria Informatica e delle TelecomunicazioniUniversita di Catania

20 Maggio 2009

Page 2: GNU Octave: esempi di Digital Signal Processing

Sommario

Elaborazioni nel dominio del tempo

Esempio di analisi in frequenza

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 3: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Parte I

Elaborazioni nel dominio del tempo

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 4: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

La funzione buffer

Suddivisione in trame

Spesso, per elaborare un segnale puo essere utile suddividerlo in trame,eventualmente sovrapponendo parte del segnale.In GNU Octave, questo si ottiene con la funzione buffer, presente nelpackage Signal Processing.

Sintassi di buffer

buffer(signal, frame-size, overlap)

signal il segnale da suddividere in trame

frame-size dimensione della trama

overlap numero di campioni della trama precedente da riportare (oda saltare, se negativo)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 5: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

buffer: Esempio

>> s = 1:20;>> b = buffer(s, 4)b =

1 5 9 13 172 6 10 14 183 7 11 15 194 8 12 16 20

>> b = buffer(s, 4, 1)b =

0 3 6 9 12 15 181 4 7 10 13 16 192 5 8 11 14 17 203 6 9 12 15 18 0

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 6: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

buffer: Esempio con overlap negativo

>> s = 1:20;>> b = buffer(s, 4, -1)b =

1 6 11 162 7 12 173 8 13 184 9 14 19

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 7: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Funzioni finestra

Scopo

Per evitare problemi come la perdita spettrale (spectral leakage) a voltesi ricorre all’applicazioni di finestre differenti dalla semplice finestrarettangolare.

Esempi di finestra

Entrambe le funzioni richiedono come parametro solo il numero di punti.

Hamming

Hann (o Hanning)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 8: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Plot delle due finestre

>> figure;>> subplot(311);>> plot(hamming(100));>> subplot(312);>> plot(hanning(100));>> subplot(313);>> plot(hamming(100) - hanning(100));

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 9: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Ricampionamento (resampling)

Scopo

L’idea alla base del ricampionamento (resampling) e quella di variare lafrequenza di campionamento di un segnale, generalmentesottocampionandolo per elaborazioni successive.

La funzione resample

Sintassi: y = resample(x, p, q)

x e il segnale da ricampionare

p e q costituiscono il numero p/q, ovvero il fattore da utilizzare pervariare la frequenza di campionamento.

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 10: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Esempio di ricampionamento

>> Fs = 100;>> Fo = 4;>> Ts = 1 / Fs;>> t = 0 : Ts : 1 - Ts;>> y = sin(2 * pi * Fo * t);>> plot(t, y)>> rs_y = resample(y, 1, 2);>> new_t = 0 : 2 * Ts : 1 - Ts>> figure>> subplot(211)>> plot(t, y)>> subplot(212)>> plot(new_t, rs_y);

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 11: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Cross-correlazione (I)

Un pizzico di teoria

Autocorrelazione di due segnali discreti x ed y al variare dell’intervallo(lag) k :

Rxy (k) =

1

N − k

N−k∑i=1

xiyi−k k ≥ 0

Ryx(−k) k ≤ 0

(1)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 12: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Cross-correlazione (II)

La funzione xcorr

La funzione xcorr consente di computare la cross-correlazione di duesegnali. Sintassi:[R, lag] = xcorr(X[, Y] [, maxlag] [, scale]).

X e il primo segnale

Y, se presente, e il secondo segnale

maxlag, se presente, imposta l’intervallo di variazione di lag a[−maxlag:maxlag] (altrimenti maxlag = max(length(X),length(Y)) - 1)

scale, se presente, definisce la tipologia di normalizzazione dellasomma. Utilizzare ’coeff’ per normalizzare con Rxy (0) (ovvero ilmassimo).

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 13: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Esempio: periodo di un segnale periodico (I)

Autocorrelazione e segnali periodici

Nel caso di segnali reali periodici (infiniti!), il lag del primo massimopositivo dell’autocorrelazione corrisponde al periodo del segnale.

Implementeremo qualcosa di simile, anche se non possiamo generaresegnali periodici.

>> T = 10; % periodo desiderato: 10 secondi>> Fs = 1000;>> Ts = 1 / Fs;>> t = 1 : Ts : 100 - Ts;>> y = sin(2 * pi * (1/T) * t);>> [R, lag] = xcorr(y);

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 14: GNU Octave: esempi di Digital Signal Processing

Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione

Esempio: periodo di un segnale periodico (II)

>> mid = ceil(length(R) / 2);>> [min_val, min_idx] = min(R(mid:end));>> [max_val, max_idx] = max(R(mid + min_idx:end));>> idx = mid + min_idx + max_idx;>> lag(idx) * Tsans = 9.9910

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 15: GNU Octave: esempi di Digital Signal Processing

FFT di una cosinusoide

Parte II

Esempio di analisi in frequenza

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 16: GNU Octave: esempi di Digital Signal Processing

FFT di una cosinusoide

Trasformata di Fourier di un coseno

Un pizzico di teoria (di nuovo?)

Trasformata di Fourier di un coseno:

F [cos(2πf0t)] =1

2δ(f + f0) +

1

2δ(f − f0)

FT, DFT, FFT

La normale Trasformata di Fourier (FT) si applica a segnali continui.

La DFT (Discrete Fourier Transform) e la FT per segnali discreti.

La FFT (Fast Fourier Transform) e un’implementazione (veloce!) diDFT. Variante piu utilizzata: FFTW (Fastest Fourier Transform inthe West).

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 17: GNU Octave: esempi di Digital Signal Processing

FFT di una cosinusoide

Primi passi

La funzione fft

Prende in input un vettore (o una matrice), e restituisce un vettorecontenente il risultato dell’esecuzione dell’algoritmo FFT.

>> Fs = 100;>> Ts = 1 / Fs;>> F0 = 4;>> t = 0 : Ts : 1 - Ts;>> y = sin(2*pi*F0*t);>> plot(t, y);>> Fy = fft(f);>> plot(abs(Fy)); % difficile da comprendere

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 18: GNU Octave: esempi di Digital Signal Processing

FFT di una cosinusoide

Il giusto ordine

La funzione fftswitch

Manipola il risultato di fft in modo da avvicinare le frequenze basse alcentro del vettore (in sostanza effettua il flipping delle due meta delrisultato di fft)

>> Fy = abs(fftswitch(Fy));>> plot(Fy)>> stem(Fy) % tipo di grafico piu indicativo

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 19: GNU Octave: esempi di Digital Signal Processing

FFT di una cosinusoide

Le giuste proporzioni

L’asse delle frequenze

Ciascun elemento del vettore FFT non rappresenta una frequenza, ma uninsieme (bin) di frequenze. Dobbiamo generare un asse delle frequenze infunzione della frequenza di campionamento.

>> n = length(Fy);>> f = -n/2 : n/2 - 1;>> f = f * (Fs / n);>> Fy = Fy / n; % normalizzazione valori FFT>> stem(f, Fy) % tipo di grafico piu indicativo>> xlabel(’Frequency bins (Hz)’)

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 20: GNU Octave: esempi di Digital Signal Processing

Riferimenti

Sito ufficiale di GNU Octave

http://www.octave.org

Documentazione

John W. Eaton et al. GNU Octave Manual -http://www.gnu.org/software/octave/doc/interpreter/http://en.wikipedia.org/wiki/Window functionhttp://blinkdagger.com/matlab/matlab-introductory-fft-tutorialhttp://fftw.org

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing

Page 21: GNU Octave: esempi di Digital Signal Processing

Licenza

Licenza Creative Commons

Questo lavoro e rilasciato sotto licenza Creative CommonsAttribution-Share Alike 2.5 Italy(http://creativecommons.org/licenses/by-sa/2.5/it/)

Significato della licenza

La presentazione e liberamente scaricabile e redistribuibile perqualsiasi fine

E necessario citare l’autore

E necessario redistribuire secondo gli stessi termini eventuali lavoriderivati da questa presentazione

Ing. Andrea Spadaccini DIIT - Universita degli Studi di Catania

GNU Octave: esempi di Digital Signal Processing