Quais são os problemas ao projetar um filtro FIR usando FFT?

15

Estou tentando entender o relacionamento entre um filtro FIR projetado a partir dos "primeiros princípios" usando um núcleo de filtro com convolução e um filtro projetado de uma das duas maneiras usando a FFT (veja abaixo).

Pelo que entendi, a resposta de impulso de um filtro FIR é a mesma coisa que o kernel de convolução do filtro. (Corrija-me se eu estiver errado.)

Além disso, no meu entendimento, as frequências de componentes (ou seja, transformada de Fourier) da resposta de impulso de um filtro FIR são a mesma coisa que a resposta de frequência do filtro. E, portanto, a transformação inversa de Fourier me devolverá a resposta ao impulso (novamente, corrija-me se estiver errado).

Isso me leva a duas conclusões (ignorando a resposta da fase ou assumindo a resposta linear da fase):

  1. Eu deveria ser capaz de projetar um filtro FIR de resposta de frequência arbitrária "desenhando" minha resposta de frequência desejada, usando um IFFT para obter a resposta de impulso e usando isso como meu núcleo de convolução.

  2. Como alternativa, eu deveria ser capaz de criar um filtro pegando a FFT do sinal de entrada, multiplicando pela minha resposta de frequência arbitrária desejada no domínio da frequência e pegando um IFFT do resultado para produzir o sinal de saída.

Intuitivamente, parece que 1 e 2 são equivalentes, mas não tenho certeza se posso provar isso.

Parece que as pessoas (e a literatura DSP) se esforçam ao máximo para projetar kernels FIR com respostas predefinidas, usando algoritmos complicados (para mim) como Chebyshev ou Remez (estou jogando alguns nomes que li, sem realmente entendê-los) .

  • Por que ir para esses comprimentos, quando existe uma transformação FFT / IFFT para cada kernel FIR possível?
  • Por que não simplesmente desenhar a resposta de frequência exata que você deseja, fazer um IFFT e o seu kernel FIR (método 1 acima)?
bryhoyt
fonte
Minha área de interesse é áudio digital / música digital, caso seja relevante.
Bryhoyt 3/09/13

Respostas:

13

Uma razão pela qual você vê pessoas projetando filtros FIR, em vez de adotar uma abordagem direta (como 1 e 2) é que a abordagem direta geralmente falha em levar em conta a periodicidade no domínio da frequência e o fato de que a convolução implementada usando uma FFT é convolução circular .

O que isto significa?

Suponha que você tenha um sinal e uma resposta de impulso do filtro (núcleo de convolução; você está certo de que são iguais) h = [ 1 , 1 ] .x=[1 1,2,3,4]h=[1 1,1 1]

A convolução é [ 1 , 3 , 5 , 7 , 4 ] , um vetor de 5 comprimentos. Se você usar o FFT (do tamanho errado, 4), a resposta que você recebe é [ 3 , 5 , 7 , 5 ] . A razão para a diferença é que o resultado da convolução linear desses dois é o comprimento 5, mas o resultado da convolução circular é qualquer que seja o comprimento da FFT.y=xh[1 1,3,5,7,4][3,5,7,5]

Se o comprimento da FFT for maior ou igual ao comprimento do resultado da convolução linear, os dois serão os mesmos. Caso contrário, os dois não são os mesmos (a menos que os dados consigam de alguma forma fazê-lo, por exemplo, se um sinal for zero).

Peter K.
fonte
Claro, mas por que alguém não pode apenas garantir que os tamanhos de FFT / IFFT sejam proporcionais ao comprimento final da convolução? Por exemplo, o comprimento da convolução é N + M - 1, portanto, certifique-se de 'desenhar' uma resposta de frequência no domínio de quatro camadas, com comprimento M-1. Por que isso não funcionaria? Coisas interessantes btw. :)
TheGrapeBeyond
11
M-1 1
2
Uma resposta de frequência do comprimento M-1 ainda tem uma resposta de impulso de comprimento infinito. O que significa que, quando você deseja obter seu resultado filtrado, o final da resposta de impulso do filtro é contornado (várias vezes) e confundido com o resultado final no domínio do tempo. Talvez um pouco. Talvez muito.
hotpaw2
10

Um problema é lidar com transformações de comprimento infinito que envolvem ao usar uma FFT de comprimento finito. A transformada de Fourier de uma resposta de frequência de comprimento finito é uma resposta de impulso de comprimento infinito ou núcleo de filtro. A maioria das pessoas gostaria que o filtro terminasse antes de morrer ou ficar sem memória do computador, portanto, precisam de truques para produzir filtros FIR mais curtos. Apenas deixar a cauda da resposta infinita ao impulso envolver a FFT, ou truncá-la para um comprimento genérico, pode produzir um filtro FIR inferior para a especificação de frequência desejada em comparação com um dos protótipos de filtro "clássicos".

