Equalizzazione e filtraggio inverso
Salve, sono un nuovo frequentatore.
Mi sono imbattuto in questo forum cercando notizie sul filtraggio inverso.
In pratica ho necessità di equalizzare un segnale che passa attraverso un filtro sconosciuto, tramite l'"inversione" di tale filtro.
Ho supposto, per generalizzare, il filtro sconosciuto come un filtro IIR. Tramite il metodo LMS ho calcolato approssimativamente i coefficienti, per poi calcolare da questi il filtro inverso da porre in cascata al primo.
Nel momento in cui inverto tali coefficienti, però, posso imbattermi in un filtro instabile.
Sapreste indicarmi dei metodi, con eventuali fonti per documentarmi, per realizzare un filtro inverso stabile?
Grazie anticipatamente e tutti. Ciao ciao!
Mi sono imbattuto in questo forum cercando notizie sul filtraggio inverso.
In pratica ho necessità di equalizzare un segnale che passa attraverso un filtro sconosciuto, tramite l'"inversione" di tale filtro.
Ho supposto, per generalizzare, il filtro sconosciuto come un filtro IIR. Tramite il metodo LMS ho calcolato approssimativamente i coefficienti, per poi calcolare da questi il filtro inverso da porre in cascata al primo.
Nel momento in cui inverto tali coefficienti, però, posso imbattermi in un filtro instabile.
Sapreste indicarmi dei metodi, con eventuali fonti per documentarmi, per realizzare un filtro inverso stabile?
Grazie anticipatamente e tutti. Ciao ciao!

