Qual é a vantagem do filtfilt do MATLAB

30

O MATLAB filtfiltfaz uma filtragem para frente e para trás, ou seja, filtra, inverte o sinal, filtra novamente e depois inverte novamente. Aparentemente, isso foi feito para reduzir as defasagens de fase? Quais são as vantagens / desvantagens de usar essa filtragem (acho que resultaria em um aumento efetivo na ordem dos filtros).

Seria preferível usar filtfiltsempre em vez de filter(ou seja, apenas filtragem direta)? Existem aplicativos onde é necessário usá-lo e onde não deve ser usado?


fonte
Não use a filtragem de fase zero para o áudio, pois isso causa "pré-toque" que soa estranho. A filtragem de fase mínima é mais natural. ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
endolith

Respostas:

34

Você pode vê-lo melhor no domínio da frequência. Se for a sequência de entrada e h [ n ] for a resposta de impulso do filtro, o resultado da primeira passagem do filtro seráx[n]h[n]

X(ejω)H(ejω)

com e H ( e j ω ) o Fourier se transforma de x [ n ] e h [ n ] , respectivamente. A reversão do tempo corresponde à substituição de ω por - ω no domínio da frequência, portanto, após a reversão do tempo, obtemosX(ejω)H(ejω)x[n]h[n]ωω

X(ejω)H(ejω)

H(ejω)

X(ejω)H(ejω)H(ejω)

que, após a reversão do tempo, finalmente fornece o espectro do sinal de saída

(1)Y(ejω)=X(ejω)H(ejω)H(ejω)=X(ejω)|H(ejω)|2

H(ejω)=H(ejω)|H(ejω)|2

h^[n]=h[n]h[n]

Em suma:

  • se você possui ou precisa de um filtro IIR e deseja distorção de fase zero, E o atraso no processamento não é um problema, esse método é útil

  • se o atraso no processamento for um problema, você não deve usá-lo

  • se você tiver um filtro FIR, poderá calcular facilmente uma nova resposta do filtro FIR equivalente a usar esse método. Observe que, com os filtros FIR, uma fase exatamente linear sempre pode ser realizada.

Matt L.
fonte
Eu criei uma tag chamada maximum-aposteriori-estimation. Você poderia renomeá-lo maximum-a-posteriori-estimation? Por engano, esqueci o -depois do a. Obrigado.
Royi 27/09/17
15

Achei este vídeo muito útil (ele explica a resposta de Matt).

Aqui estão algumas idéias-chave do vídeo:

  • A fase zero resultará em nenhuma distorção de fase, mas resultará em um filtro não causal. Isso significa que, se os dados estiverem sendo filtrados à medida que são coletados, isso não será uma opção (válida apenas para os dados armazenados que podemos pós-processar).insira a descrição da imagem aqui
  • Quando você implementa um filtro não-causal, os transientes ficam embaçados para frente e para trás (por exemplo, se queremos uma ondulação de 2dB, o fato de estarmos fazendo uma corrida para frente e para trás usando o filtro significa que queremos cada estes possuem 1dB).insira a descrição da imagem aqui
  • Usa a propriedade de reversão de tempo da transformação de Fourier em tempo discreto. insira a descrição da imagem aqui
  • A resposta de freqüência efetiva causada pelo FILTFILT é a magnitude daquela em uma direção, ao quadrado. Você pega seu sinal de entrada x[n], filtra-o, inverte o resultado, filtra-o novamente e inverte-o novamente (a etapa de reversão do tempo exige que todos os dados estejam disponíveis).insira a descrição da imagem aqui
aralar
fonte