comm.CarrierSynchronizer

Компенсируйте смещение частоты несущей

Описание

The comm.CarrierSynchronizer Система object™ компенсирует смещения частоты несущей и фазы в сигналах, которые используют схемы модуляции с одной несущей. Алгоритм синхронизатора несущей совместим с BPSK, QPSK, OQPSK, 8-PSK, PAM и прямоугольными схемами модуляции QAM.

Примечание

  • Этот Системный объект не устраняет неоднозначности фазы, созданные алгоритмом синхронизации. Как показано в этой таблице, потенциальная неоднозначность фазы, введенная синхронизатором, зависит от типа модуляции:

    МодуляцияНеоднозначность фазы ( степени)
    'BPSK' или 'PAM'0, 180
    'OQPSK', 'QPSK', или 'QAM'0, 90, 180, 270
    '8PSK'0, 45, 90, 135, 180, 225, 270, 315

    Примеры демонстрируют синхронизацию несущей и разрешение неоднозначности фазы.

  • Для наилучших результатов примените синхронизацию несущей к несущим сигналам без избыточной дискретизации, как показано в Правильной Фазе и Смещении Частоты для 16-QAM с использованием грубой и тонкой Синхронизации.

Чтобы компенсировать смещения частоты и фазы в сигналах, которые используют схемы модуляции с одной несущей:

  1. Создайте comm.CarrierSynchronizer Объекту и установите его свойства.

  2. Вызывайте объект, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

carrSynch = comm.CarrierSynchronizer создает системный объект, который компенсирует смещение частоты несущей и смещение фазы в сигналах, которые используют схемы модуляции с одной несущей.

пример

carrSynch = comm.CarrierSynchronizer(Name,Value) устанавливает свойства с помощью одной или нескольких пар "имя-значение". Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Тип модуляции, заданный как 'QAM', '8PSK', 'BPSK', 'OQPSK', 'PAM', или 'QPSK'.

Пример: comm.CarrierSynchronizer('Modulation','QPSK') создает синхронизатор несущей, Системный объект для использования с модулированным сигналом QPSK.

Настраиваемый: Нет

Метод смещения фазы модуляции, заданный как 'Auto' или 'Custom'.

  • 'Auto' - Применить традиционное смещение для заданного типа модуляции.

    МодуляцияСмещение фазы (радианы)
    'BPSK', 'QAM', или 'PAM'0
    'OQPSK' или 'QPSK'<reservedrangesplaceholder0>/4
    '8PSK'<reservedrangesplaceholder0>/8
  • 'Custom' - Задайте пользовательское смещение фазы со свойством CustomPhaseOffset.

Настраиваемый: Да

Пользовательское смещение фазы в радианах, задается как скаляр.

Зависимости

Это свойство применяется, когда для свойства ModulationPhaseOffset задано значение 'Custom'.

Типы данных: double

Количество выборок на символ, заданное в виде положительного целого числа.

Настраиваемый: Да

Типы данных: double

Коэффициент затухания цикла в виде положительной скалярной величины.

Настраиваемый: Да

Типы данных: double

Нормированная шумовая полоса цикла, заданная в виде скаляра в область значений (0,1]. Шумовая полоса цикла нормирована частотой дискретизации синхронизатора.

Уменьшение пропускной способности цикла уменьшает время сходимости синхронизатора, но также уменьшает получение по запросу-в области значений синхронизатора.

Настраиваемый: Да

Типы данных: double

Использование

Описание

пример

[outSig,phErr] = carrSynch(inSig) компенсирует смещение частоты и смещение фазы в входном сигнале. Этот Системный объект возвращает компенсированный выходу сигнал и оценку фазы ошибки.

Входные параметры

расширить все

Входной сигнал, заданный как комплексный скаляр или вектор-столбец комплексных чисел.

Типы данных: double | single
Поддержка комплексного числа: Да

Выходные аргументы

расширить все

Выходной сигнал, возвращенный как скаляр или вектор-столбец с совпадающим типом данных и длиной, как inSig. Выходной сигнал регулирует входной сигнал, компенсируя смещения несущей частоты и фазы в сигналах, которые используют схемы модуляции с одной несущей.

