[an error occurred while processing this directive]
И снова эквалайзер.
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 2b|!2b?.. 20 мая 2005 г. 18:29

Помогите плиз. Большая просьба отнестись с пониманием, т.к. в цифровой фильтрации я не очень рублю.

Есть канал передачи данных с шумом.
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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru