serdes.FFE

Моделирует прямолинейный эквалайзер

Описание

The serdes.FFE Система object™ применяет эквалайзер с feedforward (FFE) в качестве разбиенного на символы фильтра с конечной импульсной характеристикой (КИХ). Примените эквалайзер к входному сигналу дискретизации за дискретизацией или входному сигналу вектора импульсной характеристики, чтобы уменьшить искажения из-за потерь канала.

Для выравнивания сгенерированного модулированного сигнала:

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

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

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

Создание

Описание

ffe = serdes.FFE возвращает объект FFE, который изменяет форму входа волны в соответствии с передаточной функцией конечной импульсной характеристики (КИХ), заданной в объекте.

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

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

Свойства

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

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

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

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

Главный

Режим работы FFE, заданный как 0 или 1. Mode определяет, обходится ли FFE или нет.

Значение режимаРежим FFEОперация FFE
0Прочьserdes.FFE обходится, и вход сигнала остается неизменной.
1Фиксированныйserdes.FFE применяет входные веса ответвлений FFE, указанные в TapWeights, для входной формы волны.

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

Веса ответвлений FFE, заданные как вектор-строка в V. Длина вектора задает количество ответвлений. Значение каждого векторного элемента определяет силу касания в этом положении. Тап с наибольшей величиной является основным тапом и, следовательно, определяет количество тапов до и после курсора.

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

Нормализуйте векторы веса отвода, заданные как true или false. Когда установлено значение trueобъект масштабирует TapWeights векторные элементы так, чтобы сумма их абсолютных значений равнялась 1.

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

Расширенный

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

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

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

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

Вход сигнала:

  • 'Sample' - Входной сигнал дискретизации по дискретизации

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

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

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

Синтаксис

Описание

y = ffe(x)

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

SymbolTime = 100e-12;                  
SamplesPerSymbol = 16;
dbloss = 16;                                                  

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

dt = SymbolTime/SamplesPerSymbol;

Создайте объект FFE с фиксированным режимом работы.

TapWeights = [0 0.7 -0.2 -0.10];
FFEMode = 1;   
FFE1 = serdes.FFE('SymbolTime',SymbolTime,'SampleInterval',dt,...
      'Mode',FFEMode,'WaveType','Impulse',...
      'TapWeights',TapWeights);

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

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

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

impulseOut = FFE1(impulseIn);

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

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([47 60 -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')
ax = axis;
xlabel('SymbolTimes')
ylabel('Voltage')
grid on
title('Input Eye Diagram')
subplot(212),plot(teye,eyeOut,'b')
axis(ax);
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.FFE Системные object™.

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

SymbolTime = 100e-12;                  
SamplesPerSymbol = 16;
dbloss = 16;                           

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

dt = SymbolTime/SamplesPerSymbol;

Создайте объект FFE в фиксированном режиме.

FFEMode = 1;
TapWeights = [0 0.7 -0.2 -0.1];
FFE = serdes.FFE('SymbolTime',SymbolTime,'SampleInterval',dt,...
      'Mode',FFEMode,'WaveType','Sample',...
      'TapWeights',TapWeights);

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

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) порядка 12.

prbsOrder = 12;                         
M = 500;                                %number of symbols to simulate
[dataBit,prbsSeed]=prbs(prbsOrder,1);

Цикл через один символ за раз.

inwave = zeros(SamplesPerSymbol,1);
outwave = zeros(SamplesPerSymbol,1);
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 FFE
      for jj = 1:SamplesPerSymbol
          outwave(jj) = FFE(y(jj));
      end
 
      %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.

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

.

См. также

| |

Введенный в R2019a