Risposte
Forse leggendo il topic sul filtraggio inverso puoi già farti un'idea. La letteratura su queste cose è sterminata, non saprei indirizzarti su un metodo in particolare. La cosa più banale che mi viene in mente ora è, per un filtro tutti poli, usare le equazioni Yule-Walker: http://it.wikipedia.org/wiki/Equazioni_di_Yule-Walker
Innanzitutto un cordiale benvenuto!...
Se ho ben inteso il tuo problema è quello di 'equalizzare' un filtro 'sconosciuto' ponendo in cascata ad esso un 'filtro equalizzatore' in modo che l'insieme dei due costituiscano una funzione di trasferimento di caratteristiche 'volute'. Innanzitutto occorre specificare che la 'equalizzazione' può essere fatta...
a) nel dominio del tempo
b) nel dominio della frequenza
In entrambi i casi poi in genere per la 'risposta complessiva' non sono stabiliti vincoli 'globali' [ossia sull'intero asse del tempo e della frequenza...] bensì solo in una parte di essi. Nel caso di equalizzazione nel dominio della frequenza [il caso più frequente...] in genere si richiede che la risposta complessiva sia 'costante' [ed eventualmente 'a fase lineare'...] in una certa banda di frequenze. Anche così non sempre è possibile raggiungere tale obiettivo in maniera 'totale'. Pensa ad esempio al caso in cui il filtro in questione abbia uno zero di trasmissione in corrispondenza di una frequenza all'interno nella banda da equalizzare. In tal caso è evidente che non sarà possibile in nessun caso rimuovere tale zero dalla risposta complessiva 'filtro+equalizzatore'. La mia personale e sperienza dice che per l'equalizzazione di un canale di trasmissione [sia nel tempo sia in frequenza...] la scelta migliore è quella di un filtro a risposta finita [FIR], il quale in nessun caso presenta problemi di stabilità. A tale fine esistono un gran numero di algoritmi del tipo LMS idonei allo scopo...
cordiali saluti
lupo grigio

An old wolf may lose his teeth, but never his nature
Se ho ben inteso il tuo problema è quello di 'equalizzare' un filtro 'sconosciuto' ponendo in cascata ad esso un 'filtro equalizzatore' in modo che l'insieme dei due costituiscano una funzione di trasferimento di caratteristiche 'volute'. Innanzitutto occorre specificare che la 'equalizzazione' può essere fatta...
a) nel dominio del tempo
b) nel dominio della frequenza
In entrambi i casi poi in genere per la 'risposta complessiva' non sono stabiliti vincoli 'globali' [ossia sull'intero asse del tempo e della frequenza...] bensì solo in una parte di essi. Nel caso di equalizzazione nel dominio della frequenza [il caso più frequente...] in genere si richiede che la risposta complessiva sia 'costante' [ed eventualmente 'a fase lineare'...] in una certa banda di frequenze. Anche così non sempre è possibile raggiungere tale obiettivo in maniera 'totale'. Pensa ad esempio al caso in cui il filtro in questione abbia uno zero di trasmissione in corrispondenza di una frequenza all'interno nella banda da equalizzare. In tal caso è evidente che non sarà possibile in nessun caso rimuovere tale zero dalla risposta complessiva 'filtro+equalizzatore'. La mia personale e sperienza dice che per l'equalizzazione di un canale di trasmissione [sia nel tempo sia in frequenza...] la scelta migliore è quella di un filtro a risposta finita [FIR], il quale in nessun caso presenta problemi di stabilità. A tale fine esistono un gran numero di algoritmi del tipo LMS idonei allo scopo...
cordiali saluti
lupo grigio

An old wolf may lose his teeth, but never his nature
Innanzitutto ringrazio luca.barletta (tra l'altro Barletta è la città in cui vivo) e Lupo Grigio per l'interessamento ed il benvenuto.
In secondo luogo, sono felice per essere riuscito a spiegare il mio problema, almeno in maniera intuitiva.
Ora, se mi permettete, vorrei illustrarvi il mio problema in maniera più specifica:
_____ ________ _____
parto con x(k) ->| H(f) | -> Y(k) per arrivare a x(k) ->| G^-1(f) | ->| H(f) | -> Y(k)
------- ----------- -------
H(f) è il filtro sconosciuto da equalizzare.
Innanzitutto sto lavorando in matlab per realizzare il tutto teoricamente, per poi implementare il processo di equalizzazione, una volta ottenuti i risulatati desiderati, su fpga.
Punto 1)
Innanzitutto realizzo il filtro H(f) (che poi faccio finta di non conoscere
). Mando in ingresso un treno di campioni x(k) ed estraggo il treno di campioni y(k).
Punto 2)
Da x(k) e y(k), tramite un algoritmo LMS calcolo i coefficienti della H(f). Ovviamente quì c'è già un primo inconveniente: non conoscendo il filtro, io posso solo supporre il numero dei coefficienti => in generale, non conosco il numero dei coefficienti a (denominatore) e b (numeratore). Per esempio, suppongo 16 coefficienti b e 8 coefficienti a. Il risultato di questa operazione lo chiamo G(f)
Punto 3)
Calcolati i coefficienti, realizzo il filtro inverso ponendo a numeratore i coefficienti a e a denominatore i coefficienti b (in pratica realizzo G^-1(f)). Qui sopraggiunge il secondo problema: quelli che erano zeri a modulo maggiore di 1, diventano poli che rendono il sistema instabile.
Domanda x Lupo Grigio)
Se ho ben capito, mi consigli di realizzare il punto 2 con soli poli e quindi solo coefficienti a, in modo tale da avere solo zeri in G^-1?
Mi scuso ancora per la mia superficialità
, ma mi sono imbattuto in questo problema per tuffarmi nella prgrammazione di fpga in modo da poter affrontare una tesi di laurea aziendale. Il bello è che, poco a poco, sto approfondendo argomenti purtroppo non affrontati nel corso di teoria dei segnali e questo mi piace anche di più (non si finisce mai di imparare.
)
Ciao a tutti.
In secondo luogo, sono felice per essere riuscito a spiegare il mio problema, almeno in maniera intuitiva.

