Фазовая автоподстройка

WaitEvent
Сообщения: 4
Зарегистрирован: 25 июл 2016, 15:14

Фазовая автоподстройка

Сообщение WaitEvent »

Доброго времени суток.
Я прочитал книгу Шахгильдяна, вывел вместе с ним и получил основные уравнения фапч и результаты анализа (первого порядка)

Написал простую модель на matlab для закрепления теории и дальнейшего усложнения (см. приложение). Коротко о модели: модель построена на нулевой частоте и зависит только от разности частот и полосы удержания (входные параметры). При исследовании полос удержания и захвата появляется ошибка следующего вида.
Исследую полосу удержания. Начальные условия - частоты генераторов равны (ГУН и эталонного т.е. расстройка по частоте 0 ). Меняю расстройку от малых значений до больших , пока система не выйдет из синхронизма. На графике 1 проиллюстрированы мгновенные значения частоты. Видно, что есть ошибка. Система вошла в синхроннизм, но графики частот не совпадают. и отличаются на некий коэффициент (наклон прямой на 2 ).

Аналогичная картина, при исследовании полосы захвата. Меняя расстройку от больших к малым значениям , ищу точку входа системы в синхронизм. По графикам (см. прил. 2) частоты опять различны...и снова та же ошибка..если построить кривую с другим наклоном, то все хорошо . Откуда берется эта другая кривая....в идеале , как я думаю, около отсчета 8*10^4 частоты станут равными (синий график и красный) и после переходного процесса система в этой точке должна войти в синхронизм, а она входит в непонятной мне точке и выходит , хотя я моделирую до расстройки 0 , т.е. еще в полосе удержания.

Мне не понятно..откуда такая ошибка берется, в чем мое непонимание?

Код: Выделить всё

%>   @brief     ФАПЧ с передаточной характеристикой фильтра равной 1
%>   @param     [in] - inputArray, разность частот в герцах, вектор
%>   @param     [in] - pass      , полоса удержания системы ФАПЧ в герцах
%>   @details   тестовая программная модель исследования ФАПЧ первого
%>              порядка. Допущены следующие упрощения. Коэффициент передачи
%>              фильтра равен 1, ФД реализован без перемножения
%>   @return    frq -   частота круговая в радианах 
%>   @return    nco -   фаза ГУН
%>   @return    control - выход с управляющего элемента
%>   @return    filter - вместо фильтра усилитель компенсирующий 1/2 ФД
%>   @note      Пример вызова 
%>              [frq,nco, control, filter, match] = test_frst (ones( 1 , 80000) * 502, 7);


function  [frq,control, filter, match] = test_frst_p ( inputArray, pass)

Fs  = 1E4;          % частота дискретизации
Ts  = 1/Fs;         % период дискретизации
Fnco= 0;            % Частота Генератора

% коэффициенты
Kf = 2;             		% Коэффициент передачи ФД
Scu = ( pass )*2*pi	% Коэфициент передачи управляющего элемента
F = Ts/2;           	% Коэфф.интегратора

% Начальные условия 
phaseDetector(1) = 0;
filter(1) = 0;
control(1) = 0;
match(1) = 0;
%

for n = 2 : length( inputArray )
   phaseDetector(n) = Kf* 1/2 * cos ( 2*pi*inputArray(n)*(n)*Ts - control( n -1 ) ); %фазовый детектор
   filter(n)    	= phaseDetector(n);									%фильтр 
   control(n)   	= F*Scu*2*( filter(n)  )+control(n-1);  % интегратор (управляющий элемент)
   %------------ для графиков переменные
   match(n)     	= 2*pi*inputArray(n)*(n)*Ts - control(n -1) ; % разность частот 
   %эталонного и частоты генератора + управляющего расстройка
   frq(n) =  Fnco*2*pi + Scu*filter (n);	%частота ГУН
end

мой вызов функции

Код: Выделить всё

[frq, control, filter, match] = test_frst_p ( -10:0.0001:0, 2 );
% -10:0.0001:0 - вектор частот в герцах
%2 полоса в герцах
Надеюсь я внятно объяснил свою проблему и мне укажут на мои ошибку.
Вложения
4.jpg
3.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Фазовая автоподстройка

Сообщение Бахурин Сергей »

