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

http://upload.caxapa.ru/qam64.GIF

Посмотрите,пожалуйста.

Взял однобитный скремблер из DVB-C - не помогло.

 

Вот схема модулятора http://upload.caxapa.ru/Modulator.GIF

 

Это созвездие не подходит. И дифференциальное кодирование неправильно осуществляется у вас. Разберитесь для начала с диф кодированием QPSK. Диф кодирование для QAM для 2-х битов которые адресуют квадрант созвездия осуществляется так же как и для QPSK. Остальные биты адресуют точки внутри квадранта, вы должны пронумеровать их так чтобы при поворотах созвездия на +-90 и 180 эти биты не менялись, ну и по возможности соседние точки дожны отличаться в меньшем количестве битов.

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


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

О,сейчас приклеился файл...

 

Это созвездие не подходит. И дифференциальное кодирование неправильно осуществляется у вас. Разберитесь для начала с диф кодированием QPSK. Диф кодирование для QAM для 2-х битов которые адресуют квадрант созвездия осуществляется так же как и для QPSK. Остальные биты адресуют точки внутри квадранта, вы должны пронумеровать их так чтобы при поворотах созвездия на +-90 и 180 эти биты не менялись, ну и по возможности соседние точки дожны отличаться в меньшем количестве битов.

 

Спасибо! Да,с диффкодированием я намудрил.Буду переделывать.И квадранты проверю,результат сообщу уже видимо завтра.

post-18832-1214401816_thumb.jpg

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


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

Это созвездие не подходит. И дифференциальное кодирование неправильно осуществляется у вас. Разберитесь для начала с диф кодированием QPSK.

Это созвездие было из DVB-T,заменил на DVB-C.

post-18832-1214459890_thumb.jpg