Outro problema é que uma resposta de frequência aleatória "desenhada" muitas vezes tem uma resposta horrível (ultrapassagens violentas) entre os pontos desenhados em qualquer resolução finita. Converta para um filtro FIR e ele soa como um louco. Os protótipos de filtro clássicos são projetados para ter funções de resposta de frequência que são suaves entre os pontos de amostra.

Seu (2) é chamado de convolução rápida e comumente usado se a FFT for maior que o comprimento da janela de dados mais o kernel do filtro combinado e adicionar / salvar a sobreposição adequada for usada para cuidar do início / fim de cada segmento de convolução ou janela (já que as FFTs geralmente têm um comprimento irregular).

hotpaw2
fonte
6

Re 1): Sim, você pode projetar um filtro FIR "desenhando" a resposta de frequência (em magnitude e fase. No entanto, isso tende a ser muito ineficiente: a duração da resposta de impulso (e a ordem do filtro) é simplesmente pré -determinado pelo seu comprimento de FFT.Se você escolheu um FFT de 128 pontos, obtém 128 toques para resposta ao impulso e se você escolheu FFT de 4096 pontos, obtém 4096 toques de filtro.

Re 2): Sim, você pode filtrar por multiplicação no domínio da frequência e essa é realmente a única maneira de fazê-lo eficientemente para respostas a grandes impulsos. No entanto, como Peter K apontou, a multiplicação no domínio da frequência corresponde à convolução circular. A maneira mais comum de implementar convolução linear são os algoritmos "overlap add" ou "overlap save" (facilmente pesquisados).

Hilmar
fonte
3

Não sei se entendi tudo o que foi dito aqui, mas gostaria de defender o método da Transformação de Fourier.

Primeiro, é uma maneira incrivelmente flexível e direta de projetar filtros FIR. Como você disse, tudo o que precisa ser feito é definir as respostas de magnitude e fase. No entanto, como foi dito, você precisa ter um pouco de cuidado ao definir a resposta. Uma resposta arbitrária pode exigir um número excessivamente grande de toques para implementar e fornecer uma resposta terrível no domínio do tempo. Portanto, tenha cuidado como você o define.

Em segundo lugar, é verdade que o método Parks McClellan, por exemplo, pode gerar um filtro melhor que o método Fourier para alguns requisitos específicos, mas não é fácil controlar a contagem de toques e também definir a magnitude, a fase e a resposta da etapa com esse método.

Por exemplo, suponha que você deseje projetar um filtro FIR com características semelhantes a um Bessel IIR de 10 pólos, mas deseje restringir um pouco a banda de transição (às custas do excesso de resposta da etapa). Em seguida, o método de Fourier torna esse um problema fácil de resolver com cerca de 22 toques, dependendo de quanto a banda de transição é reduzida.

Se você quiser ver do que o método Fourier é capaz, tente este programa FIR http://www.iowahills.com/5FIRFiltersPage.html (é grátis). Pode, por exemplo, projetar equivalentes IIR aos filtros Gauss, Bessel, Butterworth e Inverse Chebyshev. Em geral, permite ajustar a resposta de um filtro a quase tudo, que é o ponto forte do método de Fourier. No lado negativo, os filtros provavelmente não são ideais para alguns requisitos específicos.

user5108_Dan
fonte
Isso parece interessante. Vou ter que experimentar o software para realmente entender o que está acontecendo - a página da Web não parece descrever seu método com muitos detalhes. Pelo que sei, parece um híbrido em que você manipula a resposta de frequência de um protótipo de filtro gerado de uma maneira mais tradicional. Isso está correto? Eu acho que o que você diz é certo - você precisa ter cuidado ao definir a resposta ou terá um grande número de toques. AFAIU, este é o grande problema ao projetar um filtro exclusivamente com a resposta de frequência.
Bryhoyt 11/09/2013
1

AFAIK, isso é chamado de "abordagem de filtragem ingênua". Você pode influenciar o conteúdo espectral em determinados pontos no espaço de frequência, mas não faz nada útil para o conteúdo de frequência entre esses pontos. Se você projetar um filtro FIR adequado, também levará em consideração pontos entre esses pontos principais e esse filtro será muito melhor que o primeiro.

Atenciosamente, Bul.

user2064070
fonte