SlideShare a Scribd company logo
1 of 21
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

More Related Content

Similar to GNU Octave: esempi di Digital Signal Processing

Localizzazione e Mappatura con telecamera robotica PTZ
Localizzazione e Mappatura con telecamera robotica PTZLocalizzazione e Mappatura con telecamera robotica PTZ
Localizzazione e Mappatura con telecamera robotica PTZlizardking
 
Metodi matematici per l’analisi di sistemi complessi
Metodi matematici per l’analisi di sistemi complessiMetodi matematici per l’analisi di sistemi complessi
Metodi matematici per l’analisi di sistemi complessiLino Possamai
 
Principi di crittografia
Principi di crittografiaPrincipi di crittografia
Principi di crittografiapeppespe
 
Presentazione Dottorato 2006 07
Presentazione Dottorato 2006 07Presentazione Dottorato 2006 07
Presentazione Dottorato 2006 07raffafratta
 
Sistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneSistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneDavide Ciambelli
 
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...Andrea Bidinost
 
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di Analisi
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di AnalisiAlgoritmi e Calcolo Parallelo 2012/2013 - Tecniche di Analisi
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di AnalisiPier Luca Lanzi
 

Similar to GNU Octave: esempi di Digital Signal Processing (13)

Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Localizzazione e Mappatura con telecamera robotica PTZ
Localizzazione e Mappatura con telecamera robotica PTZLocalizzazione e Mappatura con telecamera robotica PTZ
Localizzazione e Mappatura con telecamera robotica PTZ
 
Reti Logic
Reti LogicReti Logic
Reti Logic
 
Metodi matematici per l’analisi di sistemi complessi
Metodi matematici per l’analisi di sistemi complessiMetodi matematici per l’analisi di sistemi complessi
Metodi matematici per l’analisi di sistemi complessi
 
Principi di crittografia
Principi di crittografiaPrincipi di crittografia
Principi di crittografia
 
Presentazione Dottorato 2006 07
Presentazione Dottorato 2006 07Presentazione Dottorato 2006 07
Presentazione Dottorato 2006 07
 
Test 03a 08.05.2015
Test 03a   08.05.2015Test 03a   08.05.2015
Test 03a 08.05.2015
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
Sistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazioneSistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazione
 
Test 03b 26.05.2015
Test 03b   26.05.2015Test 03b   26.05.2015
Test 03b 26.05.2015
 
Presentazione Tesi
Presentazione TesiPresentazione Tesi
Presentazione Tesi
 
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...
Presentazione Sviluppo e confronto di tecniche di stima della traiettoria di ...
 
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di Analisi
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di AnalisiAlgoritmi e Calcolo Parallelo 2012/2013 - Tecniche di Analisi
Algoritmi e Calcolo Parallelo 2012/2013 - Tecniche di Analisi
 

GNU Octave: esempi di Digital Signal Processing

  • 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