• Non ci sono risultati.

4.3 Curvatura del Tubo

4.3.3 Filtro FIR digitale di tipo passa-basso

Prima di procedere con la progettazione del filtro abbiamo calcolato la Tra- sformata di Fourier Discreta (DFT) della sequenza dei dati corrispondenti

1Sommando il valore Y

n con il segnale Y (2)

n in maniera opportuna si ottiene il metodo

Figura 4.7: Segnale filtrato con media doppia esponenziale

alla posizione del centro del tubo. La DFT di un segnale `e una quantit`a complessa di cui ci interessa il modulo, ovvero lo spettro di ampiezza2. La

DFT Y[k] di una sequenza discreta y[n] viene calcolata tramite l’algoritmo FFT (Fast Fourier Transform). Per rendere l’algoritmo ottimo, il numero di campioni da trasformare dovrebbe essere una potenza di 2, ovvero n = 2υ,

se questo non dovesse essere vero, si pu`o troncare la sequenza y[n], o allun- garla aggiungendo degli 0 in coda, in modo che la sua lunghezza diventi una potenza di 2. Senza scendere ulteriormente nei dettagli dell’algoritmo FFT, indichiamo i passi da eseguire per il calcolo dello spettro di ampiezza di una sequenza di dati, utilizzando Matlab:

2Utilizziamo questa terminologia per comodit`a espositiva, anche se, pi`u precisamente,

la nozione di spettro di ampiezza si applica ai segnali deterministici, mentre per i segnali casuali si adotta un approccio statistico, che porta alla nozione di spettro di potenza del processo casuale (infinitamente persistente e di energia infinita) sotteso alla generazione dei dati stessi. Per un processo casuale non `e definito alcuno spettro di ampiezza, perch´e la DFT non esiste; esiste invece la DFT della sequenza di autocovarianza del processo, cio`e, appunto, lo spettro di potenza.

1. riduzione dei dati y[n] a media nulla sottraendo da essi il valore medio. Questa operazione di centratura `e utile al fine di evitare che la media (contenuta in Y[k=0]) influenzi i valori vicini.

2. eseguire l’algoritmo fft e calcolare la sequenza Y[k] 3. prenderne il modulo |Y [k]|

4. calcolare la relazione di Parseval e controllare che sia soddisfatta, in modo da avere la certezza che il calcolo effettuato sia corretto:

1 N N −1X k=1 |Y [k]|2 = N X n=0 y2[n] (4.10) 5. calcolare il range di frequenze corrispondenti alle stime effettuate e

graficare il risultato

Tutte le operazioni elencate sopra, sono riassunte nel seguente script Matlab che abbiamo utilizzato per lo studio dello spettro:

1 f u n c t i o n DS = s p e t t r o ( y d a t i , f c ) 2 3 %T r a s l o i d a t i e l i rendo a media n u l l a 4 mn = y d a t i − mean( y d a t i ) ; 5 6 %c a l c o l o t a t r a s f o r m a t a d i F o u r i e r 7 8 DS = f f t(mn) ; 9 10 %g r a f i c o l ’ ampiezza d e l l o s p e t t r o rendendo i l g r a f i c o s i m m e t r i c o r i s p e t t o 11 %a l l ’ o r i g i n e 12 13 N = l e n g t h( y d a t i ) ; 14 d e l t f = 1 / (N∗(1/ f c ) ) ; 15 16 %f r e q u e n z a d i N y q u i s t 17 fNy = f c / 2 ;

18 19 D S s h i f t = f f t s h i f t(DS) ; 20 modDSshift = abs( D S s h i f t ) ; 21 f n e g p o s = (−fNy : d e l t f : fNy−d e l t f ) ’ ; 22 23 %d i s e g n o l ’ ampiezza d e l l o s p e t t r o i n s c a l a l i n e a r e 24 p l o t( f n e g p o s , modDSshift )

