В этом примере показано, как использовать Simulink®, чтобы симулировать дифференциальный высокоскоростной канал основной платы. Пример сначала читает файл данных Touchstone®, который содержит несимметричные S-параметры с 4 портами для дифференциальной высокоскоростной основной платы и преобразует их в дифференциальные S-параметры с 2 портами. Это вычисляет передаточную функцию дифференциальной схемы и использует rationalfit
функционируйте, чтобы соответствовать рациональной функции закрытой формы к передаточной функции схемы. Затем пример преобразует полюса и остатки объекта рациональной функции в числители и знаменатели передаточных функций S-области Преобразования Лапласа, которые это использует, чтобы создать модель Simulink объекта рациональной функции.
Чтобы запустить этот пример, необходимо было установить Simulink.
Считайте файл данных Пробного камня, default.s4p
, в sparameters
объект. Параметрами в этом файле данных являются S-параметры на 50 Ом несимметричной пассивной схемы с 4 портами, измеренной на 1 496 частотах в пределах от от 50 МГц до 15 ГГц. Затем получите несимметричные S-параметры с 4 портами от объекта данных и используйте матричную функцию преобразования s2sdd
преобразовывать их в дифференциальные S-параметры с 2 портами.
filename = 'default.s4p';
backplane = sparameters(filename);
data = backplane.Parameters;
freq = backplane.Frequencies;
z0 = backplane.Impedance;
Преобразуйте в дифференциальные S-параметры с 2 портами. Эта операция пары вместе нечетные порты сначала, сопровождаемый четными портами. Если различная настройка использовалась, чтобы измерить несимметричные S-параметры, можно задать различный второй аргумент в s2sdd команде. Например, опция "2" позволит вам соединять порты ввода и вывода в порядке возрастания. В качестве альтернативы можно использовать команду snp2smp, чтобы изменить порядок порта.
diffdata = s2sdd(data,1); diffz0 = 2*z0;
Во-первых, используйте s2tf
функция, чтобы вычислить дифференциальную передаточную функцию. Затем используйте rationalfit
функция, чтобы вычислить закрытую форму передаточной функции и сохранить его в rfmodel.rational
объект. rationalfit
функционируйте соответствует объекту рациональной функции к заданным данным по заданным частотам.
difftf = s2tf(diffdata,diffz0,diffz0,diffz0); fittol = -30; % Rational fitting tolerance in dB delayfactor = 0.9; % Delay factor rationalfunc = rationalfit(freq,difftf,fittol,'DelayFactor', delayfactor) npoles = length(rationalfunc.A); fprintf('The derived rational function contains %d poles.\n', npoles);
rationalfunc = rfmodel.rational with properties: A: [20x1 double] C: [20x1 double] D: 0 Delay: 6.0172e-09 Name: 'Rational Function' The derived rational function contains 20 poles.
Этот пример использует передаточные функции S-области Преобразования Лапласа, чтобы представлять основную плату в модели Simulink. Преобразуйте полюса и соответствующие остатки объекта рациональной функции в числитель и форму знаменателя для использования в блоках передаточной функции Преобразования Лапласа. Каждый блок передаточной функции представляет или один действительный полюс и соответствующий действительный остаток или пару комплексно-сопряженных полюсов и остатков, таким образом, блок передаточной функции всегда имеет действительные коэффициенты. В данном примере объект рациональной функции содержит 2 действительных полюса/остатка и 6 пар комплексных полюсов/остатков, таким образом, модель Simulink содержит 8 блоков передаточной функции.
A = rationalfunc.A; C = rationalfunc.C; den = cell(size(A)); num = cell(size(A)); k = 1; % Index of poles and residues n = 0; % Index of numerators and denominators while k <= npoles if isreal(A(k)) % Real poles n = n + 1; num{n} = C(k); den{n} = [1, -A(k)]; k = k + 1; else % Complex poles n = n + 1; real_a = real(A(k)); imag_a = imag(A(k)); real_c = real(C(k)); imag_c = imag(C(k)); num{n} = [2*real_c, -2*(real_a*real_c+imag_a*imag_c)]; den{n} = [1, -2*real_a, real_a^2+imag_a^2]; k = k + 2; end end den = den(1:n); num = num(1:n);
Создайте модель Simulink основной платы с помощью передаточных функций Преобразования Лапласа. Затем соедините случайный источник с входом основной платы и осциллографа к его вводу и выводу.
modelname = fliplr(strtok(fliplr(tempname), filesep)); simulink_rfmodel_build_rational_system_helper(modelname , numel(num)) simulink_rfmodel_add_source_sink_helper(modelname)
Рисунок 1. Модель Simulink для рациональной функции
Когда вы симулируете модель, Осциллограф показывает удар дифференциальной основной платы на случайном входном сигнале.
set_param([modelname,'/Rational Model Output'], 'Open', 'on') h = findall(0, 'Type', 'Figure', 'Name', 'Rational Model Output'); h.Position = [200, 216, 901, 442]; sim(modelname);
close_system(modelname, 0)