exponenta event banner

коммуникация. SymbolSynchronizer

Правильный сдвиг синхросигналов символов

Описание

comm.SymbolSynchronizer Система object™ корректирует сдвиг синхронизации символов между передатчиком с одной несущей и приемником для схем модуляции PAM, PSK, QAM и OQPSK. Дополнительные сведения см. в разделе Обзор синхронизации символов.

Примечание

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

Для коррекции перекоса синхросигналов символов:

  1. Создать comm.SymbolSynchronizer и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

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

Создание

Описание

пример

symbolSync = comm.SymbolSynchronizer создает объект системы синхронизатора символов для коррекции перекоса часов между передатчиком с одной несущей и приемником.

пример

symbolSync = comm.SymbolSynchronizer(Name,Value) задает свойства, используя одну или несколько пар имя-значение. Например, comm.SymbolSynchronizer('Modulation','OQPSK') конфигурирует системный объект синхронизатора символов для OQPSK-модулированного входного сигнала. Заключите каждое имя свойства в кавычки.

Настраиваемый DampingFactor, NormalizedLoopBandwidth, и DetectorGain свойства позволяют оптимизировать производительность синхронизатора в цикле моделирования без освобождения объекта.

Свойства

развернуть все

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

Типы данных: char | string

Метод детектора ошибок синхронизации, указанный как Zero-Crossing (decision-directed), Gardner (non-data-aided), Early-Late (non-data-aided), или Mueller-Muller (decision-directed). Это свойство назначает схему обнаружения ошибок синхронизации, используемую в синхронизаторе. Дополнительные сведения см. в разделе Обнаружение ошибок синхронизации (TED).

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

Типы данных: char | string

Выборки на символ, указанное как целое число больше 1.

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

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

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

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

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

Нормализованная полоса пропускания фильтра цикла, заданная как скаляр в диапазоне (0, 1). Полоса пропускания контура нормализуется к частоте дискретизации входного сигнала. Дополнительные сведения см. в разделе Фильтр контуров.

Примечание

Для обеспечения блокировки синхронизатора символов установите NormalizedLoopBandwidth свойство имеет значение, меньшее, чем 0.1.

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

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

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

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

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

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

Для более ранних версий, чем R2016b, используйте step для запуска алгоритма объекта System. Аргументы для step - созданный объект, за которым следуют аргументы, показанные в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Описание

symbols = symbolSync(samples) корректирует сдвиг синхросигналов символов между передатчиком с одной несущей и приемником на основе входных выборок и выводит синхронизированные символы.

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

  • Вы можете настроить DampingFactor, NormalizedLoopBandwidth, и DetectorGain для повышения производительности синхронизатора.

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

развернуть все

Входные выборки, заданные как скалярный или столбчатый вектор сигнала с одной несущей, модулированного PAM, PSK-, QAM или OQPSK.

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

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

развернуть все

Синхронизированные символы, возвращаемые в виде вектора столбца переменного размера. Выходные символы наследуют тип данных из входных выборок. Для входных данных с размерами Nsamp-by-1 этот вывод имеет размеры Nsym-by-1. Nsym приблизительно равен Nsamp делению на Nsps, где Nsps равен SamplesPerSymbol значение свойства. Если выход превышает максимальный размер выхода NsampNsps × 1,1 ⌉, он усекается.

Оцененная ошибка синхронизации для каждой входной выборки, возвращаемой в виде скаляра в диапазоне [0, 1] или вектора столбца элементов в диапазоне [0, 1]. Оцененная ошибка синхронизации нормализуется к входной частоте дискретизации. timingErr имеет тот же тип данных и размер, что и входные данные samples.

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

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

release(obj)

развернуть все

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

Примеры

свернуть все

Исправьте фиксированную ошибку синхронизации символа в шумном QPSK-модулированном сигнале. Проверьте частоту битовых ошибок (BER) синхронизированного принятого сигнала.

Инициализация параметров моделирования.