Фаза оценки ошибки в радианах, возвращается как скаляр или вектор-столбец с той же длиной, что и inSig.

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

infoХарактеристическая информация о синхронизаторе поставщика услуг
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Правильная фаза и смещения частоты сигнала QPSK прошли через канал AWGN. Используя преамбулы, устраните неоднозначность фазы.

Определите параметры симуляции.

M = 4; % Modulation order
rng(1993) % For repeatable results
barker = comm.BarkerCode(...
    'Length',13,'SamplesPerFrame',13);  % For preamble
msgLen = 1e4;
numFrames = 10;
frameLen = msgLen/numFrames;

Добавьте преамбулы к каждой системе координат, которые используются позже при выполнении разрешения неоднозначности фазы. Сгенерируйте символы случайных данных и примените QPSK модуляцию.

preamble = (1+barker())/2;  % Length 13, unipolar
data = zeros(msgLen,1);
for idx = 1 : numFrames
    payload = randi([0 M-1],frameLen-barker.Length,1);
    data((idx-1)*frameLen + (1:frameLen)) = [preamble; payload];
end

modSig = pskmod(data,4,pi/4);

Создайте comm.PhaseFrequencyOffset Система object™, чтобы ввести фазу и смещения частоты в модулированный входной сигнал. Установите смещение фазы равным 45 степени, смещение частоты до 1 кГц и частота дискретизации до 10 кГц. Смещение частоты устанавливается равным 1% от частоты дискретизации.

pfo = comm.PhaseFrequencyOffset('PhaseOffset',45, ...
    'FrequencyOffset',1e4,'SampleRate',1e6);

Создайте Системным объектом синхронизатора несущей, который будет использоваться для коррекции смещения фазы и частоты с выборками на символ, установленным на 1.

carrierSync = comm.CarrierSynchronizer( ...
    'SamplesPerSymbol',1,'Modulation','QPSK');

Примените смещения фазы и частоты, используя pfo Системный объект, а затем передайте сигнал через канал AWGN, чтобы добавить белый Гауссов шум.

modSigOffset = pfo(modSig);
rxSig = awgn(modSigOffset,12);

Отобразите график поля точек принятого сигнала. Данные появляются в круге вместо того, чтобы сгруппироваться вокруг ссылочных точек созвездия из-за смещения частоты.

scatterplot(rxSig)

Figure Scatter Plot contains an axes. The axes with title Scatter plot contains an object of type line. This object represents Channel 1.

Используйте carrierSync Системный объект для коррекции смещения фазы и частоты в принимаемом сигнале.

syncSignal = carrierSync(rxSig);

Используйте сигнальное созвездие, чтобы отобразить первые и последние 1000 символов синхронизируемого сигнала. Перед сходимостью цикла синхронизатора нанесенные на график символы не сгруппированы вокруг ссылочных точек созвездия. После сходимости нанесенные на график символы сгруппированы вокруг ссылочных точек созвездия.

constDiag = comm.ConstellationDiagram( ...
'SymbolsToDisplaySource','Property','SymbolsToDisplay',300, ...
'ChannelNames',{'Before convergence','After convergence'},'ShowLegend',true, ...
'Position',[400 400 400 400]);

constDiag([syncSignal(1:1000) syncSignal(9001:10000)]);

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 3 objects of type line. These objects represent Before convergence, After convergence.

Демодулируйте синхронизированный сигнал. Вычислите и отобразите общие битовые ошибки и BER.

syncData = pskdemod(syncSignal,4,pi/4);
[syncDataTtlErr,syncDataBER] = biterr(data(6000:end),syncData(6000:end))
syncDataTtlErr = 3990
syncDataBER = 0.4986

Неоднозначность фазы в принимаемом сигнале может вызвать битовые ошибки. Используя преамбулу, определите неоднозначность фазы. Удалите эту неоднозначность фазы из синхронизируемого сигнала, чтобы уменьшить битовые ошибки.

