Como posso projetar um filtro muito estreito?

15

Suponha que eu tenha um sinal de áudio amostrado em Hz e gostaria de criar um filtro passa-baixo que isola tudo abaixo de ~ Hz. No mundo digital, este é um filtro passa-baixo com a banda passante em . Além disso, a banda de transição também deve ser razoável. Criar um filtro FIR para isso pode ter muitos toques que, a longo prazo, afetam a precisão. Um filtro IIR também não é ideal porque o áudio sofre uma resposta de fase não linear nos filtros; portanto, a menos que o sinal seja filtrado, revertido e filtrado novamente, não é realmente uma opção.4800060[-π400,π400]

Uma transformação de wavelet poderia ser melhor nisso do que a filtragem regular de uma só vez?

Phonon
fonte
Existe uma razão para você não querer dizimar?
Lorem Ipsum
Não, dizimar é bom, desde que eu consiga o que quero.
Phonon
11
O que é uma banda de transição "razoável"? Isso vai determinar a ordem do seu filtro. Se sua banda de parada começa em 300 Hz, por exemplo, você provavelmente está em boa forma. Se você deseja alta atenuação em algo como 60,1 Hz, será longo. Filtros FIR longos não são necessariamente ruins, porém,
Jason R
5
Você precisa de uma especificação de filtro real, caso contrário, a pergunta não terá sentido. Declare a ondulação de banda passante aceitável, rejeição de banda de parada, largura da banda de transição etc.
Paul R
Faz sentido. Vai fazer.
Phonon

Respostas:

20

Se você está otimizando o tempo de engenharia e está em uma plataforma que suporta FFTs grandes (isto é, não ponto fixo), siga os conselhos do hotpaw2 e use convolução rápida . Ele terá um desempenho muito melhor do que uma implementação ingênua de FIR e deve ser relativamente fácil de implementar.

Por outro lado, se você tiver algum tempo para gastar com isso para obter a melhor implementação ou se estiver em uma plataforma de ponto fixo, use uma estrutura multirate down-filter-up-subtract. Mas é um pouco mais complicado fazer tudo certo.

Eu tenho acesso a implementações confiáveis ​​e altamente otimizadas de ferramentas de filtragem rápida e de convolução rápida. A convolução rápida leva cerca de 3x mais tempo para obter um desempenho equivalente do sinal em comparação com a estrutura de múltiplas taxas. Além disso, isso é até em uma plataforma de ponto flutuante. A diferença aumentaria consideravelmente em um ponto fixo dsp.

Em termos gerais:

Conversão descendente:

Use 8 estágios de filtros de meia banda, dizimados por 2 para transformar seu sinal de 48kHz em um sinal de 187,5 Hz. O primeiro estágio dessa redução de escala pode ter uma banda de transição muito ampla, permitindo que a energia atinja o mesmo nome, desde que não atinja novamente o intervalo abaixo dos 60 Hz. À medida que as etapas progridem, o número de torneiras precisa aumentar, mas elas serão aplicadas a taxas de amostragem progressivamente mais baixas, de modo que o custo geral de cada etapa permanece pequeno.

Filtragem:

Execute sua filtragem rigorosa em torno de 60 Hz bw para manter a energia que você deseja subtrair. Há uma vantagem dupla em fazer sua filtragem rigorosa na taxa baixa:

  1. 1Hz de largura de banda de transição é 256 vezes maior em termos de frequência digital na taxa baixa versus a taxa original. Portanto, cada toque no seu filtro é 256 vezes mais poderoso.
  2. O sinal em si está em uma taxa mais baixa, portanto o filtro precisa processar apenas 1/256 dos dados.

Conversão ascendente:

Essencialmente, este é o inverso dos estágios de dizimação. Cada um dos oito estágios do interpolador dobra a taxa estimando a amostra que fica entre amostras de entrada consecutivas. A banda de transição aumenta à medida que a taxa de amostragem aumenta.

Subtrair:

Subtraia o sinal filtrado passa-baixa de taxa total do sinal original. Se você ajustou corretamente todos os atrasos de grupo, a estrutura geral será um filtro passa-alto com uma largura de banda de transição estreita.

Mark Borgerding
fonte
Esta é uma resposta fantástica. Posso ter seus comentários sobre este post? Dsp.stackexchange.com/questions/29655/…
richieqianle
6

Experimente um filtro de convolução de adição / gravação de sobreposição com a FFT / IFFT mais longa que se adapta às suas restrições de latência e desempenho computacional. Você pode projetar filtros FIR extremamente longos ao usar esse método com FFTs ainda mais longas.

Se você conseguir fazer a FFT de toda a música ou de todo o seu arquivo de sinal de áudio em uma FFT + IFFT muito longa (existem algoritmos FFT especiais para vetores longos que não cabem no dcache ou na RAM), você não precisará fazer nada sobreponha o processo de adicionar / salvar, e você pode obter uma banda de transição muito estreita.

hotpaw2
fonte
4

Existem claramente duas opções: FIR e IIR. Como já foi dito, o FIR requer uma resposta de impulso MUITO longa (1000s de toques) e é caro em termos de memória, MIPS e latência com adição / economia de sobreposição, sendo a escolha mais eficiente. No entanto, a latência pode ser um problema real. Se você quiser usá-lo como passe alto para um subwoofer de home theater, a latência será tão alta que você perderá a sincronização labial com o vídeo.

O IIR é várias ordens de magnitude mais barato e, portanto, frequentemente usado. De fato, ele possui uma resposta de fase não plana, mas em muitos casos isso não é um problema ou pode ser contornado. Por exemplo, se você precisar de um filtro passa-alto para proteger os drivers em uma caixa de graves, a resposta da fase não é muito importante, pois a resposta geral da fase do sistema é dominada pelo driver, pelo gabinete e pela acústica na sala. O filtro desempenha apenas um papel menor aqui. Em muitos casos, você também precisa manter a fase "relativa" e não a absoluta. Digamos que você queira aplicar o passe alto no sinal A, mas não no sinal B, você pode simplesmente colocar um passe tudo correspondente no sinal B para que a fase relativa de A e B permaneça a mesma. A latência geral e o atraso do grupo dessa abordagem ainda são muito menores que o do método FIR.

Hilmar
fonte