[an error occurred while processing this directive]
|
Помогите плиз. Большая просьба отнестись с пониманием, т.к. в цифровой фильтрации я не очень рублю.
Есть канал передачи данных с шумом.
1. При моделировании источник шума суммировать с данными до канала (фильтр со спадающей АЧХ) или после?
По каналу передаются данные, которые кодируются двухуровневым сигналом (+V и -V), что-то типа Манчестерского кода. Не суть важно. В алфавите 3 символа (каждый символ состоит из 2-х бит). Т.е. (+1;+1), (-1;-1), (+1;-1).
Данные оцифровываю с такой частотой, при которой получаю 10 отсчётов на 1 символ. Т.е. имею
+V +V +V +V +V +V +V +V +V +V.
–V –V –V –V –V –V –V –V –V –V.
+V +V +V +V +V –V –V –V –V –V.
Пытаюсь смоделировать эквалайзер, чтобы компенсировать искажение канала.
Ставить на входе просто компаратор не получиться, потому что на входе я явно вижу, информация точно не восстанавливается.
Никакой модуляции нет, т.е. сигнал обычный вещественный.
2. Какой длины делать фильтр? С чётным числом или нечётным?
Как я делаю эквалайзер:
КИХ-фильтр (длины 2N, N>10) с количеством коэффициентов. Выход фильтра (y{i}) подаю на решатель, который по 10 точкам из КИХ фильтра (y{0}, y{1},.. y{9}) считает расстояние до каждой точки алфавита. Ищу наименьшее расстояние (сумма квадратов разностей координат символа алфавита и сигнала с фильтра, т.е. сумма 10 квадратов) и принимаю решение о приходе того или иного символа (d{0}, d{1},.. d{9} например, (+V +V +V +V +V –V –V –V –V –V)). В следующий раз на решатель я подаю y{10}, y{11},.. y{19}, затем y{20}, y{21},.. y{29}, т.е. каждый раз вот так по 10 точек.
Здесь можно не 10 точек брать с КИХ-фильтра, а 2 (число битов в символе), для этого надо КИХ-фильтр с децимацией делать, но мне без децимации хотя бы разобраться.
Далее считаю ошибку для обновления (LMS) коэффициентов КИХ фильтра. Ошибка представляет собой вектор
(e{0}, e{1},.. e{9}) = (y{0}, y{1},.. y{9}) – (d{0}, d{1},.. d{9})
Вычитаю выход решателя из выхода фильтра! Читал материал везде по-разному. То первое из второго вычитают, то второе из первого =(
3. Как правильно?
Теперь, как я использую ошибку для обновления коэффициентов КИХ-фильтра:
Есть вектор ошибки (e{0}, e{1},.. e{9}).
Есть предыдущие коэффициенты фильтра (с{0}, c{1},.. с{2N-1}).
Есть предыдущие отсчёты сигнала (r{0}, r{1},.. r{2N-1}).
Есть шаг alpha.
Т.к. N>10, то
Новые коэффициенты считаю так:
С{0} = c{0} – e{0}*alpha*r{0}
С{1} = c{1} – e{1}*alpha*r{1}
………………………………...
С{9} = c{9} – e{9}*alpha*r{9}
C{10} = c{10} – e{0}*alpha*r{10}
C{11} = c{11} – e{1}*alpha*r{11}
…………………………………
…………………………………
C{2N-1} = c{2N-1} – e{9}*alpha*r{2N-1}
2N у меня делится на 10. Для удобства.
Здесь минус в выражении. Может плюс надо? Опять в разных источниках по-разному =(
5. Как правильно?
Итак, у меня e{0} обновляет С{0}, С{10}, С{20}, а e{1} - С{1}, С{11}, С{21}.
Может из вектора ошибки сделать скаляр? И использовать это число для обновления всех коэффициентов? Явно нигде не нашёл.
В итоге получается всё плохо =( Эквалайзер ничего не выравнивает. Бросил пока я это дело и играюсь с обычными фильтрами со статическими коэффициентами. Но хотелось бы универсальности и узнать где ошибка.
6. Ещё повторюсь – никак не могу найти QEDisign с нормальным кряком. Хочу иметь возможность сохранять коэффициенты после сбора нужного фильтра, а то приходится через полюса/нули всё в ручную считать =(
E-mail: info@telesys.ru