Перейти к содержанию
    

Непонятное поведение эквалайзера

Коллеги, понадобилось мне написать софтовый эквалайзер для записанных ранее в файл компонентов I,Q с модуляцией QPSK либо QAM16.

На входе эквалайзера символьная частота восстановлена, ошибка несущей исправлена.

Для этих картинок размер блока данных QPSK для обработки – 8К символов, четыре отсчёта на символ. Решение = +-500ед. Значение в файле задано +-100ед.

Ошибка АЧХ входного сигнала отключена. Эквалайзер имеет 23 тапа, реализация ссылка на статью

На картинке 3 выводится ошибка по решению, видно что процесс сходящийся, ошибка уменьшается.

На картинке 2 выводятся отсчёты с выхода эквалайзера, сигналы плавно от значения дрейфуют к решению.

В начале работы интеграторы инициализируются значением [zeros((nTAP-1)/2,1) 1 zeros((nTAP-1)/2,1)]

Непонятное поведение видно на первой картинке, это модуль ИХ эквалайзера в конце обработки входных данных.

Ожидалось что будет увеличиваться уровень центрального тапа от 1 до 5, но вместо этого почему-то увеличивается уровень первого тапа, а уровень центрального не меняется.

Подскажите, знающие люди, почему так может происходить?

Раньше делал модемы в «железе», там всегда за уровень отвечал центральный тап.

Если на вход попробовать подать сигнал с небольшим искажением АЧХ – эквалайзер уходит в разнос.

image.thumb.png.40e86d8e0a16ae150fe7ddf72c51a0be.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_sda

Подскажите, знающие люди, почему так может происходить?

В коде быстро теряется обозримость, элементарная ошибка в индексации массивов и всё поехало, ведь даже в статье картинки для чего-то, а не кусок кода на C. Вы же уже делали всё это в виде блок схемы, где все задержки в явном виде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, petrov сказал:

_sda

Подскажите, знающие люди, почему так может происходить?

В коде быстро теряется обозримость, элементарная ошибка в индексации массивов и всё поехало, ведь даже в статье картинки для чего-то, а не кусок кода на C. Вы же уже делали всё это в виде блок схемы, где все задержки в явном виде.

Да, вы правы, нашёл одну ошибку, только стало ещё хуже.

Цитата

Вы же уже делали всё это в виде блок схемы, где все задержки в явном виде.

Вы имеете ввиду модели в симулинке? А о каких задержках речь?

Я пишу программную реализацию, здесь в отличие от FPGA латентность отсутствует.

Или вы о другом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_sda

Вы имеете ввиду модели в симулинке? А о каких задержках речь?

Я пишу программную реализацию, здесь в отличие от FPGA латентность отсутствует.

Ну вот в картинках из журнала вижу задержки, они не зависят от реализации. Разработка алгоритма и перенос его на язык - разные задачи, если совмещать, то происходит самозапутывание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, petrov сказал:

_sda

Вы имеете ввиду модели в симулинке? А о каких задержках речь?

Я пишу программную реализацию, здесь в отличие от FPGA латентность отсутствует.

Ну вот в картинках из журнала вижу задержки, они не зависят от реализации. Разработка алгоритма и перенос его на язык - разные задачи, если совмещать, то происходит самозапутывание.

Очень похоже что именно с этим я и столкнулся. Почитаю ещё раз статью, похоже что-то пропустил.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...