Jak utworzyć filtr kompensacji zniekształceń

11

Tworzę channelizer, który składa się ze złożonego miksera, decymatora CIC i filtru kompensacji / decymacji FIR. Ostateczny filtr FIR może, jeśli ma to znaczenie, zostać zaimplementowany jako więcej niż jeden filtr.

Moje pytanie brzmi: jak zaprojektować filtr, który kompensuje bardzo niepłaskie pasmo przenoszenia filtra CIC? Czy tworzysz pożądaną odpowiedź częstotliwościową, obliczając odwrotność odpowiedzi CIC, a następnie przepuszczasz ją przez odwrotną FFT, aby uzyskać odpowiedź impulsową?

Jak widać, chociaż mój szczególny problem dotyczy filtrów CIC, moje pytanie naprawdę dotyczy tego, w jaki sposób tworzysz filtr kompensacji zniekształceń.

Dziękuję za Twój czas.

Jim Clay
źródło
3
Filtr, którego celem jest kompensacja zniekształceń wcześniej w systemie komunikacyjnym, często nazywany jest korektorem ; które mogą w międzyczasie dać ci więcej informacji. Typowe typy to korektor wymuszający zero (co nie jest tym, czego chcesz, jeśli system, który kompensujesz, ma zera w odpowiedzi częstotliwościowej) i korektor minimalnego błędu średnich kwadratów (MMSE).
Jason R
@JasonR Znam Adaptacyjne korektory MMSE w kontekście korektorów korygujących kanał, ale wątpię, czy o to ci chodziło. Czy w jakiś sposób wytrenujesz korektor dźwięku? Myślę, że sedno polega na tym, jak określić, jaki jest błąd.
Jim Clay
MMSE odnosi się tylko do kryterium, o które dąży korektor; może być adaptacyjny lub nieadaptacyjny. Jeśli znasz funkcję przenoszenia systemu w celu kompensacji oraz funkcję autokorelacji dowolnego szumu addytywnego i oba są niezmienne w czasie, możesz uzyskać „” korektor MMSE, który zostanie z czasem ustalony. Rozwiązań adaptacyjnych można użyć, gdy albo ta informacja nie jest dokładnie znana, albo zmienia się w czasie (co jest dość powszechne).
Jason R
Filtry adaptacyjne często zawierają tryb treningowy, w którym wiele znanych symboli jest przesyłanych przez system, umożliwiając odbiornikowi pozwolenie, aby jego filtr zbiegał się na dobrym zestawie współczynników. Po szkoleniu często wchodzi się także w fazę śledzenia, w której operacja decyzyjna jest używana do ciągłej aktualizacji kurków filtrów. Alternatywnie, w reżimie, w którym SNR i ISI są „wystarczająco dobre”, tryb kierowania decyzją można od samego początku stosować jako schemat akwizycji w ciemno, pomijając fazę szkolenia.
Jason R
Znalezienie matematycznie dostępnego materiału do czytania jest nieco trudne. Podoba mi się Adaptacyjna teoria filtrów Haykina , ale przecięcie matematyki wymaga pewnego wysiłku (i potrzebujesz solidnego tła algebry liniowej). Jest to na tyle skomplikowane, że jeśli nie używasz go regularnie, musisz najpierw przejść do tematów statystycznego przetwarzania sygnałów.
Jason R

Odpowiedzi:

9

Poniższe informacje dotyczą kompensacji CIC i nie stanowią ogólnej techniki „zniekształcania”. Jest to jednak prosta metoda „kompensacji” niezmiennego „zniekształcenia”. Jeśli znana jest odpowiedź częstotliwościowa, można zastosować odwrotność częstotliwości w celu kompensacji. Przykłady takie jak filtr CIC, w których można zastosować filtr słabej jakości ze względu na zmniejszoną złożoność, są później kompensowane w łańcuchu sygnałowym. W tym przykładzie odpowiedź częstotliwościowa jest znana i można zastosować odwrotność. Uwaga: w przypadku filtrów o wielu prędkościach po zdziesiątkowaniu chcesz używać widma „użytecznego”.

Ogólnie, aby skompensować filtr CIC, odwrotność odpowiedzi filtrów CIC może być wykorzystana do wygenerowania filtra kompensacji. CIC ma odpowiedź (patrz odnośnik [r2] lub [r3])

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
from 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

[r1] Altera, „Zrozumienie filtrów kompensacyjnych CIC”

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

