Как создать фильтр компенсации искажений

11

Я создаю канализатор, который состоит из сложного микшера, CIC- дециматора и фильтра компенсации / прореживания КИХ. Конечный FIR-фильтр может, если это имеет значение, быть реализован как более одного фильтра.

У меня вопрос, как мне спроектировать фильтр таким образом, чтобы он компенсировал очень неплоские частотные характеристики фильтра CIC? Создаете ли вы требуемый частотный отклик, вычисляя обратную величину отклика CIC, а затем пропускаете его через обратное БПФ, чтобы получить импульсный отклик?

Как вы можете видеть, хотя моя конкретная проблема относится к фильтрам CIC, мой вопрос на самом деле о том, как создать какой-либо фильтр компенсации искажений.

Спасибо за ваше время.

Джим Клэй
источник
3
Фильтр, целью которого является компенсация искажений ранее в системе связи, часто называют эквалайзером ; это может дать вам больше информации для чтения в то же время. Распространенными типами являются эквалайзер с принудительной установкой нуля (а это не то, что вам нужно, если компенсируемая система имеет нули в частотной характеристике) и эквалайзер минимальной среднеквадратичной ошибки (MMSE).
Джейсон Р
@JasonR Я знаком с адаптивными эквалайзерами MMSE в контексте компенсирующих каналов эквалайзеров, ориентированных на принятие решений, но сомневаюсь, что вы это имели в виду. Вы бы как-нибудь тренировали эквалайзер? Я думаю, суть в том, как вы определяете, в чем ошибка.
Джим Клэй
MMSE относится только к критерию, к которому стремится эквалайзер; это может быть адаптивным или неадаптивным. Если вам известна передаточная функция системы для компенсации и автокорреляционная функция любого аддитивного шума, и оба они не зависят от времени, то вы можете получить «эквалайзер» MMSE, который будет фиксирован с течением времени. Адаптивные решения могут использоваться, когда либо эта информация точно не известна, либо она меняется со временем (что довольно распространено).
Джейсон Р
Адаптивные фильтры часто включают режим обучения, в котором через систему передается ряд известных символов, что позволяет приемнику позволить своему фильтру сходиться с хорошим набором коэффициентов. После обучения также можно перейти к фазе отслеживания, где операция, ориентированная на принятие решения, используется для постоянного обновления отводов фильтра. В качестве альтернативы, в режиме, где SNR и ISI являются «достаточно хорошими», режим с принятием решений можно использовать с самого начала в качестве схемы слепого обнаружения, пропуская этап обучения.
Джейсон Р
Найти материал для чтения по этому предмету, который математически доступен, довольно сложно. Мне нравится теория адаптивных фильтров Хайкина , но для того, чтобы пробиться по математике , требуется некоторое усилие (и вам нужен какой-то твердый фон линейной алгебры). Это достаточно сложно, поэтому, если вы не используете его регулярно, вам нужно сначала разобраться с темами статистической обработки сигналов.
Джейсон Р

Ответы:

9

Нижеследующее касается компенсации CIC и не является общей техникой «искажения». Но это простой метод "компенсации" неизменяемого "искажения". Если частотный отклик известен, обратная частота может использоваться для компенсации. Примеры, такие как фильтр CIC, где плохой фильтр может использоваться из-за уменьшенной сложности, позже компенсируются цепью сигналов. В этом примере частотная характеристика известна, и может использоваться обратное. Обратите внимание, что с многоскоростными фильтрами вы хотите использовать «используемый» спектр только после прореживания.

Как правило, чтобы компенсировать фильтр CIC, обратная реакция фильтра CIC может использоваться для генерации фильтра компенсации. CIC имеет ответ (см. Ссылку [r2] или [r3])

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

Где D - это задержка дифференцирования, M - скорость прореживания, а N - порядок фильтров (количество каскадных фильтров). Обратное можно указать как

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

Получив частотный отклик компенсационного фильтра, мы можем просто выбрать желаемую длину КИХ-фильтра. Длина РПИ зависит от приложения. Очевидно, что чем дольше КИХ-фильтр, тем лучше компенсация.