Ora, se mi permettete, vorrei illustrarvi il mio problema in maniera più specifica:
_____ ________ _____
parto con x(k) ->| H(f) | -> Y(k) per arrivare a x(k) ->| G^-1(f) | ->| H(f) | -> Y(k)
------- ----------- -------
H(f) è il filtro sconosciuto da equalizzare.
Innanzitutto sto lavorando in matlab per realizzare il tutto teoricamente, per poi implementare il processo di equalizzazione, una volta ottenuti i risulatati desiderati, su fpga.
Punto 1)
Innanzitutto realizzo il filtro H(f) (che poi faccio finta di non conoscere

Punto 2)
Da x(k) e y(k), tramite un algoritmo LMS calcolo i coefficienti della H(f). Ovviamente quì c'è già un primo inconveniente: non conoscendo il filtro, io posso solo supporre il numero dei coefficienti => in generale, non conosco il numero dei coefficienti a (denominatore) e b (numeratore). Per esempio, suppongo 16 coefficienti b e 8 coefficienti a. Il risultato di questa operazione lo chiamo G(f)
Punto 3)
Calcolati i coefficienti, realizzo il filtro inverso ponendo a numeratore i coefficienti a e a denominatore i coefficienti b (in pratica realizzo G^-1(f)). Qui sopraggiunge il secondo problema: quelli che erano zeri a modulo maggiore di 1, diventano poli che rendono il sistema instabile.
Domanda x Lupo Grigio)
Se ho ben capito, mi consigli di realizzare il punto 2 con soli poli e quindi solo coefficienti a, in modo tale da avere solo zeri in G^-1?
Mi scuso ancora per la mia superficialità


Ciao a tutti.
"duckypocket":
Domanda x Lupo Grigio...
Se ho ben capito, mi consigli di realizzare il punto 2 con soli poli e quindi solo coefficienti a, in modo tale da avere solo zeri in G^-1?...
Certamente sì!... Il filtri a risposta finita presentano assai meno 'problemi' di quelli riposta infinita. Alcuni di questi 'problemi'...
a) il controllo della stabilità, vale a dire la verifica costante che nessun polo cada fuori del cerchio unitario
b) in genere presentano una risposta in fase assai 'distorta' e difficile da controllare [specialmente per il filtri molto selettivi...]
c) presentano spesso problemi di 'cicli limite', dovuti all'arrotondamento operato negli stadi intermedi di calcolo [specialmente se si usa aritmetica in 'virgola fissa'...]
d) gli algoritmi di ottimizzazione esistenti per essi sono in genere poco 'efficienti'
cordiali saluti
lupo grigio

An old wolf may lose his teeth, but never his nature
Certamente sì!... Il filtri a risposta finita presentano assai meno 'problemi' di quelli riposta infinita. Alcuni di questi 'problemi'...
a) il controllo della stabilità, vale a dire la verifica costante che nessun polo cada fuori del cerchio unitario
b) in genere presentano una risposta in fase assai 'distorta' e difficile da controllare [specialmente per il filtri molto selettivi...]
c) presentano spesso problemi di 'cicli limite', dovuti all'arrotondamento operato negli stadi intermedi di calcolo [specialmente se si usa aritmetica in 'virgola fissa'...]
d) gli algoritmi di ottimizzazione esistenti per essi sono in genere poco 'efficienti'
cordiali saluti
lupo grigio
Ti ringrazio per la precisa risposta.
Cordiali saluti a tutti voi e...alla prossima. Ciao ciao!

Ancora saluti a tutti.
x Lupo Grigio:
ho provato a seguire l'idea del filtro FIR per l'equalizzazione, ma, tenendo presente sempre lo schema
x(k) -> FIR equalizzatore -> H(f) -> y(k),
andando a calcolare l'errore e(k)=x(k) - y(k), il risultato è dello stesso ordine di grandezza dei segnali coinvolti.
Non riesco proprio a renderlo meno significativo.
Tu dici che sbaglio qualcosa o che devo adottare qualche accorgimento particolare (per esempio fare attenzione agli zeri presenti in H(f))?
Nell'attesa, continuo i miei esperimenti
.
Ciao ciao!
x Lupo Grigio:
ho provato a seguire l'idea del filtro FIR per l'equalizzazione, ma, tenendo presente sempre lo schema
x(k) -> FIR equalizzatore -> H(f) -> y(k),
andando a calcolare l'errore e(k)=x(k) - y(k), il risultato è dello stesso ordine di grandezza dei segnali coinvolti.
Non riesco proprio a renderlo meno significativo.
Tu dici che sbaglio qualcosa o che devo adottare qualche accorgimento particolare (per esempio fare attenzione agli zeri presenti in H(f))?
Nell'attesa, continuo i miei esperimenti

