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

GMSK suboptimal coherent demodulation feedback phase sync feedback timing sync

 

 

simulink matlab R2010a

 

 

gmsk_coherent_demodulation_2010_10_03.rar

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


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

Всем прывет!

 

Возник вопрос по поводу модели 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 требует больше отсчетов на символ, а я не могу повысить частоту дискретизации в записи, могу только передискретизировать, из-за этого результаты получаются хуже?

 

Подскажите, плиз, если есть идеи. Заранее, спасибо, если где-то сказал глупость, прошу сильно не бить :rolleyes:

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


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

В модели ведь работает? Покажите на модели условия при которых синхронизация не работает. И с 4-мя отсчётами есть модели. Для Гарднера нужно всего 2 отсчёта, 4-8 отсчётов для простоты интерполяции сделано.

 

 

 

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


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

В модели ведь работает? Покажите на модели условия при которых синхронизация не работает. И с 4-мя отсчётами есть модели. Для Гарднера нужно всего 2 отсчёта, 4-8 отсчётов для простоты интерполяции сделано.

 

Спасибо, да я уж и сам догадался, для Гарднера, действительно, не важно, не стал последнее предположение из поста стирать не стал.

Кстати, пробовал свои квадратуры скинуть в mat-файл, и подать в Simulink на вход интерполятора Фарроу и т.д. по Вашей схеме, к сожалению, не прокатило. Разбираюсь сейчас почему. ??? Попытки подстроить фильтр петли: пересчитать или подобрать коэффициенты пока не помогли.

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


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

Тут еще такая штука может быть:

 

В телефонных модемах для ограничения полосы используется фильтр с довольно крутой х-кой (большая крутизна ската).

И характеристика его - не корень из приподнятого косинуса. В моделях уважаемого Петрова на входе приемника стоит фильтр корень из приподнятого косинуса с альфа=1. В таких условиях детектор гарднера работать будет плохо...

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


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

Тут еще такая штука может быть:

 

В телефонных модемах для ограничения полосы используется фильтр с довольно крутой х-кой (большая крутизна ската).

И характеристика его - не корень из приподнятого косинуса. В моделях уважаемого Петрова на входе приемника стоит фильтр корень из приподнятого косинуса с альфа=1. В таких условиях детектор гарднера работать будет плохо...

 

Спс. Удалось несколько улучшить результаты изменив характеристику согласованного фильтра, но по ходу еще где-то у меня ошибка, буду дальше работать...

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


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

В модели ведь работает? Покажите на модели условия при которых синхронизация не работает. И с 4-мя отсчётами есть модели. Для Гарднера нужно всего 2 отсчёта, 4-8 отсчётов для простоты интерполяции сделано.

 

Моя программа демодуляции QAM-16, созданная по алгоритму, предложенному в Вашей модели qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_2007_07_10, после обезвреживания всех багов заработала на реальной записи, все три петли (по тактовой, несущей и АРУ) отслеживают изменения соответствующих параметров синхронизации. Но у меня осталась неясность с парой моментов, хотел бы задать Вам вопросы :unsure:

 

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, а на вход ей подавать квадратуры с выхода ИФ. Такой блок выводил бы интерполированные квадратуры в оптимальный момент для взятия отсчета. У меня вроде бы так работает, но хотел понять почему Вы сделали по другому :)

 

Вроде все. Теперь, когда согласованная фильтрация и системы синхронизации готовы, возьмусь за эквалайзер, начну с Ваших моделей, так что новые вопросы, наверное, скоро появятся, если, конечно, Вас не напрягает отвечать :rolleyes:

 

Спасибо!

 

PS. Кстати, еще по поводу согласованной фильтрации. Если неизвестны параметры SRRC-фильтра применявшегося в модуляторе в моей тестовой записи, можно ли как-то оценить их (частота среза, rolloff-фактор, порядок), чтобы добиться оптимальных результатов. Методом поиска я какие-то подобрал, но...правильный ли это путь?

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


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

Моя программа демодуляции QAM-16, созданная по алгоритму, предложенному в Вашей модели qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_2007_07_10, после обезвреживания всех багов заработала на реальной записи, все три петли (по тактовой, несущей и АРУ) отслеживают изменения соответствующих параметров синхронизации. Но у меня осталась неясность с парой моментов, хотел бы задать Вам вопросы :unsure:

 

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 должна действовать в домене одного отсчёта на символ.

 

 

