Преобразуйте рассеивающийся параметр в импульсную характеристику для системы SerDes

Этот пример затрагивает две темы: первые показы, как объединить модель Scattering-Parameter (S-Parameter) основополосного канала связи с аналоговым передатчиком и приемником в один S-параметр с 4 портами. Вторые показы возможный метод, чтобы соответствовать передаточной функции к S-параметру и найти его импульсную характеристику для использования с SerDes Toolbox™ с помощью функций rational (RF Toolbox) и impulse (RF Toolbox) от RF Toolbox™.

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

Файл S-параметра, представляющий основополосный канал, должен быть.s4p с 4 портами файл со ссылочным импедансом 50 Ом (Дифференциал на 100 Ом). Для различного импеданса канала (такого как несимметричный или дифференциал на 85 Ом на 42,5 Ома), можно реконфигурировать аналоговые значения передатчика и приемника, чтобы соответствовать. Кроме того, вы будете видеть в этом примере значения для Datarate установлен в 10 ГГц и SamplesPerSymb установлен в 32, и эти значения могут отличаться для вашей системы. Можно настроить время нарастания и амплитуду передатчика с помощью TxRiseTime и TxAmplitude, соответственно, и настройте длительность расчетной импульсной характеристики с помощью endTime. Кроме того, можно оптимизировать подходящую модель с помощью функционального rational путем корректировки параметров управления errorTolerance и nPoles.

showPlots = true;
%Define system data rate and discrete sampling
dataRate = 10*1e9;
samplesPerSymbol = 32;
stopTime = 100e-9; %(seconds) set the time duration of impulse response

%Specify channel S-parameter
ChannelFilename = 'default.s4p';

%Define transmitter analog model
TxR = 50; % Ohms
TxC = 0.1e-12; %Farads
TxAmplitude = 1.2;   %Voltage
TxRiseTime2080 = 40e-12; % 20/80% rise time

%Define receiver analog model
RxR = 50; %Ohms
RxC = 0.2e-12; %Farads

%Specify rational fitting parameters
nPoles = 1600;  %Maximum number of poles to use
errTolerance = -50; %(dB) desired error tolerance of fit

%% Form channel modeling including transmitter/receiver termination
Rshort = 1.0e-6;

Импортируйте дифференциальную модель S-параметра канала связи

Импортируйте файл данных S-параметра и сохраните исходное содержимое частоты.

%% Import Differential S-Parameter Model of Communication Channel
%Import the S-Parameter data file and keep the original frequency content.
origSparam = sparameters(ChannelFilename);
freq = origSparam.Frequencies;

Объедините S-параметр канала связи с аналоговыми разделами передатчика и приемника

Вы видите, как использовать MATLAB, чтобы преобразовать характеристики импеданса аналоговых схем Tx и Rx в эквиваленты S-параметра. Они могут затем быть объединены S-параметром Канала связи, чтобы создать модель S-Parameter системы.

Преобразуйте аналоговую модель передатчика к S-параметру

cktTx = circuit('txAnalog');
add(cktTx,[1 3],resistor(TxR,'R1'))
add(cktTx,[3 0],capacitor(TxC,'C1'))
add(cktTx,[2 4],resistor(TxR,'R2'))
add(cktTx,[4 0],capacitor(TxC,'C2'))
setports(cktTx,[1 0],[2 0],[3 0],[4 0])
StxAnalog = sparameters(cktTx,freq,50);

Сконфигурируйте порядок порта для S-параметра канала связи

cktCh = circuit('ChannelSparam');
channel = nport(ChannelFilename); % Create s-parameter circuit element from the 4-port S-parameter file.
add(cktCh,[1 3 2 4],channel);
setports(cktCh,[1 0],[2 0],[3 0],[4 0])
Schannel = sparameters(cktCh,freq,50);

Преобразуйте аналоговую модель приемника к S-параметру

cktRx = circuit('rxAnalog');
add(cktRx,[1 0],resistor(RxR,'R3'))
add(cktRx,[1 0],capacitor(RxC,'C3'))
add(cktRx,[2 0],resistor(RxR,'R4'))
add(cktRx,[2 0],capacitor(RxC,'C4'))
add(cktRx,[1 3],resistor(Rshort,'R5'))
add(cktRx,[2 4],resistor(Rshort,'R6'))
setports(cktRx,[1 0],[2 0],[3 0],[4 0])
SrxAnalog = sparameters(cktRx,freq,50);

Создайте объединенный S-объект-параметра

Можно объединить S-параметры с помощью cascadesparams. Установите значения data, freq и z0 для использования rational функция. Используйте s2sdd преобразовывать данные в дифференциальный S-параметр с 4 портами diffdata. Примечание: RF Toolbox™ применяет порты сначала сверху донизу на S-параметр, затем слева направо. Следует иметь в виду, что порты на импортированном S-Paramter могут быть отформатированы как слева направо, затем от начала до конца, и, вероятно, придется реконфигурировать для использования RF Toolbox™.

sparamWithAnalog = cascadesparams(StxAnalog,Schannel,SrxAnalog);

data = sparamWithAnalog.Parameters;
freq = sparamWithAnalog.Frequencies;
z0 = sparamWithAnalog.Impedance;

