MATLAB ”s filtfilt
gör en framåt-bakåt-filtrering, dvs filtrerar, reverserar signalen, filtrerar igen och sedan bakåt igen. Tydligen görs detta för att minska fasfördröjningar? Vilka är fördelarna / nackdelarna med att använda en sådan filtrering (antar att det skulle i en effektiv ökning av filterordningen).
Skulle det vara att föredra att använda filtfilt
alltid istället för filter
( dvs bara framåtfiltrering) Finns det några applikationer där det är nödvändigt att använda detta och där det inte ska användas?
Kommentarer
- Inte ' t använda nollfasfiltrering för ljud, eftersom det orsakar " förringning " det låter konstigt. Minifasfiltrering är mer naturligt. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
Svar
Du kan bäst titta på det i frekvensdomänen. Om $ x [n] $ är ingångssekvensen och $ h [n] $ är filtrets impulsrespons, blir resultatet av det första filterpasset
$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$
med $ X (e ^ {j \ omega}) $ och $ H (e ^ {j \ omega}) $ the Fourier-omvandlingar av $ x [n] $ respektive $ h [n] $. Tidsåterföring motsvarar att ersätta $ \ omega $ med $ – \ omega $ i frekvensdomänen, så efter tidsåterföring får vi
$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$
Det andra filterpasset motsvarar en annan multiplikation med $ H (e ^ {j \ omega}) $:
$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $
som efter tidsomvandling slutligen ger utgångssignalens spektrum
$$ 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} $$
eftersom vi för verkliga filterkoefficienter har $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $. Ekvation (1) visar att utgångsspektret erhålls genom att filtrera med ett filter med frekvensrespons $ | H (e ^ {j \ omega}) | ^ 2 $, whi ch är rent verkligt värderat, dvs dess fas är noll och det finns därför inga fasförvrängningar.
Detta är teorin. Vid realtidsbehandling är det naturligtvis ganska stort fördröjning eftersom tidsåterföring bara fungerar om du tillåter en latens som motsvarar längden på ingångsblocket. Men detta förändrar inte det faktum att det inte finns några fasförvrängningar, det är bara en ytterligare fördröjning av utdata. För FIR-filtrering är detta tillvägagångssätt inte särskilt användbart eftersom du lika gärna kan definiera ett nytt filter $ \ hat {h } [n] = h [n] * h [-n] $ och få samma resultat med vanlig filtrering. Det är mer intressant att använda denna metod med IIR-filter, eftersom de inte kan ha nollfas (eller linjär fas, dvs. en ren fördröjning).
Sammanfattningsvis:
-
om du har eller behöver ett IIR-filter och vill ha nollfasförvrängning, OCH bearbetningsfördröjning är inget problem då den här metoden är användbar
-
om bearbetningsfördröjning är ett problem bör du inte använda den
-
om du har ett FIR-filter , kan du enkelt beräkna ett nytt FIR-filtersvar som motsvarar att använda denna metod. Observera att med FIR-filter kan en exakt linjär fas alltid realiseras.
Kommentarer
- Jag skapade en tagg med namnet
maximum-aposteriori-estimation
. Kan du snälla byta namn på det tillmaximum-a-posteriori-estimation
? Av misstag glömde jag-
eftera
. Tack.
Svar
Jag hittade den här videon för att vara väldigt, mycket hjälpsam (det beskriver Matts svar).
Här är några viktiga idéer från videon:
- Nollfas kommer att resulterar i ingen fasförvrängning, men kommer att resultera i ett icke-kausalt filter. Detta innebär att om data filtreras när de samlas in kommer detta inte att vara ett alternativ (endast giltigt för lagrade data som vi kan efterbehandla) .
- När du implementerar ett icke-kausalt filter, blir transienter suddiga framåt och bakåt (t.ex. om vi vill ha en 2dB krusning, faktum att vi ska göra en framåt- och bakåtkörning med hjälp av filtret betyder att vi vill att var och en av dessa ska ha 1 dB).
- Använder tidsåterställningsegenskapen för den diskreta Fourier-transformen.
- Det effektiva frekvenssvaret som orsakas av FILTFILT är storleken på det i en riktning, i kvadrat. Du tar din ingångssignal,
x[n]
, filtrerar den, vänder om resultatet, filtrerar det igen och vänder om det igen (tidsomvandlingssteget kräver att all data är tillgänglig).