Funzione finestra

Nell'elaborazione numerica dei segnali una funzione finestra (anche conosciuta come rete di pesatura o funzione di tapering[1]) è una funzione che vale zero al di fuori di un certo intervallo. Per esempio, una funzione che è costante all'interno dell'intervallo è chiamata finestra rettangolare. Quando un'altra funzione è moltiplicata per una funzione finestra, anche il prodotto assume valori nulli al di fuori dell'intervallo: tutto ciò che resta è la "vista" attraverso la finestra.

Una definizione più generale di funzione finestra non richiede l'annullarsi al di fuori di un intervallo, ma che il prodotto per la funzione di finestratura sia una funzione a quadrato sommabile, ovvero che la funzione finestra si annulli in maniera sufficientemente rapida[2].

Applicazioni

Applicazioni delle funzioni finestra includono l'analisi spettrale, la progettazione di filtri digitali ed il beamforming. Nelle applicazioni tipiche, le finestre utilizzate sono curve non negative con decadimento "a campana"[3] oltre alle funzioni rettangolari e triangolari.

Finestre di comune impiego

Terminologia:

  • N {\displaystyle N} rappresenta l'ampiezza, in numero di campioni, di una finestra tempo-discreto. Tipicamente è un intero potenza di 2, come 2 10 = 1024 {\displaystyle 2^{10}=1024} .
  • n {\displaystyle n} è un numero intero, che assume valori 0 n N 1 {\displaystyle 0\leq \;n\leq \;N-1} . Perciò queste sono versioni traslate delle finestre:   w ( n ) = w 0 ( n N 1 2 ) {\displaystyle w(n)=w_{0}(n-{\begin{matrix}{\frac {N-1}{2}}\end{matrix}})} , in cui w ( n ) {\displaystyle w(n)} è massimo per n = 0 {\displaystyle n=0} .

Finestra rettangolare

Finestra rettangolare; B=1.00
w ( n ) = 1 {\displaystyle w(n)=1}

Finestra di Hamming

Finestra di Hamming; B=1.37

Il coseno rialzato con questi particolari coefficienti fu proposto da Richard W. Hamming. L'altezza del lobo laterale massimo è circa un quinto rispetto alla finestra di Hann, un coseno rialzato con coefficienti più semplici[4].

w ( n ) = 0.54 0.46 cos ( 2 π n N 1 ) {\displaystyle w(n)=0.54-0.46\;\cos \left({\frac {2\pi n}{N-1}}\right)} [5]

Nota:

  • w 0 ( n )   = d e f   w ( n + N 1 2 ) = 0.54 + 0.46 cos ( 2 π n N 1 ) {\displaystyle {\begin{aligned}w_{0}(n)\ &{\stackrel {\mathrm {def} }{=}}\ w(n+{\begin{matrix}{\frac {N-1}{2}}\end{matrix}})\\&=0.54+0.46\;\cos \left({\frac {2\pi n}{N-1}}\right)\end{aligned}}}

Finestra di Hann

Finestra di Hann; B = 1.50
w ( n ) = 0.5 ( 1 cos ( 2 π n N 1 ) ) {\displaystyle w(n)=0.5\;\left(1-\cos \left({\frac {2\pi n}{N-1}}\right)\right)} [5]

Nota:

  • w 0 ( n ) = 0.5 ( 1 + cos ( 2 π n N 1 ) ) {\displaystyle w_{0}(n)=0.5\;\left(1+\cos \left({\frac {2\pi n}{N-1}}\right)\right)}
  • Le finestre di Hann e di Hamming, entrambe della famiglia nota come finestre a "coseno rialzato", prendono il proprio nome rispettivamente da Julius von Hann e Richard Hamming. Il termine "Finestra di Hanning" è a volte utilizzato in riferimento alla finestra di Hann.

Finestra coseno

Finestra coseno; B=1.24
w ( n ) = cos ( π n N 1 π 2 ) = sin ( π n N 1 ) {\displaystyle w(n)=\cos \left({\frac {\pi n}{N-1}}-{\frac {\pi }{2}}\right)=\sin \left({\frac {\pi n}{N-1}}\right)} [5]

Nota:

  • anche nota come finestra seno

Finestra di Lanczos

Finestra di Lanczos; B=1.31
w ( n ) = s i n c ( 2 n N 1 1 ) {\displaystyle w(n)=\mathrm {sinc} \left({\frac {2n}{N-1}}-1\right)}

Nota:

  • sinc(x) è definito come sin(πx)/(πx)
  • anche nota come finestra sinc, poiché:
w 0 ( n ) = s i n c ( 2 n N 1 ) {\displaystyle w_{0}(n)=\mathrm {sinc} \left({\frac {2n}{N-1}}\right)} è il lobo principale di una funzione sinc normalizzata

