MATLAB „s filtfilt
provádí filtrování dopředu-dozadu, tj. filtruje, obrací signál, filtruje znovu a pak zase zpět. Zřejmě to bylo provedeno ke snížení fázových zpoždění? Jaké jsou výhody / nevýhody použití takového filtrování (myslím, že by to mělo za následek v efektivním zvýšení pořadí filtrů).
Bylo by lepší použít filtfilt
vždy místo filter
( tj. pouze filtrování dopředu)? Existují nějaké aplikace, kde je nutné toto použít a kde by se neměly používat?
Komentáře
- Nepoužívejte ' filtrování nulové fáze pro zvuk, protože způsobuje " předběžné vyzvánění ", které zní divně. Filtrování minimální fáze je přirozenější. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
odpověď
Nejlépe se na to podíváte ve frekvenční doméně. Pokud $ x [n] $ je vstupní posloupnost a $ h [n] $ je impulzní odezva filtru, pak je výsledek prvního průchodu filtru
$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$
s $ X (e ^ {j \ omega}) $ a $ H (e ^ {j \ omega}) $ Fourierovy transformace $ x [n] $ a $ h [n] $. Časový obrat odpovídá nahrazení $ \ omega $ $ – \ omega $ ve frekvenční doméně, takže po časovém obratu dostaneme
$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$
Druhý průchod filtru odpovídá dalšímu násobení s $ H (e ^ {j \ omega}) $:
$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $
který po časovém obrácení konečně dává spektru výstupního signálu
$$ Y (e ^ {j \ omega}) = X (e ^ {j \ omega }) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) = X (e ^ {j \ omega}) | H (e ^ {j \ omega}) | ^ 2 \ tag {1} $$
protože pro skutečné filtrační koeficienty máme $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $. Rovnice (1) ukazuje, že výstupní spektrum je získáno filtrací s filtrem s frekvenční odezvou $ | H (e ^ {j \ omega}) | ^ 2 $, whi ch má čistě skutečnou hodnotu, tj. jeho fáze je nulová a v důsledku toho nedochází k fázovým zkreslením.
Toto je teorie. Při zpracování v reálném čase je samozřejmě poměrně velké zpoždění, protože obrácení času funguje pouze tehdy, pokud povolíte latenci odpovídající délce vstupního bloku. Ale to nic nemění na skutečnosti, že nedochází k fázovým zkreslením, je to jen další zpoždění výstupních dat. Pro filtrování FIR není tento přístup nijak zvlášť užitečný, protože můžete také definovat nový filtr $ \ hat {h } [n] = h [n] * h [-n] $ a získáte stejný výsledek s běžným filtrováním. Je zajímavější použít tuto metodu s filtry IIR, protože nemohou mít nulovou fázi (nebo lineární fázi, tj. čisté zpoždění).
Souhrnně:
-
pokud máte nebo potřebujete filtr IIR a chcete nulové fázové zkreslení, zpoždění zpracování AND není potom problém tato metoda je užitečná
-
pokud je problém se zpožděním zpracování, neměli byste ji používat
-
pokud máte FIR filtr , můžete snadno vypočítat novou odezvu FIR filtru, která je ekvivalentní použití této metody. S filtry FIR lze vždy realizovat přesně lineární fázi.
Komentáře
- Vytvořil jsem značku s názvem
maximum-aposteriori-estimation
. Můžete jej přejmenovat namaximum-a-posteriori-estimation
? Omylem jsem zapomněl-
poa
. Děkuji.
Odpověď
Našel jsem toto video být velmi, velmi užitečný (rozvíjí Mattovu odpověď).
Zde je několik klíčových nápadů z videa:
- Nulová fáze bude Výsledkem nebude žádné fázové zkreslení, ale bude to mít za následek nekauzální filtr. To znamená, že pokud jsou data filtrována tak, jak jsou shromažďována, nebude to možnost (platí pouze pro uložená data, která můžeme následně zpracovat) .
- Když implementujete nekauzální filtr, přechody se rozmazají dopředu a dozadu (např. pokud chceme zvlnění 2 dB, skutečnost že pomocí filtru provedeme běh vpřed a vzad, znamená to, že každý z nich bude mít 1 dB).
- Používá vlastnost časově reverzní Fourierovy transformace v diskrétním čase.
- Účinná frekvenční odezva způsobená FILTFILTem je její velikost v jednom směru na druhou. Vezmete svůj vstupní signál,
x[n]
, filtrujete jej, obrátíte výsledek, znovu jej vyfiltrujete a znovu ho obrátíte (krok obrácení času vyžaduje, aby byla k dispozici všechna data).