Этот пример показывает, как протестировать, визуализировать, и осуществить пассивность вывода от функции 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);
ITER H-INFTY NORM FREQUENCY ERRDB CONSTRAINTS 0 1 + 1.791e-02 17.6816 GHz -40.4702 1 1 + 2.877e-04 275.355 MHz -40.9167 5 2 1 + 9.293e-05 365.511 MHz -40.9092 7 3 1 - 3.239e-07 368.341 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);
ITER H-INFTY NORM FREQUENCY ERRDB CONSTRAINTS 0 0 0 Hz 0 0 3.59871 Inf Hz -41.96 1 1 + 1.245e-01 37.6072 GHz -41.1805 4 2 1 + 3.636e-02 22.6657 GHz -41.0098 6 3 1 + 3.512e-03 18.5104 GHz -40.9057 9 4 1 - 2.056e-07 363.047 MHz -40.9062 11
passivity(pfit2)
all(vertcat(pfit2(:).A) == vertcat(fit(:).A))
ans = logical
1