Finestra di Bartlett (nulla agli estremi)

Finestra di Bartlett; B=1.33
w ( n ) = 2 N 1 ( N 1 2 | n N 1 2 | ) {\displaystyle w(n)={\frac {2}{N-1}}\cdot \left({\frac {N-1}{2}}-\left|n-{\frac {N-1}{2}}\right|\right)}

Finestra triangolare (non nulla agli estremi)

Finestra triangolare; B=1.33
w ( n ) = 2 N ( N 2 | n N 1 2 | ) {\displaystyle w(n)={\frac {2}{N}}\cdot \left({\frac {N}{2}}-\left|n-{\frac {N-1}{2}}\right|\right)}

Finestra di Gauss

Finestra di Gauss, σ=0.4; B=1.45
w ( n ) = e 1 2 ( n ( N 1 ) / 2 σ ( N 1 ) / 2 ) 2 {\displaystyle w(n)=e^{-{\frac {1}{2}}\left({\frac {n-(N-1)/2}{\sigma (N-1)/2}}\right)^{2}}}
σ 0.5 {\displaystyle \sigma \leq \;0.5}

Finestra di Bartlett-Hann

Finestra di Bartlett-Hann; B=1.46
w ( n ) = a 0 a 1 | n N 1 1 2 | a 2 cos ( 2 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\left|{\frac {n}{N-1}}-{\frac {1}{2}}\right|-a_{2}\cos \left({\frac {2\pi n}{N-1}}\right)}
a 0 = 0.62 ; a 1 = 0.48 ; a 2 = 0.38 {\displaystyle a_{0}=0.62;\quad a_{1}=0.48;\quad a_{2}=0.38}

Finestre di Blackman

Finestra di Blackman; α = 0.16; B=1.73

Le finestre di Blackman sono definite come:[5]

w ( n ) = a 0 a 1 cos ( 2 π n N 1 ) + a 2 cos ( 4 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\cos \left({\frac {2\pi n}{N-1}}\right)+a_{2}\cos \left({\frac {4\pi n}{N-1}}\right)}
a 0 = 1 α 2 ; a 1 = 1 2 ; a 2 = α 2 {\displaystyle a_{0}={\frac {1-\alpha }{2}};\quad a_{1}={\frac {1}{2}};\quad a_{2}={\frac {\alpha }{2}}}

Nota:

  • Per una convenzione comune, il termine finestra di Blackman si riferisce al caso α=0.16.

Finestre di Kaiser

Finestra di Kaiser, α =2; B=1.5
Finestra di Kaiser, α =3; B=1.8
w ( n ) = I 0 ( π α 1 ( 2 n N 1 1 ) 2 ) I 0 ( π α ) {\displaystyle w(n)={\frac {I_{0}{\Bigg (}\pi \alpha {\sqrt {1-({\begin{matrix}{\frac {2n}{N-1}}\end{matrix}}-1)^{2}}}{\Bigg )}}{I_{0}(\pi \alpha )}}}

dove per esempio α = 3 {\displaystyle \alpha =3} .

Nota:

  • w 0 ( n ) = I 0 ( π α 1 ( 2 n N 1 ) 2 ) I 0 ( π α ) {\displaystyle w_{0}(n)={\frac {I_{0}{\Bigg (}\pi \alpha {\sqrt {1-({\begin{matrix}{\frac {2n}{N-1}}\end{matrix}})^{2}}}{\Bigg )}}{I_{0}(\pi \alpha )}}}

Finestra di Nuttall con derivata prima continua

Finestra di Nuttall, derivata prima continua; B=2.02
w ( n ) = a 0 a 1 cos ( 2 π n N 1 ) + a 2 cos ( 4 π n N 1 ) a 3 cos ( 6 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\cos \left({\frac {2\pi n}{N-1}}\right)+a_{2}\cos \left({\frac {4\pi n}{N-1}}\right)-a_{3}\cos \left({\frac {6\pi n}{N-1}}\right)} [5]
a 0 = 0.355768 ; a 1 = 0.487396 ; a 2 = 0.144232 ; a 3 = 0.012604 {\displaystyle a_{0}=0.355768;\quad a_{1}=0.487396;\quad a_{2}=0.144232;\quad a_{3}=0.012604}

Finestra di Blackman-Harris

Finestra di Blackman-Harris; B=2.01
w ( n ) = a 0 a 1 cos ( 2 π n N 1 ) + a 2 cos ( 4 π n N 1 ) a 3 cos ( 6 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\cos \left({\frac {2\pi n}{N-1}}\right)+a_{2}\cos \left({\frac {4\pi n}{N-1}}\right)-a_{3}\cos \left({\frac {6\pi n}{N-1}}\right)} [5]
a 0 = 0.35875 ; a 1 = 0.48829 ; a 2 = 0.14128 ; a 3 = 0.01168 {\displaystyle a_{0}=0.35875;\quad a_{1}=0.48829;\quad a_{2}=0.14128;\quad a_{3}=0.01168}