idx = 9000 + (1:barker.Length);
phOffset = angle(modSig(idx) .* conj(syncSignal(idx)));
phOffset = round((2/pi) * phOffset); % -1, 0, 1, +/-2
phOffset(phOffset==-2) = 2; % Prep for mean operation
phOffset = mean((pi/2) * phOffset); % -pi/2, 0, pi/2, or pi
disp(['Estimated mean phase offset = ',num2str(phOffset*180/pi),' degrees'])
Estimated mean phase offset = 180 degrees
resPhzSig = exp(1i*phOffset) * syncSignal;

Демодулируйте сигнал после разрешения неоднозначности фазы. Пересчитайте и отобразите обновленные общие битовые ошибки и BER. Удаление неоднозначности фазы резко уменьшает BER.

resPhzData = pskdemod(resPhzSig,4,pi/4);
[resPhzTtlErr, resPhzBER] = biterr(data(6000:end),resPhzData(6000:end))
resPhzTtlErr = 403
resPhzBER = 0.0504

Оцените смещение частоты, введенное в сигнал шумного 8-PSK, используя Системный object™ синхронизатора несущей.

Определите параметры симуляции.

M = 8;                  % Modulation order
fs = 1e6;               % Sample rate (Hz)
foffset = 1000;         % Frequency offset (Hz)
phaseoffset = 15;       % Phase offset (deg)
snrdb = 20;             % Signal-to-noise ratio (dB)

Создайте comm.PhaseFrequencyOffset Системный объект, чтобы ввести фазу и смещения частоты в модулированный сигнал.

pfo = comm.PhaseFrequencyOffset('PhaseOffset',phaseoffset, ...
    'FrequencyOffset',foffset,'SampleRate',fs);

Создайте Системным объектом синхронизатора несущей, который будет использоваться для коррекции фазы и смещений частоты. Установите Modulation свойство к 8PSK.

carrierSync = comm.CarrierSynchronizer('Modulation','8PSK');

Сгенерируйте случайные данные и примените 8-PSK модуляцию.

data = randi([0 M-1],5000,1);
modSig = pskmod(data,M,pi/M);

Примените смещения фазы и частоты, используя Системный объект pfo, и передайте сигнал через канал AWGN, чтобы добавить Гауссов белый шум.

modSigOffset = pfo(modSig);
rxSig = awgn(modSigOffset,snrdb);

Используйте синхронизатор несущей, чтобы оценить смещение фазы принимаемого сигнала.

[~,phError] = carrierSync(rxSig);

Определите смещение частоты при помощи diff функция для вычисления приблизительной производной от фазы ошибки. Производная должна быть масштабирована 2π потому что ошибка фазы измеряется в радианах.

estFreqOffset = diff(phError)*fs/(2*pi);

Постройте график среднего значения расчетного смещения частоты. После того, как синхронизатор сходится к решению, среднее значение оценки приблизительно равно входному значению смещения частоты 1000 Гц.

rmean = cumsum(estFreqOffset)./(1:length(estFreqOffset))';
plot(rmean)
xlabel('Symbols')
ylabel('Estimated Frequency Offset (Hz)')
grid

Figure contains an axes. The axes contains an object of type line.

Компенсация значительной фазы и смещений частоты для сигнала 16-QAM в канале AWGN выполняется в два этапа. Сначала исправьте смещение грубой частоты с помощью оценки, предоставленной компенсатором грубой частоты, а затем подстройте коррекцию с помощью синхронизации несущей. Из-за грубой коррекции частоты синхронизатор несущей быстро сходится, хотя нормированная полоса частот установлена на низкое значение. Более низкие нормированные значения полосы пропускания обеспечивают лучшую коррекцию для малых остаточных смещений несущей. После применения коррекций фазы и смещения частоты к принимаемому сигналу устраните неоднозначность фазы с помощью преамбул.

Определите параметры симуляции.

fs = 10000;      % Sample rate (Hz)
sps = 4;         % Samples per symbol
M = 16;          % Modulation order
k = log2(M);     % Bits per symbol
rng(1996)        % Set seed for repeatable results
barker = comm.BarkerCode(...
    'Length',13,'SamplesPerFrame',13);  % For preamble
msgLen = 1e4;
numFrames = 10;
frameLen = msgLen/numFrames;    

