реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> NCO в схеме восстановления символьной (детектирование по Гарднеру), Разбираюсь по Незами и моделям petrov и des00
vea
сообщение Oct 21 2013, 10:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Здравствуйте!
Понимаю, что уже в сотый не первый раз это обсуждается (поиском пользовался).
Но не могу разобраться, как же этот NCO работает.
Сравнивал модели для BPSK petrov'a (8sps), des00 (2sps) и схему 4-13 (QPSK) в книге Незами.
Ставят в тупик сравнения по модулю (с 4 и 2, соответственно) в вышеуказанных моделях,
а у Незами - указания на 3(?) разных частоты работы - 4/T, 1/T, 1/2T.
В статье (прикреплена к сообщению)
"PERFROMANCE ANALYSIS OF THE GARDNER TIMING DETECTOR OVER π/4-DQPSK MODULATION"
есть формула для NCO, но смысл просто ускользает.



Может быть, есть более подробные описания?

Прикрепленный файл  gardnertimingdetector.pdf ( 390.33 килобайт ) Кол-во скачиваний: 1817


Сообщение отредактировал vea - Oct 21 2013, 11:14
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 21 2013, 11:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(vea @ Oct 21 2013, 14:11) *
Ставят в тупик сравнения по модулю (с 4 и 2, соответственно) в вышеуказанных моделях


4 так как нам нужно для гарднера взять 2 отсчёта на символ из 8, в интеграторе NCO каждые 4 отсчёта будет переполнение и соответственно сформируется строб для выборки отсчёта и дробное значение фазы для управления интерполятором.


Go to the top of the page
 
+Quote Post
vea
сообщение Oct 21 2013, 13:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Цитата(petrov @ Oct 21 2013, 14:49) *
4 так как нам нужно для гарднера взять 2 отсчёта на символ из 8, в интеграторе NCO каждые 4 отсчёта будет переполнение и соответственно сформируется строб для выборки отсчёта и дробное значение фазы для управления интерполятором.

Спасибо за мгновенный отклик sm.gif
Я правильно понимаю, что NCO должен просто 1 раз в 4 отсчета сформировать тактовый сигнал и вместе с ним - передать текущее значение символьного сдвига?
Тогда для случая 2 sps NCO должен просто пропускать строб без изменений?
Сбивает то, что в модели des00 (для 2 sps) стоит делению по модулю 2.

И почему не используется просто счетчик до 4?

Дело в том, что в моей текущей модели (bpsk, 2 sps) переполнение интегратора происходит совсем не равномерно (не один раз в N тактов, а то N, то N+1). Это говорит об ошибке в реализации алгоритма?
Хотя попробовал заменить на счетчик до 2 - результаты лучше не стали
----update----
Нашел в книге Менгали описание гибридного NCO (стр. 356) - используется деление по модулю 1.
При этом период стробирования зависит от величины символьной ошибки.
Работа, по всей видимости, ведется на тактовой.
"Обычного" цифрового NCO пока не видно.

Сообщение отредактировал vea - Oct 21 2013, 13:46
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 21 2013, 14:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Разумеется позиция строба скачет плюс-минус, за счёт этого подстройка и осуществляется.
Случай с частотой дискретизации 2 отсчёта на символ особый для гарднера, если частота опорного генератора передатчика чуть выше приёмника, то частоты дискретизации приёмника недостаточно для работы на 2-х отсчётах на символ частоты передатчика. Ну очевидно можно сделать ещё один параллельный интерполятор работающий со сдвигом, а NCO выдаёт один строб на символ.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 21 2013, 15:01
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(vea @ Oct 21 2013, 08:14) *
Сбивает то, что в модели des00 (для 2 sps) стоит делению по модулю 2.

Все просто, у petrov на 8sps NCO считает 2 и 1sps для работы схемы гарднера/взятия отсчета, а в случае 2sps NCO считает только 1sps, 2sps там рождаются нативно. В этом случае нужна модификация схемы гарднера, для случая "несуществующего" отсчета

Цитата(petrov @ Oct 21 2013, 09:20) *
Ну очевидно можно сделать ещё один параллельный интерполятор работающий со сдвигом, а NCO выдаёт один строб на символ.

проще добавить логику маскирования ошибки в петле по тактовой sm.gif Ну и интерполятор лагранжа 3 го порядка не помешает усложнить wink.gif


--------------------
Go to the top of the page
 
+Quote Post
vea
сообщение Oct 22 2013, 14:36
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Цитата(des00 @ Oct 21 2013, 18:01) *
нужна модификация схемы гарднера, для случая "несуществующего" отсчета

проще добавить логику маскирования ошибки в петле по тактовой sm.gif Ну и интерполятор лагранжа 3 го порядка не помешает усложнить wink.gif


Даже не подумал о такой проблеме, спасибо.
Но пока - вопрос с NCO.
Сейчас я отлаживаю m-скрипт, ориентируясь на модель des00. Поскольку много неясного, то отладка поэтапная и постепенная.
Результаты детектора Гарднера - идентичны (на одинаковом входном векторе).
После петлевого фильтра - расхождение порядка 10^-4, постепенно затухающее (неясно, буду разбираться).
А вот с NCO сразу проблемы. Уважаемый des00, почему такая неожиданная инициализация регистра в интеграторе NCO?