Finestra di Blackman–Nuttall

Finestra di Blackman-Nuttall; B=1.98
w ( n ) = a 0 a 1 cos ( 2 π n N 1 ) + a 2 cos ( 4 π n N 1 ) a 3 cos ( 6 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\cos \left({\frac {2\pi n}{N-1}}\right)+a_{2}\cos \left({\frac {4\pi n}{N-1}}\right)-a_{3}\cos \left({\frac {6\pi n}{N-1}}\right)} [5]
a 0 = 0.3635819 ; a 1 = 0.4891775 ; a 2 = 0.1365995 ; a 3 = 0.0106411 {\displaystyle a_{0}=0.3635819;\quad a_{1}=0.4891775;\quad a_{2}=0.1365995;\quad a_{3}=0.0106411}

Finestra massimamente piatta

Finestra massimamente piatta; B=3.77

(flat top)

w ( n ) = a 0 a 1 cos ( 2 π n N 1 ) + a 2 cos ( 4 π n N 1 ) a 3 cos ( 6 π n N 1 ) + a 4 cos ( 8 π n N 1 ) {\displaystyle w(n)=a_{0}-a_{1}\cos \left({\frac {2\pi n}{N-1}}\right)+a_{2}\cos \left({\frac {4\pi n}{N-1}}\right)-a_{3}\cos \left({\frac {6\pi n}{N-1}}\right)+a_{4}\cos \left({\frac {8\pi n}{N-1}}\right)} [5]
a 0 = 1 ; a 1 = 1.93 ; a 2 = 1.29 ; a 3 = 0.388 ; a 4 = 0.032 {\displaystyle a_{0}=1;\quad a_{1}=1.93;\quad a_{2}=1.29;\quad a_{3}=0.388;\quad a_{4}=0.032}

Finestra di Bessel

Sezione vuotaQuesta sezione sull'argomento ingegneria è ancora vuota. Aiutaci a scriverla!

Finestre di Dolph-Chebyshev

La finestra di Dolph-Chebyshev permette di ottenere lobi laterali, nel dominio trasformato, equilivello. Il seguente codice C++ permette di produrre la sequenza temporale di campioni di una finestra di Dolph-Chebyshev lunga No_points e con un livello finale di lobi pari a sl_level. Per la compilazione bisogna usare alcuni header della libreria matematica GNU\GSL, scaricabile con licenza GNU dal sito https://www.gnu.org/software/gsl/ .

CODICE C++

#include <gsl/gsl_math.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_complex_math.h>

gsl_vector* chebwin (int No_points, double sl_level){

  int N = No_points - 1;
  double alfa = sl_level / 20.0;
  double beta = cosh(1/(double)N * gsl_acosh(pow(10.0,alfa)));
  double den = cosh(N * gsl_acosh(beta));
  gsl_vector *fft_array = gsl_vector_alloc(No_points);

  gsl_vector *A = gsl_vector_alloc(N);
  for (int k=0;k<N;k++)
    gsl_vector_set(A, k, beta * cos(M_PI*k/(double)N));	

  gsl_vector_complex *W = gsl_vector_complex_alloc(N);
  for (int k=0;k<N;k++){
    double x = gsl_vector_get(A, k);	
    gsl_complex z = gsl_complex_arccos_real(x);
    z = gsl_complex_mul_real(z,N);
    z = gsl_complex_cos(z);
    gsl_vector_complex_set(W, k, gsl_complex_mul_real(z,pow(-1.0,(double)k)));
  }

  gsl_complex z = gsl_complex_rect(1/den,0);
  gsl_vector_complex_scale(W,z);

  gsl_vector *w = gsl_vector_alloc(N);
  for (int n=0;n<N;n++){
    gsl_complex sum = gsl_complex_rect(0,0);
    for (int k=0;k<N;k++)
      sum = gsl_complex_add(sum, gsl_complex_mul_real(gsl_complex_rect(cos(2*M_PI*k*n/N), sin(2*M_PI*k*n/N)), GSL_REAL(gsl_vector_complex_get(W,k))));
    gsl_vector_set(w,n,GSL_REAL(sum));
  }
  gsl_vector_scale(w,1/(double)N);

  gsl_vector_set(w,0,gsl_vector_get(w,0)/2.0);

  for (int n=0;n<N;n++)
    gsl_vector_set(fft_array,n,gsl_vector_get(w,n));

  gsl_vector_set(fft_array,No_points-1,gsl_vector_get(w,0));
  gsl_vector_scale(fft_array,1/gsl_vector_max(fft_array));

  // debug ////////
  //FILE * f;
  //fopen_s(&f,"C:\\test_fft.txt", "w");
  //gsl_vector_fprintf (f, fft_array, "%f");
  //fclose(f);
  /////////

  return (fft_array);
}

