comm.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)Гарднер (без использования данных), 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 функционируйте, чтобы запустить алгоритм Системного объекта. Аргументы к step объект, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

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

Описание

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

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

  • Можно настроить DampingFactor, NormalizedLoopBandwidth, и DetectorGain свойства улучшать производительность синхронизатора.

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

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

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

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

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

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

Синхронизируемые символы, возвращенные как вектор-столбец переменного размера. Выходные символы наследовали тип данных от входных выборок. Для входа с размерностями N samp-1, этот выход имеет размерности N sym-1. N sym приблизительно равен маисовой крупе N, разделенной на SPS N, где SPS N равен SamplesPerSymbol значение свойства. Если выход превышает максимальный выходной размер NsampNsps×1.1, это является усеченным.

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

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

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

release(obj)

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

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

Примеры

свернуть все

Откорректируйте закрепленную ошибку синхронизации символа на шумном модулируемом 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)

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

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

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

symbolSync = comm.SymbolSynchronizer;

Сгенерируйте случайные M-арные символы и примените модуляцию 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)

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

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

Демодулируйте сигнал 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)

Создайте передачу корня повысил косинус (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)

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

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

Демодулируйте сигнал 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');

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

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

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

  • Фильтрует модулируемый сигнал.

  • Применяет частоту и синхронизирующие смещения.

  • Передает переданный сигнал через канал 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

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

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

cdReceive(rxSig)

cdDoppler(rxCorr)

cdTiming(rxData)

Откорректируйте монотонно увеличивающуюся ошибку синхронизации символа на шумном сигнале 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

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

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

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

varDelay = dsp.VariableFractionalDelay;

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

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

Сгенерируйте случайные 8-ary символы и примените модуляцию 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)

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

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

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

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

Больше о

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

Ссылки

[1] Рис, Майкл. Цифровая связь: подход дискретного времени. Верхний Сэддл-Ривер, NJ: Prentice Hall, 2008.

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

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

Смотрите также

Объекты

Блоки

Представленный в R2015a