Этот пример показывает, как предсказать фазовый шум на выходе фазовой автоподстройки (ФАП), симулировать ФАП с помощью теста ФАП и сравнить результаты симуляции с теоретическими предсказаниями.
Этот пример демонстрирует три фазы эффекта шума, индивидуально или в сочетании, в зависимости от строения, которую вы выбираете:
Эталонная модуляция или фазовый шум
VCO фазы шум
VCO фазы шум, поддискретизированный прескалером обратной связи
Откройте модель PllPhaseNoiseExample.slx.
open_system('PllPhaseNoiseExample.slx');
Этот пример использует целое число N PLL с прескалером с одним модулем из Blockset™ смешанного сигнала.
Тестовый набор ФАП генерирует ссылку входной сигнал для ФАП и измеряет спектральную плотность фазы на выходе ФАП.
Необязательная PRBS6 эталонная фазовая модуляция в этой модели используется, чтобы контрастировать реакцию на эталонное изменение фазы с реакцией на шум фазы VCO.
Низкочастотные повторные усилители на входах в оценщики спектра являются сглаживающими фильтрами. Эти фильтры преобразуют дискретные сигналы переменного шага в дискретные сигналы фиксированного шага, требуемые оценщиками спектра.
Спектры входных и выходных сигналов ФАПЛ оцениваются и регистрируются в базовом рабочем пространстве, так что можно сравнить результаты симуляции с результатами теоретических вычислений.
Осциллограф в модели примера обеспечивает индикатор хода выполнения для симуляции.
Чтобы оценить поведение PLL при различных условиях, используйте отдельный файл рабочей области для каждого отдельного набора условий. Этот пример предоставляет пять таких поддерживающих .mat файлов. Все они формируют тот же циклический переходный процесс.
Baseline.mat
- Как можно ближе к идеалу. Используйте, чтобы оценить численный шум, введенный моделью и симулятором.
ReferenceModulation.mat
- Введение эталонной фазовой модуляции. Используется для оценки передаточной функции фазы ФАП.
VCOPhaseNoise.mat
- Ввести шум фазы VCO и коэффициент предварительного расчета равный единице. Используйте, чтобы вычислить функцию ошибки цикла управления ФАПЛ.
InbandPhaseNoise.mat
- Вводите шум фазы VCO и коэффициент предварительной оценки, больший единицы. Используйте, чтобы оценить эффект коэффициента прескалера на функцию ошибки цикла управления ФАПЛ.
TotalPhaseNoise.mat
- Все источники фазы шума активированы, и коэффициент предварительной оценки больше единицы.
В этом разделе показано, как вычислить ожидаемый ответ ФАПЛ.
Целевая шумовая полоса ФАП составляет 2 МГц с запасом по фазе 45 степени. Компоненты цикла фильтра масштабируются до практического уровня, а ток выхода насоса заряда масштабируется на тот же коэффициент, чтобы поддерживать ту же динамику цикла.
Функция getPllLoopResponse
вычисляет коэффициент усиления цикла как функцию от частоты, а затем вычисляет ожидаемую характеристику на сигналы извне или внутри ФАП. Определите входные параметры, такие как выходной ток насоса заряда, чувствительность VCO, отношение прескалеров и значения компонента пассивного цикла фильтра для getPllLoopResponse
функцию для использования.
PllKphi = 5e-3; % Charge Pump output current PllKvco = 100e6; % VCO sensitivity PllN = 70; % Prescaler ratio PllR2 = 1.33e3; % Loop filter resistance for second order response (ohms) PllR3 = 1.7e4; % Loop filter resistance for third order response (ohms) PllR4 = 0; % Loop filter resistance for fourth order response (ohms) PllC1 = 1.31e-11; % Loop filter direct capacitance (F) PllC2 = 1.44e-10; % Loop filter capacitance for second order response (F) PllC3 = 9.41e-13; % Loop filter capacitance for third order response (F) PllC4 = 0; % Loop filter capacitance for fourth order response (F)
Область скрипта prepareExpectedSpectra
вычисляет спектральную плотность ссылки фазовой модуляции и шума VCO выхода фазы. Скрипт затем также объединяет результат с циклом ответом ФАПЛ, чтобы получить фазу спектральную плотность шума на выходе ФАПЛ. Ссылка фазовой модуляции является детерминированным процессом, для которого амплитуда спектральных компонентов выражена как доля амплитуды несущей (dBc). Напротив, шум фазы VCO является стохастическим процессом, для которого спектральная плотность выражена в дБк/Гц.
Определите входные параметры для prepareExpectedSpectra
скрипт, такой как опорная входная частота, количество опорных циклов на символ шаблона данных PRBS6 фазовой модуляции, амплитуда одной спектральной составляющей PRBS6 исходной фазовой модуляции, ширина полосы разрешения для оценки спектров с фазовым шумом, вектор смещения частоты и спектральные плотности фазового шума при заданном смещении частоты.
PllAddPhaseNoise = 'on'; % Enable VCO phase noise PllFoffset = [30e3 100e3 1e6 3e6 10e6]; % VCO offset frequencies (Hz) PllPhaseNoise = [-56 -106 -132 -143 -152]; % VCO output phase noise (dBc/Hz) CfgSelectRefMod = '0'; % Enable reference phase noise modulation CfgRef = 30e6; % Reference frequency CfgCyclesPerSymbol = 2; % Reference cycles per PRBS6 modulation symbol CfgModLevel = -110; % Reference phase modulation level (dBc/Hz) CfgResBandwidth = 100e3; % PLL Testbench resolution bandwidth CfgTargetSpectrum = [100e3 -145;1e6 -135;3e6 -140;10e6 -150]; % PLL Testbench target phase noise (dBc/Hz)
Если переменная WorkspaceFile
существует и указывает на файл, который можно загрузить, загрузить этот файл в рабочую область. Чтобы использовать строение, поставляемую в этом примере, задайте значение WorkspaceFile
к имени файла для этого строения.
if exist('WorkspaceFile','var') && exist(WorkspaceFile,'file') load(WorkspaceFile); end
Анализируйте цикл управления ФАПЛ с помощью getPllLoopResponse
функция. Выходные выходы этой функции:
LoopFrequency
- частотные точки, в которых вычисляются ожидаемые отклики.
LoopZofs
- передаточное сопротивление цикла фильтра как функцию от частоты.
LoopGofs
- Коэффициент усиления цикла от выхода прескалера до входа ГУН, включая чувствительность напряжения ГУН. Обратите внимание, что коэффициент предварительной оценки не включен в этот выход, но включен в передаточные функции замкнутого цикла.
LoopHofs
- передаточная функция фазы замкнутого цикла преобразует опорный вход ФАПЛ в выход ФАПЛ.
LoopEofs
- Закрытая циклом фазы передаточная функция ошибки относительно выхода VCO.
[LoopFrequency, LoopZofs, LoopGofs, LoopHofs, LoopEofs, LoopPhStep] = ... getPllLoopResponse([0,PllR2,PllR3,PllR4],[PllC1,PllC2,PllC3,PllC4], ... PllKphi,PllKvco,PllN);
Организуйте расчет ожидаемой спектральной плотности, чтобы поместить спектральные компоненты непосредственно в интервалы частот.
Переменные рабочей области для ожидаемой спектральной плотности:
ExpInputFrequency
- вектор частот, для которых вычисляется ожидаемый входной спектр (Гц).
ExpInputSpectrum
- вектор ожидаемых значений спектра на входе ссылки в ФАПЛ (дБм в нагрузку в один Ом при разрешении полосе CfgResBandwidth
).
ExpOutputFrequency
- вектор частот, для которых вычисляется ожидаемый выходной спектр (Гц).
ExpOutputSpectrum
- вектор ожидаемых значений спектра на выходе ФАПЛ (дБм в нагрузку в один Ом при разрешении полосе CfgResBandwidth
).
prepareExpectedSpectra;
В этом разделе исследуйте ожидаемое поведение PLL.
Начните, посмотрев на ответ замкнутого цикла ФАПЛ. Рассмотрим три фундаментальных ответа: переходный процесс, передаточная функция и функция ошибки.
Переходный процесс
В большинстве приложений PLL цикла переходного процесса является наиболее важным, когда цикл первоначально получает фазу блокировки. Для очень малых начальных смещений частоты или для относительно высокой полосы пропускания замкнутого цикла переходный процесс предсказывает время захвата цикла достаточно точно. Однако во многих случаях цикла переходного процесса представляет собой только ответ во время захвата фазы, после того, как сбор частоты уже произошел. В этом примере рассматривается только время захвата фазы.
Постройте график переходного процесса цикла ФАПЛ.
figure(1); plot(LoopPhStep.Time,LoopPhStep.Data); title({'PLL Loop Transient Response';'To Unit Input Phase Step'}); xlabel('Seconds'); ylabel('Output Phase');
Передаточная функция
Передаточная функция от входного сигнала ссылки на выход ФАПЛ может быть важной либо, когда ожидается, что ФАПЛ будет отслеживать модулированный вход очень точно, либо, когда ожидается, что он отфильтровывает шум от шумного входного сигнала.
Создайте логарифмический график передаточной функции ФАПЛ.
figure(2); semilogx(LoopFrequency,20*log10(abs(LoopHofs))); title('PLL Transfer Function'); xlabel('Hz'); ylabel('dB');
Функция ошибки
Ожидается, что цикл управления ФАПЛ отвергнет шум фазы, генерируемый внутри самой ФАПЛ, такой как шум фазы VCO. Передаточная функция между шумом фазы VCO и выходом PLL иногда называется функцией ошибки цикла. Исследование этой передаточной функции помогает компенсировать ошибку цикла, прежде чем она будет применена к другому источнику шума.
Создайте логарифмический график функции ошибки цикла ФАПЛ.
figure(3); semilogx(LoopFrequency,20*log10(abs(LoopEofs))); title('PLL Loop Error Function'); xlabel('Hz'); ylabel('dB');
Постройте график общего ожидаемого шума фазы на выходе ФАПЛ.
figure(4); plot(ExpOutputFrequency,ExpOutputSpectrum); title('PLL Output Spectrum'); xlabel('Hz'); ylabel('dBm into 1 ohm'); xlim([PllN*CfgRef-2*PllFoffset(end), PllN*CfgRef+2*PllFoffset(end)]);
The phaseNoiseMeasure
function - функция обратного вызова, используемая тестбенчем PLL. Он отображает целевую спектральную плотность шума выходной фазы вместе с моделируемой или ожидаемой спектральной плотностью шума фазы.
Чтобы сравнить ожидаемый шум выходной фазы с определенной целью проекта, задайте переменную рабочей области CfgTargetSpectrum
. CfgTargetSpectrum
состоит из двух массивов столбцов, которые задают целевой фазовый шум на выходе ФАПЛ. Первый столбец задает смещения частоты в Гц, а второй столбец задает соответствующую спектральную плотность шума фазы, если дБк/Гц. В тесте PLL используется функция обратного вызова phaseNoiseMeasure
для отображения ожидаемой и моделируемой фазы спектральной плотности шума.
Просмотрите ожидаемый шум выходной фазы ФАПЛ в единицах дБк/Гц.
[~] = phaseNoiseMeasure(ExpOutputFrequency,ExpOutputSpectrum,... CfgResBandwidth, CfgTargetSpectrum(:,1).','on','5', ... CfgTargetSpectrum(:,2).');
Если реакция цикла не удовлетворительна, можно посмотреть на более подробные результаты, такие как переимпеданс фильтра цикла (LoopZofs
), чтобы получить дополнительную информацию, которая может помочь вам улучшить проект ФАПЛ.
Хотя процесс строения прост, существует много параметров, которые необходимо сконфигурировать. Используйте configureExamplePLL
скрипт, чтобы сконфигурировать модель PLL Simulink ®, а затем выполнить модель.
configureExamplePll;
SimOut = sim('PllPhaseNoiseExample');
Чтобы облегчить графическое изображение, преобразуйте результаты в следующие четыре переменные рабочей области:
SimInputFrequency
- вектор частот, для которых сохранен входной спектр симуляции (Гц).
SimInputSpectrum
- вектор значений спектра на входе ссылки в ФАПЛ (дБм в нагрузку в один Ом при разрешении полосе CfgResBandwidth
).
SimOutputFrequency
- вектор частот, для которых вычисляется выходной спектр симуляции (Гц).
SimOutputSpectrum
- вектор моделируемых значений спектра на выходе ФАПЛ (дБм в нагрузку в один Ом при разрешении полосе CfgResBandwidth
).
Упростите построение графиков результатов из рабочей области.
SimInputFrequency = reshape(SimOut.InputFrequency.Data(:,end),1,[]); SimInputSpectrum = reshape(SimOut.InputSpectrum.Data(:,end),1,[]); SimOutputFrequency = reshape(SimOut.OutputFrequency.Data(:,end),1,[]); SimOutputSpectrum = reshape(SimOut.OutputSpectrum.Data(:,end),1,[]);
Сравните ожидаемый и моделируемый шум фазы на выходе ФАПЛ.
figure(4); plot(ExpOutputFrequency,ExpOutputSpectrum); title('PLL Output Spectrum'); xlabel('Hz'); ylabel('dBm into 1 ohm'); xlim([PllN*CfgRef-2*PllFoffset(end), PllN*CfgRef+2*PllFoffset(end)]); hold on; plot(SimOutputFrequency,SimOutputSpectrum); hold off;
Просмотрите ожидаемый шум выходной фазы ФАПЛ в единицах дБк/Гц.
[~] = phaseNoiseMeasure(SimOutputFrequency,SimOutputSpectrum,... SimOutputFrequency(2)-SimOutputFrequency(1),... CfgTargetSpectrum(:,1).','on','5',CfgTargetSpectrum(:,2).');
Сохраните всю рабочую область, включая систему строения в ее текущем состоянии и результаты, в файл. Если на WorkspaceFile
переменная уже существует, можно сохранить текущее состояние в этом файле. Чтобы сохранить в новый файл, измените значение WorkspaceFile
.
if exist('WorkspaceFile','var') save(WorkspaceFile); end
Integer N PLL with Single Modulus Prescaler | PLL Testbench | Variable Pulse Delay