M = 4;         % Modulation order for QPSK
nSym = 5000;   % Number of symbols in a packet
sps = 4;       % Samples per symbol
timingErr = 2; % Samples of timing error
snr = 15;      % Signal-to-noise ratio (dB)

Создание корня raised cosine (RRC) передачи и приема фильтра системных объектов.

txfilter = comm.RaisedCosineTransmitFilter( ...
    'OutputSamplesPerSymbol',sps);
rxfilter = comm.RaisedCosineReceiveFilter( ...
    'InputSamplesPerSymbol',sps,'DecimationFactor',2);

Создайте системный объект синхронизатора символов для исправления ошибки синхронизации.

symbolSync = comm.SymbolSynchronizer;

Генерируют случайные M-ary символы и применяют модуляцию QPSK.

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

Создайте объект задержки, чтобы ввести фиксированную ошибку синхронизации из 2 выборок. Поскольку фильтр RRC передачи выводит 4 выборки на символ, 1 выборка эквивалентна символу 1/4 через фиксированную задержку и канал.

fixedDelay = dsp.Delay(timingErr);
fixedDelaySym = ceil(fixedDelay.Length/sps); % Round fixed delay to nearest integer in symbols

Фильтрация модулированного сигнала через фильтр RRC передачи с помощью txfilter объект. Примените ошибку синхронизации сигнала с помощью fixedDelay объект.

txSig = txfilter(modSig);
delaySig = fixedDelay(txSig);

Пропускают задержанный сигнал через канал AWGN с отношением сигнал/шум 15 дБ.

rxSig = awgn(delaySig,snr,'measured');

Фильтрация модулированного сигнала через фильтр RRC приема с помощью rxfilter объект. Отображение графика разброса. Из-за ошибки синхронизации принятый сигнал не выравнивается с ожидаемой опорной комбинацией QPSK.

rxSample = rxfilter(rxSig);  
scatterplot(rxSample(1001:end),2)

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

Исправьте ошибку синхронизации символа с помощью symbolSync объект. Отображение графика разброса. Синхронизированный сигнал теперь выравнивается с ожидаемой комбинацией QPSK.

rxSync = symbolSync(rxSample);
scatterplot(rxSync(1001:end),2)

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

Демодулируйте сигнал QPSK.

recData = pskdemod(rxSync,M,pi/4);

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

sysDelay = dsp.Delay(fixedDelaySym + txfilter.FilterSpanInSymbols/2 + ...
    rxfilter.FilterSpanInSymbols/2);

Вычислите BER с учетом системной задержки.

[numErr,ber] = biterr(sysDelay(data),recData)
numErr = 12
ber = 0.0012

Исправьте фиксированную ошибку синхронизации символа в шумном сигнале передачи BPSK. Проверьте частоту битовых ошибок (BER) синхронизированного принятого сигнала.

Инициализация параметров моделирования.

M = 2;         % Modulation order for BPSK
nSym = 20000;  % Number of symbols in a packet
sps = 4;       % Samples per symbol
timingErr = 2; % Samples of timing error
snr = 15;      % Signal-to-noise ratio (dB)

Создание корня raised cosine (RRC) передачи и приема фильтра системных объектов.

txfilter = comm.RaisedCosineTransmitFilter(...
    'OutputSamplesPerSymbol',sps);
rxfilter = comm.RaisedCosineReceiveFilter(...
    'InputSamplesPerSymbol',sps,'DecimationFactor',1);

Создайте системный object™ синхронизатора символов для исправления ошибки синхронизации.

symbolSync = comm.SymbolSynchronizer(...
    'SamplesPerSymbol',sps, ...
    'NormalizedLoopBandwidth',0.01, ...
    'DampingFactor',1.0, ...
    'TimingErrorDetector','Early-Late (non-data-aided)');

Генерировать случайные символы данных и применять модуляцию BPSK.

data = randi([0 M-1],nSym,1);
modSig = pskmod(data,M);

