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

Правильный символ, синхронизирующий расфазировку тактовых сигналов

Описание

Система SymbolSynchronizer object™ исправляет для расфазировки тактовых сигналов между передатчиком одно поставщика услуг и получателем.

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

  1. Задайте и настройте объект SymbolSynchronizer. Смотрите Конструкцию.

  2. Вызовите step, чтобы исправить для расфазировки тактовых сигналов между передатчиком и получателем согласно свойствам comm.SymbolSynchronizer. Длина выходного вектора отличается в зависимости от ошибки синхронизации и свойств синхронизатора. Поведение step характерно для каждого объекта в тулбоксе.

Перечисленные характеристики применяются к синхронизатору символа:

  • PAM, PSK и схемы модуляции QAM поддерживаются.

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

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

Примечание

При запуске в R2016b, вместо того, чтобы использовать метод step, чтобы выполнить операцию, заданную Системой object™, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Конструкция

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

S = comm.SymbolSynchronizer(Name,Value) создает объект синхронизатора символа, S, с каждым заданным набором свойства Name к заданному Value. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

Свойства

Modulation

Тип модуляции

Задайте тип модуляции как 'PAM/PSK/QAM' или 'OQPSK'. Значением по умолчанию является 'PAM/PSK/QAM'. Это свойство является ненастраиваемым.

TimingErrorDetector

Синхронизация детектора ошибок

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

SamplesPerSymbol

Выборки на символ

Задайте количество выборок на символ, s, как действительный положительный конечный целочисленный скаляр, такой что s ≥ 2. Значением по умолчанию является 2. Это свойство является ненастраиваемым.

DampingFactor

Затухание фактора контурного фильтра

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

NormalizedLoopBandwidth

Нормированная пропускная способность контурного фильтра

Задайте нормированную пропускную способность цикла как действительный скаляр, имеющий значение между 0 и 1. Пропускная способность цикла нормирована частотой дискретизации входного сигнала. Значением по умолчанию является 0.01. Это свойство является настраиваемым.

Примечание

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

DetectorGain

Усиление детектора фазы

Задайте усиление детектора как действительный положительный конечный скаляр. Значением по умолчанию является 2.7. Это свойство является настраиваемым.

Методы

сбросСбросьте состояния объекта синхронизатора символа
шагПравильный символ, синхронизирующий расфазировку тактовых сигналов
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

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

Правильный для закрепленной ошибки синхронизации символа на шумном сигнале QPSK.

Создайте повышенную передачу косинуса и получите Систему фильтра objects™.

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

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

fixedDelay = dsp.Delay(2);
filterDelay = dsp.Delay(txfilter.FilterSpanInSymbols/2 + ...
    rxfilter.FilterSpanInSymbols/2 + 1);

Создайте объект SymbolSynchronizer устранить ошибку синхронизации.

symbolSync = comm.SymbolSynchronizer;

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

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

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

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

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

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

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

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

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

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

Декодируйте сигнал QPSK и количество отображения ошибок.

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

Объясните системную задержку и сгенерируйте BER.

[numErr,ber] = biterr(data(1:end-filterDelay.Length),recData(filterDelay.Length+1:end))
numErr = 0
ber = 0

Правильная ошибка синхронизации символа в сигнале передачи PSK67. Проверяйте BER синхронизируемого полученного сигнала.

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

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

Создайте задержку объекты ввести фиксированную ошибку синхронизации 2 выборок и составлять общую системную задержку, должную фильтры RRC и фиксированная задержка.

fixedDelay = dsp.Delay(2);
filterDelay = dsp.Delay(txfilter.FilterSpanInSymbols/2 + ...
    rxfilter.FilterSpanInSymbols/2 + fixedDelay.Length/2);

Создайте объект SymbolSynchronizer устранить ошибку синхронизации.

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

Сгенерируйте случайные символы данных и примените bpsk модуляцию.

data = randi([0 1],20000,1);
modSig = pskmod(data,2);

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

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

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

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

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

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

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

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

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

rxCoded = pskdemod(rxSync,2);

Объясните системную задержку и вычислите BER.

[numErr,ber] = biterr(filterDelay(data),rxCoded)
numErr = 8
ber = 4.0000e-04

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