diffdata = s2sdd(data,2);
diffz0 = 2*z0;
diffsparams = sparameters(diffdata,freq,diffz0);

Преобразуйте S-параметр в передаточную функцию

Можно найти передаточную функцию с помощью функции MATLAB s2tf использование параметров управления для ссылочного импеданса zRef, исходный импеданс zSource и загрузите импеданс zLoad.

Примечание: исходный импеданс собирается закоротить-circut и загрузить импеданс, установлен в разомкнутую цепь, потому что характеристики импеданса Tx и Rx уже являются включенной моделью S-Parameter системы LTI.

zRef = diffz0;   % Reference impedance of S-Parameters
zSource = 1e-6;  % Short circuit the source impedance since it is included in the Tx Analog model.
zLoad = 1e6;     % Open circuit the load impedance since it is included in the Rx Analog model.
difftransfunc = s2tf(diffdata,zRef,zSource,zLoad);

Найдите Подходящими для Функции theTransfer при помощи Рациональной функции

Вы видите, как использовать рациональный получить подгонку:

Примечание: для функционального rational, рекомендуется установить TendsToZero на true для быстрых времен нарастания TX для того, чтобы смягчить потенциальные числовые артефакты в импульсной характеристике.

%Fit model to transfer function
rationalResults = rational(freq,difftransfunc,errTolerance,'TendsToZero',true,'MaxPoles',nPoles,'Display',"off");
fprintf('\nThe derived rational function achieved %f dB fit with %d poles.\n',rationalResults.ErrDB,rationalResults.NumPoles);
The derived rational function achieved -51.339448 dB fit with 160 poles.
%% Extract impulse response from rational fit results

%Determine symbol time, time steps and duration (in samples) of the impulse
SymbolTime = 1/dataRate;
ts = SymbolTime/samplesPerSymbol;
pointsInImpulse = round(stopTime/ts);

Найдите Импульсную характеристику с помощью Импульса и Рационального Выхода

Используйте функциональный impulse найти импульсную характеристику подгонки:

impulseRaw = impulse(rationalResults,ts,pointsInImpulse);

Моделирование времени нарастания TX и амплитуды

Можно включать время нарастания TX и амплитуду путем свертки к меандру с импульсной характеристикой. Примечание: можно преобразовать 20-80% в 0-100%-е время нарастания, принимающее линейный пандус.

TxRiseTime = TxRiseTime2080/0.6;
risetimeSamples = round(TxRiseTime/ts); %Determine width of rise time pulse

Используя линейную модель пандуса для времени нарастания

Примечание: Используя линейную модель пандуса времени нарастания в дискретное время система приводит к возможности некоторой неопределенности в использовании линейного пандуса с данным интервалом выборки. Сокращение неопределенности может иметься путем увеличения разрешения выборки путем увеличения выборок на символ.

riseTimeUncertainty = (TxRiseTime - risetimeSamples*ts)/TxRiseTime*100;
fprintf('Rise time uncertainty is %g %%\n',riseTimeUncertainty);
Rise time uncertainty is 1.5625 %
%Create rise time pulse response
riseTimePulse = zeros(risetimeSamples*2,1);
riseTimePulse(1:risetimeSamples) = 1/risetimeSamples;

%Convolve rise time pulse with raw impulse response and scale by tx amplitude.
if risetimeSamples>1
    impulseResponse = TxAmplitude*conv(impulseRaw,riseTimePulse,'same');
else
    impulseResponse = TxAmplitude*impulseRaw;
end
t = (0:length(impulseResponse)-1)*ts;

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

Можно сравнить исходные данные и соответствовать частотной характеристике дифференциального режима путем графического вывода величины и фазы исходной передаточной функции и esulting выхода rational функция.

%Extract frequency response from fit
freqsforresp = linspace(0,max(freq)*2,length(freq))';
resp = freqresp(rationalResults,freqsforresp);

figure(1001)
subplot(2,1,1)
plot(freq*1.e-9,20*log10(abs(difftransfunc)),'r',...
    freqsforresp*1.e-9, 20*log10(abs(resp)),'b--','LineWidth',2)
title(sprintf('Rational Fitting with %d poles',rationalResults.NumPoles),'FontSize',12)
ylabel('Magnitude (decibels)')
xlabel('Frequency (GHz)')
legend('Original data','Fit result')
grid on

subplot(2,1,2)
origangle = unwrap(angle(difftransfunc))*180/pi;
plotangle = unwrap(angle(resp))*180/pi;
plot(freq*1.e-9,origangle,'r',freqsforresp*1.e-9,plotangle,'b--', ...
    'LineWidth',2)
ylabel('Phase (deg.)')
xlabel('Frequency (GHz)')
legend('Original data','Fit result')
grid on

Постройте импульсную характеристику

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

%% Visualize impulse response
figure(1002)
plot(t*1e9,impulseResponse)
xlabel('Time (ns)')
ylabel('Volts')
title(sprintf('Impulse Response derived from\n%s\nand Tx/Rx analog model',ChannelFilename),'interpreter','none')
grid on

Используйте импульсную характеристику для модели канала в разработчике Serdes

Можно использовать импульсную характеристику основополосной модели канала в Разработчике Serdes путем выбора "Impulse response" для модели канала и ввести векторный impulseResponse.

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