Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Демодуляция QAM
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2, 3, 4
petrov
Цитата(_Anatoliy @ Apr 12 2008, 16:04) *
Ясно,спасибо.Но если диапазон символьных скоростей относится,например, как 1:4 и с возможным шагом 1% то непонятно как тогда быть?Может по заданной символьной скорости вычислять необходимые коэффициенты фильтров?Не хранить же все возможные в памяти?


Ну это не значит что надо громадное количество фильтров. Символьный синхронизатор будет ресамплить с некоторой передискретизацией, внутри будет фиксированный согласованный фильтр давить "хвосты" ненужные, а перед интерполятором ФНЧ с загружаемыми коэффициентами, в памяти небольшое количество наборов коэффициентов, такое чтоб наложений спектров небыло при ресамплинге.
_Anatoliy
Цитата(petrov @ Apr 12 2008, 15:38) *
Ну это не значит что надо громадное количество фильтров. Символьный синхронизатор будет ресамплить с некоторой передискретизацией, внутри будет фиксированный согласованный фильтр давить "хвосты" ненужные, а перед интерполятором ФНЧ с загружаемыми коэффициентами, в памяти небольшое количество наборов коэффициентов, такое чтоб наложений спектров небыло при ресамплинге.


Спасибо,пока больше вопросов нет.
Михаил_K
Цитата(_Anatoliy @ Apr 11 2008, 23:44) *
И ещё один вопросик.
Если у меня символьная скорость будет находиться в диапазоне,скажем от 10 до 20 msps(к примеру приёмник должен уметь принимать данные от разных передатчиков,а у каждого передатчика своя символьная скорость),то как правильно поступить - изменять тактовую частоту АЦП по принципу ВСЕГДА 4 ТАКТА НА СИМВОЛ или установить фиксировано 80 МГц? laughing.gif


Да, и вот тут-то интерполятор и понадобиться.


Цитата(alex_os @ Apr 11 2008, 23:28) *
Что-то сильно монстроидальный интерполятор получился у Вас. У меня полиномиальный интерполятор 3го порядка , структура Farrow, порядка 2000LE в первом циклоне занимал. На 100 Мгц работает, при том что умножителей в этой плисине нет вообще.


Все зависит от того, какое качество вы хотите получить smile.gif . У нас для идеального сигнала (с тестового генератора) С/Ш на выходе демодулятора для сигнала QAM256 порядка 41 - 43 дБ на тактовых порядка 40 МГц.
_Anatoliy
Цитата(petrov @ Apr 12 2008, 15:38) *


Александр,видимо к Вам вопрос.
Я переделал Вашу модель qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl для QAM64,всё работает (пока в матлабе),осталась одна непонятка.Вы в своей модели скремблируете число "5" и после демодуляции и дескремблирования получаете те же "5".У меня же созвездия стоят устойчиво,а на выходе вместо пятёрки мусор.Скремблер я переделал под QAM64,дескремблер его код восстанавливает нормально(если его включить сразу в модуляторе).Что нужно проверить?Может у меня созвездие повёрнуто на 90(180,270) градусов?Как это проверить?
petrov
Цитата(_Anatoliy @ Jun 25 2008, 15:05) *
Александр,видимо к Вам вопрос.
Я переделал Вашу модель qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl для QAM64,всё работает (пока в матлабе),осталась одна непонятка.Вы в своей модели скремблируете число "5" и после демодуляции и дескремблирования получаете те же "5".У меня же созвездия стоят устойчиво,а на выходе вместо пятёрки мусор.Скремблер я переделал под QAM64,дескремблер его код восстанавливает нормально(если его включить сразу в модуляторе).Что нужно проверить?Может у меня созвездие повёрнуто на 90(180,270) градусов?Как это проверить?


