Этот пример показывает, как использовать RF Toolbox™, чтобы смоделировать дифференциальный высокоскоростной канал основной платы с помощью рациональных функций. Этот тип модели полезен для инженеров целостности сигнала, цель которых состоит в том, чтобы надежно соединить высокоскоростные полупроводниковые устройства с, например, потоки последовательных данных мульти-Гбит/с через основные платы и печатные платы.
По сравнению с традиционными методами, такими как линейная интерполяция, подбор кривой рациональной функции обеспечивает больше понимания физических характеристик высокоскоростной основной платы. Это обеспечивает средние значения, названные сокращением порядка модели, создания компромисса между сложностью и точностью. Для заданной точности рациональные функции являются менее комплексными, чем другие типы моделей, такие как КИХ-фильтры, сгенерированные методами ОБПФ. Кроме того, модели рациональной функции по сути ограничивают фазу быть нулем на экстраполяции к DC. Меньше физических методов требует тщательно продуманных ограничительных алгоритмов в порядке обеспечить экстраполируемую фазу, чтобы обнулить в DC.
Рисунок 1: дифференциальный высокоскоростной канал основной платы
Считайте файл данных 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])
Оцените и удалите задержку из выходного сигнала и создайте индикаторную диаграмму при помощи функций 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