serdes.DFECDR

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

Описание

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

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

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

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

Для выравнивания входного сигнала:

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

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

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

Создание

Описание

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

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

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

Свойства

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

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

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

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

Свойства DFE

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

Значение режимаРежим DFEОперация DFE
0прочьserdes.DFECDR обходится, и вход сигнала остается неизменной.
1фиксированныйserdes.DFECDR применяет входные веса отводов DFE, указанные в TapWeights на вход сигнал.
2приспособитьсяПодсистема Init вызывает serdes.DFECDR. The 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

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

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

Дополнительные свойства

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

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

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

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

Схема модуляции, заданная как 2, 3 или 4.

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

Примечание

IBIS не поддерживает PAM3 схему модуляции. Поэтому вы не можете экспортировать в модель IBIS-AMI, если схема модуляции PAM3.

Типы данных: 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 - сигнал bang-bang 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 contains an axes. The axes with title Pulse Response Comparison contains 2 objects of type line. These objects represent Input, Output.

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

Figure contains an axes. The axes with title Waveform Comparison contains 2 objects of type line. These objects represent Input, Output.

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')

Figure contains 2 axes. Axes 1 with title Input Eye Diagram contains 63 objects of type line. Axes 2 with title Output Eye Diagram contains 63 objects of type line.

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

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

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

Вычислите интервал расчета.

dt = SymbolTime/SamplesPerSymbol;

Создайте объект DFECDR System. Обработайте выборку одного канала за раз, установив форму входа равной '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]);
Warning: comm.EyeDiagram will be removed in a future release. Use eyediagram instead.

Инициализируйте генератор 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

Figure Eye Diagram contains 2 axes and other objects of type uiflowcontainer, uimenu, uitoolbar. Axes 1 contains an object of type line. Axes 2 is empty.

Постройте график истории адаптации DFE.

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

Figure contains an axes. The axes with title DFE Taps contains 2 objects of type line. These objects represent TapWeights(1), TapWeights(2).

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

.
Введенный в R2019a