2. Вы используете блок Downsample в данных моделях, чтобы понизить частоту следования квадратур с 1/8 (частота дискретизации) до 1 (символьная скорость) перед выводом точек на блок просмотра созвездия. Было бы справедливо следующее: запихнуть Discrete-Time Scatter Plot Scope в Subsystem с блоком Enabled и "включать" эту подсистему стробом overflow, а на вход ей подавать квадратуры с выхода ИФ. Такой блок выводил бы интерполированные квадратуры в оптимальный момент для взятия отсчета. У меня вроде бы так работает, но хотел понять почему Вы сделали по другому :)

 

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

 

Вроде все. Теперь, когда согласованная фильтрация и системы синхронизации готовы, возьмусь за эквалайзер, начну с Ваших моделей, так что новые вопросы, наверное, скоро появятся, если, конечно, Вас не напрягает отвечать :rolleyes:

 

 

Спасибо!

 

На здоровье! С эквалайзерами тема мутная, вопрос много раз поднимался, но так никто и не написал как делать правильно.

 

 

PS. Кстати, еще по поводу согласованной фильтрации. Если неизвестны параметры SRRC-фильтра применявшегося в модуляторе в моей тестовой записи, можно ли как-то оценить их (частота среза, rolloff-фактор, порядок), чтобы добиться оптимальных результатов. Методом поиска я какие-то подобрал, но...правильный ли это путь?

 

С помощью эквалайзера можно оценить при условии что в вашей записи канал искажений не вносит.

 

 

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


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

Здесь не нужно никак эту задержку учитывать, хоть по 1000 отсчётам интерполятор работал бы, путь сигнала по mu не задержан относительно enable. Не забывайте что комбинационную часть интерполятора можно внести в домен двух отсчётов на символ.

 

Ага. Так примерно и думал, теперь все встало на свои места.

 

интерполятор работает не в оптимальном диапазоне mu

 

??? :07: А что здесь можно изменить? В каком-то другом масштабе считать mu?

 

Ещё временная ошибка на 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-ой вариант :) ?

 

 

С эквалайзерами тема мутная, вопрос много раз поднимался, но так никто и не написал как делать правильно.

 

Точно. Нашел теорию у Скляра, вроде у Прокиса тоже есть + Ваши модели, чтобы связать эту теорию с практикой + IEEE.

К сожалению, Майкл Райс этой темы в своей книге "Digital Communications. A Discrete-Time Approach" не касался. Очень хорошая книга по цифровой связи, про петли синхронизации в ней здорово написано.

Изменено пользователем Sleepin' Cat Smile

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


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

Разбираюсь с моделью psk8_fast_ff_nda_symbol_sync_fast_ff_nda_phase_sync_2006_11_15 и возникают вопросы.

1 Какое назначение phase_unwrap в блоке фазовой синхронизации?

2 Приведенная схема отличается от аналогичной у Прокиса отсутствием петли после полосового фильтра. Насколько петля очищает несущую, или достаточно узкополосного фильтра? Понятно что полоса фильтра ограничена всеми суммарными нестабильностями.

3 Пытаюсь перевести приведенную модель на си, и не знаю как поделить частоту несущей на 8. Не могу найти описания реализации. Не ужели частоту делят как в классических синтезаторах(обычный бинарный сигнал и счетчик)? Или существует другие решения?

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


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

Там же показано как фаза на 8 делится, phase_unwrap нужен чтобы после этого деления фазу развернуть до 2pi устойчиво, здесь усреднение фильтром осуществляется дополнительная ФАПЧ не нужна.

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


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

Там же показано как фаза на 8 делится, phase_unwrap нужен чтобы после этого деления фазу развернуть до 2pi устойчиво, здесь усреднение фильтром осуществляется дополнительная ФАПЧ не нужна.

Сапсибо, все понятно.

 

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


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

Filtered Multitone (FMT) Modulation, noncritically sampled filter bank, timing frequency phase tracking primer

simulink matlab 7.0

Здравствуйте, начал разбираться с FMT и наткнулся на вашу модель. Не могли бы вы объяснить каким образом у вас в блоке полифазного фильтра после фурье получается 36 подканалов? Такое ощущение что вы как то на 32-х точечьном ДПФ получили коэфициент интерполяции 36 (в пользу этого говорит и частота среза опорного фильтра) но как это получилось не понятно. В той информации которую удалось найти в интернете обычно коэффициент интерполяции == числу отсчётов ДПФ и если у нас 32 точечное ДПФ то соответственно будет интерполяция в 32 раза и опорный фильтр надо считать на 32 отсчёта на символ. Но если так делать и распологать поднесущие в плотную то они начинают сильно перекрыватся и мешать друг другу, если ставить через один то большие зазоры остаются. У вас похоже как то получилось "плавненько" их сдвинуть. Если не трудно хотелось бы про это поподробней узнать.

Заранее спасибо.

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


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

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

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

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

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

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

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

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

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

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