В этом примере показано, как протестировать, визуализируйте и осуществите пассивность выхода от функции rationalfit.
Анализ временного интервала и симуляция зависят критически от способности преобразовать данные S-параметра частотного диапазона в причинные, устойчивые, и пассивные представления временного интервала. Поскольку функция rationalfit гарантирует, что все полюса находятся в левой полуплоскости, rationalfit выход является и устойчивым и причинным конструкцией. Проблемой является пассивность.
Данные S-параметра N-порта представляют зависимую частотой передаточную функцию H (f). Объект sparameter может быть создан в RF Toolbox путем чтения файла Пробного камня, такой как пассивного s2p, в функцию sparameter. Функция ispassive может использоваться, чтобы проверять пассивность данных S-параметра, и функция пассивности может использоваться, чтобы построить 2-норму матриц NxN H (f) на каждой частоте данных.
S = sparameters('passive.s2p');
ispassive(S)
ans = logical
1
passivity(S)
rationalfit функция преобразует N-порт sparameter данные S в матрицу NxN объектов rfmodel.rational.
Используя функцию ispassive на подгонке NxN выход сообщает, что несмотря на то, что входные данные S пассивны, выходная подгонка не пассивна. Другими словами, норма H (f) больше один на некоторой частоте в области значений [0, Inf].
Функция пассивности берет подгонку NxN, как введено и строит ее пассивность. Это - график верхней границы нормы (H (f)) на [0, Inf], также известный как H-норму-по-бесконечности.
fit = rationalfit(S); ispassive(fit)
ans = logical
0
passivity(fit)
Функция makepassive берет в качестве входа массив NxN подходящих объектов и также исходных данных S-параметра, и производит пассивную подгонку при помощи выпуклых методов оптимизации, чтобы оптимально совпадать с данными входа S S-параметра в то время как удовлетворяющие ограничения пассивности. Остатки C и проходная матрица D выхода pfit изменяются, но полюса выхода pfit идентичны полюсам входной подгонки.
pfit = makepassive(fit,S,'Display','on');
ITER H-INFTY NORM FREQUENCY ERRDB CONSTRAINTS 0 1 + 1.791e-02 17.6816 GHz -40.4702 1 1 + 2.878e-04 275.327 MHz -40.9167 5 2 1 + 9.233e-05 365.865 MHz -40.9092 7 3 1 - 3.541e-07 368.137 MHz -40.906 9
ispassive(pfit)
ans = logical
1
passivity(pfit)
all(vertcat(pfit(:).A) == vertcat(fit(:).A))
ans = logical
1
Чтобы продемонстрировать, что только C и D изменяются makepassive, можно обнулить C и D и повторно выполнить makepassive. Выход pfit все еще имеет те же полюса как входная подгонка. Различия между pfit и pfit2 возникают из-за различных начальных точек выпуклой оптимизации.
Можно использовать эту функцию функции makepassive, чтобы произвести пассивную подгонку из предписанного набора полюсов без любой идеи запустить C и D.
for k = 1:numel(fit) fit(k).C(:) = 0; fit(k).D(:) = 0; end pfit2 = makepassive(fit,S); passivity(pfit2)
all(vertcat(pfit2(:).A) == vertcat(fit(:).A))
ans = logical
1
Функция generateSPICE берет пассивную подгонку и генерирует эквивалентную схему как SPICE subckt файл. Входная подгонка является массивом NxN объектов rfmodel.rational, как возвращено rationalfit с объектом sparameters, как введено. Сгенерированный файл является моделью SPICE, созданной только из пассивного R, L, C элементы и управляемые исходные элементы E, F, G, и H.
generateSPICE(pfit2,'mypassive.ckt') type mypassive.ckt
* Equivalent circuit model for mypassive.ckt .SUBCKT mypassive po1 po2 Vsp1 po1 p1 0 Eu1 u1 um1 p1 0 1 Hu1 um1 0 Vsp1 50 Ru1 u1 0 1 Vsp2 po2 p2 0 Eu2 u2 um2 p2 0 1 Hu2 um2 0 Vsp2 50 Ru2 u2 0 1 Rx1 x1 0 1 Cx1 x1 xm1 2.73023897845301e-12 Vx1 xm1 0 0 Gx1_1 x1 0 u1 0 -1.17331140035562 Rx2 x2 0 1 Cx2 x2 xm2 7.77758888047627e-12 Vx2 xm2 0 0 Gx2_1 x2 0 u1 0 -1.49027907586191 Rx3 x3 0 1 Cx3 x3 xm3 2.29141629359547e-11 Vx3 xm3 0 0 Gx3_1 x3 0 u1 0 -0.517082276083613 Rx4 x4 0 1 Cx4 x4 xm4 9.31845201292013e-11 Vx4 xm4 0 0 Gx4_1 x4 0 u1 0 -0.653520333611856 Rx5 x5 0 1 Cx5 x5 xm5 4.89917766186011e-10 Vx5 xm5 0 0 Gx5_1 x5 0 u1 0 -0.0808078632668898 Rx6 x6 0 1 Cx6 x6 xm6 3.95175907401638e-09 Vx6 xm6 0 0 Fxc6_7 x6 0 Vx7 19.0873716716282 Gx6_1 x6 0 u1 0 -0.0921092255396911 Rx7 x7 0 1 Cx7 x7 xm7 3.95175907401638e-09 Vx7 xm7 0 0 Fxc7_6 x7 0 Vx6 -0.082278153019079 Gx7_1 x7 0 u1 0 0.00757857695342356 Rx8 x8 0 1 Cx8 x8 xm8 1.25490425626002e-08 Vx8 xm8 0 0 Gx8_1 x8 0 u1 0 -0.947555441869583 Rx9 x9 0 1 Cx9 x9 xm9 2.73023897845301e-12 Vx9 xm9 0 0 Gx9_2 x9 0 u2 0 -1.31896484432979 Rx10 x10 0 1 Cx10 x10 xm10 7.77758888047627e-12 Vx10 xm10 0 0 Gx10_2 x10 0 u2 0 -1.5639966507489 Rx11 x11 0 1 Cx11 x11 xm11 2.29141629359547e-11 Vx11 xm11 0 0 Gx11_2 x11 0 u2 0 -0.549815401094269 Rx12 x12 0 1 Cx12 x12 xm12 9.31845201292013e-11 Vx12 xm12 0 0 Gx12_2 x12 0 u2 0 -0.672510434433946 Rx13 x13 0 1 Cx13 x13 xm13 4.89917766186011e-10 Vx13 xm13 0 0 Gx13_2 x13 0 u2 0 -0.0832947065766125 Rx14 x14 0 1 Cx14 x14 xm14 3.95175907401638e-09 Vx14 xm14 0 0 Fxc14_15 x14 0 Vx15 18.7065608378899 Gx14_2 x14 0 u2 0 -0.092680102366167 Rx15 x15 0 1 Cx15 x15 xm15 3.95175907401638e-09 Vx15 xm15 0 0 Fxc15_14 x15 0 Vx14 -0.0839530954267814 Gx15_2 x15 0 u2 0 0.00778078147811068 Rx16 x16 0 1 Cx16 x16 xm16 1.25490425626002e-08 Vx16 xm16 0 0 Gx16_2 x16 0 u2 0 -0.948025545602726 Ry1 y1 0 1 Gyc1_1 y1 0 x1 0 -0.24633827988472 Gyc1_2 y1 0 x2 0 -0.0436513588266539 Gyc1_3 y1 0 x3 0 -1.05287098762883 Gyc1_4 y1 0 x4 0 -1.00146197097233 Gyc1_5 y1 0 x5 0 1.00420322580232 Gyc1_6 y1 0 x6 0 -1.00126765877424 Gyc1_7 y1 0 x7 0 -1.02009260631201 Gyc1_8 y1 0 x8 0 0.999890657680585 Gyc1_9 y1 0 x9 0 1.57803715382434 Gyc1_10 y1 0 x10 0 -1.87067368958175 Gyc1_11 y1 0 x11 0 0.894346548640185 Gyc1_12 y1 0 x12 0 0.97009340489473 Gyc1_13 y1 0 x13 0 -0.966466117491626 Gyc1_14 y1 0 x14 0 0.994317590104102 Gyc1_15 y1 0 x15 0 0.975801395242396 Gyc1_16 y1 0 x16 0 -1.00002474114843 Gyd1_1 y1 0 u1 0 0.604384029339141 Gyd1_2 y1 0 u2 0 -0.351061842520764 Ry2 y2 0 1 Gyc2_1 y2 0 x1 0 1.75366172011528 Gyc2_2 y2 0 x2 0 -1.95634864117335 Gyc2_3 y2 0 x3 0 0.947129012371169 Gyc2_4 y2 0 x4 0 0.998538029027672 Gyc2_5 y2 0 x5 0 -0.995796774197685 Gyc2_6 y2 0 x6 0 0.998732341225759 Gyc2_7 y2 0 x7 0 0.979907393687995 Gyc2_8 y2 0 x8 0 -1.00010934231942 Gyc2_9 y2 0 x9 0 -0.421962846175657 Gyc2_10 y2 0 x10 0 0.129326310418248 Gyc2_11 y2 0 x11 0 -1.10565345135981 Gyc2_12 y2 0 x12 0 -1.02990659510527 Gyc2_13 y2 0 x13 0 1.03353388250837 Gyc2_14 y2 0 x14 0 -1.0056824098959 Gyc2_15 y2 0 x15 0 -1.0241986047576 Gyc2_16 y2 0 x16 0 0.999975258851565 Gyd2_1 y2 0 u1 0 -0.335799595335982 Gyd2_2 y2 0 u2 0 0.701657251468432 Ey1 p1 0 y1 ym1 1 Hy1 ym1 0 Vsp1 -50 Ey2 p2 0 y2 ym2 1 Hy2 ym2 0 Vsp2 -50 .ENDS