Ниже приведены графики этой прямой компенсации.

Ниже приведен код Python для создания частотных характеристик и графиков.

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

См. [R1] для других подходов и приближений .sinc1

[r1] Альтера, "Понимание компенсационных фильтров CIC"

[r2] Р. Лайонс, «Понимание цифровой обработки сигналов», 2-е изд., Прентис Холл, Аппер-Седл-Ривер, Нью-Джерси, 2004

[r3] Р. Лайонс, «Понимание гребенчатых интегральных фильтров»

Кристофер Фелтон
источник
Ссылка 1 хороша, но использует другую терминологию (M = задержка этапа, где вы использовали D. R = Коэффициент снижения, где вы использовали M), поэтому мне потребовалось некоторое время, чтобы увидеть ошибку: вы используете WM / 2, Altera задает пи F / R. После быстрого сюжета в Excel, я считаю, что версия Altera является верной.
Алан Кэмпбелл
@AlanCampbell Если вы построите вышеприведенные уравнения (что я сделал в фрагменте кода), вы увидите, что ошибки нет. То, что я не назвал явно в уравнениях, это усиление . Обратите внимание, в коде снипп я снимаю усиление. Если вы запускаете фрагмент кода и изменяете его, M=8и N=9он создает те же графики, что и ссылка 1. Я использовал номенклатуру ближе к ссылке 2.
Кристофер Фелтон
2

Я думаю, что ответ Кристофера хороший. Я думал, что я добавлю один для нас ленивых / читеров.

Разобравшись с fdatool от Matlab (Инструмент проектирования и анализа фильтров), я обнаружил, что он может проектировать и моделировать как фильтры CIC, так и фильтры обратного сигнала, где фильтр обратного сигнала является фильтром компенсации искажения CIC.

Вы генерируете фильтр CIC, перейдя прямо на страницу «Создание многоскоростного фильтра» (кнопка слева в версии R2011b) и указав фильтр CIC. Затем вы можете установить для него все необходимые параметры, такие как скорость интерполяции / децимации, количество каскадов (Matlab называет это «разделами») и т. Д.

Вы создаете обратный фильтр Sinc, перейдя на страницу «Фильтр дизайна» (страницу, по которой инструмент запускается по умолчанию) и указав «Inverse Sinc Lowpass» в раскрывающемся меню «Низкий проход». Затем вы можете установить различные параметры для него. Он имеет несколько уникальных параметров в диалоговом окне «Параметры», включая «p», что соответствует количеству каскадов (показатель sinc).

Дизайн обратного фильтра sinc не был полностью удовлетворительным, хотя, поскольку его правильная работа выглядела не столько примером, сколько выяснением того, где находится моя полоса пропускания, каков был спад CIC в этот момент, а затем разработкой фильтра, который грубо отменил из этого свисания. Так как мой фильтр CIC имел четыре каскада, я бы подумал, что мне нужно будет установить «p» на четыре, но когда я это сделал, он был чрезмерно компенсирован. В итоге я оставил «р» на 1, значение по умолчанию.

Инструмент действительно светился, когда я сохранил оба фильтра в своем сеансе, а затем вошел в диспетчер фильтров и каскадировал их, чтобы увидеть общую частотную характеристику. Это было очень полезно и легко сделать.

Джим Клэй
источник
0

Не дублируя ответ здесь, смотрите

как сделать компенсационный фильтр CIC

который показывает очень простое решение с 3 ответвлениями для компенсации CIC.

Это относится к CIC или требуется любое применение для обратного Sinc (например, до цифро-аналогового преобразования).

Чтобы компенсировать любое общее поперечное искажение (то, которое может быть воспроизведено поперечным фильтром, а не динамическим шумовым искажением), я бы воспользовался подходом использования уравнений Винера-Хопфа для создания фильтра компенсации с использованием подхода наименьшей квадратной ошибки, в идеале используя обучающую последовательность, если она доступна, для сравнения желаемого с фактическим откликом и тренировки эквалайзера. Для приложения, показывающего это с использованием исходного кода, смотрите:

Компенсация АЧХ в аудиосигнале

Дэн Бошен
источник