serdes.DFECDR

Эквалайзер обратной связи решения (DFE) с часами и восстановлением данных (CDR)

Описание

serdes.DFECDR Система object™ адаптивно обрабатывает входной сигнал выборки выборкой или аналитически обрабатывает входной сигнал вектора импульсной характеристики, чтобы удалить искажения в касаниях посткурсора.

DFE изменяет сгенерированные модулированные сигналы, чтобы минимизировать интерференцию межсимвола (ISI) во время выборки часов. Демонстрационные данные DFE в каждом шаге расчета часов и настраивают амплитуду формы волны напряжением коррекции.

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

Для обработки выборки выборкой восстановление тактового сигнала выполняется моделью отслеживания фазы первого порядка. Детектор фазы скорострельного оружия использует некомпенсируемые выборки ребра и компенсируемые выборки данных, чтобы определить оптимальное местоположение выборки. Напряжение коррекции DFE для N-th касание адаптивно найдено путем нахождения напряжения, которое компенсирует любую корреляцию между двумя выборками данных, расположенными с интервалами временами символа N. Это требует шаблона данных, который является некоррелированым с ISI канала для правильного адаптивного поведения.

Компенсировать входной сигнал:

  1. Создайте serdes.DFECDR объект и набор его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

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

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

Пример: dfecdr = serdes.DFECDR('Mode',1) возвращает объект DFECDR, который применяет заданные веса касания DFE, чтобы ввести форму волны.

Свойства

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

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

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

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

Свойства DFE

Рабочий режим DFE в виде 0, 1, или 2режим определяет, какие значения веса касания DFE применяются к входной форме волны.

Значение режимаРежим DFEОперация DFE
0offserdes.DFECDR исключен и входная форма волны остается неизменной.
1фиксированныйserdes.DFECDR применяет веса касания входа DFE, заданные в TapWeights к входной форме волны.
2адаптироватьсяПодсистема Init вызывает к serdes.DFECDR. serdes.DFECDR находит оптимальные значения касания DFE для лучшей высоты глаза, открывающейся для статистического анализа. Во время симуляции области времени DFECDR использует адаптированные значения в качестве начальной точки и применяет их к входной форме волны. Для получения дополнительной информации о подсистеме Init, смотрите Статистический анализ в Системах SerDes

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

Начальные DFE касаются весов в виде вектора-строки в вольтах. Длина вектора задает количество касаний. Каждое векторное значение элемента задает силу касания в том положении элемента. Обнуление векторного значения элемента только инициализирует касание.

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

Минимальное значение адаптированных касаний в виде действительного скаляра или вектора-строки с действительным знаком в вольтах. Задайте как скаляр, чтобы примениться ко всем касаниям DFE или как к вектору, который имеет ту же длину как TapWeights.

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

Максимальное значение адаптированных касаний в виде неотрицательного действительного скаляра или неотрицательного вектора-строки с действительным знаком в вольтах. Задайте как скаляр, чтобы примениться ко всем касаниям DFE или как к вектору, который имеет ту же длину как TapWeights.

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

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

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

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

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

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

Выберите, чтобы умножить веса касания DFE на коэффициент два.

Выход ножа в serdes.DFECDR Системный объект от SerDes Toolbox™ [-0.5 0.5]. Но некоторые промышленные приложения требуют, чтобы нож выход был [-1 1]. Taps2x позволяет вам быстро удваивать веса касания DFE, чтобы изменить ссылку ножа.

Свойства CDR

Ранний или последний CDR считает порог, чтобы инициировать обновление фазы в виде безразмерного действительного положительного целого числа, больше, чем 4. Увеличение значения Count обеспечивает более устойчивую выходную фазу часов за счет быстроты сходимости. Поскольку битные решения приняты в фазе часов выход, более устойчивая фаза часов имеет лучшую частоту ошибок по битам (BER).

Count также управляет пропускной способностью CDR, который приблизительно вычисляется при помощи уравнения:

Bandwidth=1 Время символа · Раннее/позднее пороговое количество · Шаг

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

Синхронизируйте разрешение фазы в виде действительного скаляра в части времени символа. ClockStep инверсия количества корректировок фазы в CDR.

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

Синхронизируйте смещение фазы в виде действительного скаляра в области значений [−0.5, 0.5] в части времени символа. PhaseOffset используется, чтобы вручную переключить функцию распределения вероятностей (PDF) часов для лучшего BER.

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