Сгенерируйте полезную нагрузку данных и добавьте преамбулу к каждой системе координат. Преамбула позже используется для разрешения неоднозначности фазы.

preamble = (1+barker())/2;  % Length 13, unipolar
data = zeros(msgLen, 1);
for idx = 1 : numFrames
    payload = randi([0 M-1],frameLen-barker.Length,1);
    data((idx-1)*frameLen + (1:frameLen)) = [preamble; payload];
end

Создайте системный объект для фильтрации формы передающего импульса, фильтрации формы приемного импульса, компенсации грубой частоты QAM, синхронизации несущей и схемы созвездия.

txFilter = comm.RaisedCosineTransmitFilter( ...
    'OutputSamplesPerSymbol',sps);
rxFilter = comm.RaisedCosineReceiveFilter(...
    'InputSamplesPerSymbol',sps,'DecimationFactor',sps);
coarse = comm.CoarseFrequencyCompensator('SampleRate',fs, ...
    'FrequencyResolution',10);
fine = comm.CarrierSynchronizer( ...
    'DampingFactor',0.4,'NormalizedLoopBandwidth',0.001, ...
    'SamplesPerSymbol',1,'Modulation','QAM');
axislimits = [-6 6];
constDiagram = comm.ConstellationDiagram('ReferenceConstellation',qammod(0:M-1,M), ...
    'ChannelNames',{'Before convergence','After convergence'}, ...
    'ShowLegend',true,'XLimits',axislimits,'YLimits',axislimits);

Также создайте Системный объект для канала AWGN, и фазу и смещение частоты, чтобы добавить нарушения к сигналу. Смещение фазы, больше 90 градусов, добавляется, чтобы вызвать неоднозначность фазы, которая приводит к сдвигу квадранта созвездия.

ebn0 = 8;
freqoffset = 110;
phaseoffset = 110;
awgnChannel = comm.AWGNChannel('EbNo',ebn0, ...
    'BitsPerSymbol',k,'SamplesPerSymbol',sps);
pfo = comm.PhaseFrequencyOffset('FrequencyOffset',freqoffset, ...
    'PhaseOffset',phaseoffset,'SampleRate',fs);

Сгенерируйте символы случайных данных, примените 16-QAM модуляцию и передайте модулированный сигнал через фильтр формирования передающих импульсов.

txMod = qammod(data,M);
txSig = txFilter(txMod);

Примените смещения фазы и частоты, используя pfo Системный объект, а затем передайте сигнал через канал AWGN, чтобы добавить белый Гауссов шум.

txSigOffset = pfo(txSig);
rxSig = awgnChannel(txSigOffset);

Компенсатор Системного объекта грубой частоты обеспечивает грубую коррекцию для смещения частоты. Для условий в этом примере достаточна коррекция смещения частоты коррекции принимаемого сигнала в пределах 10 Гц переданного сигнала.

syncCoarse = coarse(rxSig);

Пропустите сигнал через фильтр формирования приемного импульса и примените точную коррекцию частоты.

rxFiltSig = fine(rxFilter(syncCoarse));

Отобразите сигнальное созвездие первого и последнего 1000 символов. Перед сходимостью цикла синхронизации спиральный характер схемы указывает, что смещение частоты не исправлено. После того, как синхронизатор поставщика услуг сходится к решению, символы выравниваются по ссылке созвездию.

constDiagram([rxFiltSig(1:1000) rxFiltSig(9001:end)])

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 3 objects of type line. These objects represent Before convergence, After convergence.

Демодулируйте сигнал. Учитывайте задержку сигнала, вызванную фильтрами передачи и приема, чтобы согласовать принятые данные с передаваемыми данными. Вычислите и отобразите общие битовые ошибки и BER. При проверке битовых ошибок используйте более поздний фрагмент принятого сигнала, чтобы убедиться, что цикл синхронизации сходится.

rxData = qamdemod(rxFiltSig,M);
delay = (txFilter.FilterSpanInSymbols + rxFilter.FilterSpanInSymbols) / 2;
idxSync = 2000; % Check BER for the received signal after the synchronization loop has converged
[syncDataTtlErr,syncDataBER] = biterr(data(idxSync:end-delay),rxData(idxSync+delay:end))
syncDataTtlErr = 16116
syncDataBER = 0.5042

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

