Я прочитал книгу Шахгильдяна, вывел вместе с ним и получил основные уравнения фапч и результаты анализа (первого порядка)
Написал простую модель на 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 полоса в герцах