L’analisi dello spettro in frequenza `e molto utile per scegliere le soglie del filtro passa-basso e scegliere le frequenze da eliminare. Riportiamo lo spettro relativo alla sequenza della posizione del centro del tubo in figura 4.8.

Dallo spettro si evince che il rumore di cui `e affetto il segnale non `e sepa- rato in frequenza, dal segnale stesso, ma che si estende su tutte le frequenze di interesse. Per tale motivo, cercheremo di realizzare un filtro passa-basso, che elimini tutte le alte frequenze che rappresentano il rumore. Poich´e abbia- mo stimato che il segnale che ci interessa `e contenuto nella banda dei primi 4 Hz opteremo per utilizzare la frequenza di 4 Hz come frequenza di taglio. Vediamo di procedere con ordine. Poich´e i campioni che abbiamo sono nel dominio del tempo, effettueremo un filtraggio del segnale nel dominio del tempo. Utilizzeremo un filtro FIR (Finite Impulse Response) che `e un siste- ma lineare tempo-invariante causale con risposta finita all’impulso. Il filtro FIR `e stato scelto per non introdurre distorsioni di fase nel segnale (filtro a fase lineare), e perch´e `e un filtro sempre stabile (un solo polo in 0). Il progetto di filtri FIR causali consiste nel determinarne i coefficienti median- te specifiche formulate normalmente nel dominio delle frequenze, espresse in termini di ampiezza e fase della risposta del filtro desiderata. Si va cio`e a sagomare il filtro in frequenza, ottenendo in modo automatico i coefficien- ti da utilizzare per il filtraggio nel dominio del tempo. Ricordiamo che un sistema LTI causale a tempo discreto `e detto filtro FIR se la risposta h(n) all’impulso unitario `e finita nel senso che h(n) = 0 per n < 0 e per n ≥ M

−4000 −300 −200 −100 0 100 200 300 400 50 100 150 200 250 300 350 400 450 f [Hz] |Y[k]| −2 0 2 4 6 8 0 50 100 150 200 250 300 f [Hz] |Y[k]|

Figura 4.8: Ampiezza dello spettro del segnale Centrotubo e ingrandimento della banda 0-4 Hz in cui `e contenuto

per un opportuno M > 0. Il rapporto ingresso-uscita `e allora descritto dalla seguente equazione alle differenze finite:

yf iltrato(n) = M −1X

k=1

h(k)y(n − k) (4.11) Passando alle trasformate z e applicando la propriet`a della traslazione temporale, si ottiene:

Yf iltrato(z) = H(z)Y (z) (4.12)

dove H(z) =PM −1k=0 h(k)z−k e Y(z) sono le trasformate z rispettivamente

di h(n) e y(n). Si osservi che H(z) `e un polinomio in z−1.

Specifiche del filtro FIR

Per i filtri passa-basso le specifiche vengono date nel dominio della frequenza attraverso lo schema di tolleranza mostrato in figura 4.9. I parametri che vanno specificati sono:

• le frequenze Fpass e Fstop che definiscono rispettivamente la frequenza

di taglio e la frequenza di stop del filtro.

• le deviazioni massime Dpass e Dstop permesse alle oscillazioni rispetti-

vamente in banda passante e in banda proibita. Le deviazioni possono essere espresse anche in dB:

Ap = 20 log

1 + Fpass

1 − Fpass ≈ 17.4 · F

pass dB As= −20 log Fstop dB

(4.13) dove Ap denota l’oscillazione (ripple) massimo consentito in banda

Figura 4.9: Parametri del filtro impostare per la sua realizzazione In Matlab `e possibile realizzare un filtro tramite il comando fdatool, che apre il Filter Design and Analysis Tool. La schermata che appare `e riportata in figura 4.10. A questo punto, si settano i seguenti parametri:

Response Type = Lowpass

Design Method = FIR Equiripple Filter Order = Minimum order

Frequency Specifications Units = Hz, Fs= 800, Fpass = 4 e Fstop = 6

Magnitude Specifications Units = Linear, Dpass= 0.1, Dstop = 0.001

e si preme il pulsante “Design Filter”.

