matlab可以编辑vbs脚本,而HFSS可以用vbs脚本建模,hfss仿真结果导出的数据可以在matlab调用,根据数据的分析可以再改进hfss的建模,这样两个软件就可以协同工作提高用户的工作效率。
上一节分析了hfss脚本录制功能,对hfss的vbs代码做了分析。这节对matlab-hfss-api分析。通过参考两者可以方便自己定制符合需求的api。
HFSS-MATLAB-API是一个基于MATLAB的接口,专为ANSYS HFSS设计。该项目旨在简化HFSS与MATLAB之间的交互。
这里分享的是Vijay Ramasami (rvc@ku.edu)的项目。
HFSS-MATLAB-API是一个工具库,该库是MATLAB通过使用HFSS script接口控制HFSS的执行的。这个工具库提供了一系列的MATLAB函数。这些函数可以通过生成需要的HFSS script来创建3D模型。一旦通过这种方式生成一个script,就可以在HFSS中执行它并产生相应的3D模型,按设置计算相应问题和将结果数据输出。
As shown below👇
matlab函数
HFSS-MATLAB-API工具库提供了一系列的MATLAB函数。
下面以示例中的dipole模型举例,
结合hfss生成的脚本,可以看到每个常用的函数都有对应的m文件独立出来的模块。
需要使用时,可直接调用,根据需求输入参数就可直接使用。
生成的偶极子模型
代码解析
先创建一个vbs的文件
tmpScriptFile = 'dipole_example.vbs';
% Create a new temporary HFSS script file.
fid = fopen(tmpScriptFile, 'wt');
1、创建工程
% Create a new HFSS Project and insert a new design.
hfssNewProject(fid);
2、插入hfss design
hfssInsertDesign(fid, 'without_balun');
3、创建模型、设置材料
% Create the Dipole.
hfssDipole(fid, 'Dipole', 'X', [0, 0, 0], L, 2*aRad, gapL, 'meter');
4、创建边界条件、激励等
% Assign PE boundary to the antenna elements.
hfssAssignPE(fid, 'Antennas', {'Dipole1', 'Dipole2'});
% Create a Lumped Gap Source (a rectangle normal to the Y-axis)
hfssRectangle(fid, 'GapSource', 'Y', [-gapL/2, 0, -aRad], 2*aRad, gapL, ...
'meter');
hfssAssignLumpedPort(fid, 'LumpedPort', 'GapSource', [-gapL/2, 0, 0], ...
[gapL/2, 0, 0], 'meter');
% Add an AirBox.
hfssBox(fid, 'AirBox', [-AirX, -AirY, -AirZ]/2, [AirX, AirY, AirZ], ...
'meter');
hfssAssignRadiation(fid, 'ABC', 'AirBox');
5、设置扫描
% Add a Solution Setup.
hfssInsertSolution(fid, 'Setup150MHz', fC/1e9);
hfssInterpolatingSweep(fid, 'Sweep100to200MHz', 'Setup150MHz', ...
fLow/1e9, fHigh/1e9, nPoints);
5、获取数据
% Export the Network data as an m-file.
hfssExportNetworkData(fid, tmpDataFile, 'Setup150MHz', 'Sweep100to200MHz');
6、数据处理,作图
% Plot the data.
disp('Solution Completed. Plotting Results for this Iteration ...');
figure(1);
hold on;
plot(f/1e6, 20*log10(abs(S)), pltCols(mod(iIters, nCols) + 1));
hold on;
xlabel('Frequency (MHz) ->');
ylabel('S_{11} (dB) ->');
axis([fLow/1e6, fHigh/1e6, -20, 0]);
7、优化
for iIters = 1:maxIters
% Find the Resonance Frequency.
[Smin, iMin] = min(S);
fActual = f(iMin);
disp(sprintf('Simulated Resonance Frequency: %.2f MHz', fActual/1e6));
% Check if the required accuracy is met.
if (abs((fC - fActual)/fC) < Accuracy)
disp('Required Accuracy is met !!');
disp(sprintf('Optimized Antenna Length is %.2f meter.', L));
hasConverged = true;
break;
end;
% Adjust the antenna length in accordance with the discrepancy between
% the estimated and desired resonance frequency.
L = L*fActual/fC;
end;