Создайте объект задержки, чтобы ввести фиксированную ошибку синхронизации из 2 выборок. Поскольку фильтр RRC передачи выводит 4 выборки на символ, 1 выборка эквивалентна символу 1/4 через фиксированную задержку и канал.

fixedDelay = dsp.Delay(timingErr);
fixedDelaySym = ceil(fixedDelay.Length/sps); % Round fixed delay to nearest integer in symbols

Фильтрация модулированного сигнала через фильтр RRC передачи с помощью txfilter объект. Примените ошибку синхронизации сигнала с помощью fixedDelay объект.

txSig = txfilter(modSig);
delayedSig = fixedDelay(txSig);

Передача задержанного сигнала через канал AWGN.

rxSig = awgn(delayedSig,snr,'measured');

Фильтрация модулированного сигнала через фильтр RRC приема с помощью rxfilter объект. Отображение графика разброса. Из-за ошибки синхронизации принятый сигнал не выравнивается с ожидаемой опорной совокупностью BPSK.

rxSample = rxfilter(rxSig);
scatterplot(rxSample(10000:end),2)

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

Исправьте ошибку синхронизации символа с помощью symbolSync объект. Отображение графика разброса. Синхронизированный сигнал теперь выравнивается с ожидаемой совокупностью BPSK.

rxSync = symbolSync(rxSample);
scatterplot(rxSync(10000:end),2)

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

Демодулируйте сигнал BPSK.

recData = pskdemod(rxSync,M);

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

sysDelay = dsp.Delay(fixedDelaySym + txfilter.FilterSpanInSymbols/2 + ...
    rxfilter.FilterSpanInSymbols/2);

Вычислите BER с учетом системной задержки.

[numErr1,ber1] = biterr(sysDelay(data),recData)
numErr1 = 8
ber1 = 4.0000e-04

Исправьте ошибки синхронизации символов и смещения частоты с помощью comm.SymbolSynchronizer и comm.CarrierSynchronizer Системные объекты.

Конфигурация

Инициализация параметров моделирования.

M = 16;           % Modulation order
nSym = 2000;      % Number of symbols in a packet
sps = 2;          % Samples per symbol
spsFilt = 8;      % Samples per symbol for filters and channel
spsSync = 2;      % Samples per symbol for synchronizers
lenFilt = 10;     % RRC filter length

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

txfilter = comm.RaisedCosineTransmitFilter('FilterSpanInSymbols',lenFilt, ...
    'OutputSamplesPerSymbol',spsFilt,'Gain',sqrt(spsFilt));
rxfilter = comm.RaisedCosineReceiveFilter('FilterSpanInSymbols',lenFilt, ...
    'InputSamplesPerSymbol',spsFilt,'DecimationFactor',spsFilt/2,'Gain',sqrt(1/spsFilt));

Создайте объект системы фазового сдвига для введения доплеровского сдвига 100 Гц.

doppler = comm.PhaseFrequencyOffset('FrequencyOffset',100, ...
    'PhaseOffset',45,'SampleRate',1e6);

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

varDelay = dsp.VariableFractionalDelay;

Создание объектов системы синхронизации несущих и символов для коррекции доплеровского сдвига и смещения синхронизации соответственно.

carrierSync = comm.CarrierSynchronizer('SamplesPerSymbol',spsSync);
symbolSync = comm.SymbolSynchronizer( ...
    'TimingErrorDetector','Early-Late (non-data-aided)', ...
    'SamplesPerSymbol',spsSync);

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

refConst = qammod(0:M-1,M,'UnitAveragePower',true);
cdReceive = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',spsFilt,'Title','Received Signal');
cdDoppler = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',spsSync,'Title','Frequency Corrected Signal');
cdTiming = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',spsSync,'Title','Frequency and Timing Synchronized Signal');

Основной цикл обработки

Основной цикл обработки:

  • Генерирует случайные символы и применяет модуляцию КАМ.

  • Фильтрация модулированного сигнала.

  • Применяет частотные и временные смещения.

  • Пропускает передаваемый сигнал через канал AWGN.

  • Фильтрация принятого сигнала.

  • Коррекция доплеровского сдвига.

  • Коррекция смещения синхронизации.