idx = 9000 + (1:barker.Length);
phOffset = angle(txMod(idx) .* conj(rxFiltSig(idx+delay)));

phOffsetEst = mean(phOffset);
disp(['Phase offset = ',num2str(rad2deg(phOffsetEst)),' degrees'])
Phase offset = -90.1401 degrees
resPhzSig = exp(1i*phOffsetEst) * rxFiltSig;

Демодулируйте сигнал после разрешения неоднозначности фазы. Пересчитайте общее количество битовых ошибок и BER.

resPhzData = qamdemod(resPhzSig,M);
[resPhzTtlErr,resPhzBER] = biterr(data(idxSync:end-delay),resPhzData(idxSync+delay:end))
resPhzTtlErr = 5
resPhzBER = 1.5643e-04

Моделируйте нарушения канала, такие как смещение фазы синхронизации, смещение частоты несущей и смещение фазы несущей для сигнала минимальной манипуляции сдвигом (MSK). Использование comm.MSKTimingSynchronizer и comm.CarrierSynchronizer Системные объекты для синхронизации таких сигналов в приемнике. Синхронизатор синхронизации MSK восстанавливает смещение синхронизации, в то время как синхронизатор несущей восстанавливает смещения несущей частоты и фазы.

Инициализируйте системные переменные, запустив скрипт MATLAB configureMSKSignalRecoveryEx. Задайте логическую переменную управления recoverTimingPhase для обеспечения восстановления фазы синхронизации и recoverCarrier обеспечение возможности восстановления несущей частоты и фазы.

configureMSKSignalRecoveryEx;
recoverTimingPhase = true;
recoverCarrier = true;

Моделирование повреждений канала

Задайте задержку выборки, timingOffset, что применяется модель канала. Создайте объект переменной дробной задержки, чтобы ввести временную задержку в переданный сигнал.

timingOffset = 0.2;
varDelay = dsp.VariableFractionalDelay;

Создайте comm.PhaseFrequencyOffset Системный объект для введения фазы несущей и смещения частоты в модулированный сигнал. Поскольку модулятор MSK усиливает переданные символы, установите SampleRate свойство к отношению samplesPerSymbol и шаг расчета, Ts.

freqOffset = 50;
phaseOffset = 30;
pfo = comm.PhaseFrequencyOffset(...
    'FrequencyOffset',freqOffset, ...
    'PhaseOffset',phaseOffset, ...
    'SampleRate',samplesPerSymbol/Ts);

Создайте comm.AWGNChannel Системный объект, чтобы добавить белый Гауссов шум к модулированному сигналу. Степень шума определяется EbNo свойство, которое является энергией бита к шуму степени спектральным отношением плотности. Поскольку модулятор MSK генерирует символы с 1 Вт степени, установите свойство степени сигнала системного объекта канала AWGN в 1.

EbNo = 20 + 10*log10(samplesPerSymbol);
chAWGN = comm.AWGNChannel(...
    'NoiseMethod','Signal to noise ratio (Eb/No)', ...
    'EbNo',EbNo,...
    'SignalPower',1, ...
    'SamplesPerSymbol',samplesPerSymbol);

Фаза синхронизации, частота несущей и синхронизация фазы несущей

Создайте синхронизатор синхронизации MSK, чтобы восстановить фазу синхронизации символа с помощью метода нелинейности четвертого порядка.

timeSync = comm.MSKTimingSynchronizer(...
    'SamplesPerSymbol',samplesPerSymbol, ...
    'ErrorUpdateGain',0.02);

Создайте синхронизатор несущей, чтобы восстановить как частоту несущей, так и фазу. Поскольку созвездие MSK является QPSK со смещением фазы 0 градусов, установите comm.CarrierSynchronizer соответственно.

phaseSync = comm.CarrierSynchronizer(...
    'Modulation','QPSK', ...
    'ModulationPhaseOffset','Custom', ...
    'CustomPhaseOffset',0, ...
    'SamplesPerSymbol',1);

