Моделирование высокоскоростной основной платы (S-параметры с 4 портами к рациональной функции)

В этом примере показано, как использовать RF Toolbox™, чтобы смоделировать дифференциальный высокоскоростной канал основной платы с помощью рациональных функций. Этот тип модели полезен для инженеров целостности сигнала, цель которых состоит в том, чтобы надежно соединить высокоскоростные полупроводниковые устройства с, например, потоки последовательных данных мульти-Гбит/с через основные платы и печатные платы.

По сравнению с традиционными методами, такими как линейная интерполяция, подбор кривой рациональной функции обеспечивает больше понимания физических характеристик высокоскоростной основной платы. Это обеспечивает средние значения, названные сокращением порядка модели, создания компромисса между сложностью и точностью. Для заданной точности рациональные функции являются менее комплексными, чем другие типы моделей, такие как КИХ-фильтры, сгенерированные методами ОБПФ. Кроме того, модели рациональной функции по сути ограничивают фазу быть нулем на экстраполяции к DC. Меньше физических методов требует тщательно продуманных ограничительных алгоритмов для того, чтобы обеспечить экстраполируемую фазу, чтобы обнулить в DC.

Рисунок 1: дифференциальный высокоскоростной канал основной платы

Считайте несимметричные S-параметры с 4 портами и преобразуйте их в дифференциальные S-параметры с 2 портами

Считайте файл данных Touchstone®, default.s4p, в sparameters объект. Параметрами в этом файле данных являются S-параметры на 50 Ом несимметричной пассивной схемы с 4 портами, показанной в рисунке 1, данном на 1 496 частотах в пределах от от 50 МГц до 15 ГГц. Затем получите несимметричные S-параметры с 4 портами и используйте матричную функцию преобразования s2sdd преобразовывать их в дифференциальные S-параметры с 2 портами. Наконец, постройте дифференциальный S11 параметр на графике Смита.

filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;

Преобразуйте в дифференциальные S-параметры с 2 портами.

diffdata = s2sdd(data);  
diffz0 = 2*z0;

По умолчанию s2sdd ожидает, что порты 1 & 3 будут входными параметрами и портами 2 & 4, чтобы быть выходными параметрами. Однако, если ваши данные имеют порты 1 & 2 как входные параметры и порты 3 & 4 как выходные параметры, то используйте 2 в качестве второго входного параметра к s2sdd, чтобы задать это расположение альтернативного порта. Например, diffdata = s2sdd (данные, 2);

diffsparams = sparameters(diffdata,freq,diffz0)
diffsparams = 
  sparameters: S-parameters object

       NumPorts: 2
    Frequencies: [1496x1 double]
     Parameters: [2x2x1496 double]
      Impedance: 100

  rfparam(obj,i,j) returns S-parameter Sij

figure
smithplot(diffsparams,1,1)

Вычислите передаточную функцию и ее объектное представление рациональной функции

Во-первых, используйте s2tf функция, чтобы вычислить дифференциальную передаточную функцию. Затем используйте rationalfit функция, чтобы вычислить аналитическую форму передаточной функции и сохранить его в rfmodel.rational объект. rationalfit функционируйте соответствует объекту рациональной функции к заданным данным по заданным частотам. Время выполнения зависит от компьютера, подходящего допуска, количества точек данных, и т.д.

difftransfunc = s2tf(diffdata,diffz0,diffz0,diffz0);
delayfactor = 0.98; % Delay factor. Leave at the default of zero if your
                    % data does not have a well-defined principle delay
rationalfunc = rationalfit(freq,difftransfunc,'DelayFactor',delayfactor)
rationalfunc = 
   rfmodel.rational with properties:

        A: [31x1 double]
        C: [31x1 double]
        D: 0
    Delay: 6.5521e-09
     Name: 'Rational Function'

npoles = length(rationalfunc.A);
fprintf('The derived rational function contains %d poles.\n',npoles);
The derived rational function contains 31 poles.

Подтвердите частотную характеристику Дифференциального Режима

Используйте freqresp метод rfmodel.rational объект получить частотную характеристику объекта рациональной функции. Затем создайте график сравнить частотную характеристику объекта рациональной функции и те из исходных данных. Обратите внимание на то, что детрендированная фаза (т.е. фаза после того, как принципиальная задержка удалена) построена в обоих случаях.

freqsforresp = linspace(0,20e9,2000)';
resp = freqresp(rationalfunc,freqsforresp);

figure
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',npoles),'FontSize',12)
ylabel('Magnitude (decibels)')
xlabel('Frequency (GHz)')
legend('Original data','Fitting result')

subplot(2,1,2)
origangle = unwrap(angle(difftransfunc))*180/pi+360*freq*rationalfunc.Delay;
plotangle = unwrap(angle(resp))*180/pi+360*freqsforresp*rationalfunc.Delay;
plot(freq*1.e-9,origangle,'r',freqsforresp*1.e-9,plotangle,'b--', ...
    'LineWidth',2)
ylabel('Detrended phase (deg.)')
xlabel('Frequency (GHz)')
legend('Original data','Fitting result')

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

Сгенерируйте случайный импульсный сигнал на 2 Гбит/с. Затем используйте timeresp метод rfmodel.rational объект вычислить ответ рациональной функции возражает против случайного импульса. Наконец, постройте сигналы ввода и вывода модели рациональной функции, которая представляет дифференциальную схему.

datarate = 2*1e9;                % Data rate: 2 Gbps 
samplespersymb = 100; 
pulsewidth = 1/datarate;            
ts = pulsewidth/samplespersymb;
numsamples = 2^17;
numplotpoints = 10000;

t_in = double((1:numsamples)')*ts;
input = sign(randn(1,ceil(numsamples/samplespersymb)));
input = repmat(input,[samplespersymb, 1]);
input = input(:);
[output,t_out] = timeresp(rationalfunc,input,ts);

figure
subplot(2,1,1)
plot(t_in(1:numplotpoints)*1e9,input(1:numplotpoints),'LineWidth',2)
title([num2str(datarate*1e-9),' Gbps signal'],'FontSize',12)
ylabel('Input signal')
xlabel('Time (ns)')
axis([-inf,inf,-1.5,1.5])

subplot(2,1,2)
plot(t_out(1:numplotpoints)*1e9,output(1:numplotpoints),'LineWidth',2)
ylabel('Output signal')
xlabel('Time (ns)')
axis([-inf,inf,-1.5,1.5])

Постройте глазковую диаграмму для выходного сигнала на 2 Гбит/с

Оцените и удалите задержку из выходного сигнала и создайте глазковую диаграмму при помощи функций Communications Toolbox™.

if ~isempty(which('comm.EyeDiagram'))
    eyedi = comm.EyeDiagram('SampleRate',1./ts, ...
    'SamplesPerSymbol',samplespersymb,'DisplayMode','2D color histogram');
    % Update the eye diagram object with the transmitted signal
    estdelay = floor(rationalfunc.Delay/ts);
    eyedi(output(estdelay+1:end));
end