У вас должна неоднозначность фазы как то восстанавливаться, через дифференциальное кодирование например или через передачу какой-то известной последовательности. У меня было сделано дифференциальное кодирование, при этом нужно специальным образом пронумерованное созвездие, оно кстати не наилучшее с точки зрения битовой ошибки. В блоке который сдвиг несущей задаёт, можно и фазу сдвинуть, попробуйте +-90, 180, при каком то должно заработать если других ошибок нету.
_Anatoliy
Цитата(petrov @ Jun 25 2008, 14:57) *
У вас должна неоднозначность фазы как то восстанавливаться, через дифференциальное кодирование например или через передачу какой-то известной последовательности. У меня было сделано дифференциальное кодирование, при этом нужно специальным образом пронумерованное созвездие, оно кстати не наилучшее с точки зрения битовой ошибки. В блоке который сдвиг несущей задаёт, можно и фазу сдвинуть, попробуйте +-90, 180, при каком то должно заработать если других ошибок нету.

Спасибо Александр!
Установил фазу 180 градусов и проверочный код "4" - всё заработало!Но при коде "5" ни при какой фазе восстановления нет.Такого же не должно быть...Дифференциальное кодирование у меня есть.
И ещё,при коде "5" в захват система входит примерно за 5000 символов,а при коде "23" - более 20000 символов.Может глянете надосуге?

Не удаётся файл присоединить....Сейчас куда-нибудь выложу.

http://upload.caxapa.ru/u8tq64fpga_temp.mdl