Цикл обработки потока

Симуляция модулирует данные с помощью MSK модуляции. Модулированные символы проходят через модель канала, которая применяет задержку синхронизации, частоту несущей и сдвиг фазы и аддитивный белый Гауссов шум. Приемник выполняет фазу синхронизации, и частоту несущей, и восстановление фазы. Наконец, символы сигнала демодулируются и вычисляется вероятность битовой ошибки. The plotResultsMSKSignalRecoveryEx скрипт генерирует графики поля точек в таком порядке, чтобы показать следующие эффекты:

  1. Обесценение канала

  2. Временная синхронизация

  3. Синхронизация поставщика услуг

В конце симуляции в примере отображаются временная фаза, частота и оценки фазы как функция времени симуляции.

for p = 1:numFrames
    %------------------------------------------------------------------------
    % Generate and modulate data
    %------------------------------------------------------------------------
    txBits = randi([0 1],samplesPerFrame,1);
    txSym = modem(txBits);
    %------------------------------------------------------------------------
    % Transmit through channel
    %------------------------------------------------------------------------
    %
    % Add timing offset
    rxSigTimingOff = varDelay(txSym,timingOffset*samplesPerSymbol);
    %
    % Add carrier frequency and phase offset
    rxSigCFO = pfo(rxSigTimingOff);
    %
    % Pass the signal through an AWGN channel
    rxSig = chAWGN(rxSigCFO);
    %
    % Save the transmitted signal for plotting
    plot_rx = rxSig;
    %
    %------------------------------------------------------------------------
    % Timing recovery
    %------------------------------------------------------------------------
    if recoverTimingPhase
        % Recover symbol timing phase using fourth-order nonlinearity
        % method
        [rxSym,timEst] = timeSync(rxSig);
        % Calculate the timing delay estimate for each sample
        timEst = timEst(1)/samplesPerSymbol;
    else
        % Do not apply timing recovery and simply downsample the received
        % signal
        rxSym = downsample(rxSig,samplesPerSymbol);
        timEst = 0;
    end

    % Save the timing synchronized received signal for plotting
    plot_rxTimeSync = rxSym;

    %------------------------------------------------------------------------
    % Carrier frequency and phase recovery
    %------------------------------------------------------------------------
    if recoverCarrier
        % The following script applies carrier frequency and phase recovery
        % using a second order phase-locked loop (PLL), and removes phase ambiguity
        [rxSym,phEst] = phaseSync(rxSym);
        removePhaseAmbiguityMSKSignalRecoveryEx;
        freqShiftEst = mean(diff(phEst)/(Ts*2*pi));
        phEst = mod(mean(phEst),360); % in degrees
    else
        freqShiftEst = 0;
        phEst = 0;
    end

    % Save the phase synchronized received signal for plotting
    plot_rxPhSync = rxSym;
    %------------------------------------------------------------------------
    % Demodulate the received symbols
    %------------------------------------------------------------------------
    rxBits = demod(rxSym);
    %------------------------------------------------------------------------
    % Calculate the bit error rate
    %------------------------------------------------------------------------
    errorStats = BERCalc(txBits,rxBits);
    %------------------------------------------------------------------------
    % Plot results
    %------------------------------------------------------------------------
    plotResultsMSKSignalRecoveryEx;
end

Отобразите вероятность битовой ошибки и общее количество символов, обработанных калькулятором частоты ошибок.

BitErrorRate = errorStats(1)
TotalNumberOfSymbols = errorStats(3)
BitErrorRate =

   4.0001e-06


TotalNumberOfSymbols =

      499982

Заключение и дальнейшие эксперименты

Алгоритмы восстановления демонстрируются с помощью графиков, взятых после синхронизации времени, частоты несущей и фазы несущей.

Откройте скрипт, чтобы создать доступную для записи копию этого примера и его вспомогательных файлов. Затем, чтобы показать эффекты алгоритмов восстановления, можно включить и отключить логические переменные управления recoverTimingPhase и recoverCarrier и повторите симуляцию.

Приложение

