Як створити фільтр компенсації спотворень


11

Я створюю каналізатор, який складається із складного змішувача, дециматора CIC та фільтра компенсації / децимації FIR. Кінцевий фільтр FIR, якщо це має значення, може бути реалізований як більш ніж один фільтр.

Моє запитання полягає в тому, як мені створити такий фільтр, щоб він компенсував дуже не плоску частотну характеристику фільтра CIC? Чи створюєте ви потрібну частотну характеристику, обчислюючи зворотну відповідь CIC, а потім запускаєте її через зворотний FFT, щоб отримати імпульсну відповідь?

Як бачите, хоча моя особлива проблема стосується фільтрів CIC, моє питання насправді стосується того, як ви створюєте будь-який фільтр компенсації викривлення.

Дякую за ваш час.


3
Фільтр, метою якого є компенсація спотворень раніше в системі зв'язку, часто називають еквалайзером ; що може дати вам ще трохи інформації, про яку ви прочитаєте. Поширені типи - це еквалайзер нульового примусу (який не є тим, що потрібно, якщо система, яку ви компенсуєте, має нулі у своїй частотній характеристиці) та еквалайзер мінімальної середньої квадратичної помилки (MMSE).
Jason R

@JasonR Я знайомий з адаптаційними еквалайзерами MMSE в контексті еквалайзерів, орієнтованих на прийняття рішень, але я сумніваюся, що це ви мали на увазі. Ви б якось тренували еквалайзер? Я думаю, що суть полягає в тому, як ви визначаєте, в чому помилка.
Джим Клей

MMSE посилається лише на критерій, до якого прагне еквалайзер; він може бути адаптивним або неадаптативним. Якщо ви знаєте функцію передачі системи для компенсації, а також функцію автокореляції будь-якого додаткового шуму, і обидва є інваріантними за часом, тоді ви можете отримати «еквалайзер MMSE», який буде зафіксований у часі. Адаптаційні рішення можна використовувати, коли або така інформація точно не відома, або вона змінюється з часом (що досить часто).
Джейсон R

Адаптивні фільтри часто включають режим навчання, коли через систему передається ряд відомих символів, що дозволяє одержувачу дозволяти своєму фільтру сходитися на хорошому наборі коефіцієнтів. Після тренінгу також зазвичай вводити фазу відстеження, де операція, спрямована на прийняття рішення, використовується для постійного оновлення фільтр-кранів. В якості альтернативи, в режимі, коли SNR та ISI є "досить хорошими", режим, орієнтований на прийняття рішень, може використовуватися з самого початку як схема сліпого придбання, пропускаючи етап навчання.
Джейсон R

Знайти читання з цієї теми, що є математично доступним, дещо складно. Мені подобається Теорія адаптивного фільтра Хейкіна , але потрібно пробити певні зусилля, щоб прорізати математику (і вам потрібен міцний фон лінійної алгебри). Досить складно, що якщо ви не використовуєте його регулярно, вам потрібно спочатку перейти до теми тем статистичної обробки сигналів.
Джейсон R

Відповіді:


9

Далі йдеться про компенсацію CIC і не є загальним методом "спотворення". Але це прямолінійний спосіб "компенсувати" незмінне "спотворення". Якщо частотна характеристика відома, для компенсації може бути використана обернена частота. Такі приклади, як фільтр CIC, де слабкий фільтр може бути використаний через зменшену складність, згодом компенсуються ланцюгом сигналів. У цьому прикладі частотна характеристика відома і обернена може бути використана. Зауважте, що за допомогою багатошвидкісних фільтрів ви бажаєте використовувати "корисний" спектр лише після децимації.

Як правило, для компенсації CIC-фільтра зворотний відгук CIC-фільтрів може бути використаний для генерації компенсаційного фільтра. CIC має відповідь (див. Посилання [r2] або [r3])

Н(ω)=|сiн(ωD/2)сiн(ωМ/2)|N

Де D - диференційована затримка, M - швидкість децимації, а N - порядок фільтрів (кількість каскадних фільтрів). Зворотне можна вказати як

