MATLAB „s filtfilt face o filtrare înainte-înapoi, adică filtrează, inversează semnalul, filtrează din nou și apoi inversează din nou. Se pare că acest lucru este făcut pentru a reduce decalajele de fază? într-o creștere eficientă a ordinii filtrelor).

Ar fi preferabil să utilizați întotdeauna filtfilt în loc de filter ( adică, doar filtrare directă)? Există aplicații în care este necesar să se utilizeze acest lucru și unde nu ar trebui să fie folosit?

Comentarii

Răspuns

Cel mai bine îl puteți privi în domeniul frecvenței. Dacă $ x [n] $ este secvența de intrare și $ h [n] $ este răspunsul la impuls al filtrului, atunci rezultatul primei treceri a filtrului este

$$ X (e ^ {j \ omega}) H (e ^ {j \ omega}) $$

cu $ X (e ^ {j \ omega}) $ și $ H (e ^ {j \ omega}) $ Transformate Fourier de $ x [n] $ și respectiv $ h [n] $. Inversarea timpului corespunde înlocuirii $ \ omega $ cu $ – \ omega $ în domeniul frecvenței, deci după inversarea timpului obținem

$$ X (e ^ {- j \ omega}) H (e ^ {- j \ omega}) $$

A doua trecere a filtrului corespunde unei alte înmulțiri cu $ H (e ^ {j \ omega}) $:

$$ X (e ^ {- j \ omega}) H (e ^ {j \ omega}) H (e ^ {- j \ omega}) $ $

care după inversarea timpului oferă în sfârșit spectrul semnalului de ieșire

$$ 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} $$

deoarece pentru coeficienții de filtrare cu valoare reală avem $ H (e ^ {- j \ omega}) = H ^ {*} (e ^ {j \ omega}) $. Ecuația (1) arată că spectrul de ieșire este obținut prin filtrarea cu un filtru cu răspuns de frecvență $ | H (e ^ {j \ omega}) | ^ 2 $, whi ch are o valoare pur reală, adică faza sa este zero și, prin urmare, nu există distorsiuni de fază.

Aceasta este teoria. În procesarea în timp real, desigur, există o întârziere destul de mare, deoarece inversarea timpului funcționează numai dacă permiteți o latență corespunzătoare lungimii blocului de intrare. Dar acest lucru nu schimbă faptul că nu există distorsiuni de fază, este doar o întârziere suplimentară a datelor de ieșire. Pentru filtrarea FIR, această abordare nu este utilă mai ales, deoarece la fel de bine ați putea defini un nou filtru $ \ hat {h } [n] = h [n] * h [-n] $ și obțineți același rezultat cu filtrarea obișnuită. Este mai interesant să utilizați această metodă cu filtre IIR, deoarece acestea nu pot avea faza zero (sau faza liniară, adică o întârziere pură).

În concluzie:

  • dacă aveți sau aveți nevoie de un filtru IIR și doriți o distorsiune de fază zero, ȘI întârzierea procesării nu este o problemă, atunci această metodă este utilă

  • dacă întârzierea procesării este o problemă, nu trebuie să o utilizați

  • dacă aveți un filtru FIR , puteți calcula cu ușurință un nou răspuns de filtrare FIR care este echivalent cu utilizarea acestei metode. Rețineți că cu filtrele FIR se poate realiza întotdeauna o fază exact liniară.

Comentarii

  • Am creat o etichetă numită maximum-aposteriori-estimation. Ați putea să-l redenumiți în maximum-a-posteriori-estimation? Din greșeală am uitat - după a. Mulțumesc.

Răspunde

Am găsit acest videoclip să fie foarte, foarte util (se explică răspunsul lui Matt).

Iată câteva idei cheie din videoclip:

  • Faza zero va nu va avea nicio distorsiune de fază, dar va avea ca rezultat un filtru non-cauzal. Aceasta înseamnă că dacă datele sunt filtrate pe măsură ce sunt colectate, aceasta nu va fi o opțiune (valabilă doar pentru datele stocate pe care le putem procesa ulterior) . introduceți descrierea imaginii aici
  • Când implementați un filtru non-cauzal, tranzitorii se estompează înainte și înapoi (de exemplu, dacă dorim o ondulare de 2 dB, faptul faptul că vom „face o alergare înainte și înapoi folosind filtrul înseamnă că vom dori ca fiecare dintre acestea să aibă 1dB). introduceți descrierea imaginii aici
  • Folosește proprietatea de inversare a timpului transformatei Fourier în timp discret. introduceți descrierea imaginii aici
  • Răspunsul efectiv în frecvență cauzat de FILTFILT este magnitudinea celui într-o direcție, pătrat. Vă luați semnalul de intrare, x[n], îl filtrați, inversați rezultatul, îl filtrați din nou și îl inversați din nou (pasul de inversare a timpului necesită ca toate datele să fie disponibile). introduceți descrierea imaginii aici

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *