serdes.FFE

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

Описание

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

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

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

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

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

Создание

Описание

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

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

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

Свойства

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

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

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

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

Основной

Рабочий режим FFE в виде 0 или 1режим определяет, исключен ли FFE или нет.

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

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

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

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

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

Типы данных: логический

Усовершенствованный

Время односимвольной длительности в виде действительного скаляра в 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
plot(t2,waveIn,t2,waveOut)
legend('Input','Output')
title('Waveform Comparison')
xlabel('SymbolTimes')
ylabel('Voltage')
grid on 

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

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

Используйте время символа 100 пикосекунд с 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]);

Инициализируйте псевдослучайную двоичную последовательность (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

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

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

| |

Введенный в R2019a