|
|
  |
Фазовая синхронизация для QAM высокой полотности |
|
|
|
Mar 20 2008, 13:54
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Пытаюсь организовать фазовую синхронизацию(синхронизацию несущей) для QAM256. Много прочитал, пришел к выводу что здесь нет ничего сложного - вычислил разность углов на входе и выходе слайсера, отфильтровал, подал на вход синтезатора комплексной синусоиды, и вуаля. Разбирал выложенные здесь модели QAM16 приемников. Однако моделирование показало, что то, что прекрасно работает с QPSK и QAM16 ведет себя не очень хорошо для QAM256. В частности синхронизация происходит только при малых значениях частотной ошибки. Если QAM16 нормально себя чувствует при frequency offset в 1/50 символьной частоты, то для QAM256 допусимый offset составляет десятитысячные символьной скорости. Собственно чем это объясняется - понятно. При больших M значительно выше вероятность того, что поворот фазы приведет к тому что точка на выходе слайсера не тудет иметь ничего общего с правильным символом, и, как следствие, вычисленная угловая ошибка будет неправильной. Вопрос в том, в каком направлении копать. Варианты с тренировочными сигналами (типа сначала QPSK, а после установления синхронизации переход на QAM256) весьма не желательны. Кроме того, точно знаю, что есть микросхемы, в частности для цифрового телевидения, которые нормально синхронизируются без преамбул. Мне тут приходят мысли насчет того, чтобы при вычислении фазовой ошибки учитывать только 4 или 16 точек, наиболее близко расположенных к нолю, но нутром чую, что это все фигня и по науке надо делать совсем не так. Я уже пересмотрел довольно много книг, но там максимум QAM16, высокоплотные QAM нашел только в случае телефонного модема, но там символьная скорость и частота несущей жестко завязаны, и проблема решается символьной синхронизацией Поэтому решил обратится за помощью: пните в нужном направлении, посоветуйте что почитать.
|
|
|
|
|
Mar 20 2008, 20:13
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(Artem_Petrik @ Mar 20 2008, 16:54)  Мне тут приходят мысли насчет того, чтобы при вычислении фазовой ошибки учитывать только 4 или 16 точек, наиболее близко расположенных к нолю, но нутром чую, что это все фигня и по науке надо делать совсем не так. А созвездие у Вас квадратное? Если да, то можно попробовать оценку фазовой ошибки для каждого принятого символа умножать на весовой множитель пропорциональный ( может быть и нелинейная зависимость) модулю принятого символа. Идея в том, чтобы символы расположенные ближе к углам созвездия имели наибольшее влияние на работу системы. Идея эта из какой-то древней статьи (давно утраченной ), но вроде работала. Только Ару хорошее нужно. Еще вот статейка про слепой корректор,там еще система восстановления несущей прикручена :
st_go.pdf ( 489.15 килобайт )
Кол-во скачиваний: 535Еще если созвездие квадратное можно попробовать банальное возведение в 4ю степень, и вылезет несущая. Цитата(Artem_Petrik @ Mar 20 2008, 16:54)  Я уже пересмотрел довольно много книг, но там максимум QAM16, высокоплотные QAM нашел только в случае телефонного модема, но там символьная скорость и частота несущей жестко завязаны, и проблема решается символьной синхронизацией Почему это несущая и символьная скорости в телефонном модеме жестко завязанны? в телефоном канале тоже может быть частотный сдвиг, кажется 7 Гц согласно стандарту. Еще телефонных модемах есть приамбула и это главное  .
--------------------
ну не художники мы...
|
|
|
|
|
Mar 21 2008, 18:24
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата А созвездие у Вас квадратное? Если да, то можно попробовать оценку фазовой ошибки для каждого принятого символа умножать на весовой множитель пропорциональный ( может быть и нелинейная зависимость) модулю принятого символа. Идея в том, чтобы символы расположенные ближе к углам созвездия имели наибольшее влияние на работу системы. Идея эта из какой-то древней статьи (давно утраченной ), но вроде работала. Только Ару хорошее нужно. Еще вот статейка про слепой корректор,там еще система восстановления несущей прикручена :
st_go.pdf ( 489.15 килобайт )
Кол-во скачиваний: 535Еще если созвездие квадратное можно попробовать банальное возведение в 4ю степень, и вылезет несущая. Да, созвездие квадратное. Идею весовых коэффициентов в зависимости от амплитуды символа видел, но что-то у меня это особого выигрыша не дает. Правда зависимость я пробовал только одну, взятую с потолка. Вообще, насколько я понимаю суть проблемы этот подход кардинально ее не решит, так как он собственно уменьшает влияние аддитивного шума на погрешность измерения угловой ошибки, а у меня и без шумов нифига не работает  . Но за статью спасибо, с аддитивным шумом тоже придется бороться. Возведение в четвертую степень есть готовым блоком в симулинке, но результат даже хуже чем в используемой мной модели. Вдаташите на TDA8046 нашел, что у них там два детектора - фазовый и частотно-фазовый, и они сначала подстраиваются частотно-фазовым, а когда ошибка становится меньше порога - переключаются на просто фазовый. Вероятно и мне придется поступить подобным образом, но я пока не представляю что такое частотно-фазовый детектор  . Вобщем буду искать. Цитата Почему это несущая и символьная скорости в телефонном модеме жестко завязанны? в телефоном канале тоже может быть частотный сдвиг, кажется 7 Гц согласно стандарту. Еще телефонных модемах есть приамбула и это главное Жестко завязаны потому что задаются одним и тем же кварцем, а промежуточных частот нет и в помине. и если разность тактовых приемника и передатчика равна скажем 50ppm, то и несущая и символьная скорость отличаются на те же 50ppm. Даже вроде фазы у них завязаны. Впрочем прочитав ваш пост я вспомнил,что частотный сдвиг может произойти при прохождении телефонного сигнала по по линиям с частотным уплотнением каналов(аналоговым), такие до сих пор у нас уплотняют междугородные тракты. Однако в аппликейшенах TI и AD по построению модемов на базе их сигнальных процессоров почему-то о carrier phase syncronization нет ни слова. Хотя может это такая простая задача, что даже не стоит упоминания  .
|
|
|
|
|
Mar 22 2008, 04:40
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(Artem_Petrik @ Mar 21 2008, 21:24)  Вообще, насколько я понимаю суть проблемы этот подход кардинально ее не решит, так как он собственно уменьшает влияние аддитивного шума на погрешность измерения угловой ошибки, а у меня и без шумов нифига не работает  . Тут идея не столько в уменьшении влияния шума, сколько сделать датчик фазовой ошибки, который дает более или менее правдивые показания в большем диапазоне углов. Сейчас посмотрел, я не правильно написал в предидущем посте. Вычисляется модуль входного сигнала и в сигнальном созвездии ищется ближайшая точка из точек примерно с такимже модулем. Чем больше модуль тем больше вклад в выход ФД. Другими словами созвездие разбивается на концентрические субсозвездия и субсозвездие(в котором ищется ближайшая точка) выбирается из abs входного сигнала. Вот матлабовская модель, где два субсозвездия. Код N = 3000; const256 = zeros(1, 256); k = 1; for i=1:16 for j=1:16 const256(k) = (i-8.5) + 1j*(j-8.5); k = 1+k; end end
x = const256(1 + mod( fix(1000*rand(1, N) ), 256)); R = 8.9; I = find( abs(const256) > R );
const256hi = const256(I); const256lo = const256; const256lo(I) = [];
noise = 0.1*(randn(1, N) + 1j*randn(1, N)); y = x+noise; figure(2) plot(const256hi, '+'); hold on; plot(const256lo, 'o'); hold off;
L = 90; phase_step = pi/2/L; phase_estimated = zeros(1, L); phase_estimated2 = zeros(1, L); phase_et = zeros(1,L); phase = -pi/4
for i=1:L phase = phase + phase_step; phase_et(i) = phase; z = exp(1j*phase) * y; tmp = 0; d = 0; for k=1:N [a, ind] = min( abs(z(k) - const256) ); phase_estimated(i) = phase_estimated(i) + angle(z(k)*conj(const256(ind))); if abs( z(k) )>R [a, ind] = min( abs(z(k) - const256hi) ); d = 4*const256hi(ind); else [a, ind] = min( abs(z(k) - const256lo) ); d = const256lo(ind); end tmp = tmp + z(k)*conj(d)/abs(z(k)); end phase_estimated2(i) = angle(tmp); phase_estimated(i) = phase_estimated(i)/N; end figure(1); plot(1:L, phase_estimated(1:L), 1:L, phase_et(1:L), 1:L, phase_estimated2(1:L) )
--------------------
ну не художники мы...
|
|
|
|
|
Mar 22 2008, 15:37
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Спасибо, буду разбраться. Ваш подход похоже должен решить проблему, правда вероятно реализация получится громоздкая. Насколько я понял из ваших слов здесь применяется слайсер, нарезающий не в декартовой системе координат, а в полярной( не на квадраты, а на кольца, и потом на сектора. Действительно, для оценки угла такой подход более оптимален. Предвижу сложности с символами примерно со средним модулем - там уж очень близко кольца друг к другу лежат - но думаю все равно эффективность будет значительно выше. В вашей модели пока не разобрался, чето по субботам голова не воспринимает математику  но в понедельник, в рабочей обстановке, думаю все станет понятно. Если вдруг вспомните какую-нибудь литературу, описывающую такой метод - дайте название, буду очень признателен. Еще раз спасибо!
|
|
|
|
|
Mar 25 2008, 18:32
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Только сегодня добрался до матлаба, посмотрел модель, и понял, что мой предыдущий пост - полный бред(про слайсер в полярной системе). Разобрался, действиельно результат значительно лучше, чем в обычном детекторе. Буду заниматься моделированием в динамике. Единственное что огорчает, это то, что я пока не представляю, как это реализовать на практике. Если во внешнем кольце оставить только четыре угловых точки, то реализовать не сложно, а вот если больше - проблема. Впрочем думаю это не самя большая проблема в моей жизни, что нибудь придумаю.
|
|
|
|
|
May 20 2008, 14:28
|
Группа: Новичок
Сообщений: 9
Регистрация: 19-04-08
Пользователь №: 36 904

|
Насчет фазовой синхронизации. Попытался разобраться с алгоритмами, в том числе, выложенными по ссылке выше, и обнаружил вот какой трабл. При синхронизации по диагональным точкам вроде бы все работает. Но иногда фазовая плоскость переворачивается на Пи/2. Т. е. иногда при настройке ошибок нет, а иногда символы принимаются с учетом разворота диаграммы амплитуд на 90 град. Ни в одном из алгоритмов о борьбе с такой трудностью ничего не вычитал. Стало быть возникает вопрос: это у меня в программе ошибка? Причем возникает именно при определенном значении первоначальной фазовой ошибки и возникает устойчиво. Меняем первоначальный фазовый сдвиг и все работает. Либо, с другой стороны, в алгоритме необходимо предпринимать какие-то синхронизирующие приемы. Кто что может сказать?
|
|
|
|
|
May 23 2008, 16:33
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(_karabas_ @ May 20 2008, 17:28)  Насчет фазовой синхронизации. Попытался разобраться с алгоритмами, в том числе, выложенными по ссылке выше, и обнаружил вот какой трабл. При синхронизации по диагональным точкам вроде бы все работает. Но иногда фазовая плоскость переворачивается на Пи/2. Т. е. иногда при настройке ошибок нет, а иногда символы принимаются с учетом разворота диаграммы амплитуд на 90 град. Ни в одном из алгоритмов о борьбе с такой трудностью ничего не вычитал. Стало быть возникает вопрос: это у меня в программе ошибка? Причем возникает именно при определенном значении первоначальной фазовой ошибки и возникает устойчиво. Меняем первоначальный фазовый сдвиг и все работает. Либо, с другой стороны, в алгоритме необходимо предпринимать какие-то синхронизирующие приемы. Кто что может сказать? обычно на уровне кодирования битиков принимаются меры что бы приемник работал инвариантно при повороте фазы на 90*n градусов. И вообще как можно распознать поворот созвездия на 90*n если оно симметрично относительно этого поворота? - только если есть каки-либо пилоты, либо по работе ПУ декодера ( работет-не работает)
--------------------
ну не художники мы...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|