Сконфигурируйте пример

Задайте выборки на параметр символа. Создайте совпадающую пару повышенных объектов фильтра косинуса.

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

Создайте объект PhaseFrequencyOffset ввести эффект Доплера на 100 Гц.

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

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

varDelay = dsp.VariableFractionalDelay;

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

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

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

refConst = qammod(0:15,16,'UnitAveragePower',true);

cdReceive = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',sps,'Title','Received Signal');

cdDoppler = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',2,'Title','Frequency Corrected Signal');

cdTiming = comm.ConstellationDiagram('ReferenceConstellation',refConst, ...
    'SamplesPerSymbol',2,'Title','Frequency and Timing Synchronized Signal');

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

Выполните следующие операции:

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

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

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

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

  • Правильный для эффекта Доплера.

  • Отфильтруйте полученный сигнал.

  • Правильный для синхронизации смещается.

for k = 1:15
    data = randi([0 15],2000,1);
    modSig = qammod(data,16,'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 сигнализируют и отображают нормированную ошибку синхронизации.

Установите параметры в качестве примера.

fsym = 5000;                   % Symbol rate (Hz)
sps = 2;                       % Samples per symbol
fsamp = sps*fsym;              % Sample rate (Hz)

Создайте повышенную передачу косинуса и получите Систему фильтра objects™.

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

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

varDelay = dsp.VariableFractionalDelay;

Создайте объект SymbolSynchronizer устранить ошибку синхронизации.

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

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

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

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

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

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

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

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

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

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

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

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

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

Алгоритмы

Обзор

Синхронизатор синхронизации символа основан на алгоритме поэтапного цикла блокировки (PLL), состоящем из четырех компонентов:

  • Синхронизация детектора ошибок (TED)

  • Интерполятор

  • Контроллер интерполяции

  • Контурный фильтр

  • Для OQPSK синфазное и квадратурные компоненты сигнала сначала выравниваются (как в QPSK) использование буфера (состояние), чтобы кэшировать последнюю половину символа предыдущего входа. После начального выравнивания остающаяся обработка синхронизации является QPSK.

Обобщенную схему синхронизатора синхронизации показывают ниже.

В фигуре x(t) является полученным демонстрационным сигналом после согласованного фильтра и x(kTs+τ^) сигнал символа, исправленный для расфазировки тактовых сигналов между передатчиком и получателем.

Синхронизация выявления ошибок

Поддержка объектов SymbolSynchronizer четыре типа синхронизации выявления ошибок: Пересечение нулем, Гарднер, Ранний Поздно, и Мюллер-Мюллер.

non-data-aided timing error detector (TED) использует полученные выборки без любого ведома переданных сигналов и выполняющий любую оценку.

decision-directed TED использует знаковую функцию, чтобы оценить синфазные компоненты и квадратурные компоненты полученных выборок.

Zero-Crossing (decision-directed) и методы Mueller-Muller (decision-directed) оценивают ошибку синхронизации на основе знака синфазных компонентов, и квадратурные компоненты сигналов передали синхронизатору. В результате направленные на решение методы не рекомендуются для совокупностей, которые имеют точки или с синфазным нулем или с квадратурным компонентом. Например, модуляция QPSK с нулевым смещением фазы, имеющим точки в {1+0i, 0+1i, -1+0i и 0−1i}, не подошла бы для этих методов.

В таблице, x(kTs+τ^) и y(kTs+τ^) синфазные компоненты и квадратурные компоненты входа сигналов к детектору ошибок синхронизации, где τ^ предполагаемая ошибка синхронизации. Коэффициенты a^0(k) и a^1(k) оценки x(kTs+τ^) и y(kTs+τ^). Эти оценки сделаны путем применения функции sign к синфазным компонентам и квадратурным компонентам и используются только для направленных на решение режимов TED.

Тип TEDВыражение
Пересечение нулемe(k)=x((k1/2)Ts+τ^)[a^0(k1)a^0(k)]+y((k1/2)Ts+τ^)[a^1(k1)a^1(k)]
Гарднерe(k)=x((k1/2)Ts+τ^)[x((k1)Ts+τ^)x(kTs+τ^)]+y((k1/2)Ts+τ^)[y((k1)Ts+τ^)y(kTs+τ^)]
Ранний поздноe(k)=x(kTs+τ^)[x((k+1/2)Ts+τ^)x((k1/2)Ts+τ^)]+y(kTs+τ^)[y((k+1/2)Ts+τ^)y((k1/2)Ts+τ^)]
Мюллер-Мюллерe(k)=a^0(k1)x(kTs+τ^)a^0(k)x((k1)Ts+τ^)+a^1(k1)y(kTs+τ^)a^1(k)y((k1)Ts+τ^)

Метод пересечения нулем

Метод Пересечения нулем является направленным на решение методом, который требует двух выборок на символ во входе синхронизатора. Это выполняет хорошо в низких условиях ОСШ для всех значений избыточной пропускной способности, и в умеренных условиях ОСШ для умеренных избыточных факторов пропускной способности (~0.4 - ~0.6).

Гарднер Метод

Метод Гарднера является методом обратной связи не данных, которому помогают, который независим от восстановления фазы поставщика услуг. Это подходит и для основополосных систем и для модулируемых систем поставщика услуг. А именно, этот метод подходит для систем, которые используют линейный тип модуляции с импульсами Найквиста, которые имеют избыточную пропускную способность приблизительно между 40% и 100%. Примеры подходящих систем - те, которые используют импульсную амплитудную модуляцию (PAM), модуляцию манипулирования сдвига фазы (PSK), или квадратурную амплитудную модуляцию (QAM) и ту форму сигнал с помощью повышенных фильтров косинуса, фактор спада которых между 0,4 и 1. В присутствии шума производительность этого метода восстановления синхронизации улучшается как избыточная пропускная способность (фактор спада в случае повышенного фильтра косинуса) увеличения.

Метод Гарднера подобен раннему последнему методу логического элемента.

Ранний последний метод

Ранний Последний метод является также методом обратной связи не данных, которому помогают. Это подходит для систем, которые используют линейный тип модуляции, такой как импульсная амплитудная модуляция (PAM), модуляция манипулирования сдвига фазы (PSK) или квадратурная амплитудная модуляция (QAM), с импульсами Найквиста (например, с помощью повышенного фильтра косинуса). В присутствии шума производительность этого метода восстановления синхронизации улучшается как избыточная пропускная способность импульса (фактор спада в случае повышенного фильтра косинуса) увеличения.

Ранний Последний метод подобен методу Гарднера. По сравнению с методом Гарднера Ранний Последний метод имеет выше сам шум и таким образом не выполняет, а также метод Гарднера в системах с высокими значениями ОСШ.

Метод Мюллера-Мюллера

Метод Мюллера-Мюллера является направленным на решение методом обратной связи, который требует предшествующего восстановления фазы поставщика услуг.

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

Интерполятор

Задержка оценивается от выборок с фиксированной процентной ставкой согласованного фильтра, которые являются асинхронными с уровнем символа. Когда результирующие выборки не выравниваются с контурами символа, интерполятор используется, чтобы “переместить” выборки. Поскольку задержка неизвестна, интерполятор должен быть адаптивным. Кроме того, потому что interpolant является линейной комбинацией доступных выборок, он может считаться выводом фильтра. Следовательно, кусочный параболический интерполятор со структурой Фэрроу и коэффициентом набор α к 1/2, как описано в [1] используется Системным объектом.

Управление интерполяцией

Управление интерполяцией предоставляет интерполятору индекс basepoint и дробный интервал, где индекс basepoint является демонстрационным индексом, самым близким к interpolant, и дробный интервал является отношением времени между interpolant и его индексом basepoint и интервалом интерполяции.

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

Контурный фильтр

Пропорциональное - контурный фильтр плюс интегратора (PI) формы, показанной ниже, используется. Пропорциональное усиление, K1 и усиление интегратора, K2, вычисляется

K1=4ζθ(1+2ζθ+θ2)Kp

и

K2=4θ2(1+2ζθ+θ2)Kp.

Временным термином, θ, дают

θ=BnTsNζ+14ζ,

где N, ζ, BnTs и Kp соответствуют SamplesPerSymbol, DampingFactor, NormalizedLoopBandwidth и свойствам DetectorGain, соответственно.

Выбранная библиография

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

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

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

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

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