Finestre di Taylor

Sezione vuotaQuesta sezione sull'argomento ingegneria è ancora vuota. Aiutaci a scriverla!

Comparazione tra diverse finestre

Attenuazione in banda tra le diverse finestre

Al momento di scegliere un'appropriata funzione finestre, questo grafico di comparazione può risultare utile. Il grafico mostra solamente il dettaglio del lobo principale della risposta in frequenza della finestra. L'asse delle frequenze ha come unità i "bins" della FFT quando la finestra di lunghezza N è applicata ai dati ed una trasformazione di lunghezza N è effettuata.

Possono essere usate altre metriche, come la larghezza del lobo principale ed il livello massimo dei lobi laterali, che determinano rispettivamente la possibilità di risolvere segnali di intensità comparabile a frequenza vicine e segnali di intensità differenti a frequenza più distanti. Ad esempio la finestra rettangolare è la scelta migliore per la larghezza del lobo principale e la scelta peggiore per il livello dei lobi laterali.

Ciò che non può esser visto dal grafico è che la finestra rettangolare ha la migliore banda di rumore e risulta la scelta migliore per rivelare una sinusoide con basso SNR.

Note

  1. ^ Eric W. Weisstein, CRC Concise Encyclopedia of Mathematics, CRC Press, 2003, ISBN 1-58488-347-2.
  2. ^ Carlo Cattani and Jeremiah Rushchitsky, Wavelet and Wave Analysis As Applied to Materials With Micro Or Nanostructure, World Scientific, 2007, ISBN 981-270-784-0.
  3. ^ Curtis Roads, Microsound, MIT Press, 2002, ISBN 0-262-18215-7.
  4. ^ Loren D. Enochson and Robert K. Otnes, Programming and Analysis for Digital Time Series Data, U.S. Dept. of Defense, Shock and Vibration Info. Center, 1968, p. 142.
  5. ^ a b c d e f g h Finestre di forma:
    w ( n ) = k = 0 K a k cos ( 2 π k n N 1 ) {\displaystyle w(n)=\sum _{k=0}^{K}a_{k}\cos \left({\frac {2\pi kn}{N-1}}\right)}
    hanno solamente 2K+1 coefficienti della DFT non nulli, il che li rende una buona scelta per applicazioni che richiedono la finestratura attraverso convoluzione nel dominio del tempo. In queste applicazioni, la DFT del vettore dei dati non finestrato è richiesta per applicazioni differenti rispetto all'analisi spettrale
  6. ^ Milton Abramowitz e Irene Stegun Handbook of Mathematical Functions (Dover, New York, 1964) (capitoli 9, 10,11)

Bibliografia

  • Fredric j. Harris, "On the use of Windows for Harmonic Analysis with the Discrete Fourier Transform", in Proceedings of the IEEE, vol. 66, n. 1, gennaio 1978, pp. 51–83. Articolo sulle finestre per FFT che introduce la maggior parte delle metriche per la valutazione delle diverse finetrse.
  • Albert H. Nuttall, Some Windows with Very Good Sidelobe Behavior, in IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 29, n. 1, febbraio 1981, pp. 84–91. Estensione dell'articolo di Harris.
  • Oppenheim, Alan V.; Schafer, Ronald W.; Buck, John A., Discrete-time signal processing, Upper Saddle River, N.J., Prentice Hall, 1999, pp. 468–471, ISBN 0-13-754920-2.
  • S.W.A. Bergen, A. Antoniou, Design of Ultraspherical Window Functions with Prescribed Spectral Characteristics, in EURASIP Journal on Applied Signal Processing, vol. 2004, n. 13, 2004, pp. 2053–2065, DOI:10.1155/S1110865704403114.
  • S.W.A. Bergen, A. Antoniou, Design of Nonrecursive Digital Filters Using the Ultraspherical Window Function, in EURASIP Journal on Applied Signal Processing, vol. 2005, n. 12, 2005, pp. 1910–1922, DOI:10.1155/ASP.2005.1910.

Voci correlate

Altri progetti

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file su Funzione finestra

Collegamenti esterni

  • LabView Help, Characteristics of Smoothing Filters, http://zone.ni.com/reference/en-XX/help/371361B-01/lvanlsconcepts/char_smoothing_windows/
  • Valutazione di diverse funzioni finestra utilizzando Multi-Instrument, http://www.multi-instrument.com/doc/D1003/Evaluation_of_Various_Window_Functions_using_Multi-Instrument_D1003.pdf
  Portale Ingegneria: accedi alle voci di Wikipedia che trattano di ingegneria