Ссылочные часы возместили нарушение в виде действительного скаляра в области значений [−300, 300] в частях на миллион (ppm). ReferenceOffset отклонение между частотой генератора передатчика и частотой генератора приемника.

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

Выборка напряжения метастабильности фиксатора в виде действительного скаляра в вольтах (В). Если демонстрационное напряжение данных находится в области (±Sensitivity), существует 50%-я вероятность битовой ошибки.

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

Расширенные свойства

Время односимвольной длительности в виде действительного скаляра в секундах (секундах).

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

Универсальный временной шаг формы волны в виде действительного скаляра в секундах (секундах).

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

Схема Modulation в виде 2 или 4.

Значение модуляцииСхема модуляции
2Невозврат к нулю (NRZ)
4Четырехуровневая импульсная амплитудная модуляция (PAM4)

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

Введите форму типа волны:

  • 'Sample' — Входной сигнал выборки выборкой.

  • 'Impulse' — Входной сигнал импульсной характеристики.

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

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

Синтаксис

Описание

y = dfecdr(x)

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

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

Введите сгенерированный модулированный сигнал. Если WaveType установлен в 'Sample', затем входной сигнал является сигналом выборки выборкой, заданным как скаляр. Если WaveType установлен в 'Impulse', входной сигнал является сигналом вектора импульсной характеристики.

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

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

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

Оцененные DFE касаются значений веса, возвращенных как вектор.

Родственник восстановил фазу часов, возвращенную как модули SymbolTime в области значений [0,1].

Шина синхронизации AMI, возвращенная как структура, состоящая из:

  • ClockTime — Время, потраченное, чтобы произвести сигнал данных.

  • clockValidOnRising — Допустимая временная стоимость часов на возрастающем ребре сигнала

Соедините шиной содержащий дополнительные внутренние сигналы CDR, возвращенные как структура, состоящая из:

  • clockPhase — Относительная фаза часов в модулях SymbolTime в области значений [0,1].

  • symbolRecovered — Символ, восстановленный с данных, сигнализирует в ClockTime.

  • voltageSample — Напряжение, наблюдаемое из данных, сигнализирует в ClockTime.

  • PAM4Threshold — Предполагаемый верхний глаз в пороге PAM4.

  • CDRedgeVoltage — напряжение, наблюдаемое из данных, сигнализирует в ClockTime — SymbolTime/2.

  • CDRCounter — CDR скорострельного оружия внутренний счетчик раньше инициировал выборки.

  • CDREarlyLateCounter — Накопленный CDR скорострельного оружия (или отфильтрованный) сигнал раньше инициировал обновленный к фазе CDR.

  • PAM4SymbolMiddleVoltage — Оцененное напряжение символа PAM4 внутреннего глаза внешний конверт, чтобы оценить порог PAM4.

  • PAM4OuterVoltage — Оцененное внешнее напряжение конверта PAM4, чтобы оценить порог PAM4.

  • EyeHeightAbsAve — Оценочная высота глаза.

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

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

release(obj)

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

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

Примеры

свернуть все

В этом примере показано, как обработать импульсную характеристику канала с помощью serdes.DFECDR система object™.

Используйте время символа 100 PS Там является 16 выборки на символ. Канал имеет 14 потеря дБ.

SymbolTime = 100e-12;         
SamplesPerSymbol = 16;
dbloss = 14;                  
NumberOfDFETaps = 2;

Вычислите демонстрационный интервал.

dt = SymbolTime/SamplesPerSymbol; 

Создайте объект DFECDR. Объект адаптивно применяет оптимальные веса касания DFE, чтобы ввести импульсную характеристику.

DFE1 = serdes.DFECDR('SymbolTime',SymbolTime,'SampleInterval',dt,...
      'Mode',2,'WaveType','Impulse','TapWeights',zeros(NumberOfDFETaps,1));

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

channel = serdes.ChannelLoss('Loss',dbloss,'dt',dt,...
      'TargetFrequency',1/SymbolTime/2);
impulseIn = channel.impulse;

Обработайте импульсную характеристику с DFE.

[impulseOut,TapWeights] = DFE1(impulseIn);

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

ord = 6;
dataPattern = prbs(ord,2^ord-1)-0.5;

