CIC decimation filtresi kullanırken FIR filtre kompansatörü


Yanıtlar:


3

Sorunuza tek bir cevap yok: herhangi bir filtre tasarımı probleminde olduğu gibi, gereksinimlerinize bağlıdır. Wikipedia sayfasında oldukça iyi açıklandığı gibi , CIC (basamaklı-tümleştirici-tarak) filtreleri bir dizi çiftleştirici ve tarak aşamasından oluşur (dolayısıyla adı). Her bir birleştirici-tarak aşaması, bir vagon filtresine eşdeğer olan bir toplam dürtü tepkisine sahiptir (yani, dikdörtgen frekans tepkisine sahip olan). Bir vagonun frekans (büyüklük) tepkisi, samimi bir işleve benzeyen bir şekle sahiptir, bu nedenle genel CIC yapısının, entegratör-tarak aşamalarının sayısı olduğu bazı güç alınan bir samimi fonksiyona benzeyen bir büyüklük yanıtı olacaktır .NN

Bununla birlikte, uygulamaya özgü gereksinimlere göre ayarlamanız için bir sürü düğme yoktur. CIC yapısının decimation / interpolation oranını, tarak gecikmesini ve aşama sayısını değiştirebilirsiniz, ancak hala düz olmayan, özellikle ideal olmayan samimi benzeri frekans tepkisi ile sıkışıp kalıyorsunuz. ana lob ve nispeten yüksek yan loblara sahiptir. Bu nedenle, bir CIC'nin ardından genel yanıtı "temizleyen" başka bir filtre gelmesi tipiktir.

Rub: CIC'den sonra koyduğunuz herhangi bir dengeleme filtresinden ihtiyacınız olan şey uygulamanız tarafından tanımlanacaktır. Gerçekten önemli olan, uygulamanızın ihtiyaçlarına göre kısıtlayacağınız genel kademenin yanıtıdır. "En uygun" özel filtre yok.


"Dikdörtgen frekans tepkisi olan biri" yazdığınız yerde, "dikdörtgen dürtü tepkisi olan biri" demek istemiyor musunuz?
nibot

Evet haklısın. Hatayı belirttiğiniz için teşekkürler.
Jason R

4

Benzer bir soru vardı, https://dsp.stackexchange.com/a/1551/306 ve aşağıdaki diğer gönderinin cevabının bir alt kümesidir.

Genel olarak, bir CIC filtresini telafi etmek için telafi filtresini üretmek üzere CIC filtrelerinin yanıtının tersi kullanılabilir. CIC'nin yanıtı 2

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

D'nin farklı gecikme olduğu durumda, M, decimation hızıdır ve N, filtre sırasıdır (kademeli filtre sayısı). Tersi olarak belirtilebilir

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

Telafi filtresinin frekans cevabını aldıktan sonra, istediğimiz FIR filtresinin uzunluğunu seçebiliriz. FIR uzunluğu uygulamaya özgüdür. Açıkçası FIR filtresi ne kadar uzun olursa o kadar iyi telafi edilir.

Aşağıdakiler, bu düz ileri tazminatın çizimleridir.

Frekans cevapları ve grafikleri oluşturmak için Python kodu aşağıdadır.

nümerik olarak np olarak içe aktarım

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')

Diğer yaklaşımlar ve yaklaşım 1 için , bkz. Altera, "CIC telafi filtrelerini anlama" .sinc1

1 Altera, "CIC telafi filtrelerini anlama"

2 R. Lyons, "Dijital Sinyal İşlemeyi Anlamak", 2. Baskı, Prentice Hall, Yukarı Eyer Nehri, New Jersey, 2004


Telafi filtresinde istenen frekans yanıtını gösterirsiniz ... ancak bu yanıta yaklaşan bir filtre üreten filtre katsayılarını nasıl alırsınız? Sorunun sorduğu şey bence.
nibot

0

ISOP (Enterpolasyonlu İkinci Dereceden Polinom) genellikle CIC geçiş bandı düşüşünün telafisi için kullanılır.

Bu filtrenin Matlab yanıtı aşağıdakiler kullanılarak gösterilebilir:

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

İhtiyaçlarınız için alfa seçimi zor kısmıdır. En kötü durum preform kaba kuvvet simülasyonları, en iyi düşüş dengelemesi ile sonuçlanan alfa bularak 0.001'lik artışlarla 0 ila 0.5'in üzerinde döngü yapar. En iyi düşüş telafisini geçiş bandınızın kenarında minimum hata olarak tanımlayın.

Verimlilik için bu filtre normalde düşük veri hızına, enterpolasyon için CIC'den önce ve decimation için CIC'den sonra yerleştirilir.


Bu tazminat yaklaşımının başka bir yorumu / açıklaması için bkz. Dsp.stackexchange.com/questions/19584/… .
Dan Boschen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.