Моделирование высокоскоростной основной платы (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;
% By default, |s2sdd| expects ports 1 & 3 to be inputs and ports 2 & 4 to
% be outputs. However if your data has ports 1 & 2 as inputs and ports 3 &
% 4 as outputs, then use 2 as the second input argument to |s2sdd| to
% specify this alternate port arrangement. For example,
% diffdata = s2sdd(data,2);
diffsparams = sparameters(diffdata,freq,diffz0)
figure
smithplot(diffsparams,1,1)
diffsparams = 

  sparameters: S-parameters object

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

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

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

Во-первых, используйте функцию 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)
npoles = length(rationalfunc.A);
fprintf('The derived rational function contains %d poles.\n',npoles);
rationalfunc = 

   rfmodel.rational with properties:

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

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