In figura4.11 si riporta il filtro ottenuto. I coefficienti del filtro, possono quindi essere esportati sottoforma di header C (dal men`u del tool: Targets → Generate C Header). Prima di procedere con il filtraggio, spendiamo due parole per descrivere il significato dell’impostazione “FIR Equiripple”. Dobbiamo sempre tenere presente che un filtro passa-basso ideale, non avr`a

Figura 4.10: Filter Design and Analysis Tool di Matlab

mai la forma di un filtro ideale, ovvero la forma di un gradino perfetto con banda di transizione nulla. Si riporta in figura 4.11 il modulo del filtro reale in frequenza.

Per ridurre al minimo le oscillazioni in corrispondenza della frequenza di taglio, si cercano metodi di sintesi del filtro ottimo, nel senso di Chebishev. Il metodo considera la risposta all’impulso hd(n) del filtro che si desidera

approssimare e che ha una ideale risposta in frequenza Hd(ejω). Fissato

l’ordine N del filtro, si prende in considerazione l’insieme FN di tutti i filtri

FIR h di ordine N, cio`e con risposta all’impulso descrivibile da N coefficienti h = (h(0), · · · , h(N − 1)). Se H(ejω) `e la risposta in frequenza del generico

filtro h, si definisce come errore di approssimazione di hd con h, la quantit`a

e(h, hd) = max ω |Hd(e

− Hh(ejω| · Ψ(ω) (4.14)

dove Ψ(ω) `e una funzione peso che consente di trattare il caso in cui i vincoli di tolleranza sulla banda passante e proibita siano diversi. Il filtro ottimo bh

0 50 100 150 200 250 300 350 −70 −60 −50 −40 −30 −20 −10 0 Frequency (Hz) Magnitude (dB) Magnitude Response (dB)

Figura 4.11: Modulo in frequenza del filtro

`e il filtro di FN che minimizza l’errore e(h, hd). Si pu`o dimostrare che il filtro

ottimo `e caratterizzato da “equi-oscillazioni” (equiripple appunto) in banda passante e banda proibita. Esistono vari algoritmi per risolvere il problema di minimo

bh = arg min

h∈FN

e(h, hd) (4.15)

In particolare prima di poter risolvere il problema sar`a necessario stimare l’ordine del filtro incognito N. N pu`o essere stimato a partire dalle condizioni di tolleranza specificate in termini di frequenze e guadagni. Una volta no- to N, l’algoritmo implementato da Matlab per il calcolo del filtro ottimo `e l’algoritmo di Parks-McClellan, sul quale non ci soffermiamo.

Per eseguire test e prove di filtraggio, prima di esportare i coefficienti del filtro in C, pu`o essere utile realizzare i filtri e filtrare i campioni direttamente dalla command window di Matlab. Uno script, alternativo al fdatool, per sintetizzare il filtro e visualizzare il grafico del segnale filtrato, cos`ı da poterne apprezzare la bont`a, `e il seguente:

1 f u n c t i o n [M, COEFF, YFIL , ERROR] = f i l t r o L P ( y d a t i , f c , f c u t ) 2

4 %f c `e l a f r e q u e n z a d i campionamento 5 %f c u t `e l a f r e q u e n z a d i t a g l i o d e l f i l t r o passa −b a s s o 6 7 %c a l c o l o l ’ e s c u r s i o n e d e l f i l t r o t r a l a f r e q u e n z a d i s t o p f s e l a f r e q u e n z a 8 %p a s s a n t e f p 9 10 f p = 0 . 8 ∗ f c u t ; 11 f s = 1 . 2 ∗ f c u t ; 12

13 %C o e f f i c i e n t i d i guadagno l i n e a r e d e l f i l t r o ( non sono e s p r e s s i i n dB) n e l l a

banda p a s s a n t e e i n 14 %q u e l l a d i s t o p 15 16 ap = 1 ; 17 a s = 0 ; 18 19 d e l t a p = 0 . 1 ; 20 d e l t a s = 0 . 0 0 1 ; 21 22 %Parks−McClellan op t im al e q u i r i p p l e FIR o r d e r e s t i m a t o r 23 %M `e l ’ o r d i n e d e l f i l t r o t r o v a t o 24 %f `e l a f r e q u e n z a n o r m a l i z z a t a 25 %m `e l a f r e q u e n c y band magnitude 26 %w sono i p e s i 27 [M, f ,m, w]= f i r p m o r d ( [ f p f s ] , [ ap a s ] , [ d e l t a p d e l t a s ] , f c ) ; 28 29 %Parks−McClellan op t im al e q u i r i p p l e FIR f i l t e r d e s i g n 30 [COEFF, ERROR]= f i r p m (M, f ,m, w) ; 31 32 %a p p l i c o i l f i l t r o n e l dominio d e l tempo 33 % i l f i l t r o a p p l i c a t o ha l a D i r e c t Form I I Transposed 34 %a ( 1 ) ∗ y f i l ( n ) = b ( 1 ) ∗ y d a t i ( n ) + b ( 2 ) ∗ y d a t i ( n−1) + . . . + b ( nb+1)∗ y d a t i ( n−nb ) 35 % − a ( 2 ) ∗ y f i l ( n−1) − . . . − a ( na+1)∗ y f i l ( n−na ) 36 YFIL = f i l t e r(COEFF, 1 , y d a t i ) ; 37

38 YFIL = YFIL/sum(COEFF) ;

39 %v i s u a l i z z o i l f i l t r o r e a l i z z a t o

40 f v t o o l (COEFF, 1 )

41

42

44 s u b p l o t( 2 , 1 , 1 ) , p l o t( y d a t i (M: 9 9 9 8 ) ) , t i t l e(’ Dati o r i g i n a l i ’) ;

45 s u b p l o t( 2 , 1 , 2 ) , p l o t( YFIL (M: 9 9 9 8 ) ) , t i t l e(’ Dati f i l t r a t i ’) ;

Implementazione del filtro

Dopo aver disegnato il filtro, ovvero una volta noti gli N coefficienti che descri- vono il filtro, si esporta l’header C che li contiene come descritto nel paragrafo precedente. Filtrare i campioni nel tempo significa applicare iterativamente ad ogni campione la seguente equazione

y(kT ) =

N −1

X

n=0

h[n] · x[kT − nT ] (4.16) dove N `e l’ordine del filtro e T `e il numero di campioni che sono necessari per il filtraggio. In particolare sono necessari T = N campioni per poter produrre il primo valore filtrato. Per l’implementazione in C sono necessarie due strutture: un buffer circolare in cui salvare N campioni di ingresso, e un buffer lineare in cui salvare gli N coefficienti del filtro. In questo modo con una corretta gestione degli indici dei buffer, sar`a necessario aggiornare ad ogni passo una sola locazione del buffer degli ingressi. L’implementazione del filtro `e riportata di seguito:

1 2 #d e f i n e nh <o r d i n e d e l f i l t r o > 3 4 // c o e f f i c i e n t i d e l f i l t r o 5 double h [ nh ] = { <... >} 6 7 <... > 8 i n t p o s = 0 ; 9 double y , G = 0 ; 10 11 12 // c a l c o l o i l guadagno 13 f o r(i n t i = 0 ; i < nh ; i ++) G += h [ i ] ; 14 15 // p e r o g n i campione d e l s e g n a l e c e n t r o t u b o 16 f o r(i n t c o n t = 0 ; c o n t < 3 2 0 0 0 ; c o n t ++, p o s =( p o s +1)%nh ) { 17

18 <l e g g o i v a l o r i d i bordoSX e bordoDX d e l l a f e t t a a t t u a l e > 19 c e n t r o T u b o = bordoSX + ( ( bordoDX − bordoSX ) / 2 ) ;

20 21 // b u f f e r c i r c o l a r e con i c a m p i o n i 22 CT [ p o s%nh ] = c e n t r o T u b o ; 23 24 y = 0 ; 25 26 // f i l t r o FIR 27 f o r(i n t j = 0 ; j < nh ; j ++){ 28 y += h [ j ] ∗ CT [ ( p o s − j + nh )%nh ] ; 29 } 30 31 // n o r m a l i z z o 32 y /= G; 33 34 <s a l v o i l campione f i l t r a t o y> 35 36 } 37 38 <... >

Si noti, che il filtraggio potrebbe essere ottimizzato, riducendo il numero di iterazioni del ciclo for relativo al calcolo del campione filtrato: ad esempio si potrebbero implementare due buffer circolari, uno con i campioni di indice pari e uno con i campioni di indice dispari, in modo da poter calcolare in parallelo i due filtraggi e poi alla fine sommare i due valori ottenuti, iterando tale procedura si possono ridurre i tempi di calcolo del fattore desiderato. Un altro metodo per ottimizzare l’algoritmo `e quello di implementarlo diret- tamente in assembler cos`ı da raggiungere un’efficienza pi`u alta ottimizzando il codice per il particolare processore che si utilizza. Non scenderemo nei dettagli delle ottimizzazioni dell’implementazione poich´e ai fini dello studio che si deve compiere non `e necessario utilizzare un algoritmo che minimizzi il tempo di elaborazione.

Analisi del fenomeno di curvatura del tubo

Una volta che abbiamo a disposizione il segnale filtrato, sia ottenuto con il filtro passa-basso FIR sia con il filtro lineare con doppio smorzamento espo-

nenziale, si possono valutare i punti di curvatura, calcolando inizialmente la variazione del segnale rispetto alla media della posizione del centro tubo, che `e nota dai campioni misurati. Detta quindi v[n] = |x − y[n]| tale variazione, si pu`o fissare una soglia δ, da scegliere in maniera accurata3 e nel caso in cui

v[n] > δ segnalare l’inizio della curvatura. Con un po’ di codice aggiuntivo si pu`o inoltre contare quante volte curva il tubo. Per stabilire quale dei due filtraggi sia pi`u efficiente, si rimanda al capitolo5, in cui riportiamo i risultati dei test effettuati.

Documenti correlati