Ciao ciao!
Una tecnica assai semplice da me utilizzata ‘fin dalle origini’ per il progetto di filtri e risposta finita [FIR] è nota come Frequency sampling design. Data una generica risposta finita di N campioni $h(n)$, $n=0,1,…,N-1$, la sua z-trasformata è data da…
$H(z)= sum_(n=0)^(N-1) h(n)*z^(-n)$ (1)
Indicando con $H_s (k)$ la (1) valutata per $z=e^(-j*2*pi*k/N)$, $k=0,1,…,N-1$, si ha…
$H_s(k)=sum _(n=0)^(N-1) h(n)*e^(-j*2*pi*k*n/N)$, $k=0,1,...,N-1$ (2)
La tecnica di ‘campionamento in frequenza’ consiste nel determinare i coefficienti del filtro imponendo N valori $H_s(k)$ per $z=e^(j*2*pi*k/N)$, $k=0,1,…,N-1$ e applicando la formula…
$h(n)= 1/N*sum_(k=0)^(N-1) H_s(k)*e^(j*2*pi*k*n/N)$ (3)
I dettagli si possono trovare in rete. Oltre che per il progetto di filtri tale tecnica si presta assai bene per equalizzare. Un esempio di progetto di equalizzatore della risposta di un convertitore A/D si trova in…
http://www.maxim-ic.com/appnotes.cfm/an_pk/3853
cordiali saluti
lupo grigio

an old wolf may lose his teeth, but never his nature
$H(z)= sum_(n=0)^(N-1) h(n)*z^(-n)$ (1)
Indicando con $H_s (k)$ la (1) valutata per $z=e^(-j*2*pi*k/N)$, $k=0,1,…,N-1$, si ha…
$H_s(k)=sum _(n=0)^(N-1) h(n)*e^(-j*2*pi*k*n/N)$, $k=0,1,...,N-1$ (2)
La tecnica di ‘campionamento in frequenza’ consiste nel determinare i coefficienti del filtro imponendo N valori $H_s(k)$ per $z=e^(j*2*pi*k/N)$, $k=0,1,…,N-1$ e applicando la formula…
$h(n)= 1/N*sum_(k=0)^(N-1) H_s(k)*e^(j*2*pi*k*n/N)$ (3)
I dettagli si possono trovare in rete. Oltre che per il progetto di filtri tale tecnica si presta assai bene per equalizzare. Un esempio di progetto di equalizzatore della risposta di un convertitore A/D si trova in…
http://www.maxim-ic.com/appnotes.cfm/an_pk/3853
cordiali saluti
lupo grigio

an old wolf may lose his teeth, but never his nature
"lupo grigio":
Una tecnica assai semplice da me utilizzata ‘fin dalle origini’ per il progetto di filtri e risposta finita [FIR] è nota come Frequency sampling design. Data una generica risposta finita di N campioni $h(n)$, $n=0,1,…,N-1$, la sua z-trasformata è data da…
$H(z)= sum_(n=0)^(N-1) h(n)*z^(-n)$ (1)
Indicando con $H_s (k)$ la (1) valutata per $z=e^(-j*2*pi*k/N)$, $k=0,1,…,N-1$, si ha…
$H_s(k)=sum _(n=0)^(N-1) h(n)*e^(-j*2*pi*k*n/N)$, $k=0,1,...,N-1$ (2)
La tecnica di ‘campionamento in frequenza’ consiste nel determinare i coefficienti del filtro imponendo N valori $H_s(k)$ per $z=e^(j*2*pi*k/N)$, $k=0,1,…,N-1$ e applicando la formula…
$h(n)= 1/N*sum_(k=0)^(N-1) H_s(k)*e^(j*2*pi*k*n/N)$ (3)
I dettagli si possono trovare in rete. Oltre che per il rigetto di filtri tale tecnica si presta assai bene per equalizzare. Un esempio di progetto di equalizzatore della risposta di un convertitore A/D si trova in…
http://www.maxim-ic.com/appnotes.cfm/an_pk/3853
cordiali saluti
lupo grigio
an old wolf may lose his teeth, but never his nature
Ciao Lupo Grigio, scusa il ritardo nel porti i miei più sentiti ringraziamenti, ma ero fuori città e non avevo la possibilità di connettermi ad internet.
Ora mi metto al lavoro per applicare il tuo suggerimento.
Ti ringrazio ancora. ciao ciao!