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".


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


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.


Consulte Veja dsp.stackexchange.com/questions/19584/… para outra interpretação / explicação desta abordagem de compensação.
Dan Boschen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.