Design do filtro FIR: Window vs Parks McClellan e Least Squares

21

Existem vantagens em usar uma abordagem de janela em relação aos algoritmos Parks-McClellan (abreviado aqui como PMcC) ou Least Squares para o design de filtros FIR de um filtro passa-baixo? Suponha com o poder computacional de hoje que a complexidade dos algoritmos em si não é um fator.

Esta questão não está comparando o PMcC com os mínimos quadrados, mas especificamente se existe algum motivo para usar qualquer técnica de design de janela FIR em vez desses algoritmos, ou as técnicas de janelas para filtrar o design são obsoletas por esses algoritmos e relegadas a fins didáticos?

Abaixo está uma comparação em que eu comparei uma janela de Hamming à minha abordagem de design preferida com a Least-Squared, usando o mesmo número de torneiras. Ampliei a banda passante na abordagem Menos Quadrada para corresponder à do Hamming Window e, nesse caso, ficou bem claro que o Menos Esquadrado teria um desempenho superior (oferecendo significativamente mais rejeição de banda de parada). Eu não fiz isso com todas as janelas, o que me leva à pergunta se você poderia superar o PMcC e os mínimos quadrados, ou se existem outros aplicativos para um filtro passa-baixo FIR, onde uma abordagem de janela seria preferida?

insira a descrição da imagem aqui

Dan Boschen
fonte
2
Eu poderia sugerir comparando Kaiser -windowed sinc para firpm()e firls().
22417 Robert Bristow-Johnson

Respostas:

16

Concordo que o método de design do filtro de janelas não é mais um dos métodos de design mais importantes, e pode realmente ser o caso de estar super-representado nos livros tradicionais, provavelmente devido a razões históricas.

No entanto, acho que seu uso pode ser justificado em determinadas situações. Não concordo que a complexidade computacional não seja mais um problema. Isso depende da plataforma. Sentados em nosso computador desktop e projetando um filtro, de fato não precisamos nos preocupar com a complexidade. No entanto, em plataformas específicas e em situações em que o design precisa ser realizado quase em tempo real, a complexidade computacional é um problema e uma técnica simples de design subótimo será preferida a uma técnica ideal que é muito mais complexa. Como exemplo, uma vez trabalhei em um sistema para formação de feixe em que o filtro (formador de feixe) precisaria ser redesenhado em tempo real, e, portanto, a complexidade computacional era realmente um problema.

Também estou convencido de que, em muitas situações práticas, não precisamos nos preocupar com a diferença entre o design ótimo e o subótimo. Isso se torna ainda mais verdadeiro se precisarmos usar aritmética de ponto fixo com coeficientes quantificados e resultados quantificados de operações aritméticas.

Outra questão é a estabilidade numérica dos métodos ideais de design de filtro e suas implementações. Já deparei com vários casos em que o algoritmo Parks-McClellan (devo dizer, a implementação que usei) simplesmente não converge. Isso acontecerá se a especificação não fizer muito sentido, mas também pode ocorrer com especificações totalmente razoáveis. O mesmo vale para o método de design dos mínimos quadrados, onde um sistema de equações lineares precisa ser resolvido, o que pode se tornar um problema mal condicionado. Nessas circunstâncias, o método de janelas nunca o decepcionará.

Uma observação sobre sua comparação entre o método da janela e o design dos mínimos quadrados: Eu não acho que essa comparação mostre qualquer superioridade geral do método dos mínimos quadrados sobre o método de janelas. Primeiro, você parece observar a atenuação da banda de parada, que não é uma meta de design para nenhum dos dois métodos. O método de janelas não é ideal em nenhum sentido, e o design dos mínimos quadrados minimiza a energia da banda de parada e não se importa com o tamanho da ondulação da banda de parada. O que pode ser visto é que a borda da banda passante do design da janela é maior que a do design dos mínimos quadrados, enquanto a borda da banda de parada é menor. Consequentemente, a largura da banda de transição do filtro projetada pela janela é menor, o que resultará em ondulações mais altas da banda de parada. A diferença na largura da banda de transição pode ser pequena, mas as propriedades do filtro são muito sensíveis a esse parâmetro. Não há dúvida de que o filtro de mínimos quadrados supera o outro filtro quando se trata de interromper a energia da banda, mas isso não é tão fácil de ver quanto o tamanho da ondulação. E a questão permanece: se essa diferença realmente faria diferença em uma aplicação prática.

Deixe-me mostrar-lhe que essas comparações geralmente podem ser feitas da maneira que se deseja. Na figura abaixo, comparo um filtro passa-baixo ideal para mínimos quadrados projetado com a função Matlab / Octave firls.m(azul) com um filtro passa-baixo projetado com o método window usando uma janela Kaiser (vermelho).

insira a descrição da imagem aqui

A partir da figura, pode-se até concluir que o filtro projetado pela janela é um pouco melhor que o filtro ideal de mínimos quadrados. É claro que isso não faz sentido, porque nem definimos "melhor", e o filtro de mínimos quadrados deve ter um erro de aproximação ao quadrado médio menor. No entanto, você não vê isso diretamente na figura. De qualquer forma, isso serve apenas para apoiar minha afirmação de que é preciso ter muito cuidado e clareza ao fazer essas comparações.

