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

 
 
 
Reply to this topicStart new topic
> Синхронизация методом передискретизации, Фильтры Фарроу, ФАПЧ
ToR_TDA
сообщение Jan 11 2012, 12:34
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 7-08-10
Из: Мурманск
Пользователь №: 58 796



Здравствуйте, форумчане!
Есть синусоидальный сигнал частотой 125кГц, который цифруется с частотой 2МГц. Необходимо петлей ФАПЧ засинхронизировать отсчеты при условии возможной отстройки частоты на 100Гц и случайной начальной фазе. Использую фильтр Фарроу, моделирую в Матлабе. Опираюсь на модели Petrova и ссылку Synchronization
Прикрепляю две модели: первая "farrow_2" основана на моделях Petrova и дает положительный результат, вторая "farrow_pll_2" основана на ссылке выше и отказывается работать.
В чем ошибка(и) во второй модели?
P.S. В моделях частота синусоиды 125,1 кГц. Алгоритм будет писаться для DSP.



Прикрепленные файлы
Прикрепленный файл  Farrow.rar ( 18.48 килобайт ) Кол-во скачиваний: 55
 
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 12 2012, 09:54
Сообщение #2


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

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



Вкурил документ, очень странно там считается мю и предлагается делать систему восстановления тактовой.

В моделях уважаемого petrov NCO работает на частоте нарезки сигнала, а учет ошибки по тактовой в NCO делается 1 раз на символ (для детектора работающего в домене 2sps, ошибка идет с частотой 1sps). Мю считается как значение аккумулятора по фиксированному модулю пересчета == средней тактовой частоте потока.

А в сабжевом документе идет интерполяция сигнала ошибки до частоты работы NCO генератора и коррекция NCO происходит постоянно. Мю считается как значения аккумулятора по переменному модулю пересчета == значение средней тактовой частоты + ошибка.

Ошибка кроется где-то здесь и в физике работы этой схемы восстановления. С одной стороны в моделях petrov просто подкручивается фаза NCO и частота регулируется в небольших пределах. А в документе подкручивается частота NCO. что лучше, мне и самому интересно. Надеюсь гуру объяснят %)


--------------------
Go to the top of the page
 
+Quote Post
ToR_TDA
сообщение Jan 12 2012, 11:30
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 7-08-10
Из: Мурманск
Пользователь №: 58 796



У меня еще вопрос: в моделях товарища petrov в NCO используется операция вычисления остатка от деления по модулю, например частный случай по модулю 4, как это может выглядеть в assembler для DSP, при том, что выполнить честное деление двух 16-ти разрядных чисел, затруднительно? Или как-то не так делают?
Go to the top of the page
 
+Quote Post
des00
сообщение Jan 12 2012, 12:09
Сообщение #4


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

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



Цитата(ToR_TDA @ Jan 12 2012, 05:30) *
У меня еще вопрос: в моделях товарища petrov в NCO используется операция вычисления остатка от деления по модулю, например частный случай по модулю 4, как это может выглядеть в assembler для DSP, при том, что выполнить честное деление двух 16-ти разрядных чисел, затруднительно? Или как-то не так делают?

хмм, ну вообще то операции по модулю 2^N делаются элементарно и без делителей wink.gif это же математика 7го класса

Цитата(des00 @ Jan 12 2012, 03:54) *
Ошибка кроется где-то здесь и в физике работы этой схемы восстановления. С одной стороны в моделях petrov просто подкручивается фаза NCO и частота регулируется в небольших пределах. А в документе подкручивается частота NCO. что лучше, мне и самому интересно.


Что-то сдается мне что в статье ошибка. Сделал модельку восстановления тактовой частоты с двумя типами обратной связи : классически как у petrov и как в этой статье (с интерполяцией сигнала ошибки за счет вставки нулей на входе петлевого фильтра). При нулевых н.у. обе петли работают одинаково. Но если промоделировать уход петли в сторону, за счет содержимого интегральной части (в модели переменная acc) то видно что диапазон захвата классической петли выше %)
Прикрепленные файлы
Прикрепленный файл  modem_qpsk_gardner_other_loop_R14.zip ( 13.44 килобайт ) Кол-во скачиваний: 46
 


--------------------
Go to the top of the page
 
+Quote Post
petrov
сообщение Jan 12 2012, 12:24
Сообщение #5


Гуру
******

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