Этот пример использует следующие скрипты:

  • configureMSKSignalRecoveryEx

  • plotResultsMSKSignalRecoveryEx

  • removePhaseAmbiguityMSKSignalRecoveryEx

Алгоритмы

The comm.CarrierSynchronizer Системный объект является компенсатором с обратной связью, который использует основанный на ФАПЛ алгоритм, описанный в [1]. Выход синхронизатора, y n, является измененной по частоте версией комплексного входного сигнала, x n, для n-й выборки. Выходные выходы синхронизатора:

yn=xneiλn,

где λ n - выход прямого цифрового синтезатора (DDS). DDS является дискретной версией управляемого напряжением осциллятора и является основным компонентом фазы заблокированных циклов в дискретном времени. В контексте этого Системного объекта DDS работает как интегрирование фильтр.

Чтобы исправить смещение частоты, сначала алгоритм определяет фазовую ошибку, e n. Значение фазы ошибки зависит от схемы модуляции.

МодуляцияФазовая ошибка
QAM или QPSK

en=sgn(Re{xn})×Im{xn}sgn(Im{xn})×Re{xn}

Подробное описание этого уравнения см. в [1].

BPSK или PAM

en=sgn(Re{xn})×Im{xn}

Подробное описание этого уравнения см. в [1].

8-PSK

en={sgn(Re{xn})×Im{xn}(21)sgn(Im{xn})×Re{xn},для|Re{xn}||Im{xn}|(21)sgn(Re{xn})×Im{xn}sgn(Im{xn})×Re{xn},для|Re{xn}|<|Im{xn}|

Подробное описание этого уравнения см. в [2].

OQPSK

en=sgn(Re{xn-SamplePerSymbol/2})×Im{xn-SamplePerSymbol/2}sgn(Im{xn})×Re{xn}

Чтобы гарантировать устойчивость системы, фазу ошибка проходит через биквадратичный фильтр цикла, управляемый

ψn=gЯen+ψn1,

где ψ n - выход контурного фильтра на выборке n, и g I - коэффициент усиления интегратора. Коэффициент усиления интегратора определяется из уравнения

gI=4(θ2/d)KpK0,

где θ, d, K 0 и K p определяются из свойств Системного объекта. В частности,

θ=Bn(ζ+14ζ)иd=1+2ζθ+θ2,

где B n - нормированная шумовая полоса, а ζ - коэффициент затухания. Коэффициент усиления восстановления фазы, K 0, равен количеству выборок на символ. Тип модуляции определяет коэффициент усиления детектора фазовой ошибки, K p.

МодуляцияK p
BPSK, PAM, QAM, QPSK или OQPSK2
8-PSK1

Выходные данные цикла фильтра затем передаются в DDS. DDS является другим биквадратичным циклом фильтром, выражение которого основано на правиле интегрирования прямого Эйлера

λn=(gPen-1+ψn-1)+λn-1,

где g P - пропорциональная составляющая, который выражается как

gP=4ζ(θ/d)KpK0.

The info функция объекта этого Системного объекта возвратов оценками нормированной полосы захвата, максимальной задержки синхронизации частоты и максимальной задержки синхронизации фазы. Нормированный диапазон вытягивания, (, f) получения по запросу-в, выражается в радианах и оценивается как

(Δf)pull-inmin(1,2π2ζBn).

Выражение для (, f) получение по запросу-в становится менее точным, как2π2ζBn подходы 1.

Максимальная задержка синхронизации частоты, T FL, и задержка фазовой автоподстройки, T PL, выражаются в выборках и оцениваются как

TFL4(Δf)получение по запросу-в2Bn3иTPL1.3Bn.

Ссылки

[1] Рис, М. Цифровые коммуникации: Подход в дискретном времени. Верхняя Седл-Ривер, Нью-Джерси: Prentice Hall, 2009, pp. 359-393.

[2] Zhijie, H., Y. Zhiqiang, Z. Ming, and W. Kuang. 8PSK демодуляция для новой генерации DVB-S2. 2004 Международная конференция по связи, схемам и системам. Том 2, 2004, стр. 1447-1450.

Расширенные возможности

.
Введенный в R2015a