|
|
  |
модель 8PSK модема |
|
|
|
Oct 14 2010, 09:26
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Всем прывет! Возник вопрос по поводу модели qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl, может кто подскажет. Проектирую демодулятор QAM-16, пока в исследовательско-учебных целях; сигнал - типичный для телефонного модема, несущая 1800 Гц, символьная скорость 2400 Бод. Есть несколько записей отсчетов оцифрованного сигнала, частота дискретизации 8000 Гц. После преобразования частоты с несущей на нулевую и выделения квадратур с помощью согласованной фильтрации восстанавливается тактовая частота. Пока сделал двумя способами. Первый: передискретизация квадратур, чтобы получить 4 отсчета на символ, вычисление квадратов модулей отсчетов, DFFT по 4 отсчетам и т.п. (из книжки Meyr'а). Второй: сделал как в указанной модели petrov'а, предварительно передискретизировав квадратуры, чтобы получить 8 отсчетов на символ. Первый способ дал вполне приемлемые для дальнейшей работы результаты. Второй после долгих попыток пока не увенчался успехом: созвездия почти не видно. Есть несколько мыслей на этот счет: 1) либо у меня где-то ошибки в реализации (ищу, пока не нашел); 2) символьная синхронизация в модели petrov'а полностью невозможна без восстановления несущей и АРУ (их я пока не трогал), но это вряд ли, ведь из литературы => схема Гарднера не зависит от проблем с несущей + в моей тестовой записи сигнал имеет постоянную амплитуду, без искажений и др. 3) самое вероятное, на мой взгляд: схема в модели petrov'a требует больше отсчетов на символ, а я не могу повысить частоту дискретизации в записи, могу только передискретизировать, из-за этого результаты получаются хуже? Подскажите, плиз, если есть идеи. Заранее, спасибо, если где-то сказал глупость, прошу сильно не бить
|
|
|
|
|
Oct 14 2010, 10:27
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Цитата(petrov @ Oct 14 2010, 14:16)  В модели ведь работает? Покажите на модели условия при которых синхронизация не работает. И с 4-мя отсчётами есть модели. Для Гарднера нужно всего 2 отсчёта, 4-8 отсчётов для простоты интерполяции сделано. Спасибо, да я уж и сам догадался, для Гарднера, действительно, не важно, не стал последнее предположение из поста стирать не стал. Кстати, пробовал свои квадратуры скинуть в mat-файл, и подать в Simulink на вход интерполятора Фарроу и т.д. по Вашей схеме, к сожалению, не прокатило. Разбираюсь сейчас почему. ??? Попытки подстроить фильтр петли: пересчитать или подобрать коэффициенты пока не помогли.
|
|
|
|
|
Oct 15 2010, 03:52
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Цитата(thermit @ Oct 14 2010, 17:10)  Тут еще такая штука может быть:
В телефонных модемах для ограничения полосы используется фильтр с довольно крутой х-кой (большая крутизна ската). И характеристика его - не корень из приподнятого косинуса. В моделях уважаемого Петрова на входе приемника стоит фильтр корень из приподнятого косинуса с альфа=1. В таких условиях детектор гарднера работать будет плохо... Спс. Удалось несколько улучшить результаты изменив характеристику согласованного фильтра, но по ходу еще где-то у меня ошибка, буду дальше работать...
|
|
|
|
|
Oct 20 2010, 14:57
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Цитата(petrov @ Oct 14 2010, 14:16)  В модели ведь работает? Покажите на модели условия при которых синхронизация не работает. И с 4-мя отсчётами есть модели. Для Гарднера нужно всего 2 отсчёта, 4-8 отсчётов для простоты интерполяции сделано. Моя программа демодуляции QAM-16, созданная по алгоритму, предложенному в Вашей модели qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_2007_07_10, после обезвреживания всех багов заработала на реальной записи, все три петли (по тактовой, несущей и АРУ) отслеживают изменения соответствующих параметров синхронизации. Но у меня осталась неясность с парой моментов, хотел бы задать Вам вопросы 1. Интерполятор Фарроу (ИФ). Для получения интерполированного отсчета x_interp[nT] (выходной сигнал ИФ на n-ом такте) используются отсчеты x[(n-1)T], x[nT], x[(n+1)T] и x[(n+2)T]. Другими словами, для получения интерполянта на текущем такте нужны входные отсчеты в следующие моменты времени: на предыдущем такте, на текущем и на 2-ух последующих тактах. То есть получается алгоритмическая задержка на 2 такта, если так можно выразиться. Однако, это НЕ требует задерживать сигнал overflow на 2 такта, так как NCO/TCU (timing control unit) формирует сигнал overflow по выходным отсчетам интерполятора, оптимальный момент для взятия значений квадратур соответствует моменту сброса NCO/TCU, когда вырабатывается строб-сигнал overflow. Задержка на 2 такта в ИФ не влияет на работу NCO/TCU. Вроде бы такая логика... Расписываю так подробно такие вещи, потому что просто столкнулся с примером в хелпе MatLab, которые ввели меня в заблуждение относительно этой задержки ИФ, видимо, в этом примере задержка сигнала overflow на 2 такта имела какой-то другой смысл и не связана с ИФ + я не силен в Simulink, привык работать в m-языке. 2. Вы используете блок Downsample в данных моделях, чтобы понизить частоту следования квадратур с 1/8 (частота дискретизации) до 1 (символьная скорость) перед выводом точек на блок просмотра созвездия. Было бы справедливо следующее: запихнуть Discrete-Time Scatter Plot Scope в Subsystem с блоком Enabled и "включать" эту подсистему стробом overflow, а на вход ей подавать квадратуры с выхода ИФ. Такой блок выводил бы интерполированные квадратуры в оптимальный момент для взятия отсчета. У меня вроде бы так работает, но хотел понять почему Вы сделали по другому  Вроде все. Теперь, когда согласованная фильтрация и системы синхронизации готовы, возьмусь за эквалайзер, начну с Ваших моделей, так что новые вопросы, наверное, скоро появятся, если, конечно, Вас не напрягает отвечать  Спасибо! PS. Кстати, еще по поводу согласованной фильтрации. Если неизвестны параметры SRRC-фильтра применявшегося в модуляторе в моей тестовой записи, можно ли как-то оценить их (частота среза, rolloff-фактор, порядок), чтобы добиться оптимальных результатов. Методом поиска я какие-то подобрал, но...правильный ли это путь?
|
|
|
|
|
Oct 20 2010, 17:55
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(Sleepin' Cat Smile @ Oct 20 2010, 18:57)  Моя программа демодуляции QAM-16, созданная по алгоритму, предложенному в Вашей модели qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_2007_07_10, после обезвреживания всех багов заработала на реальной записи, все три петли (по тактовой, несущей и АРУ) отслеживают изменения соответствующих параметров синхронизации. Но у меня осталась неясность с парой моментов, хотел бы задать Вам вопросы 1. Интерполятор Фарроу (ИФ). Для получения интерполированного отсчета x_interp[nT] (выходной сигнал ИФ на n-ом такте) используются отсчеты x[(n-1)T], x[nT], x[(n+1)T] и x[(n+2)T]. Другими словами, для получения интерполянта на текущем такте нужны входные отсчеты в следующие моменты времени: на предыдущем такте, на текущем и на 2-ух последующих тактах. То есть получается алгоритмическая задержка на 2 такта, если так можно выразиться. Однако, это НЕ требует задерживать сигнал overflow на 2 такта, так как NCO/TCU (timing control unit) формирует сигнал overflow по выходным отсчетам интерполятора, оптимальный момент для взятия значений квадратур соответствует моменту сброса NCO/TCU, когда вырабатывается строб-сигнал overflow. Задержка на 2 такта в ИФ не влияет на работу NCO/TCU. Вроде бы такая логика... Расписываю так подробно такие вещи, потому что просто столкнулся с примером в хелпе MatLab, которые ввели меня в заблуждение относительно этой задержки ИФ, видимо, в этом примере задержка сигнала overflow на 2 такта имела какой-то другой смысл и не связана с ИФ + я не силен в Simulink, привык работать в m-языке. Здесь не нужно никак эту задержку учитывать, хоть по 1000 отсчётам интерполятор работал бы, путь сигнала по mu не задержан относительно enable. Не забывайте что комбинационную часть интерполятора можно внести в домен двух отсчётов на символ. Есть ошибки в этой модели, исправленные в последующих, интерполятор работает не в оптимальном диапазоне mu, при 8 отсчётах на символ это незаметно, здесь и линейного интерполятора хватит. Ещё временная ошибка на NCO должна действовать в домене одного отсчёта на символ. Цитата(Sleepin' Cat Smile @ Oct 20 2010, 18:57)  2. Вы используете блок Downsample в данных моделях, чтобы понизить частоту следования квадратур с 1/8 (частота дискретизации) до 1 (символьная скорость) перед выводом точек на блок просмотра созвездия. Было бы справедливо следующее: запихнуть Discrete-Time Scatter Plot Scope в Subsystem с блоком Enabled и "включать" эту подсистему стробом overflow, а на вход ей подавать квадратуры с выхода ИФ. Такой блок выводил бы интерполированные квадратуры в оптимальный момент для взятия отсчета. У меня вроде бы так работает, но хотел понять почему Вы сделали по другому  Всё верно, правильно располагать в домене одного отсчёта на символ, где-то давно читал рекомендацию не размещать графики внутри Subsystem, не помню с чем это связано, в данном случае нет большой разницы. Цитата(Sleepin' Cat Smile @ Oct 20 2010, 18:57)  Вроде все. Теперь, когда согласованная фильтрация и системы синхронизации готовы, возьмусь за эквалайзер, начну с Ваших моделей, так что новые вопросы, наверное, скоро появятся, если, конечно, Вас не напрягает отвечать  Спасибо! На здоровье! С эквалайзерами тема мутная, вопрос много раз поднимался, но так никто и не написал как делать правильно. Цитата(Sleepin' Cat Smile @ Oct 20 2010, 18:57)  PS. Кстати, еще по поводу согласованной фильтрации. Если неизвестны параметры SRRC-фильтра применявшегося в модуляторе в моей тестовой записи, можно ли как-то оценить их (частота среза, rolloff-фактор, порядок), чтобы добиться оптимальных результатов. Методом поиска я какие-то подобрал, но...правильный ли это путь? С помощью эквалайзера можно оценить при условии что в вашей записи канал искажений не вносит.
|
|
|
|
|
Oct 21 2010, 06:13
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Цитата(petrov @ Oct 20 2010, 21:55)  Здесь не нужно никак эту задержку учитывать, хоть по 1000 отсчётам интерполятор работал бы, путь сигнала по mu не задержан относительно enable. Не забывайте что комбинационную часть интерполятора можно внести в домен двух отсчётов на символ. Ага. Так примерно и думал, теперь все встало на свои места. Цитата(petrov @ Oct 20 2010, 21:55)  интерполятор работает не в оптимальном диапазоне mu ???  А что здесь можно изменить? В каком-то другом масштабе считать mu? Цитата(petrov @ Oct 20 2010, 21:55)  Ещё временная ошибка на NCO должна действовать в домене одного отсчёта на символ. Кстати, как раз заинтересовал этот момент. Я вижу два варианта реализации подачи временной ошибки (выходного сигнала фильтра петли) на вход NCO: 1) На каждом такте из текущего значения NCO вычитается 1 (номинальное изменение) и сигнал ошибки, который обновляется 1 раз за символ. Код ... NCO = NCO - 1 - timing_pll_signal; ... 2) На каждом такте из текущего значения NCO вычитается 1 (номинальное изменение) и, при наличие сигнала overflow, сигнал ошибки (1 раз за символ), если нет сигнала overflow, то 0. Код ... if (overflow) NCO = NCO - 1 - timing_pll_signal; else NCO = NCO - 1; % timing_pll_signal = 0 end; ... По сути получается просто разные способы upsample-инга выходного сигнала фильтра петли: либо повторять на каждом такте в течение символа значение timing_pll_signal до следующего строба overflow, после которого значение timing_pll_signal обновится; либо между двумя значениями timing_pll_signal вставляем нули. Система символьной синхронизации является multirate-системой, фильтр петли выполняет еще и роль "интерполирующего" фильтра, между блоками TED (обновляет выходной сигнал 1 раз за символ) и NCO (выдает выходной сигнал 1*OSR раз за символ, OSR - коэффициент передискретизации). Вы имели в виду 2-ой вариант  ? Цитата(petrov @ Oct 20 2010, 21:55)  С эквалайзерами тема мутная, вопрос много раз поднимался, но так никто и не написал как делать правильно. Точно. Нашел теорию у Скляра, вроде у Прокиса тоже есть + Ваши модели, чтобы связать эту теорию с практикой + IEEE. К сожалению, Майкл Райс этой темы в своей книге "Digital Communications. A Discrete-Time Approach" не касался. Очень хорошая книга по цифровой связи, про петли синхронизации в ней здорово написано.
Сообщение отредактировал Sleepin' Cat Smile - Oct 21 2010, 06:16
|
|
|
|
|
Oct 22 2010, 06:01
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 22-12-09
Из: SPb
Пользователь №: 54 402