Цитата(ToR_TDA @ Jan 12 2012, 15:30) *
У меня еще вопрос: в моделях товарища petrov в NCO используется операция вычисления остатка от деления по модулю, например частный случай по модулю 4, как это может выглядеть в assembler для DSP, при том, что выполнить честное деление двух 16-ти разрядных чисел, затруднительно? Или как-то не так делают?


Либо бесплатно по модулю 2^N, как des00 выше писал, либо через сравнения, вы же когда углы на комплексной плоскости по модулю 2pi складываете в уме иррациональные числа не делите. ;)

То что книжки касается, возможно ошибки там есть или недостаточно точно описано, надо детали додумывать, скорее всего можно сделать подобным образом, но смысла не вижу считать на более высокой тактовой частоте, результат тот же, а ресурсов потрачено больше.
Go to the top of the page
 
+Quote Post
ToR_TDA
сообщение Jan 18 2012, 15:30
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 7-08-10
Из: Мурманск
Пользователь №: 58 796



Цитата(des00 @ Jan 12 2012, 15:09) *
Что-то сдается мне что в статье ошибка. Сделал модельку восстановления тактовой частоты с двумя типами обратной связи : классически как у petrov и как в этой статье (с интерполяцией сигнала ошибки за счет вставки нулей на входе петлевого фильтра). При нулевых н.у. обе петли работают одинаково. Но если промоделировать уход петли в сторону, за счет содержимого интегральной части (в модели переменная acc) то видно что диапазон захвата классической петли выше %)

Не берусь пока судить по работе таких петель в составе модели модема, поэтому для понимания я начал с попыток освоить цифровую ФАПЧ на простом сигнале типа синус. По ссылке Synchronization и предложенной там петли некоторые вопросы прояснились, и модель в итоге стала работоспособна (прикрепил). Но тут начинаются свои проблемы. Алгоритм примерно такой (без интерполятора):
Код
// N - samples/symbol
NCO = 0;
mu_temp = 0;

///////////ЦИКЛ//////////
if NCO < 0
underflow = 1;
else
underflow = 0;
end

if underflow == 1
mu = mu_temp;    // for Farrow interpolator
end

if underflow == 1
e = TEDBuff(2) * (TEDBuff(3) - TEDBuff(1)); // Gardner TED
else
e = 0;
end

vp = K1*e;     // proportional component of loop filter
vi = vi + K2*e;      // integrator component of loop filter
v = vp + vi;     // loop filter output
W = 1/N + v;     // NCO control word

// update registers
mu_temp = NCO/W;

if underflow == 1
NCO = NCO + 1 - W;
else
NCO = NCO - W;
end

И в нем, к моему разочарованию, есть деление: mu_temp = NCO/W; Как бы его обойти?

И еще вопрос: где бы так же подробно можно было бы посмотреть про классическую петлю обратной связи? С примерами алгоритмов.

Сообщение отредактировал ToR_TDA - Jan 19 2012, 08:22
Прикрепленные файлы
Прикрепленный файл  farrow_pll_2.rar ( 9.71 килобайт ) Кол-во скачиваний: 30
 
Go to the top of the page
 
+Quote Post
ToR_TDA
сообщение Jan 21 2012, 08:56
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 7-08-10
Из: Мурманск
Пользователь №: 58 796



Люди добрые, посмотрите, пожалуйста, алгоритм по которому пишу ФАПЧ на DSP. Составлен по моделям товарища petrov. Может, я уже на этом этапе ошибаюсь.
Код
// N - samples/symbol
NCO = 0;
mu = 0;
v  = 0;
One_SPS = 0;
TEDBuff(3) = 0;
TEDBuff(2) = 0;
TEDBuff(1) = 0;
///////////ЦИКЛ//////////
if NCO < 0
    underflow = 1;
else
    underflow = 0;
end
if underflow == 1
    TEDBuff(3) = TEDBuff(2);
    TEDBuff(2) = TEDBuff(1);
    TEDBuff(1) = Out_Farrow;
    mu = NCO;            // for Farrow interpolator
    One_SPS = not One_SPS;

        if One_SPS == 1
            e = TEDBuff(2) * (TEDBuff(3) - TEDBuff(1));     // Gardner TED
            vp = K1*e;                     // proportional component of loop filter
            vi = vi + K2*e;                  // integrator component of loop filter
            v = vp + vi;                     // loop filter output
    end
end
// update registers
W = v + 1;
NCO = NCO mod 4 - W;
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:01
Рейтинг@Mail.ru


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