MATLAB “s filtfilt
doet een voorwaarts-achterwaarts filteren, dwz filteren, het signaal omkeren, opnieuw filteren en dan weer omkeren. Blijkbaar wordt dit gedaan om fasevertragingen te verminderen? Wat zijn de voor- / nadelen van het gebruik van een dergelijke filtering (ik denk dat het in een effectieve toename van de filtervolgorde).
Zou het beter zijn om altijd filtfilt
te gebruiken in plaats van filter
( dwz alleen voorwaartse filtering) Zijn er toepassingen waarvoor het nodig is en waar het niet zou moeten worden gebruikt?
Opmerkingen
- Gebruik ' geen nul-fase filtering voor audio, aangezien dit " pre-beltoon " dat klinkt vreemd. Minimumfasefiltering is natuurlijker. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
Antwoord
Je kunt het het beste bekijken in het frequentiedomein. Als $ x [n] $ de invoersequentie is en $ h [n] $ de impulsresponsie van het filter, dan is het resultaat van de eerste filterpassage
$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$
met $ X (e ^ {j \ omega}) $ en $ H (e ^ {j \ omega}) $ de Fourier-transformaties van respectievelijk $ x [n] $ en $ h [n] $. Tijdomkering komt overeen met het vervangen van $ \ omega $ door $ – \ omega $ in het frequentiedomein, dus na tijdomkering krijgen we
$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$
De tweede filterpass komt overeen met een andere vermenigvuldiging met $ H (e ^ {j \ omega}) $:
$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $
wat na tijdomkering eindelijk het spectrum van het uitgangssignaal oplevert
$$ 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} $$
omdat we voor filtercoëfficiënten met reële waarde $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $ hebben. Vergelijking (1) laat zien dat het uitgangsspectrum wordt verkregen door te filteren met een filter met frequentierespons $ | H (e ^ {j \ omega}) | ^ 2 $, whi ch heeft een zuivere reële waarde, d.w.z. de fase is nul en bijgevolg zijn er geen fasevervormingen.
Dit is de theorie. Bij real-time verwerking is er natuurlijk een vrij grote vertraging omdat time-reversal alleen werkt als je een latentie toestaat die overeenkomt met de lengte van het invoerblok. Maar dit verandert niets aan het feit dat er geen fasevervormingen zijn, het is slechts een extra vertraging van de uitvoergegevens. Voor FIR-filtering is deze benadering niet bijzonder nuttig omdat u net zo goed een nieuw filter $ \ hat {h } [n] = h [n] * h [-n] $ en krijg hetzelfde resultaat met gewone filtering. Het is interessanter om deze methode te gebruiken met IIR-filters, omdat ze geen nulfase (of lineaire fase, dwz een pure delay).
Samenvattend:
-
als je een IIR-filter hebt of nodig hebt en je wilt een nulfasevervorming, EN verwerkingsvertraging is dan geen probleem deze methode is handig
-
als verwerkingsvertraging een probleem is, mag je deze “niet gebruiken
-
als je een FIR-filter hebt , kunt u eenvoudig een nieuwe FIR-filterrespons berekenen die gelijk is aan het gebruik van deze methode. Merk op dat met FIR-filters altijd een exact lineaire fase kan worden gerealiseerd.
Reacties
- Ik heb een tag gemaakt met de naam
maximum-aposteriori-estimation
. Kunt u de naam wijzigen inmaximum-a-posteriori-estimation
? Ik ben per ongeluk de-
vergeten na dea
. Bedankt.
Antwoord
Ik heb deze video gevonden om heel, heel behulpzaam te zijn (het gaat in op het antwoord van Matt).
Hier zijn enkele belangrijke ideeën uit de video:
- Zero-phase will resulteren niet in fasevervorming, maar wel in een niet-causaal filter. Dit betekent dat als de gegevens worden gefilterd terwijl ze worden verzameld, dit geen optie is (alleen geldig voor opgeslagen gegevens die we kunnen achteraf verwerken) .
- Wanneer u een niet-causaal filter implementeert, worden transiënten voorwaarts en achterwaarts wazig (als we bijvoorbeeld een rimpel van 2 dB willen, is het dat we “voorwaarts en achterwaarts rennen met behulp van het filter, betekent dat we” willen dat elk van deze 1dB heeft).
- Gebruikt de tijdomkeringseigenschap van de discrete-tijd Fourier-transformatie.
- De effectieve frequentierespons veroorzaakt door FILTFILT is de grootte daarvan in één richting, in het kwadraat. U neemt uw invoersignaal,
x[n]
, filtert het, keert het resultaat om, filtert het opnieuw en keert het opnieuw om (voor de stap met tijdomkering moeten alle gegevens beschikbaar zijn).