В этом примере показано, как использовать радиочастотные Toolbox™ для моделирования дифференциального высокоскоростного канала объединительной платы с использованием рациональных функций. Этот тип модели полезен для инженеров по обеспечению целостности сигналов, целью которых является надежное соединение высокоскоростных полупроводниковых устройств с, например, последовательными потоками данных с несколькими Гбит/с через объединительные платы и печатные платы.
По сравнению с традиционными методами, такими как линейная интерполяция, рациональная функциональная подгонка обеспечивает более глубокое понимание физических характеристик высокоскоростной объединительной платы. Она обеспечивает средство, называемое сокращением порядка модели, для достижения компромисса между сложностью и точностью. Для данной точности рациональные функции менее сложны, чем другие типы моделей, такие как фильтры FIR, генерируемые методами IFFT. Кроме того, модели рациональных функций по своей природе ограничивают фазу до нуля при экстраполяции на DC. Менее физически основанные методы требуют сложных алгоритмов ограничения, чтобы принудить экстраполированную фазу к нулю при постоянном токе.
Рис. 1: Дифференциальный высокоскоростной канал объединительной платы
Прочитайте файл данных Touchstone ® ,default.s4p, в sparameters объект. Параметры в этом файле данных являются 50-омными S-параметрами однополюсной 4-портовой пассивной схемы, показанной на рисунке 1, заданными на 1496 частотах от 50 МГц до 15 ГГц. Затем получите односторонние 4-портовые S-параметры и используйте функцию преобразования матриц. 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 объект. 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.
