В этом примере показано, как использовать RF Toolbox™ для моделирования дифференциального высокоскоростного канала объединительной платы с использованием рациональных функций. Этот тип модели полезен для инженеров по обеспечению целостности сигналов, цель которых - надежно соединить высокоскоростные полупроводниковые устройства с, например, потоками последовательных данных с несколькими Gbps через объединительные платы и печатные платы.
По сравнению с традиционными методами, такими как линейная интерполяция, рациональный функциональный подбор кривой обеспечивает большее понимание физических характеристик высокоскоростной объединительной платы. Это обеспечивает средство, называемое сокращением порядка модели, для достижения компромисса между сложностью и точностью. Для заданной точности рациональные функции менее комплексны, чем другие типы моделей, такие как конечные импульсные характеристики фильтры, сгенерированные ОБПФом методами. В сложение рациональные модели функций по своей сути ограничивают фазу, чтобы быть нулем при экстраполяции в DC. Меньше физически основанных методов требуют проработки ограничительных алгоритмов в порядок, чтобы принудить экстраполированную фазу к нулю в DC.
Фигура 1: Дифференциальный высокоскоростной объединительный канал
Чтение файла данных Touchstone ®, default.s4p
, в sparameters
объект. Параметрами в этом файле данных являются S-параметры 50 Ом пассивной схемы с одним концом 4 порта, показанной на фигуре 1, заданные на частотах 1496 в диапазоне от 50 МГц до 15 ГГц. Затем получите однокомпонентные S-параметры 4 порта и используйте функцию матричного преобразования s2sdd
для преобразования их в дифференциальные 2-портовые S-параметры. Наконец, постройте график дифференциального S11
параметр на графике Смита.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;
Преобразуйте в 2-портовые дифференциальные S-параметры.
diffdata = s2sdd(data); diffz0 = 2*z0;
По умолчанию s2sdd ожидает, что порты 1 и 3 будут входами, а порты 2 и 4 будут выходами. Однако, если ваши данные имеют порты 1 и 2 в качестве входов и порты 3 и 4 в качестве выходов, используйте 2 в качестве второго входного параметра для s2sdd
функция для определения этого альтернативного расположения портов. Для примера, diffdata = s2sdd(data,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
объект. The 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])
Оцените и удалите задержку из сигнала выхода и создайте глазковую диаграмму при помощи функций 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
Warning: comm.EyeDiagram will be removed in a future release. Use eyediagram instead.