Пассивность: Протестируйте, визуализируйте и осуществите пассивность rationalfit вывод

Этот пример показывает, как протестировать, визуализировать, и осуществить пассивность вывода от функции rationalfit.

Разделите 1 пассивность данных S-параметра

Анализ временного интервала и симуляция зависят критически от способности преобразовать данные 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)

Разделите 2 Тестирования и визуализацию rationalfit выходная пассивность

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)

Разделите 3 Тестирования и визуализацию rationalfit выходная пассивность

Функция 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

Разделите 4 Запуска makepassive с предписанными полюсами и нулем C и D

Чтобы продемонстрировать, что только 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