Em suma, além de ser útil aprender para os alunos do DSP por razões puramente didáticas, acho que, apesar dos avanços tecnológicos desde a década de 1970, o uso do método de janelas pode ser justificado em certos cenários práticos, e não acho que isso mude muito em breve.

Matt L.
fonte
Boa resposta Matt - Alguns esclarecimentos / perguntas: Em relação à complexidade, você pode criar um exemplo real? Posso ver isso como um problema de implementação, mas, ao apresentar os coeficientes, não consigo pensar em uma razão para fazer o design em uma plataforma inferior (daí a minha pergunta). Em relação à comparação, os mínimos quadrados são claramente melhores; para a mesma ondulação e transição, é melhor parar a atenuação da banda. Eu aumentara a largura da banda passante para combinar com os dois; a aresta é um pouco maior, pois foi aí que parei de combinar, mas poderia chegar mais perto para concluir.
Dan Boschen 18/02
2
@ DanBoschen: Obviamente, na maioria dos casos, o design é feito offline, e a complexidade não é um problema. No entanto, deparei-me com aplicativos em que os filtros precisariam ser reprojetados em tempo quase real (que era um aplicativo de formação de feixe), para que você tenha a questão da complexidade.
Matt L.
1
E quanto à economia real do número de torneiras com um design ideal em comparação com o design de uma janela, os resultados que eu vi são muitas vezes decepcionantes. Frequentemente, apenas 1 ou 2 toques, o que para muitas implementações não faria muita diferença.
Matt L.
1
OK, para projetos offline e se a estabilidade numérica não for um problema (para esse projeto específico; em geral, continua sendo um problema), a janela não seria útil. Mas, em geral, nem sempre podemos confiar em designs offline e, o mais importante, nem sempre podemos evitar problemas numéricos. Então eu acho que a palavra 'obsoleto' ainda é um pouco forte demais.
Matt L.
3
Muito bem dito. É importante lembrar que a engenharia visa encontrar uma implementação que seja boa o suficiente para atender aos seus requisitos. O método window é simples de implementar e sempre funciona. Outros métodos têm implementações mais complicadas e podem ter casos em que são difíceis de trabalhar. Eu trabalhei com vários sistemas que precisam projetar filtros em tempo real, e o método window é o ideal para essas situações.
Jason R
7

Os filtros Windinc Sinc podem ser gerados de forma adaptável em tempo real em processadores com potência insuficiente para executar o filtro FIR associado. Os filtros Sinc com janelas podem ser gerados em tempo limitado limitado.

A geração de alguns filtros Sinc com janelas simples pode ser completamente descrita (e inspecionada quanto a malware etc.) em algumas linhas de código , versus o uso cego de alguma caixa de ferramentas opaca.

É necessário um conhecimento matemático menos pré-requisito para explicar um filtro Sinc com janela, em comparação com o necessário para codificar um gerador de filtro PMcC do zero.

As ondulações iguais na resposta de frequência de um filtro PMcC podem causar artefatos no domínio do tempo que são diferentes (e talvez menos desejáveis) do que os artefatos produzidos por um simples filtro de janela.

hotpaw2
fonte
1
Sim, bom ponto @ hotpaw2, a ondulação da banda passante leva à interferência entre símbolos (ecos à direita e à direita). Obrigado
Dan Boschen
2
Conversamos sobre Parks – McClellan antes e depois do eco no comp.dsp em 2003 . Alexey Lukin postou um exemplo mínimo do MATLAB:, f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)que também roda no Octave. Uma explicação é que, com filtros muito íngremes, as ondulações podem ser regulares o suficiente para se parecer com um cosseno. O equivalente no domínio do tempo do domínio da frequência cosseno seria os dois ecos impulsivos.
Olli Niemitalo 06/07/19
6

Mostrarei aqui um benefício de um design com janelas e um truque para obter o mesmo benefício de Parks – McClellan.

Para filtros de meia banda, quarto de banda etc., a janela retém os zeros no domínio do tempo da função sinc dimensionada, que é o filtro passa-baixa ideal prototípico. Os zeros acabam nos coeficientes, reduzindo o custo computacional dos filtros. Para um filtro de meia banda, o design da janela fornece um filtro com todos os coeficientes pares 0, exceto o coeficiente intermediário (que também é considerado par):

Sinc
Figura 1. A função Sinc esticada horizontalmente por um fator de 2 é o filtro passa-banda de meia banda prototípico com um ganho de 2, adequado para a ampliação por um fator de 2.

No entanto, Parks-McClellan / Remez pode ser enganado para oferecer os mesmos benefícios, projetando-o usando um filtro com um número par de toques com apenas uma banda de aprovação de ganho de unidade definida. Os coeficientes obtidos são usados ​​como coeficientes ímpares de um filtro mais longo. O coeficiente médio do filtro mais longo é definido como 1 e os outros coeficientes pares como 0. Esse filtro tem um ganho de 2 na banda de passagem e ondulação simétrica nas bandas de passagem e parada. Em Python:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

Figura 2.
Figura 2. Coeficientes do filtro de meia banda projetados indiretamente usando Python scipy.signal.remez.

Figura 3.
Figura 3. Gráfico de resposta em frequência de magnitude do filtro de meia banda projetado indiretamente usando scipy.signal.remez.

Olli Niemitalo
fonte