|
Цитата(petrov @ Oct 21 2010, 19:57)  Посвежее модели посмотрите... Данке шон)
|
|
|
|
|
Nov 2 2010, 17:26
|
Группа: Новичок
Сообщений: 2
Регистрация: 2-11-10
Пользователь №: 60 594

|
Разбираюсь с моделью psk8_fast_ff_nda_symbol_sync_fast_ff_nda_phase_sync_2006_11_15 и возникают вопросы. 1 Какое назначение phase_unwrap в блоке фазовой синхронизации? 2 Приведенная схема отличается от аналогичной у Прокиса отсутствием петли после полосового фильтра. Насколько петля очищает несущую, или достаточно узкополосного фильтра? Понятно что полоса фильтра ограничена всеми суммарными нестабильностями. 3 Пытаюсь перевести приведенную модель на си, и не знаю как поделить частоту несущей на 8. Не могу найти описания реализации. Не ужели частоту делят как в классических синтезаторах(обычный бинарный сигнал и счетчик)? Или существует другие решения?
|
|
|
|
|
Nov 3 2010, 15:40
|
Группа: Новичок
Сообщений: 2
Регистрация: 2-11-10
Пользователь №: 60 594

|
Цитата(petrov @ Nov 2 2010, 20:54)  Там же показано как фаза на 8 делится, phase_unwrap нужен чтобы после этого деления фазу развернуть до 2pi устойчиво, здесь усреднение фильтром осуществляется дополнительная ФАПЧ не нужна. Сапсибо, все понятно.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|