GNU Octave: esempi di Digital Signal Processing
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

GNU Octave: esempi di Digital Signal Processing

on

  • 4,883 views

 

Statistics

Views

Total Views
4,883
Views on SlideShare
4,852
Embed Views
31

Actions

Likes
0
Downloads
45
Comments
0

3 Embeds 31

http://www.slideshare.net 23
http://www.linkedin.com 7
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

GNU Octave: esempi di Digital Signal Processing Presentation Transcript

  • 1. GNU Octave: esempi di Digital Signal Processing Ing. Andrea Spadaccini a.spadaccini@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Universit` di Catania a 20 Maggio 2009
  • 2. Sommario Elaborazioni nel dominio del tempo Esempio di analisi in frequenza Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 3. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione Parte I Elaborazioni nel dominio del tempo Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 4. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione La funzione buffer Suddivisione in trame Spesso, per elaborare un segnale pu` essere utile suddividerlo in trame, o eventualmente sovrapponendo parte del segnale. In GNU Octave, questo si ottiene con la funzione buffer, presente nel package 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 (o da saltare, se negativo) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 5. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione buffer: Esempio >> s = 1:20; >> b = buffer(s, 4) b = 1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20 >> b = buffer(s, 4, 1) b = 0 3 6 9 12 15 18 1 4 7 10 13 16 19 2 5 8 11 14 17 20 3 6 9 12 15 18 0 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 6. 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 16 2 7 12 17 3 8 13 18 4 9 14 19 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 7. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione Funzioni finestra Scopo Per evitare problemi come la perdita spettrale (spectral leakage) a volte si ricorre all’applicazioni di finestre differenti dalla semplice finestra rettangolare. Esempi di finestra Entrambe le funzioni richiedono come parametro solo il numero di punti. Hamming Hann (o Hanning) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 8. 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 - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 9. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione Ricampionamento (resampling) Scopo L’idea alla base del ricampionamento (resampling) ` quella di variare la e frequenza di campionamento di un segnale, generalmente sottocampionandolo per elaborazioni successive. La funzione resample Sintassi: y = resample(x, p, q) x ` il segnale da ricampionare e p e q costituiscono il numero p/q, ovvero il fattore da utilizzare per variare la frequenza di campionamento. Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 10. 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 - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 11. 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: N−k   1   xi yi−k k ≥ 0 Rxy (k) = N −k (1) i=1    Ryx (−k) k ≤0 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 12. Suddivisione in trame Funzioni finestra Ricampionamento Cross-correlazione Cross-correlazione (II) La funzione xcorr La funzione xcorr consente di computare la cross-correlazione di due segnali. Sintassi: [R, lag] = xcorr(X[, Y] [, maxlag] [, scale]). X ` il primo segnale e Y, se presente, ` il secondo segnale e 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 della somma. Utilizzare ’coeff’ per normalizzare con Rxy (0) (ovvero il massimo). Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 13. 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 massimo positivo dell’autocorrelazione corrisponde al periodo del segnale. Implementeremo qualcosa di simile, anche se non possiamo generare segnali 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 - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 14. 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) * Ts ans = 9.9910 Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 15. FFT di una cosinusoide Parte II Esempio di analisi in frequenza Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 16. FFT di una cosinusoide Trasformata di Fourier di un coseno Un pizzico di teoria (di nuovo?) Trasformata di Fourier di un coseno: 1 1 F [cos(2πf0 t)] = δ(f + f0 ) + δ(f − f0 ) 2 2 FT, DFT, FFT La normale Trasformata di Fourier (FT) si applica a segnali continui. La DFT (Discrete Fourier Transform) ` la FT per segnali discreti. e La FFT (Fast Fourier Transform) ` un’implementazione (veloce!) di e DFT. Variante pi` utilizzata: FFTW (Fastest Fourier Transform in u the West). Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 17. FFT di una cosinusoide Primi passi La funzione fft Prende in input un vettore (o una matrice), e restituisce un vettore contenente 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 - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 18. FFT di una cosinusoide Il giusto ordine La funzione fftswitch Manipola il risultato di fft in modo da avvicinare le frequenze basse al centro del vettore (in sostanza effettua il flipping delle due met` del a risultato di fft) >> Fy = abs(fftswitch(Fy)); >> plot(Fy) >> stem(Fy) % tipo di grafico pi` indicativo u Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 19. FFT di una cosinusoide Le giuste proporzioni L’asse delle frequenze Ciascun elemento del vettore FFT non rappresenta una frequenza, ma un insieme (bin) di frequenze. Dobbiamo generare un asse delle frequenze in funzione 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 pi` indicativo u >> xlabel(’Frequency bins (Hz)’) Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 20. 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 function http://blinkdagger.com/matlab/matlab-introductory-fft-tutorial http://fftw.org Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing
  • 21. Licenza Licenza Creative Commons Questo lavoro ` rilasciato sotto licenza Creative Commons e Attribution-Share Alike 2.5 Italy (http://creativecommons.org/licenses/by-sa/2.5/it/) Significato della licenza La presentazione ` liberamente scaricabile e redistribuibile per e qualsiasi fine ` E necessario citare l’autore ` E necessario redistribuire secondo gli stessi termini eventuali lavori derivati da questa presentazione Ing. Andrea Spadaccini DIIT - Universit` degli Studi di Catania a GNU Octave: esempi di Digital Signal Processing