[r3] R. Lyons, „Understanding Cascaded Integrator Comb Filters”

Christopher Felton
źródło
Ref 1 jest świetny, ale używa innej terminologii (M = opóźnienie etapu, gdzie użyłeś D. R = Stopień redukcji, gdzie użyłeś M), więc zajęło mi trochę czasu, aby zobaczyć błąd: używasz WM / 2, Altera określa pi F / R. Po szybkim spisku Excela uważam, że wersja Altera jest poprawna.
Alan Campbell
@AlanCampbell Jeśli spiszesz powyższe równania (co zrobiłem we fragmencie kodu), zobaczysz, że nie ma błędu. To, czego nie wyjawiłem wprost w równaniach, to zysk . Zauważ, że we fragmencie kodu usuwam wzmocnienie. Jeśli uruchomisz snip kodu i zmodyfikujesz go, M=8a N=9on utworzy te same wykresy co referencja 1. Użyłem nomenklatury bliżej referencji 2.
Christopher Felton
2

Myślę, że odpowiedź Christophera jest dobra. Pomyślałem, że dodam jeden dla nas leniwych / oszustów.

Podczas kopania wokół fdatool Matlaba (Narzędzie do projektowania i analizy filtrów) odkryłem, że może on projektować i modelować zarówno filtry CIC, jak i odwrotne filtry cynkowe, przy czym odwrotny filtr cynkowy jest filtrem kompensacji zniekształceń CIC.

Generujesz filtr CIC, przechodząc od razu do strony „Utwórz filtr wielu stawek” (przycisk po lewej w wersji R2011b) i określając filtr CIC. Następnie możesz ustawić wszystkie parametry, które chcesz na nim, takie jak interpolacja / decymacja, liczba kaskad (Matlab nazywa to „sekcjami”) itp.

Odwrócony filtr cynkowy tworzy się, przechodząc do strony „Filtr projektu” (strona domyślnie ustawiana przez narzędzie po uruchomieniu) i określając „Odwrotny dolnoprzepustowy” z menu rozwijanego Dolnoprzepustowy. Następnie możesz ustawić dla niego różne parametry. Ma kilka unikalnych parametrów w części Opcje okna dialogowego, w tym „p”, co odpowiada liczbie kaskad (wykładnika sinusoidy).

Odwrotna konstrukcja filtra cynkowego nie była jednak w pełni satysfakcjonująca, ponieważ poprawienie go wydawało się mniejszym przykładem wykonania matematyki niż ustalenie, gdzie było moje pasmo przepustowe, jaki był w tym momencie spadek CIC, a następnie zaprojektowanie filtra, który z grubsza anulował z tego opadnięcia. Ponieważ mój filtr CIC miał cztery kaskady, pomyślałbym, że będę musiał ustawić „p” na cztery, ale wtedy to znacznie rekompensowało. Skończyło się na pozostawieniu „p” na 1, domyślnej wartości.

Narzędzie naprawdę świeciło, gdy zapisałem oba filtry w mojej sesji, a następnie przeszedłem do menedżera filtrów i kaskadowałem je, aby zobaczyć ogólną odpowiedź częstotliwościową. To było bardzo pomocne i łatwe do zrobienia.

Jim Clay
źródło
0

Bez powielania odpowiedzi tutaj, zobacz

jak zrobić filtr kompensacji CIC

który pokazuje bardzo proste rozwiązanie z 3 dotknięciami dla kompensacji CIC.

Jest to specyficzne dla CIC lub wymagane jest jakiekolwiek zastosowanie odwrotnego Sinc (na przykład przed konwersją D / A).

Aby zrekompensować jakiekolwiek ogólne zniekształcenie poprzeczne (to, które można by powielić z filtrem poprzecznym w przeciwieństwie do dynamicznego zniekształcenia szumu), przyjąłbym podejście wykorzystujące równania Wienera Hopfa, aby wymyślić filtr kompensacyjny przy użyciu podejścia najmniejszego kwadratu błędu, najlepiej używając sekwencji treningowej, jeśli jest dostępna, aby porównać pożądaną z rzeczywistą reakcją i wyszkolić korektor dźwięku. W przypadku aplikacji pokazującej to przy użyciu kodu źródłowego zobacz:

Kompensacja odpowiedzi częstotliwościowej głośnika w sygnale audio

Dan Boschen
źródło