Код "17" восстанавливается только при фазе 270 градусов,чехарда какая-то:-(((
petrov
Цитата(_Anatoliy @ Jun 25 2008, 16:36) *
Спасибо Александр!
Установил фазу 180 градусов и проверочный код "4" - всё заработало!Но при коде "5" ни при какой фазе восстановления нет.Такого же не должно быть...Дифференциальное кодирование у меня есть.
И ещё,при коде "5" в захват система входит примерно за 5000 символов,а при коде "23" - более 20000 символов.Может глянете надосуге?
Не удаётся файл присоединить....Сейчас куда-нибудь выложу.


Не должна от передаваемой информации синхронизация слетать. Значит скремблер плохой, у меня в модели он от балды, так что не больно там за основу берите. Так если есть диф кодирование, то почему же оно не работает? Как созвездие нумеровали?

Модель вашу посмотреть не смогу, у вас симулинк новее.
_Anatoliy
Цитата(petrov @ Jun 25 2008, 15:49) *
Не должна от передаваемой информации синхронизация слетать. Значит скремблер плохой, у меня в модели он от балды, так что не больно там за основу берите. Так если есть диф кодирование, то почему же оно не работает? Как созвездие нумеровали?

Для созвездия взял нумерацию из QAM64 для DVB-C.А какой лучше скремблер применить?Модель сможете глянуть?
petrov
Цитата(_Anatoliy @ Jun 25 2008, 16:55) *
Для созвездия взял нумерацию из QAM64 для DVB-C.А какой лучше скремблер применить?Модель сможете глянуть?


Вы уверены что нумерация подходит для вашего диф кодирования? Выложите картинку из стандарта. Сремблер возьмите однобитный, на основе генератора M последовательности максимальной длины.
_Anatoliy
Цитата(petrov @ Jun 25 2008, 16:08) *
Вы уверены что нумерация подходит для вашего диф кодирования? Выложите картинку из стандарта. Сремблер возьмите однобитный, на основе генератора M последовательности максимальной длины.


http://upload.caxapa.ru/qam64.GIF
Посмотрите,пожалуйста.
Взял однобитный скремблер из DVB-C - не помогло.

Вот схема модулятора http://upload.caxapa.ru/Modulator.GIF
petrov
Цитата(_Anatoliy @ Jun 25 2008, 17:25) *
http://upload.caxapa.ru/qam64.GIF
Посмотрите,пожалуйста.
Взял однобитный скремблер из DVB-C - не помогло.

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


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

Цитата(petrov @ Jun 25 2008, 16:44) *
Это созвездие не подходит. И дифференциальное кодирование неправильно осуществляется у вас. Разберитесь для начала с диф кодированием QPSK. Диф кодирование для QAM для 2-х битов которые адресуют квадрант созвездия осуществляется так же как и для QPSK. Остальные биты адресуют точки внутри квадранта, вы должны пронумеровать их так чтобы при поворотах созвездия на +-90 и 180 эти биты не менялись, ну и по возможности соседние точки дожны отличаться в меньшем количестве битов.


Спасибо! Да,с диффкодированием я намудрил.Буду переделывать.И квадранты проверю,результат сообщу уже видимо завтра.
_Anatoliy
Цитата(petrov @ Jun 25 2008, 16:44) *
Это созвездие не подходит. И дифференциальное кодирование неправильно осуществляется у вас. Разберитесь для начала с диф кодированием QPSK.

Это созвездие было из DVB-T,заменил на DVB-C.
Нажмите для просмотра прикрепленного файла
Дифференциальное кодирование переделал,только не помогло это:-((
Нажмите для просмотра прикрепленного файла

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

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

Может попробовать диффкодирование из DVB-C?
Нажмите для просмотра прикрепленного файла
petrov
Это созвездие подходит, только кодирование грея для двух старших битов уже встроено.
Не надо Phase/FrequencyOffset убирать, частоты нулевой делаете, а сдвиг фазы 0 +-90 180 перебираете для проверки вашего диф кодирования. Не надо бездумно из стандартов какие-то операции вытаскивать, всё должно работать как и для 16 QAM работает, никакой принципиальной разницы нет. Вы на приёмной стороне декодер не забыли изменить?
_Anatoliy
Цитата(petrov @ Jun 26 2008, 10:33) *
Вы на приёмной стороне декодер не забыли изменить?


Нет,тогда бы он не восстанавливал код без блока Phase/FrequencyOffset.
Например,код "60" восстанавливается с блоком Phase/FrequencyOffset при FrequencyOffset=0 и Phase=270.При остальных фазах не восстанавливается.Вот ошибка при Phase=90.
Нажмите для просмотра прикрепленного файла
petrov
Цитата(_Anatoliy @ Jun 26 2008, 12:05) *
Нет,тогда бы он не восстанавливал код без блока Phase/FrequencyOffset.
Например,код "60" восстанавливается с блоком Phase/FrequencyOffset при FrequencyOffset=0 и Phase=270.При остальных фазах не восстанавливается.Вот ошибка при Phase=90.
Нажмите для просмотра прикрепленного файла


Ищите ошибки...
_Anatoliy
Цитата(petrov @ Jun 26 2008, 11:09) *
Ищите ошибки...


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

Странно,но сегодня повторить эту ситуацию с Вашей моделью мне не удалось,при тех же параметрах что вчера.
Похоже я поторопился с выводами,следствие продолжается...
_Anatoliy
Как оказалось,алгоритм дифф-кодирования должен выбираться согласно формируемому созвездию.Я этого не знал.После замены алгоритма дифф-кодирования на нужный,проверочный код стал стабильно восстанавливаться при любой фазовой ошибке(0,-90,90,180) и независимо от значения кода.Только после этого почему-то стал хуже работать узел синхронизации по несущей,буду искать причину,после её устранения можно будет начать работать с FPGA.
Александр,большое Вам спасибо за помощь!
_Anatoliy
Цитата(petrov @ Apr 11 2008, 12:35) *
Можно частоту дискретизации уменьшить вплоть до минимально необходимой по котельникову. Интерполятору фарроу необходима передискретизация примерно больше 4.5 отсчётов на символ, зависит от требуемой точности, тогда придётся полифазным фильтром увеличить количество отсчётов необходимое для нормальной работы интерполятора фарроу, всё это ессно делается без увеличения тактовой частоты в FPGA.


Александр,а можно немного подробнее об этом?Я упёрся в эту проблему,не получается сделать в FPGA интерполятор Фарроу при Ftakt = 8*Fsymb,слишком высокая частота тактов. А 4 такта на символ не нравится,проверял.Как это можно обойти?Мне очень понравилось Ваше"всё это ессно делается без увеличения тактовой частоты в FPGA".
Допустим,после полифазного интерполятора c R=2 есть две шины данных,одна с основными отсчётами,другая с интерполированными.Обе шины тактируются клоком Ftakt = 4*Fsymb.Можно эти шины как-то завести в Фарроу чтобы он тоже работал с Ftakt = 4*Fsymb,но при этом вёл себя так,как будто работает с Ftakt = 8*Fsymb?
petrov
Комбинационная схема интерполятора работает на символьной частоте(ну или например на удвоенной для дробного эквалайзера), если вы понимаете как поступают отсчёты на отводы с линии задержки интерполятора при тупой реализации с повышением тактовой без полифазного фильтра, то коммутировать так же с двух шин полифазного фильтра не представляет никаких сложностей.
_Anatoliy
Цитата(petrov @ Jul 12 2008, 19:53) *
Комбинационная схема интерполятора работает на символьной частоте

Это как?Сигнал Mu приходит с символьной частотой,но внутри символа он обрабатывается с частотой входных данных.
Цитата(petrov @ Jul 12 2008, 19:53) *
если вы понимаете как поступают отсчёты на отводы с линии задержки интерполятора при тупой реализации с повышением тактовой без полифазного фильтра

Так отсчёты на отводы тупо задерживаются на такт для каждого отвода,без обработки,что тут понимать?Или Вы имели ввиду отводные множители?Тут пока ясности нет.
Цитата(petrov @ Jul 12 2008, 19:53) *
коммутировать так же с двух шин полифазного фильтра не представляет никаких сложностей.

То есть,интерполятор Фарроу изменять не нужно,следует изменить только алгоритм заполнения линии задержки?Но ведь если на выходах полифазного фильтра мы имеем два отсчёта на такт(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 Фарроу заработал только после ввода этих коэффициентов.
petrov
Цитата(_Anatoliy @ Jul 14 2008, 09:03) *
Это как?Сигнал Mu приходит с символьной частотой,но внутри символа он обрабатывается с частотой входных данных.

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

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


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

Цитата(_Anatoliy @ Jul 14 2008, 09:03) *
И ещё одна неприятность.В общем виде Фарроу представляет собой 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 Фарроу заработал только после ввода этих коэффициентов.


Да все эти вопросы конечной разрядности не приятные, но таких мест будет куча, надо научиться прикидывать где промасштабировать, где округлить разряды, где с повышенной точностью вычисления надо проводить и т. п. это никто кроме вас сделать не сможет. Какая у вас символьная скорость? Наверняка можно на одном умножителе весь интерполятор сделать.
_Anatoliy
Цитата(petrov @ Jul 14 2008, 14:37) *
В интерполяторе вычисления производятся с символьной частотой а не с частотой входных данных, вы можете поместить его в следующий клок домен и вытащить наружу только 4 шины на которые сейчас у вас поступают отсчёты с линии задержки с отводами и шину для mu, и на эти отводы должно то же самое поступать как бы вы не делалали с полифазным фильтром или без или ещё как, просто в нужный момент надо те же самые остчёты подать что и в случае более тупой реализации, ну были отсчёты у вас последовательно во времени, теперь они в пространстве ещё разнесены на выходе полифазного фильтра, это вопрос внимательной манипуляции с отсчётами.

Често говоря не понял ответа.Ведь после интерполятора в блоке one_sps_clock_domain стоит ещё одна линия задержки из двух регистров,и данные в нее пишутся два раза за символ.А Вы говорите что в интерполяторе вычисления производятся с символьной частотой.
Я пробовал вот такой коммутатор:
Нажмите для просмотра прикрепленного файла
Здесь входы - выход полифазника,а выходы через коммутатор используются в качестве линии задержки,коммутация выполняется каждый такт(чётный-верхний выход,нечётный - нижний выход).Но тут идёт потеря данных,два такта правильные данные,два потеряны.
Цитата(petrov @ Jul 14 2008, 14:37) *
Да все эти вопросы конечной разрядности не приятные, но таких мест будет куча, надо научиться прикидывать где промасштабировать, где округлить разряды, где с повышенной точностью вычисления надо проводить и т. п. это никто кроме вас сделать не сможет. Какая у вас символьная скорость? Наверняка можно на одном умножителе весь интерполятор сделать.


Ну да,я в матлабе разрядности и проверяю.
Fsymb = 35 Msps.
А как можно интерполятор Фарроу сделать на одном умножителе?
petrov
Цитата(_Anatoliy @ Jul 14 2008, 16:24) *
Често говоря не понял ответа.Ведь после интерполятора в блоке one_sps_clock_domain стоит ещё одна линия задержки из двух регистров,и данные в нее пишутся два раза за символ.А Вы говорите что в интерполяторе вычисления производятся с символьной частотой.


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

Цитата(_Anatoliy @ Jul 14 2008, 16:24) *
Я пробовал вот такой коммутатор:

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

Цитата(_Anatoliy @ Jul 14 2008, 16:24) *
Fsymb = 35 Msps.
А как можно интерполятор Фарроу сделать на одном умножителе?


Да высокая символьная, наверное с последовательной обработкой нет смысла заморачиваться.
_Anatoliy
Цитата(petrov @ Jul 14 2008, 16:22) *
В смысле вычисления производятся столько раз сколько нужно вам отсчётов на символ но не как не с входной частотой, я ж не знаю сколько у вас там отсчётов на символ нужно для обработки последующей, можно и с одним сделать и с двумя и с дробным, просто условно писал с символьной частотой и даже выше оговаривался в скобках что может и два осчёта быть напрмер для дробного эквалайзера.

Понял,спасибо!
Цитата(petrov @ Jul 14 2008, 16:22) *
Пробуйте ещё smile.gif

Конечно буду копать дальше,что ещё остаётся.Сейчас придумал методику проверки Фарроу на "вшивость",удалось уменьшить размерность входных данных до 16-ти бит!!!
Цитата(petrov @ Jul 14 2008, 16:22) *
Да высокая символьная, наверное с последовательной обработкой нет смысла заморачиваться.

Это точно,я такой вариант даже не рассматривал.
MKS
Анатолий, а какую степень полинома вы используете в интерполяторе ?
_Anatoliy
Цитата(MKS @ Jul 14 2008, 18:56) *
Анатолий, а какую степень полинома вы используете в интерполяторе ?


Схема взята из книги Незами.Так же присутствует в моделях Петрова.
Нажмите для просмотра прикрепленного файла

Только Gain13 должен быть равен 1.
_Anatoliy
Цитата(petrov @ Jul 14 2008, 16:22) *
В смысле вычисления производятся столько раз сколько нужно вам отсчётов на символ но не как не с входной частотой, я ж не знаю сколько у вас там отсчётов на символ нужно для обработки последующей, можно и с одним сделать и с двумя и с дробным, просто условно писал с символьной частотой и даже выше оговаривался в скобках что может и два осчёта быть напрмер для дробного эквалайзера.


А я всё о Фарроу... Не сростается у меня общая картина. Не могу увязать то что Вы говорили раньше с тем что говорите сейчас.

Раньше Вы говорили так:
Цитата(petrov @ Aprel 11 2008, 16:22) *
Можно частоту дискретизации уменьшить вплоть до минимально необходимой по котельникову. Интерполятору фарроу необходима передискретизация примерно больше 4.5 отсчётов на символ[color=#FF0000], зависит от требуемой точности, тогда придётся полифазным фильтром увеличить количество отсчётов необходимое для нормальной работы интерполятора фарроу, всё это ессно делается без увеличения тактовой частоты в FPGA.


Если посмотреть АЧХ Фарроу то видно,что при менее 5-ти отсчётов на символ растёт нелинейность фильтра,а при трёх отсчётах он вообще не будет работать.
На картинке по оси х число 10 соответствует частоте дискетизации.
Нажмите для просмотра прикрепленного файла
petrov
Тут о разных вещах речь идёт. В первой цитате речь шла о количестве отсчётов для последующей обработки после интеропляции. Во второй сколько отсчётов требуется для работы интерполятора, не устраивает вас 5 берите больше.
_Anatoliy
Цитата(petrov @ Jul 15 2008, 10:30) *
Тут о разных вещах речь идёт. В первой цитате речь шла о количестве отсчётов для последующей обработки после интеропляции. Во второй сколько отсчётов требуется для работы интерполятора, не устраивает вас 5 берите больше.


Спасибо,теперь понятно о чём речь.
Я с удовольствием взял бы 8 отсчётов,да по скорости не вписываюсь.Идея фикс - придумать полифазный интерполятор Фарроу,что бы он работал при 4-х отсчётах на символ так же,как обычный при 8-ми.
Бредовая идея?
petrov
Цитата(_Anatoliy @ Jul 15 2008, 11:46) *
Спасибо,теперь понятно о чём речь.
Я с удовольствием взял бы 8 отсчётов,да по скорости не вписываюсь.Идея фикс - придумать полифазный интерполятор Фарроу,что бы он работал при 4-х отсчётах на символ так же,как обычный при 8-ми.
Бредовая идея?


Не надо ничего выдумывать, всё уже придумано, даже разобраться в этом сложно, не говоря о том чтобы новое придумать. Хотите чтобы при четырёх отсчётах интерполятор удовлетворительно работал берите более высокого порядка, только может так получиться что он будет сложнее чем комбинация полифазного фильтра и кубического интерполятора, последнее очень часто используется на практике, не с проста видимо.
_Anatoliy
Цитата(petrov @ Jul 15 2008, 10:53) *
Не надо ничего выдумывать, всё уже придумано, даже разобраться в этом сложно, не говоря о том чтобы новое придумать. Хотите чтобы при четырёх отсчётах интерполятор удовлетворительно работал берите более высокого порядка, только может так получиться что он будет сложнее чем комбинация полифазного фильтра и кубического интерполятора, последнее очень часто используется на практике, не с проста видимо.


Более высокий порядок потянет за собой увеличение размерности шин данных,тоже не сахар.
Честно говоря я пока так и не понял как сделать комбинацию полифазного фильтра и кубического интерполятора.Два интерполятора и разбить коэффициенты?
fontp
Цитата(_Anatoliy @ Jul 15 2008, 11:46) *
Бредовая идея?


Интерполяторы можно построить для любого к-ва самплов/бит >1 . Вопрос в качестве, т.е. в конечном счёте в энергопотерях

Пример интерполятора работающего на частоте 2/T (для 16-QAM)

Interpolator for all-digital receivers
_Anatoliy
Цитата(fontp @ Jul 15 2008, 11:01) *
Интерполяторы можно построить для любого к-ва самплов/бит >1 . Вопрос в качестве, т.е. в конечном счёте в энергопотерях

Пример интерполятора работающего на частоте 2/T (для 16-QAM)

Interpolator for all-digital receivers


Спасибо!Интересная информация.
Вот как раз из-за качества я и забраковал интерполятор от Незами для своей задачи.Видимо он хорош для небольших символьных скоростей.
petrov
Цитата(_Anatoliy @ Jul 15 2008, 11:59) *
Более высокий порядок потянет за собой увеличение размерности шин данных,тоже не сахар.
Честно говоря я пока так и не понял как сделать комбинацию полифазного фильтра и кубического интерполятора.Два интерполятора и разбить коэффициенты?


Интерполятор конечно один. В конце-концов вы можете сделать 8 отсчётов на символ с увеличением тактовой, ведь на высокой частоте будут работать только мультиплексор на выходе полифазного фильтра и линия здержки для интерполятора, а эти схемы на очень высокой частоте могут работать.
_Anatoliy
Цитата(petrov @ Jul 15 2008, 11:11) *
Интерполятор конечно один. В конце-концов вы можете сделать 8 отсчётов на символ с увеличением тактовой, ведь на высокой частоте будут работать только мультиплексор на выходе полифазного фильтра и линия здержки для интерполятора, а эти схемы на очень высокой частоте могут работать.


Вы предлагаете в линию задержки записывать со скоростью 8 отсчётов на символ, а перемножители запускать в 2(а то и в 4) раза реже?Я правильно Вас понял? Логика работы от этого не нарушится?
petrov
Цитата(_Anatoliy @ Jul 15 2008, 12:28) *
Вы предлагаете в линию задержки записывать со скоростью 8 отсчётов на символ, а перемножители запускать в 2(а то и в 4) раза реже?Я правильно Вас понял? Логика работы от этого не нарушится?


Полифазный фильтр работает на входной частоте, интерполятор в следующем клок домене уже находится положим работает со скоростью 2 отсчёта на символ. Во и получяется что если в лоб делать то на 8 отсчётов будет работать только мультиплексор и линия задержки, а если ещё чуть-чуть сообразить то очевидно можно и без увеличения до 8 отсчётов тактовой обойтись.
_Anatoliy
Цитата(petrov @ Jul 15 2008, 11:42) *
Полифазный фильтр работает на входной частоте, интерполятор в следующем клок домене уже находится положим работает со скоростью 2 отсчёта на символ. Во и получяется что если в лоб делать то на 8 отсчётов будет работать только мультиплексор и линия задержки, а если ещё чуть-чуть сообразить то очевидно можно и без увеличения до 8 отсчётов тактовой обойтись.


Большое Вам спасибо,Алесандр!
Проверил в матлабе - прекрасно работает при 2-х отсчётах на символ!!!С меня пиво!Куда выслать? smile.gif
petrov
Цитата(_Anatoliy @ Jul 15 2008, 13:06) *
Большое Вам спасибо,Алесандр!
Проверил в матлабе - прекрасно работает при 2-х отсчётах на символ!!!С меня пиво!Куда выслать? :)


Незачто. Не понял правда что у вас там заработало. :)
Пиво слать не надо, не пью, будете в седующий раз другим объяснять как делать. :)
_Anatoliy
Цитата(petrov @ Jul 15 2008, 12:14) *
Незачто. Не понял правда что у вас там заработало. smile.gif
Пиво слать не надо, не пью, будете в следующий раз другим объяснять как делать. smile.gif

Принято!
Я выходные перемножители Фарроу стал включать два раза в символ.Времени теперь вагонsmile.gif
vadimuzzz
Всем привет!
я разрабатываю радиорелейную станцию, так сказать all-in-one.
на данный момент я сваял модем для приема/передачи QPSK, вся обработка в цифре,
вход/выход -ПЧ. хочу попробовать модифицировать проект под 16-QAM и в связи с этим есть ряд вопросов
(с QAM я не работал).
1. про ФАПЧи и АРУ. Я так понимаю, что сначала нужно нормализовать амплитуду принятого сигнала (АРУ),
т.к. виденные мной детектора фазовых ошибок используют информацию об амплитуде сигнала. это так?
2. про скремблер. насколько я понял, при восстановлении тактовой частоты используются те же алгоритмы,
что и для QPSK (я у себя в проекте использую дет. Гарднера). в 16-QAM переходы через 0 реже, т.е. скремблер необходим? имеются в виду практичексие соображения, ведь скремблер размножает ошибки.
2 petrov, я сейчас разбираю ваш пример в матлабе
qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl
не понял часть схемы. там в модуляторе есть умножение на 1/4 округление, умножение на 4 и сложение с исходным сигналом. это для чего?
еще там есть дифференциальное кодирование, оно же 3дБ чувствительности крадет, нет?
не пинайте, если часть вопросов уже здесь обсуждались, мог прохлопать.
petrov
1. АРУ необходимо т. к. в QAM информация передаётся в том числе изменением амплитуды.
2. Для нормальной синхронизации необходимо чтобы все точки созвездия были равновероятны на интервале усреднения синхронизаторов что в QAM что в QPSK. Размножение ошибок в скремблере приводит к несущественным энергетическим потерям.

Это выделение 2-х старших бит которые подвергаются диф. кодированию. Не крдёт оно 3 дБ, не путайте с диф. демодуляцией. Вообще не больно то смотрите на это скремблирование кодирование оно просто для примера сделано чтоб живую передачу данных было видно.
vadimuzzz
по п.1 я не то имел в виду, я про последовательность(во времени) включения цепей:
т.е. сначала включается АРУ, после захвата АРУ включается захват тактовой, потом несущей. так?
про дифф. кодирование: а для чего оно, если демодуляция не дифференциальная?
еще по АРУ. у меня сейчас работает так: на входе АЦП стоит VGA с цифр. управлением, он работает так, чтобы
АЦП находился в линейном режиме. на малом сигнале он дает макс. усиление, т.е. не регулирует. для QPSK
это нормально, а вот для QAM видимо надо еще один каскад АРУ делать в цифровой области?
petrov
Цитата(vadimuzzz @ Jul 25 2008, 13:19) *
по п.1 я не то имел в виду, я про последовательность(во времени) включения цепей:
т.е. сначала включается АРУ, после захвата АРУ включается захват тактовой, потом несущей. так?


Ну ессно сначала АРУ должно отработать чтобы хотя бы в ворота АЦП попасть, ну и само собой если у вас используется восстановление фазы управляемое решениями то АРУ должно быть настроено более-менее для получения этих решений . "Включается" "после" это всё условно ведь схемы синхронизации совместно могут работать.

Цитата(vadimuzzz @ Jul 25 2008, 13:19) *
про дифф. кодирование: а для чего оно, если демодуляция не дифференциальная?
90гр. неоднозначность устранять?


да +-90,180
vadimuzzz
Цитата(petrov @ Jul 25 2008, 16:32) *
Ну ессно сначала АРУ должно отработать чтобы хотя бы в ворота АЦП попасть, ну и само собой если у вас используется восстановление фазы управляемое решениями то АРУ должно быть настроено более-менее для получения этих решений . "Включается" "после" это всё условно ведь схемы синхронизации совместно могут работать.
да

про ворота АЦП ясно, у меня так и работает. а как на малом сигнале быть? когда АРУ уже не тянет? как я выше написал?
ведь если нормализовать амплитуду на входе АЦП, то его динамический диапазон не используется, а у меня вся
схема на этом основана и усиление в тракте относительно небольшое.
а про восстановление фазы: а где посмотреть на схемы без управления решениями?
petrov
Цитата(vadimuzzz @ Jul 25 2008, 13:40) *
про ворота АЦП ясно, у меня так и работает. а как на малом сигнале быть? когда АРУ уже не тянет? как я выше написал?
ведь если нормализовать амплитуду на входе АЦП, то его динамический диапазон не используется, а у меня вся
схема на этом основана и усиление в тракте относительно небольшое.


Можно и в цифре сделать АРУ. Всё же разрядность АЦП должна определяться динамическим диапазоном сигнала, зачем более дорогой АЦП брать и потом то же АРУ ещё в цифре делать?

Цитата(vadimuzzz @ Jul 25 2008, 13:40) *
а про восстановление фазы: а где посмотреть на схемы без управления решениями?


Ну погуглите чтоли. А лучше делайте управляемое решениями. smile.gif
vadimuzzz
Цитата(petrov @ Jul 25 2008, 17:03) *
Можно и в цифре сделать АРУ. Всё же разрядность АЦП должна определяться динамическим диапазоном сигнала, зачем более дорогой АЦП брать и потом то же АРУ ещё в цифре делать?
Ну погуглите чтоли. А лучше делайте управляемое решениями. smile.gif

ну это вроде тенденции в мире, чтоб АЦП как можно раньше ставить и эффективно его ДД использовать.
ну а динамики хочется побольше smile.gif
просто раньше хороших АЦП не было, а сейчас каждый месяц все круче и круче выходят.
это я книжек начитался, вот здесь неплохо об этом написано:
"RF and Baseband Techniques for Software Defined Radios" Peter B. Kenington.
там идея такая, чтоб не гнать усиление по ВЧ/ПЧ и вообще минимизировать количество аналоговых цепей.
АЦП вроде тоже не такие дорогие, по крайней мере дешевеют. а АРУ в цифре сделать несложно, несколько десятков
LE в FPGA. вопрос в необходимости, но раз она есть, то сделаю.
"А лучше делайте управляемое решениями. smile.gif"
лучше в каком смысле? чтоб не гуглить? smile.gif
или есть какие-то еще соображения (ну там проще/дешевле), я просто не в теме smile.gif
petrov
Цитата(vadimuzzz @ Jul 26 2008, 04:05) *
"А лучше делайте управляемое решениями. smile.gif"
лучше в каком смысле? чтоб не гуглить? smile.gif
или есть какие-то еще соображения (ну там проще/дешевле), я просто не в теме smile.gif


Хорошо работает, чаще всего используется.
vadimuzzz
Цитата(petrov @ Jul 26 2008, 16:06) *
Хорошо работает, чаще всего используется.

ну, более-менее ясно. вот еще вопросик, на будущее. если делать 64-QAM, что менять потребуется?
делать TCM? где-то читал, что без TCM модуляции высокого порядка непрактичны.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.