Compensador de filtro FIR ao usar um filtro de dizimação CIC

Respostas:

3

Não há uma resposta única para sua pergunta: como em qualquer problema de projeto de filtro, isso depende de seus requisitos. Conforme descrito muito bem na página da Wikipedia , os filtros CIC (cascaded-integrator-comb) consistem em vários pares de estágios de integrador e pente (daí o nome). Cada estágio do integrador-pente possui uma resposta de impulso agregada equivalente a um filtro de vagão (por exemplo, um com uma resposta de freqüência retangular). A resposta de frequência (magnitude) de um vagão coberto tem uma forma semelhante a uma função sinc, de modo que a estrutura geral do CIC terá uma resposta de magnitude que se parece com uma função sinc levada a alguma potência , onde N é o número de estágios integrador-pente.NN

Entretanto, não há muitos botões para você ajustar com base em requisitos específicos de aplicativos. Você pode ajustar a taxa de dizimação / interpolação da estrutura do CIC, o atraso do pente e o número de estágios, mas ainda está com a resposta de frequência do tipo sinc, que não é particularmente ideal, pois não é plana na lóbulo principal e possui lóbulos laterais relativamente altos. Portanto, é típico que um CIC seja seguido por outro filtro que "limpe" a resposta geral.

O problema: o que você precisa de qualquer filtro de compensação que você colocar após o CIC será definido pelo seu aplicativo. O que é realmente importante é a resposta da cascata geral, que você restringiria com base nas necessidades do seu aplicativo. Não há filtro específico que seja "mais adequado".

Jason R
fonte
Onde você escreveu "um com uma resposta de frequência retangular", não quer dizer "um com uma retangular impulso resposta?
nibot
Sim, você está certo. Obrigado por apontar o erro.
Jason R
4

Havia uma pergunta semelhante, https://dsp.stackexchange.com/a/1551/306 , e o seguinte é um subconjunto da resposta da outra postagem.

Geralmente, para compensar um filtro CIC, o inverso da resposta dos filtros CIC pode ser usado para gerar o filtro de compensação. A CIC tem uma resposta de 2

H(ω)=|sEun(ωD/2)sEun(ωM/2)|N

Onde D é o atraso diferenciado, M é a taxa de dizimação e N é a ordem dos filtros (número de filtros em cascata). O inverso pode ser especificado como

H(ω)=|sEun(ωM/2)sEun(ωD/2)|N

Uma vez que tenhamos a resposta de frequência do filtro de compensação, podemos simplesmente escolher o comprimento do filtro FIR que desejamos. O comprimento do FIR é específico da aplicação. Obviamente, quanto mais tempo o filtro FIR, melhor a compensação.

A seguir, são apresentados gráficos dessa compensação direta.

A seguir, é apresentado o código Python para criar as respostas e gráficos de frequência.

importar numpy como np de numpy importar sin, abs, pi importar pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

sEunc-1 1

1 Altera, "Entendendo os filtros de compensação CIC"

2 R. Lyons, "Understanding Digital Signal Processing", 2ª ed., Prentice Hall, Upper Saddle River, Nova Jersey, 2004

Christopher Felton
fonte
Você mostra a resposta de frequência desejada no filtro de compensação ... mas como você obtém coeficientes de filtro que produzem um filtro que se aproxima dessa resposta? Eu acho que é isso que a pergunta está fazendo.
Nibot 12/12/12
0

Os ISOP (Polinômios Interpolados de Segunda Ordem) são frequentemente usados ​​para compensar a queda da banda passante CIC.

A resposta do Matlab desse filtro pode ser mostrada usando:

alpha = 0.01 ;
b     = [1, alpha, -alpha] ; 
h     = mfilt.firsrc(1,1,b)
freqz( b )

Escolher o alfa para seus requisitos é a parte complicada. No pior dos casos, simulações de força bruta da pré-forma, repetindo de 0 a 0,5 em incrementos de 0,001, encontrando o alfa que resulta na melhor compensação de inclinação. Definindo a melhor compensação de inclinação como um erro mínimo na borda da sua faixa de passagem.

Por questões de eficiência, esse filtro é normalmente colocado na taxa de dados mais baixa, antes do CIC para interpolação e depois do CIC para dizimação.

Morgan
fonte
Consulte Veja dsp.stackexchange.com/questions/19584/… para outra interpretação / explicação desta abordagem de compensação.
Dan Boschen