因为CST中内嵌的脚本语言winwrap basic v9不支持复数运算,所以将两端口Y参数导出到MATLAB中计算。
此代码实现的功能:从CST中导入两端口Y参数到MATLAB,在MATLAB中将Y参数转换为T参数,将MATLAB中的T参数导入到CST中。
MATLAB使用2023版本。CST使用2023版本。
下文代码
clc,clear
filename_cst = "C:\Users\Desktop\***.cst"; Y11filepath = "Tasks\SPara1\Y-Parameters\Y1,1";%CST设计工作室导航树上Y11路径 Y12filepath = "Tasks\SPara1\Y-Parameters\Y1,2";%CST设计工作室导航树上Y12路径 Y21filepath = "Tasks\SPara1\Y-Parameters\Y2,1";%CST设计工作室导航树上Y21路径 Y22filepath = "Tasks\SPara1\Y-Parameters\Y2,2";%CST设计工作室导航树上Y22路径
cst = actxserver("CSTStudio.Application.2023");pause(1.5) file_cst=invoke(cst,'OpenFile',filename_cst);%注意,在cst中不要提前打开仿真文件(文件名filename_cst) %file_cst=invoke(cst,'Active3D');
%获取Y参数路径 DSResultTree=invoke(file_cst,"DSResultTree"); sY11=invoke(DSResultTree,"GetFileFromTreeItem",Y11filepath); sY12=invoke(DSResultTree,"GetFileFromTreeItem",Y12filepath); sY21=invoke(DSResultTree,"GetFileFromTreeItem",Y21filepath); sY22=invoke(DSResultTree,"GetFileFromTreeItem",Y22filepath);
%获取Y参数数据 Result1DComplex_Y11 = invoke(file_cst,"Result1DComplex",sY11); Result1DComplex_Y12 = invoke(file_cst,"Result1DComplex",sY12); Result1DComplex_Y21 = invoke(file_cst,"Result1DComplex",sY21); Result1DComplex_Y22 = invoke(file_cst,"Result1DComplex",sY22); length=invoke(Result1DComplex_Y11,"GetN"); f=zeros(length,1); Y11=zeros(length,1);Y12=zeros(length,1);Y21=zeros(length,1);Y22=zeros(length,1); for i =1:length %注意VBA中的数组索引都是从0开始的 disp("Y"+" "+num2str(i)) f(i)=invoke(Result1DComplex_Y11,"GetX",num2str(i-1)); real=invoke(Result1DComplex_Y11,"GetYRe",num2str(i-1)); imag=invoke(Result1DComplex_Y11,"GetYIm",num2str(i-1)); Y11(i)=real+1i*imag; real=invoke(Result1DComplex_Y12,"GetYRe",num2str(i-1)); imag=invoke(Result1DComplex_Y12,"GetYIm",num2str(i-1)); Y12(i)=real+1i*imag; real=invoke(Result1DComplex_Y21,"GetYRe",num2str(i-1)); imag=invoke(Result1DComplex_Y21,"GetYIm",num2str(i-1)); Y21(i)=real+1i*imag; real=invoke(Result1DComplex_Y22,"GetYRe",num2str(i-1)); imag=invoke(Result1DComplex_Y22,"GetYIm",num2str(i-1)); Y22(i)=real+1i*imag; end clear real imag

%Y参数转T参数 T11=zeros(length,1);T12=zeros(length,1);T21=zeros(length,1);T22=zeros(length,1); for i = 1:length T11(i) = -Y22(i)/Y21(i); T12(i) = -1/Y21(i); T21(i) = Y12(i)-Y11(i)*Y22(i)/Y21(i); T22(i) = -Y11(i)/Y21(i); end
%将T参数写入CST %T11 Result1DComplex_T11 = invoke(file_cst,"Result1DComplex",""); for i =1:length disp("T11"+" "+num2str(i)) invoke(Result1DComplex_T11,"AppendXY",num2str(f(i)),num2str(real(T11(i))),num2str(imag(T11(i)))); end invoke(Result1DComplex_T11,"Save","T11"); invoke(Result1DComplex_T11,"AddToTree","T Matrix\T11"); %T12 Result1DComplex_T12 = invoke(file_cst,"Result1DComplex",""); for i =1:length disp("T12"+" "+num2str(i)) invoke(Result1DComplex_T12,"AppendXY",num2str(f(i)),num2str(real(T12(i))),num2str(imag(T12(i)))); end invoke(Result1DComplex_T12,"Save","T12"); invoke(Result1DComplex_T12,"AddToTree","T Matrix\T12"); %T21 Result1DComplex_T21 = invoke(file_cst,"Result1DComplex",""); for i =1:length disp("T21"+" "+num2str(i)) invoke(Result1DComplex_T21,"AppendXY",num2str(f(i)),num2str(real(T21(i))),num2str(imag(T21(i)))); end invoke(Result1DComplex_T21,"Save","T21"); invoke(Result1DComplex_T21,"AddToTree","T Matrix\T21"); %T22 Result1DComplex_T22 = invoke(file_cst,"Result1DComplex",""); for i =1:length disp("T22"+" "+num2str(i)) invoke(Result1DComplex_T22,"AppendXY",num2str(f(i)),num2str(real(T22(i))),num2str(imag(T22(i)))); end invoke(Result1DComplex_T22,"Save","T22"); invoke(Result1DComplex_T22,"AddToTree","T Matrix\T22");
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删