Contenuto principale

Filtraggio dei dati

Equazione alle differenze del filtro

I filtri sono tecniche di elaborazione dei dati che consentono di uniformare le fluttuazioni ad alta frequenza nei dati o di rimuovere le tendenze periodiche di una frequenza specifica dai dati. In MATLAB®, la funzione filter filtra un vettore di dati x secondo la seguente equazione alle differenze, che descrive un filtro a linea di ritardo con prese intermedie.

a(1)y(n)=b(1)x(n)+b(2)x(n1)++b(Nb)x(nNb+1)                 a(2)y(n1)a(Na)y(nNa+1)

In questa equazione, a e b sono vettori dei coefficienti del filtro, Na è l'ordine del filtro di feedback e Nb è l'ordine del filtro di feed-forward. n è l'indice dell'elemento attuale di x. L'output y(n) è una combinazione lineare degli elementi attuali e precedenti di x e y.

La funzione filter utilizza i vettori dei coefficienti specificati a e b per filtrare i dati di input x. Per maggiori informazioni sulle equazioni alle differenze che descrivono i filtri, vedere [1].

Filtro a media mobile dei dati sul traffico

La funzione filter è un modo per implementare un filtro a media mobile, che è una tecnica comune di uniformizzazione dei dati.

La seguente equazione alle differenze descrive un filtro che calcola la media dei dati dipendenti dal tempo rispetto all'ora attuale e alle tre ore precedenti.

y(n)=14x(n)+14x(n-1)+14x(n-2)+14x(n-3)

Importare i dati che descrivono il flusso di traffico nel tempo e assegnare la prima colonna dei conteggi dei veicoli al vettore x.

load count.dat
x = count(:,1);

Creare i vettori dei coefficienti del filtro.

a = 1;
b = [1/4 1/4 1/4 1/4];

Calcolare la media mobile a 4 ore dei dati e tracciare sia i dati originali che quelli filtrati.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Filtered Data.

Modifica dell'ampiezza dei dati

Questo esempio mostra come modificare l'ampiezza di un vettore di dati applicando una funzione di trasferimento.

Nell'elaborazione di segnali digitali, i filtri sono spesso rappresentati da una funzione di trasferimento. La trasformata Z dell'equazione alle differenze

a(1)y(n)=b(1)x(n)+b(2)x(n-1)+...+b(Nb)x(n-Nb+1)-a(2)y(n-1)-...-a(Na)y(n-Na+1)

è la seguente funzione di trasferimento.

Y(z)=H(z-1)X(z)=b(1)+b(2)z-1+...+b(Nb)z-Nb+1a(1)+a(2)z-1+...+a(Na)z-Na+1X(z)

Utilizzare la funzione di trasferimento

H(z-1)=b(z-1)a(z-1)=2+3z-11+0.2z-1

per modificare l'ampiezza dei dati in count.dat.

Caricare i dati e assegnare la prima colonna al vettore x.

load count.dat
x = count(:,1);

Creare i vettori dei coefficienti del filtro in base alla funzione di trasferimento H(z-1).

a = [1 0.2];
b = [2 3];

Calcolare i dati filtrati e tracciare sia i dati originali che quelli filtrati. Questo filtro modifica principalmente l'ampiezza dei dati originali.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Filtered Data.

Riferimenti

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999.

Vedi anche

| | | |

Argomenti