Сообщение отредактировал vea - Oct 22 2013, 14:37
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 22 2013, 17:11
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(vea @ Oct 22 2013, 08:36) *
А вот с NCO сразу проблемы. Уважаемый des00, почему такая неожиданная инициализация регистра в интеграторе NCO?

вы бы тогда хоть ссылку на модель дали, а то много тут чего было выложено sm.gif


--------------------
Go to the top of the page
 
+Quote Post
vea
сообщение Oct 23 2013, 07:01
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Цитата(des00 @ Oct 22 2013, 20:11) *
вы бы тогда хоть ссылку на модель дали, а то много тут чего было выложено sm.gif

Вот из этого поста
Модель petrov'а - отсюда

Я правильно понимаю, что TED Гарднера работает непрерывно, но на Loop filter идет только каждый второй отсчет (причем дважды)?

В модели petrov в NCO есть выбор только отрицательных значений.
Как мне показалось, это вызвано тем, что выход TED Гарднера (если говорить приближенно) - это всего 3 значения +K, -K и 0.
(На самом деле имеются не три значения, а три окрестности этих точек)
То есть мы учитывает только отрицательные значения.
Если это так, то почему в модели на 2sps нет такого сравнения?

Спасибо за ответы sm.gif



Сообщение отредактировал vea - Oct 23 2013, 07:33
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 23 2013, 09:08
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(vea @ Oct 23 2013, 11:01) *
Модель petrov'а - отсюда


Посмотрите более поздние модели, в этой модели не совсем правильно сделано, ошибка на NCO должна действовать один раз за символ, ещё диапазон mu не оптимальный.

Цитата(vea @ Oct 23 2013, 11:01) *
Я правильно понимаю, что TED Гарднера работает непрерывно, но на Loop filter идет только каждый второй отсчет (причем дважды)?


Гарднер и петлевой фильтр на символьной частоте работают.

Цитата(vea @ Oct 23 2013, 11:01) *
В модели petrov в NCO есть выбор только отрицательных значений.


Ну так переполнение считается, когда значение аккумулятора модуль превышает, можно десятком способов то же самае сделать, положительные-отрицательные не важно, важно что фазовый аккумулятор сделал оборот в 2pi.
Go to the top of the page
 
+Quote Post
vea
сообщение Nov 4 2013, 13:16
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Продолжаю разбираться.
Вот код, написанный "в лоб" для QPSK по схеме 4-13 Незами, без учета разных тактовых.
(Несмотря на подпись под схемой, она расположена в разделе QPSK)
Код
Kp = 20e-4; % from des00 model
Ki = 50e-7;
% initialization
BUF_TED     = [0 0]; % shift register for TED
BUF_LF      = [0 0 0]; % shift register for Loop filter
mu = zeros(size(y));
for k=3:length(y)-2
    y_out(k)    = farrow(mu(k-1),y(k-2),y(k-1),y(k),y(k+1)); %interpolator
    error       = sign(real(BUF_TED(1)))*[real(y_out(k)) - real(BUF_TED(2))]+sign(imag(BUF_TED(1)))*[imag(y_out(k)) - imag(BUF_TED(2))]; %TED
% loop filter start
    mu(k)       = BUF_LF(2) + BUF_LF(3);
    BUF_LF(3)   = mu(k);
    BUF_LF(2)   = Kp*error + [Ki*error + BUF_LF(1)];
    BUF_LF(1)   = BUF_LF(1) + Ki*error;
% loop filter end
    BUF_TED     = [ y_out(k) BUF_TED(1:end-1) ];
end
subplot(311);plot(mu,'.');grid;shg
subplot(312);plot(y_out(1:2:end),'.');grid;shg
subplot(313);plot(y_out(2:2:end),'.');grid;shg

Схема в том виде, как на рисунке в книге (снова повторюсь, не понял наличия трех разных частот или что это там), не заработала. Начала работать после изменения loop-фильтра на тот, что предложен на рис. 3.7
Ну, то есть работать - это сильно сказано. Если сюда подать y (входной сигнал на 2-х тактовых, сдвинутый на delta), то получится:
при delta<0.5 - надо брать y_out(1:2:end)
при delta>0.5 - надо брать y_out(2:2:end)
То есть схема NCO, включающая и выключающая TED, должна как раз и делать этот выбор, правильно?


Входной сигнал со сдвигом 0.2 Прикрепленный файл  y_02.zip ( 148.96 килобайт ) Кол-во скачиваний: 77
Входной сигнал со сдвигом 0.7 Прикрепленный файл  y_07.zip ( 149.42 килобайт ) Кол-во скачиваний: 61

Я правильно понимаю, что если добавить в приведенный код условия вида if overflow == 1 ... для включения TED, то схема должна заработать как ожидается, то есть автоматически подстраиваясь?

Сообщение отредактировал vea - Nov 4 2013, 13:34
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 00:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016