Странный код.
Выходной параметр frq должен возвращать в Гц.
Но он возвращает выход фазового детектора, умноженный на Scu. Scu равен 4*pi (pass =2).
При этом фазовый детектор возвращает вообще не понятно в каких единицах, потому что согласно коду

Код: Выделить всё

phaseDetector(n) = Kf* 1/2 * cos ( 2*pi*inputArray(n)*(n)*Ts - control( n -1 ) ) 
всегда меньше или равно 1 при Kf = 2.

WaitEvent
Сообщения: 4
Зарегистрирован: 25 июл 2016, 15:14

Re: Фазовая автоподстройка

Сообщение WaitEvent »

ну вот ак...
фазовый детектор , если реализовать перемножение гармоник будет возвращать сумму и разность фаз деленную пополам...т.к. модель простая, я сразу беру разность фаз и для облегчения расчетов добавляю коэффициент передачи 2 (чтобы выход детектора как раз был меньше ли равен 1)...выход детектора измеряется в вольтах, диапазон от 0 до 1 В

...
Фильтра нету (ФАПЧ первого порядка).

Дальше идет управляющий элемент с крутизной Scu рад/(с*В)...
Следовательно frq возвращает угловую частоту в рад/с....( на графиках мог обозначения осей перепутать (ГЦ и рад/с т.к. много раз пытался выводить в поисках ошибок))

чтобы отдельно не выделять упр.элемент я его внес в интегратор сразу..
Соотвественно полоса удержания определяется , как Kf*Scu*Umax(с фазловго детектоора)..для упрощения как раз kf =2, а U max = 1/2..

В итоге по моей модели..полоса зависит только от Scu...т.к. входные данные в герцах, то Scu = 2pi*f...в моем случае 2*2pi..
Спасибо за Ваш ответ.

PS. Сильно извиняюсь...график первый был по-правде в герцах. По приезду домой исправлю все.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Фазовая автоподстройка

Сообщение Бахурин Сергей »

Тогда еще вопрос к вам. Почему у вас выход фазового детектора пропорционален косинусу разницы фаз? Т.е. если разница равна 0 то фазовый детектор выдает 1? А также такой фазовый детектор не будет отличать если разница фаз 1 рад и -1 рад. т.е. будет смещать фазу всегда в плюс. Обычно фазовый детектор выдает значение пропорциональное синусу разницы фаз.

WaitEvent
Сообщения: 4
Зарегистрирован: 25 июл 2016, 15:14

Re: Фазовая автоподстройка

Сообщение WaitEvent »

Доброго времени суток.
Вы правы. Я использую ФД , имеющую косинусоидальную характеристику. Выбор характеристики обуславливался, имеющимся решенным диф. уравнением под данную характеристику. Т.е. легче будет сравнивать результаты моделирования с теорией (на первых порах , потом я собирался повышать порядок и т.п.)

Я привожу, исправленный график 1 (первое сообщение) в рад/с, общую картину это не меняет, ошибка остается. Вид характеристики ФД не влияет на нее (ошибку). Я не могу понять природу данной ошибки.
Вложения
3.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Фазовая автоподстройка

Сообщение Бахурин Сергей »

Надо проверять нормировки. Вообще ФАПЧ это система с обратной связью мне думается более корректно моделировать ее на радиочастоте а не на нулевой. Потому что у вас непонятно как работает ФД. Еще раз повторю, что косинус это неправильно для ФД. Должен быть синус. Диф уравнения это хорошо, но реально косинус будет расходится, потому что непонятно куда частоту NCO смещать. Функция косинуса симметричная и нет разницы в положительном и отрицательном смещении (управляющий сигнал всегда положительный).

WaitEvent
Сообщения: 4
Зарегистрирован: 25 июл 2016, 15:14

Re: Фазовая автоподстройка

Сообщение WaitEvent »

Спасибо за Ваш ответ.
Ошибка была глупой. я просто формировал не правильно ( и по-разному для ГУН и ЭГ) фазы из мгновенных частот.
Поэтому система входила не правильно, и при этом всегда по определенному правилу. После исправления, вроде все хорошо. Система устойчива и находится точно в точке устойчивого равновесия ( совпадает с теорит. точкой из решения дифф. уравнения) и при шумах держится в ней.
ФД я буду менять (попробую разные характеристики) + фильтры добавлять и т.п..

Еще раз, спасибо Вам

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Фазовая автоподстройка

Сообщение Бахурин Сергей »

А можете привести корректный код если это не секрет конечно?

Ответить