Н(ω)=|сiн(ωМ/2)сiн(ωD/2)|N

Як тільки ми отримаємо частотну характеристику компенсаційного фільтра, ми можемо просто вибрати довжину фільтра FIR, яку ми бажаємо. Тривалість FIR залежить від застосування. Очевидно, що чим довше фільтр FIR, тим краща компенсація.

Далі наведені сюжети цієї прямої компенсації.

Далі йде код 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] про інші підходи та сiнc-1 наближення.

[r1] Altera, "Розуміння фільтрів компенсації CIC"

[r2] Р. Ліонс, "Розуміння цифрової обробки сигналів", 2-е видання, Прентіс Холл, річка Верхнє сідло, Нью-Джерсі, 2004

[r3] Р. Ліонс, "Розуміння каскадних фільтруючих гребінців"


Посилання 1 чудово, але використовує різну термінологію (M = затримка стадії, де ви використовували D. R = швидкість зменшення, де ви використовували M), тому мені знадобилося деякий час, щоб побачити помилку: ви використовуєте WM / 2, Altera вказує pi F / R. Після швидкого сюжету Excel я вважаю, що версія Altera є правильною.
Алан Кемпбелл

@AlanCampbell Якщо ви побудуєте наведені вище рівняння (що я зробив у фрагменті коду), ви побачите, що помилок немає. Те, що я прямо не називав у рівняннях, - це виграш . Зауважте, що в фрагменті коду я видаляю посилення. При запуску коду надріз і змінювати M=8і N=9створює ті ж ділянки в якості посилання 1. я використовував номенклатуру ближче до заслання 2.
Крістофер Фелтон

2

Я думаю, що відповідь Крістофера хороша. Я думав, що додам один для нас ледачий / шахрайський тип.

Під час копання по fdatool Matlab (інструмент для розробки та аналізу фільтру) я виявив, що він може розробляти і моделювати як CIC, так і зворотні фільтри sinc, де зворотний фільтр sinc є фільтром компенсації спотворення спотворень CIC.

Ви генеруєте фільтр CIC, перейшовши прямо на сторінку "Створити багатошвидкісний фільтр" (кнопка зліва у версії R2011b) та вказавши фільтр CIC. Потім ви можете встановити всі потрібні параметри на ньому, такі як швидкість інтерполяції / децимації, кількість каскадів (Matlab називає це "секціями") тощо.

Ви створюєте фільтр зворотного sinc, перейшовши на сторінку "Дизайн-фільтр" (сторінка, на яку інструмент за замовчуванням запускається), і в спадному меню Lowpass вкажіть "Inverse Sinc Lowpass". Потім ви можете встановити різні параметри для нього. У частині діалогового вікна "Параметри" є пара унікальних параметрів, включаючи "p", що відповідає кількості каскадів (показник sinc).

Дизайн зворотного фільтра sinc не був повністю задовольняючим, однак, оскільки його правильність здавалося менш примірником виконання математики, ніж з'ясування, де мій діапазон пропуску, що в цій точці знаходився дроп CIC, а потім проектування фільтра, який грубо скасовано з того садка. Оскільки мій фільтр CIC мав чотири каскади, я б подумав, що мені потрібно буде встановити "p" на чотири, але це значно перевиконав, коли я це зробив. У кінцевому підсумку я залишив "p" у 1, значення за замовчуванням

Інструмент справді блищав, коли я зберігав обидва фільтри під час сеансу, а потім зайшов у диспетчер фільтрів і каскадував їх, щоб побачити загальну частотну характеристику. Це було дуже корисно і легко зробити.


0

Не дублюючи відповідь тут, будь ласка, див

як зробити фільтр компенсації CIC

який показує дуже просте рішення з 3 кранів для компенсації CIC.

Це характерно для CIC або потрібна будь-яка програма для зворотного Sinc (наприклад, до перетворення D / A).

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

Компенсація частотного відгуку гучномовця в звуковому сигналі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.