Дифференциальное кодирование переделал,только не помогло это:-((

post-18832-1214460123_thumb.jpg

 

Что-то происходит с узлом подстройки по частоте несущей:если убрать блок Phase/FrequencyOffset из линии связи и на перемножитель подать константу то дескремблер восстанавливает любой код без ошибок.Но так не интересно.Что ещё можно посмотреть?

 

Происходит ошибка выбора квадранта т.к. при большом коде ошибка кратна 16-ти.

 

Может попробовать диффкодирование из DVB-C?

post-18832-1214461559_thumb.jpg

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


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

Это созвездие подходит, только кодирование грея для двух старших битов уже встроено.

Не надо Phase/FrequencyOffset убирать, частоты нулевой делаете, а сдвиг фазы 0 +-90 180 перебираете для проверки вашего диф кодирования. Не надо бездумно из стандартов какие-то операции вытаскивать, всё должно работать как и для 16 QAM работает, никакой принципиальной разницы нет. Вы на приёмной стороне декодер не забыли изменить?

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


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

Вы на приёмной стороне декодер не забыли изменить?

 

Нет,тогда бы он не восстанавливал код без блока Phase/FrequencyOffset.

Например,код "60" восстанавливается с блоком Phase/FrequencyOffset при FrequencyOffset=0 и Phase=270.При остальных фазах не восстанавливается.Вот ошибка при Phase=90.

post-18832-1214467477_thumb.jpg

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


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

Нет,тогда бы он не восстанавливал код без блока Phase/FrequencyOffset.

Например,код "60" восстанавливается с блоком Phase/FrequencyOffset при FrequencyOffset=0 и Phase=270.При остальных фазах не восстанавливается.Вот ошибка при Phase=90.

post-18832-1214467477_thumb.jpg

 

Ищите ошибки...

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


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

Ищите ошибки...

 

При FrequencyOffset=0 и Phase=0 комплексный гетеродин компенсации частотной ошибки выдаёт на перемножитель сигнал 0-i*1,в результате этого на выходе перемножителя сигнал появляется уже сдвинутым на -90 градусов и неправильно демаппируется.Если поставить Phase=90 то происходит компенсация фазового сдвига и передаваемый код декодируется нормально.Поясните,пожалуйста,эту ситуацию.

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


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

Александр,Ваша модель тоже так себя ведёт если поставить контрольный код "40".По модулю 16.

 

Странно,но сегодня повторить эту ситуацию с Вашей моделью мне не удалось,при тех же параметрах что вчера.

Похоже я поторопился с выводами,следствие продолжается...

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


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

Как оказалось,алгоритм дифф-кодирования должен выбираться согласно формируемому созвездию.Я этого не знал.После замены алгоритма дифф-кодирования на нужный,проверочный код стал стабильно восстанавливаться при любой фазовой ошибке(0,-90,90,180) и независимо от значения кода.Только после этого почему-то стал хуже работать узел синхронизации по несущей,буду искать причину,после её устранения можно будет начать работать с FPGA.

Александр,большое Вам спасибо за помощь!

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


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

Можно частоту дискретизации уменьшить вплоть до минимально необходимой по котельникову. Интерполятору фарроу необходима передискретизация примерно больше 4.5 отсчётов на символ, зависит от требуемой точности, тогда придётся полифазным фильтром увеличить количество отсчётов необходимое для нормальной работы интерполятора фарроу, всё это ессно делается без увеличения тактовой частоты в FPGA.

 

Александр,а можно немного подробнее об этом?Я упёрся в эту проблему,не получается сделать в FPGA интерполятор Фарроу при Ftakt = 8*Fsymb,слишком высокая частота тактов. А 4 такта на символ не нравится,проверял.Как это можно обойти?Мне очень понравилось Ваше"всё это ессно делается без увеличения тактовой частоты в FPGA".

Допустим,после полифазного интерполятора c R=2 есть две шины данных,одна с основными отсчётами,другая с интерполированными.Обе шины тактируются клоком Ftakt = 4*Fsymb.Можно эти шины как-то завести в Фарроу чтобы он тоже работал с Ftakt = 4*Fsymb,но при этом вёл себя так,как будто работает с Ftakt = 8*Fsymb?

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


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

Комбинационная схема интерполятора работает на символьной частоте(ну или например на удвоенной для дробного эквалайзера), если вы понимаете как поступают отсчёты на отводы с линии задержки интерполятора при тупой реализации с повышением тактовой без полифазного фильтра, то коммутировать так же с двух шин полифазного фильтра не представляет никаких сложностей.

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


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

Комбинационная схема интерполятора работает на символьной частоте

Это как?Сигнал Mu приходит с символьной частотой,но внутри символа он обрабатывается с частотой входных данных.

если вы понимаете как поступают отсчёты на отводы с линии задержки интерполятора при тупой реализации с повышением тактовой без полифазного фильтра

Так отсчёты на отводы тупо задерживаются на такт для каждого отвода,без обработки,что тут понимать?Или Вы имели ввиду отводные множители?Тут пока ясности нет.

коммутировать так же с двух шин полифазного фильтра не представляет никаких сложностей.

То есть,интерполятор Фарроу изменять не нужно,следует изменить только алгоритм заполнения линии задержки?Но ведь если на выходах полифазного фильтра мы имеем два отсчёта на такт(8 отсчётов на символ) то интерполятор Фарроу должен будет их обработать за 4 такта на символ?Тогда видимо из двух отсчётов полифазного фильтра нужно сформировать неким образом один отсчёт и подсунуть его Фарроу?

 

И ещё одна неприятность.В общем виде Фарроу представляет собой Out = A*Mu^3+B*Mu^2+C*Mu+D, где A,B,C,D - выходы отводных сумматоров.У Вас в модели Mu изменяется от -1 до 0.Для реализации в FPGA мне нужно Mu представить некой шиной например 8 бит(Mu изменилось в 2^8).Тогда чтобы не изменить рабочую точку Фарроу мне нужно вместо А,B,C подставить (А / 2^24,B/2^16,C/2^8).Для того чтобы после деления от А осталось хотя бы 8 бит, изначально А дожен иметь разрядность 2^32.Неприятно умножать такие числа,особенно с большой скоростью.Или то,о чём я сейчас пишу не является обязательным условием?Но в матлабе после изменения Mu Фарроу заработал только после ввода этих коэффициентов.

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


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

Это как?Сигнал Mu приходит с символьной частотой,но внутри символа он обрабатывается с частотой входных данных.

 

Так отсчёты на отводы тупо задерживаются на такт для каждого отвода,без обработки,что тут понимать?Или Вы имели ввиду отводные множители?Тут пока ясности нет.

 

То есть,интерполятор Фарроу изменять не нужно,следует изменить только алгоритм заполнения линии задержки?Но ведь если на выходах полифазного фильтра мы имеем два отсчёта на такт(8 отсчётов на символ) то интерполятор Фарроу должен будет их обработать за 4 такта на символ?Тогда видимо из двух отсчётов полифазного фильтра нужно сформировать неким образом один отсчёт и подсунуть его Фарроу?

 

В интерполяторе вычисления производятся с символьной частотой а не с частотой входных данных, вы можете поместить его в следующий клок домен и вытащить наружу только 4 шины на которые сейчас у вас поступают отсчёты с линии задержки с отводами и шину для mu, и на эти отводы должно то же самое поступать как бы вы не делалали с полифазным фильтром или без или ещё как, просто в нужный момент надо те же самые остчёты подать что и в случае более тупой реализации, ну были отсчёты у вас последовательно во времени, теперь они в пространстве ещё разнесены на выходе полифазного фильтра, это вопрос внимательной манипуляции с отсчётами.

 

И ещё одна неприятность.В общем виде Фарроу представляет собой Out = A*Mu^3+B*Mu^2+C*Mu+D, где A,B,C,D - выходы отводных сумматоров.У Вас в модели Mu изменяется от -1 до 0.Для реализации в FPGA мне нужно Mu представить некой шиной например 8 бит(Mu изменилось в 2^8).Тогда чтобы не изменить рабочую точку Фарроу мне нужно вместо А,B,C подставить (А / 2^24,B/2^16,C/2^8).Для того чтобы после деления от А осталось хотя бы 8 бит, изначально А дожен иметь разрядность 2^32.Неприятно умножать такие числа,особенно с большой скоростью.Или то,о чём я сейчас пишу не является обязательным условием?Но в матлабе после изменения Mu Фарроу заработал только после ввода этих коэффициентов.

 

Да все эти вопросы конечной разрядности не приятные, но таких мест будет куча, надо научиться прикидывать где промасштабировать, где округлить разряды, где с повышенной точностью вычисления надо проводить и т. п. это никто кроме вас сделать не сможет. Какая у вас символьная скорость? Наверняка можно на одном умножителе весь интерполятор сделать.

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


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

В интерполяторе вычисления производятся с символьной частотой а не с частотой входных данных, вы можете поместить его в следующий клок домен и вытащить наружу только 4 шины на которые сейчас у вас поступают отсчёты с линии задержки с отводами и шину для mu, и на эти отводы должно то же самое поступать как бы вы не делалали с полифазным фильтром или без или ещё как, просто в нужный момент надо те же самые остчёты подать что и в случае более тупой реализации, ну были отсчёты у вас последовательно во времени, теперь они в пространстве ещё разнесены на выходе полифазного фильтра, это вопрос внимательной манипуляции с отсчётами.

Често говоря не понял ответа.Ведь после интерполятора в блоке one_sps_clock_domain стоит ещё одна линия задержки из двух регистров,и данные в нее пишутся два раза за символ.А Вы говорите что в интерполяторе вычисления производятся с символьной частотой.

Я пробовал вот такой коммутатор:

interpolator.doc

Здесь входы - выход полифазника,а выходы через коммутатор используются в качестве линии задержки,коммутация выполняется каждый такт(чётный-верхний выход,нечётный - нижний выход).Но тут идёт потеря данных,два такта правильные данные,два потеряны.

Да все эти вопросы конечной разрядности не приятные, но таких мест будет куча, надо научиться прикидывать где промасштабировать, где округлить разряды, где с повышенной точностью вычисления надо проводить и т. п. это никто кроме вас сделать не сможет. Какая у вас символьная скорость? Наверняка можно на одном умножителе весь интерполятор сделать.

 

Ну да,я в матлабе разрядности и проверяю.

Fsymb = 35 Msps.

А как можно интерполятор Фарроу сделать на одном умножителе?

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


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

Често говоря не понял ответа.Ведь после интерполятора в блоке one_sps_clock_domain стоит ещё одна линия задержки из двух регистров,и данные в нее пишутся два раза за символ.А Вы говорите что в интерполяторе вычисления производятся с символьной частотой.

 

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

 

Я пробовал вот такой коммутатор:

Пробуйте ещё :)

 

Fsymb = 35 Msps.

А как можно интерполятор Фарроу сделать на одном умножителе?

 

Да высокая символьная, наверное с последовательной обработкой нет смысла заморачиваться.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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