comm.SymbolSynchronizer

Правильный наклон синхроимпульса символа

Описание

The 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 функция для запуска алгоритма системного объекта. Аргументы в step является созданным объектом, далее приводятся аргументы, показанные в этом разделе.

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

Описание

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

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

  • Можно настроить DampingFactor, NormalizedLoopBandwidth, и DetectorGain свойства для повышения эффективности синхронизатора.

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

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

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

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

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

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

Синхронизированные символы, возвращенные как вектор-столбец переменного размера. Символы выхода наследуют тип данных от выборок входов. Для входа с размерностями N самп-на-1, этот выход имеет размерности N сим-на-1. N sym приблизительно равен N sump, разделенному на N sps, где N sps равно 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)

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)

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

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

Создайте символьный синхронизатор System 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');

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

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

  • Генерирует случайные символы и применяет 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)

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

Создайте корневой приподнятый косинус (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] Райс, Майкл. Цифровые коммуникации: подход в дискретном времени. Верхняя Седл-Ривер, Нью-Джерси: Prentice Hall, 2008.

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

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

.

См. также

Объекты

Блоки

Введенный в R2015a