Pagina 1 di 2

ritardo di fase di un filtro

MessaggioInviato: 8 gen 2013, 18:26
da corgan83
Salve a tutti, da qualche giorno sono alle prese con un problema di filtraggio in Matlab;
in particolare sto usando un filtro IIR-Chebyshev 1° per filtrare un segnale costituito dalla somma di due chirp a frequenze f1 e f2, diverse tra loro, con 5 < f1 < f2 < 6 [GHz].

La banda passante del filtro è proprio [5-6] GHz, perciò i segnali dovrebbero passare ''inalterati''. (ordine=7, attenuazione in banda passante= 0.5 dB)

Per ora mi sto limitando a studiare il comportamento del filtro, mettendo a confronto le componenti I-Q
dei due chirp originali con quelle dei segnali in uscita dal filtro; tramite un tool riesco a risalire separatamente alle coppie (I1-Q1) e (I2-Q2).

Come è lecito aspettarsi dalla risposta in frequenza del filtro, vedo che per certe frequenze i segnali in uscita subiscono un ritardo di fase che varia da frequenza a frequenza, cosicché sovrapponendo i plot, ad es. I_orig - I1, essi non sempre coincidono in maniera quasi perfetta.

Volevo sapere se esiste un modo per compensare il ritardo di fase introdotto dal filtro.
Spero di essere stato chiaro.

Grazie mille a tutti

Re: ritardo di fase di un filtro

MessaggioInviato: 8 gen 2013, 19:42
da dimaios
Lo devi fare in tempo reale oppure vuoi riallineare i segnali offline ?

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 11:26
da corgan83
Non capisco cosa intendi per ''riallineare i segnali in offline''.... :(

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 12:15
da dimaios
Devi compensare i segnali in tempo reale oppure li hai gia' campionati e vuoi compensare il ritardo conoscendo i campioni futuri ?

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 12:30
da corgan83
Forse è meglio se ti spiego cosa devo fare . :D

Allora, io genero un segnale, somma di due chirp a portanti f1 e f2, dopodiché aggiungo un rumore gaussiano bianco, ed infine filtro nella banda 5-6 GHz.
Questo segnale filtrato lo elaboro con un tool che mi ricostruisce i segnali originali e calcola le due coppie I-Q dei due chirp di partenza.

Credo che per avere una acquisizione migliore debbo compensare la fase del filtro a monte dell'algoritmo di ricostruzione, o no?

Quindi subito dopo il filtraggio, compenso la fase e poi ricostruisco le forme d'onda iniziali.

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 12:42
da corgan83
Ho provato con la funzione filtfilt(), ma sostanzialmente fa un doppio filtraggio, prima in un verso poi nell'altro, il che mi risolve il problema della fase per le simulazioni, ma non credo che sia utile per la realtà, anche perché mi raddoppia l'ordine del filtro.

Che ne pensi!?

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 14:49
da dimaios
Dovresti fare uno schema a blocchi con FidoCadJ per illustrare la catena di acquisizione e specificare il significato dei segnali in oggetto.

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 15:43
da corgan83
come schema andrebbe bene un immagine jpeg?

Re: ritardo di fase di un filtro

MessaggioInviato: 9 gen 2013, 16:49
da corgan83
Spero vada bene questa immagine.... purtroppo in azienda non riesco ad usare FidoCadJ
schema.jpg
schema.jpg (20.58 KiB) Osservato 5286 volte

Nel primo blocco genero un segnale dato dalla somma di due chirp a frequenze: 5.2 e 5.5 GHz entrambi con banda 10 MHz; poi sommo il rumore [0-10] GHz.

Prima di acquisire questi segnali e ricostruire le componenti I-Q di ciascun chirp, ho pensato di effettuare prima un filtraggio BPF a Radio Frequenza in modo da eliminare tutto ciò che ricada al di fuori della mia banda di interesse, nella fattispecie [5-6] GHz.

Una volta filtrato, processo tutto con un tool, cioè la versione numerica del convertitore MWC, che mi ricostruisce i chirp di partenza e ne calcola per ciascuno la coppia I-Q che poi confronto con quelle di un chirp non affetto da rumore per quantificare la bontà della ricostruzione.

Per ora ho progettato il filtro in questo modo:
fnyq = 20 GHz;
wp = [5e9 6e9]/10e9;
Npoli = 7;
ApdB = 0.5;

[b, a] = cheby1(Npoli, ApdB, wp);

Faccio il filtraggio classico >>>> x= filter(b,a,c)

e mi compare l'errore di fase sulle I-Q in uscita dal blocco CTF che contiene l'algoritmo di ricostruzione vero e proprio.

Poco fa invece ho provato a filtrare con la funzione >>>>>> x = filtfilt(b,a,c)

ed effettivamente le cose sembrano andare bene, i vari plot sono in fase. ( c'è solo un po' di rumore sulle componenti ricostruite, ma questo è normale)

Voglio capire se ha senso lavorare così, simulare con filtfilt, oppure bisogna compensare questo ritardo con tecniche diverse, tali da simulare filtri più prossimi alla realtà.

Spero di esser stato chiaro

Re: ritardo di fase di un filtro

MessaggioInviato: 10 gen 2013, 9:55
da dimaios
Se lavori offline il filtfilt e' una delle funzioni piu' efficaci per fare un filtraggio a ritardo nullo.
Se lavori online ( in tempo reale quindi ) dovrai utilizzare come minimo un predittore.