pulseIn = impulse2pulse(impulseIn,SamplesPerSymbol,dt);
waveIn = pulse2wave(pulseIn,dataPattern,SamplesPerSymbol);
eyeIn = reshape(waveIn,SamplesPerSymbol,[]);

pulseOut = impulse2pulse(impulseOut,SamplesPerSymbol,dt);
waveOut = pulse2wave(pulseOut,dataPattern,SamplesPerSymbol);
eyeOut = reshape(waveOut,SamplesPerSymbol,[]);

Создайте временные векторы.

t = dt*(0:length(pulseOut)-1)/SymbolTime;
teye = t(1:SamplesPerSymbol);
t2 = dt*(0:length(waveOut)-1)/SymbolTime;

Постройте получившиеся формы волны.

figure
plot(t,pulseIn,t,pulseOut)
legend('Input','Output')
title('Pulse Response Comparison')
xlabel('SymbolTimes'),ylabel('Voltage')
grid on
axis([41 55 -0.1 0.4])  

figure
plot(t2,waveIn,t2,waveOut)
legend('Input','Output')
title('Waveform Comparison')
xlabel('SymbolTimes'),ylabel('Voltage')
grid on 

figure
subplot(211),plot(teye,eyeIn,'b')
xlabel('SymbolTimes'),ylabel('Voltage')
grid on
title('Input Eye Diagram')
subplot(212),plot(teye,eyeOut,'b')
xlabel('SymbolTimes'),ylabel('Voltage')
grid on
title('Output Eye Diagram')

В этом примере показано, как обработать импульсную характеристику канала одна выборка во время с помощью serdes.DFECDR Система object™.

Используйте время символа 100 PS, с 8 выборки на символ. Потерей канала является 14 дБ. Выберите 12- th заказывают псевдослучайную двоичную последовательность (PRBS) и симулируют первый 20000 символы.

SymbolTime = 100e-12;           
SamplesPerSymbol = 8;
dbloss = 14;                    
NumberOfDFETaps = 2;
prbsOrder = 12;                 
M = 20000;                      

Вычислите демонстрационный интервал.

dt = SymbolTime/SamplesPerSymbol;

Создайте Системный объект DFECDR. Обработайте канал одна выборка за один раз путем установки входных форм волны на 'sample' ввод. Объект адаптивно применяет оптимальные веса касания DFE, чтобы ввести форму волны.

DFE2 = serdes.DFECDR('SymbolTime',SymbolTime,'SampleInterval',dt,...
      'Mode',2,'WaveType','Sample','TapWeights',zeros(NumberOfDFETaps,1),...
      'EqualizationStep',0,'EqualizationGain',1e-3);

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

channel = serdes.ChannelLoss('Loss',dbloss,'dt',dt,...
      'TargetFrequency',1/SymbolTime/2);

Создайте глазковую диаграмму.

eyediagram = comm.EyeDiagram('SampleRate',1/dt,'SamplesPerSymbol',SamplesPerSymbol,...
      'YLimits',[-0.5 0.5]);

Инициализируйте генератор PRBS.

[dataBit,prbsSeed]=prbs(prbsOrder,1);

Сгенерируйте глазковую диаграмму выборки выборкой.

%Loop through one symbol at a time.
inwave = zeros(SamplesPerSymbol,1);
outwave = zeros(SamplesPerSymbol,1);
dfeTapWeightHistory = nan(M,NumberOfDFETaps);

for ii = 1:M
  %Get new symbol
      [dataBit,prbsSeed]=prbs(prbsOrder,1,prbsSeed);    
      inwave(1:SamplesPerSymbol) = dataBit-0.5;
      
   %Convolve input waveform with channel
      y = channel(inwave);
      
   %Process one sample at a time through the DFE
      for jj = 1:SamplesPerSymbol
          [outwave(jj),TapWeights] = DFE2(y(jj));
      end
      
    %Save DFE taps
      dfeTapWeightHistory(ii,:) = TapWeights;
      
    %Plot eye diagram
      eyediagram(outwave)
end

Постройте историю адаптации DFE.

figure
plot(dfeTapWeightHistory)
grid on
legend('TapWeights(1)','TapWeights(2)')
xlabel('Symbols')
ylabel('Voltage')
title('DFE Taps')   

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

Введенный в R2019a