Kompensator filtra FIR przy zastosowaniu filtra dziesiętnego CIC

Odpowiedzi:

3

Nie ma jednej odpowiedzi na twoje pytanie: jak w przypadku każdego problemu z projektowaniem filtrów, zależy to od twoich wymagań. Jak opisano dość dobrze na stronie Wikipedii , filtry CIC (kaskadowo-integrator-grzebień) składają się z kilku par etapów integratora i grzebienia (stąd nazwa). Każdy stopień grzebieniowy integratora ma zagregowaną odpowiedź impulsową, która jest równoważna filtrowi boxcar (tj. O prostokątnej odpowiedzi częstotliwościowej). Odpowiedź częstotliwości (wielkości) wagonu ma kształt przypominający funkcję sinusa, więc ogólna struktura CIC będzie miała charakterystykę wielkości, która wygląda jak funkcja sinusa pobrana do pewnej mocy , gdzie N jest liczbą stopni grzebienia integratora.NN

Jednak nie ma zbyt wielu pokręteł do dostosowania w zależności od wymagań specyficznych dla aplikacji. Możesz dostosować stosunek decymacji / interpolacji struktury CIC, opóźnienie grzebienia i liczbę etapów, ale nadal utkniesz z pasmową charakterystyką częstotliwościową, która nie jest szczególnie idealna, ponieważ nie jest płaska w poprzek główny płat i ma stosunkowo wysokie boki boczne. Jest więc typowe, że po CIC następuje kolejny filtr, który „oczyszcza” ogólną odpowiedź.

Rub: to, czego potrzebujesz od dowolnego filtra kompensacyjnego, który umieścisz po CIC, zostanie zdefiniowane przez twoją aplikację. To, co naprawdę ważne, to reakcja ogólnej kaskady, którą ograniczyłbyś w zależności od potrzeb twojej aplikacji. Nie ma konkretnego filtra, który byłby „najbardziej odpowiedni”.

Jason R.
źródło
Gdzie napisał „jeden z prostokątnym częstotliwości odpowiedzi” nie znaczy „jeden z prostokątnym impulsowej odpowiedzi?
nibot
Tak, masz rację. Dzięki za zwrócenie uwagi na błąd.
Jason R
4

Było podobne pytanie, https://dsp.stackexchange.com/a/1551/306 , a poniżej jest podzbiór odpowiedzi z drugiego postu.

Ogólnie, aby skompensować filtr CIC, odwrotność odpowiedzi filtrów CIC może być wykorzystana do wygenerowania filtra kompensacji. CIC ma odpowiedź 2

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

Gdzie D jest opóźnieniem różnicowym, M jest szybkością decymacji, a N jest kolejnością filtrów (liczba filtrów kaskadowych). Odwrotność można określić jako

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

Po uzyskaniu odpowiedzi częstotliwościowej filtra kompensacyjnego, możemy po prostu wybrać pożądaną długość filtra FIR. Długość FIR zależy od aplikacji. Oczywiście im dłuższy filtr FIR, tym lepsza kompensacja.

Poniżej przedstawiono wykresy tej prostej kompensacji.

Poniżej znajduje się kod Pythona do tworzenia odpowiedzi częstotliwości i wykresów.

import numpy as np z numpy import sin, abs, pi import 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')

sinc1

1 Altera, „Zrozumienie filtrów kompensacyjnych CIC”

2 R. Lyons, „Understanding Digital Signal Processing”, wyd. 2, Prentice Hall, Upper Saddle River, New Jersey, 2004

Christopher Felton
źródło
Pokazujesz pożądaną odpowiedź częstotliwościową w filtrze kompensacji ... ale jak uzyskać współczynniki filtra, które wytwarzają filtr zbliżony do tej odpowiedzi? Myślę, że o to pyta pytanie.
nibot
0

ISOP (interpolowany wielomian drugiego rzędu) jest często używany do kompensacji opadania pasma przepustowego CIC.

Odpowiedź Matlaba tego filtra można wyświetlić za pomocą:

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

Wybór alfy do swoich wymagań to trudna część. Najgorszy przypadek symulacji siły brutalnej preformy, zapętlanie od 0 do 0,5 w przyrostach 0,001, znajdowanie alfa, co daje najlepszą kompensację opadania. Zdefiniowanie najlepszej kompensacji opadania jako minimalnego błędu na brzegu pasma przepustowego.

W celu zwiększenia wydajności filtr ten zwykle umieszcza się przy niższej szybkości przesyłania danych, przed CIC dla interpolacji i po CIC dla dziesiętnej.

Morgan
źródło
Patrz: dsp.stackexchange.com/questions/19584/... w celu uzyskania innej interpretacji / wyjaśnienia tego podejścia do kompensacji.
Dan Boschen