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

What's hot

Application Centric Infrastructure (ACI), the policy driven data centre
Application Centric Infrastructure (ACI), the policy driven data centreApplication Centric Infrastructure (ACI), the policy driven data centre
Application Centric Infrastructure (ACI), the policy driven data centreCisco Canada
 
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)Channy Yun
 
An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)Brian Brazil
 
AManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformAManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformByungjin Park
 
Agile 5G Deployment
Agile 5G DeploymentAgile 5G Deployment
Agile 5G DeploymentEricsson
 
How To Monetise & Bill CloudStack - A Practical Open Approach
How To Monetise & Bill CloudStack - A Practical Open ApproachHow To Monetise & Bill CloudStack - A Practical Open Approach
How To Monetise & Bill CloudStack - A Practical Open ApproachShapeBlue
 
Intelligent IoT gateway on openwrt
Intelligent IoT gateway on openwrtIntelligent IoT gateway on openwrt
Intelligent IoT gateway on openwrtMateusz Babiarz
 
Learned from KIND
Learned from KIND Learned from KIND
Learned from KIND HungWei Chiu
 
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin Wang
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin WangPLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin Wang
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin WangPROIDEA
 
Beginners: Multi-SIM Operation
Beginners: Multi-SIM OperationBeginners: Multi-SIM Operation
Beginners: Multi-SIM Operation3G4G
 
Open Connect Appliances - Jocelyn Ooi
Open Connect Appliances - Jocelyn OoiOpen Connect Appliances - Jocelyn Ooi
Open Connect Appliances - Jocelyn OoiMyNOG
 
Exploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesExploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesRed Hat Developers
 
Presentation riverbed steelhead appliance main 2010
Presentation   riverbed steelhead appliance main 2010Presentation   riverbed steelhead appliance main 2010
Presentation riverbed steelhead appliance main 2010chanwitcs
 
Intro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingIntro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingPacket
 
Introduction to BRAS
Introduction to BRASIntroduction to BRAS
Introduction to BRASKHNOG
 
Building resilient applications
Building resilient applicationsBuilding resilient applications
Building resilient applicationsNuno Caneco
 

What's hot (20)

Application Centric Infrastructure (ACI), the policy driven data centre
Application Centric Infrastructure (ACI), the policy driven data centreApplication Centric Infrastructure (ACI), the policy driven data centre
Application Centric Infrastructure (ACI), the policy driven data centre
 
VPNaaS in Neutron
VPNaaS in NeutronVPNaaS in Neutron
VPNaaS in Neutron
 
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)
KubeMonkey를 통한 Chaos Engineering 실전 운영하기 - 윤석찬 (AWS 테크에반젤리스트)
 
An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)An Introduction to Prometheus (GrafanaCon 2016)
An Introduction to Prometheus (GrafanaCon 2016)
 
AManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformAManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with Terraform
 
Agile 5G Deployment
Agile 5G DeploymentAgile 5G Deployment
Agile 5G Deployment
 
How To Monetise & Bill CloudStack - A Practical Open Approach
How To Monetise & Bill CloudStack - A Practical Open ApproachHow To Monetise & Bill CloudStack - A Practical Open Approach
How To Monetise & Bill CloudStack - A Practical Open Approach
 
Kong API Gateway.pdf
Kong API Gateway.pdfKong API Gateway.pdf
Kong API Gateway.pdf
 
Intelligent IoT gateway on openwrt
Intelligent IoT gateway on openwrtIntelligent IoT gateway on openwrt
Intelligent IoT gateway on openwrt
 
Learned from KIND
Learned from KIND Learned from KIND
Learned from KIND
 
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin Wang
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin WangPLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin Wang
PLNOG16: IP/MPLS for Fixed and Mobile Convergence, Kevin Wang
 
Beginners: Multi-SIM Operation
Beginners: Multi-SIM OperationBeginners: Multi-SIM Operation
Beginners: Multi-SIM Operation
 
Sip architecture
Sip architectureSip architecture
Sip architecture
 
Open Connect Appliances - Jocelyn Ooi
Open Connect Appliances - Jocelyn OoiOpen Connect Appliances - Jocelyn Ooi
Open Connect Appliances - Jocelyn Ooi
 
Exploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesExploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on Kubernetes
 
Presentation riverbed steelhead appliance main 2010
Presentation   riverbed steelhead appliance main 2010Presentation   riverbed steelhead appliance main 2010
Presentation riverbed steelhead appliance main 2010
 
Intro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingIntro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networking
 
Introduction to BRAS
Introduction to BRASIntroduction to BRAS
Introduction to BRAS
 
Building resilient applications
Building resilient applicationsBuilding resilient applications
Building resilient applications
 
Kong API
Kong APIKong API
Kong API
 

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 (14)

Introduzione a GNU Octave
Introduzione a GNU OctaveIntroduzione a GNU Octave
Introduzione a GNU Octave
 
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