invertire il filtraggio IIR con matlab funzioni filtfilt ()

S

sam_manchali

Guest
salve,
qualcuno ha provato a replicare il matlab filtfilt () in C o altri HLL.Ho provato per un paio di giorni e non sono sicuro dei risultati.
Qualcuno può essere così gentile da spiegare in dettaglio come funziona l'algoritmo di "c"?
thanks a lot

sam

Nota: i am desigining HP filtro IIR con zero fase di errore.i cant permettersi un filtro FIR (i am compensare l'eliminazione della DC).

 
Hi sam_manchali,

Non ho attuato filtfilt in C, ma Iknow in generale l'idea.

Alcune osservazioni:

1.Voi sapete che è implementato come filtfilt m Matlab funzione socan vedere il codice
2.Se avete la analof matlab FILT in C dovrebbe essere strighforward per attuare il resto.Solo alcune imbottiture a bot finisce e filtraggio previsionale e indietro nella direzione
3.Se avete qualche dubbio solo confrontare le Matlab "e" c "per il semplice versione di prova del vettore.

Se avete qualche difficoltà di interpretazione della funzione filtfilt.m per favore
permettetemi di ciò che esattamente non è chiaro per voi e io cerco di aiutarti

Fortuna!
Dora

 
Hi sam_manchali,

Immaginate di avere una sequenza x [n] con Z-trasformare X (z).Dobbiamo passare da un filtro con risposta impulsiva h [n], ma tenendo x [n] in ordine inverso,
per esempio x [-n],
di cui è trasformare Z-X (z ^ -1).La sequenza ottenuta è trasformare Z-X (z ^ -1) * H (z).Se prendete questa uscita in ordine inverso, il risultato è Y (z) = X (z) * H (z ^ -1).Altrimenti detto, è il risultato di filtraggio la sequenza originale con un filtro con funzione di trasferimento H (z ^ -1), o di risposta impulsiva h [-n], che è, h [n] invertito nel tempo.
Se il filtro h [n] è causale, h [-n] è anticausal.Le ampiezze di H (z ^ -1) e H (z) sono le stesse, ma le fasi sono opposti.Se H (z) è un polo (o zero) a Sof (ad esempio
all'interno delle unità di circolo), H (z ^ -1) ha un polo (o zero) a Sof ^ -1 (al di fuori del cerchio unitario).
Ora, prendete Y (z) e ad esse si applicano il filtro H (z) di nuovo.È possibile ottenere X (z) * H (z ^ -1) * H (z).È possibile ottenere la sequenza originale X (z) filtrata da un filtro H (z ^ -1) * H (z), che è pari a zero
in fase perché le fasi di H (z) e H (z ^ -1) compensare.Il risultato è la risposta di impulso convoluzione di h [n] con h [-n], che è simmetrica nel tempo (come previsto per una fase di funzioni con zero).Il conseguente trasferimento di funzioni è | H (z) | ^ 2 (con zero fase).
Ovviamente, le due fasi (filtraggio avanti e indietro) possono essere eseguiti in qualsiasi ordine.

Questo è il tipo di trattamento filtfilt () esegue.

Fate attenzione che, se si utilizza un filtro IIR, la sequenza ottenuta dopo il primo filtro (y [-n]) si estende a infinito nel tempo, e quando si prendono in ordine inverso dovete troncare nel tempo, e si pone un errore se don t compensare le condizioni iniziali.Il filtfilt () funzione tiene conto di questo effetto.

Il problema è che questa tecnica può essere applicata solo alle sequenze finita, e non in tempo reale, perché è necessario essere in grado di prendere una sequenza in entrambi gli ordini (in avanti e inversa).Questa è una grave limitazione per molte applicazioni.

Spero che questo sia utile.
Saluti

Z

 
hi Zorro e la Dora,
che è stato v nice.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sorriso" border="0" />

Ho avuto come funziona e come hanno detto i u cant per attuare in tempo reale (v difficile, anche se i dati sono stati presi in frame)

C'è un qualcosa di reale o di carta tempo zero fase IIR filtri?
u può suggerire una serie di link per la stessa?

thanks a lot
sam

 
Hi Sam,

HP qualsiasi filtro IIR è zero fase a frequenze molto più elevate rispetto alla frequenza di taglio.Se il tuo obiettivo è quello di eliminare la corrente continua e il segnale non ha componenti aroun DC, si potrebbe utilizzare un semplice filtro HP.Perché no?
Saluti

Z

 

Welcome to EDABoard.com

Sponsor

Back
Top