Loading AI tools
Da Wikipedia, l'enciclopedia libera
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 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.
Terminologia:
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].
Nota:
Nota:
Nota:
Nota:
Le finestre di Blackman sono definite come:[5]
Nota:
dove per esempio .
Nota:
(flat top)
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);
}
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.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.