Какой FIR-фильтр больше подходит для компенсации узкополосного сигнала с помощью каскадного интегрально-гребенчатого (CIC) фильтра , чтобы компенсировать частотную характеристику CIC?
Какой FIR-фильтр больше подходит для компенсации узкополосного сигнала с помощью каскадного интегрально-гребенчатого (CIC) фильтра , чтобы компенсировать частотную характеристику CIC?
Ответы:
На ваш вопрос нет однозначного ответа: как и в случае с любой конструкцией фильтра, это зависит от ваших требований. Как довольно хорошо описано на странице Википедии , фильтры CIC (cascaded-integrator-comb) состоят из нескольких пар ступеней интегратора и гребенки (отсюда и название). Каждый каскад интегратора имеет совокупный импульсный отклик, который эквивалентен фильтру вагон-автобуса (то есть с прямоугольным частотным откликом). Частотная (амплитудная) характеристика вагона имеет форму, напоминающую функцию sinc, поэтому общая структура CIC будет иметь амплитудную характеристику, которая выглядит как функция sinc, взятая для некоторой степени , где N - число ступеней гребенки интегратора.
Однако не так много ручек для настройки в зависимости от требований конкретного приложения. Вы можете настроить отношение прореживания / интерполяции структуры CIC, задержку гребенки и количество ступеней, но вы все еще застряли с синусоидальной частотной характеристикой, которая не особенно идеальна, так как она не ровная по основная доля и имеет относительно высокие боковые лепестки. Таким образом, для CIC обычно следует другой фильтр, который «очищает» общий ответ.
Суть в том, что вам нужно от любого компенсирующего фильтра, который вы установите после CIC, будет определяться вашим приложением. Что действительно важно, так это реакция всего каскада, который вы бы ограничивали в зависимости от потребностей вашего приложения. Там нет конкретного фильтра, который "наиболее подходит".
Был похожий вопрос, https://dsp.stackexchange.com/a/1551/306 , и ниже приводится часть ответа из другого поста.
Как правило, чтобы компенсировать фильтр CIC, обратная реакция фильтра CIC может использоваться для генерации фильтра компенсации. CIC имеет ответ 2
Где D - это задержка дифференцирования, M - скорость прореживания, а N - порядок фильтров (количество каскадных фильтров). Обратное можно указать как
Получив частотный отклик компенсационного фильтра, мы можем просто выбрать желаемую длину КИХ-фильтра. Длина РПИ зависит от приложения. Очевидно, что чем дольше КИХ-фильтр, тем лучше компенсация.
Ниже приведены графики этой прямой компенсации.
Ниже приведен код Python для создания частотных характеристик и графиков.
импорт numpy как np от numpy импорт 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')
1 Альтера, «Понимание компенсационных фильтров CIC»
2 Р. Лайонс, «Понимание цифровой обработки сигналов», 2-е изд., Прентис Холл, Аппер-Седл-Ривер, Нью-Джерси, 2004
ISOP (интерполированный полином второго порядка) часто используются для компенсации падения полосы пропускания CIC.
Ответ Matlab этого фильтра можно показать с помощью:
alpha = 0.01 ;
b = [1, alpha, -alpha] ;
h = mfilt.firsrc(1,1,b)
freqz( b )
Выбор альфы для ваших требований является сложной частью. В худшем случае симуляция грубой силы преформы преобразуется с 0 до 0,5 с шагом 0,001, находя альфа, что приводит к лучшей компенсации спада. Определение наилучшей компенсации понижения как минимальной ошибки на границе полосы пропускания.
Для эффективности этот фильтр обычно размещается на более низкой скорости передачи данных, перед CIC для интерполяции и после CIC для прореживания.