for k = 1:15
    data = randi([0 M-1],nSym,1);
    modSig = qammod(data,M,'UnitAveragePower',true);         
    txSig = txfilter(modSig);            
    
    txDoppler = doppler(txSig);          
    txDelay = varDelay(txDoppler,k/15);  
    
    rxSig = awgn(txDelay,25);            
    
    rxFiltSig = rxfilter(rxSig);         
    rxCorr = carrierSync(rxFiltSig); 
    rxData = symbolSync(rxCorr);  
end

Визуализация

Постройте график созвездий принятого сигнала, скорректированного по частоте сигнала и синхронизированного по частоте и времени сигнала. Конкретные точки созвездия не могут быть идентифицированы в принятом сигнале и могут быть идентифицированы только частично в сигнале с поправкой на частоту. Однако синхронизированный по времени и частоте сигнал выравнивается с ожидаемыми точками совокупности КАМ.

cdReceive(rxSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Received Signal contains 2 objects of type line. This object represents Channel 1.

cdDoppler(rxCorr)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Frequency Corrected Signal contains 2 objects of type line. This object represents Channel 1.

cdTiming(rxData)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Frequency and Timing Synchronized Signal contains 2 objects of type line. This object represents Channel 1.

Исправьте монотонно увеличивающуюся ошибку синхронизации символа в шумном 8-PSK сигнале. Отображение нормализованной ошибки синхронизации.

Инициализация параметров моделирования.

M = 8;            % Modulation order
nSym = 5000;      % Number of symbol in a packet
sps = 2;          % Samples per symbol
nSamp = sps*nSym; % Number of samples in a packet

Создание корня raised cosine (RRC) передачи и приема фильтра системных объектов.

txfilter = comm.RaisedCosineTransmitFilter( ...
    'OutputSamplesPerSymbol',sps);
rxfilter = comm.RaisedCosineReceiveFilter( ...
    'InputSamplesPerSymbol',sps, ...
    'DecimationFactor',1);

Создайте переменную дробную задержку System object™, чтобы ввести монотонно увеличивающуюся ошибку синхронизации.

varDelay = dsp.VariableFractionalDelay;

Создайте системный объект синхронизатора символов для исправления ошибки синхронизации.

symbolSync = comm.SymbolSynchronizer(...
    'TimingErrorDetector','Mueller-Muller (decision-directed)', ...
    'SamplesPerSymbol',sps);

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

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

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

vdelay = (0:1/nSamp:1-1/nSamp)';
txSig = txfilter(modSig);      
delaySig = varDelay(txSig,vdelay);

Пропускают задержанный сигнал через канал AWGN с отношением сигнал/шум 15 дБ.

rxSig = awgn(delaySig,15,'measured');

Фильтрация модулированного сигнала через фильтр RRC приема. Отображение графика разброса. Из-за ошибки синхронизации принятый сигнал не выравнивается с ожидаемой 8-PSK опорной совокупностью.

rxSample = rxfilter(rxSig);  
scatterplot(rxSample,sps)

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

Исправьте ошибку синхронизации символа с помощью symbolSync объект. Отображение графика разброса. Синхронизированный сигнал теперь выравнивается с ожидаемой совокупностью 8-PSK.

[rxSym,tError] = symbolSync(rxSample);
scatterplot(rxSym(1001:end))

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

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

figure
plot(vdelay,tError)
xlabel('Time (s)')
ylabel('Timing Error (samples)')

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

Подробнее

развернуть все

Ссылки

[1] Райс, Майкл. Цифровая связь: дискретно-временной подход. Река Верхнее Седло, Нью-Джерси: Прентис Холл, 2008.

[2] Менгали, Умберто и Альдо Н. Д'Андреа. Методы синхронизации для цифровых приемников. Нью-Йорк: Пленум Пресс, 1997.

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

.
Представлен в R2015a