自动读取CST二维方向图

文摘   2024-06-10 20:02   丹麦  

经常要用matlab读取CST的二维方向图,比如这样:

导出这个方向图,获得这样的一个数据文档:

有个麻烦的地方,就是它的坐标是theta从0到180°,然后phi换到90°,继续theta从0到180°。这不符合一般的theta从-180到180的习惯数据。不如写给小函数来处理。最好同时能获得增益和副瓣。

代码如下:

function [dataout, varargout] = cst_far_2D(filename, column)    %UNTITLED2 读取CST远区场二维结果    %   获得远区场的结果,并且对其进行位移,整理数据的范围为theta = -180180    %   默认看总能量曲线(第三列)    %   如果需要,获得最大增益和第一副瓣电平。    %   参数:    %       filename - 文件名    %       column - (可选)要分析的数据列,默认为3
% 设置column参数的默认值 if nargin < 2 column = 3; end
% 打开文件 fileID = fopen(filename, 'r'); fgetl(fileID); % 跳过标题行 formatSpec = '%f %f %f %f %f %f %f %f %f'; data = textscan(fileID, formatSpec, 'Delimiter', ' ', 'MultipleDelimsAsOne', true, 'HeaderLines', 1); fclose(fileID);
% 取某一列的值并进行循环位移调整值的范围 dataout = data{column}; dataout = circshift(dataout, floor(length(dataout)/2));
% 判断是否需要计算增益和副瓣 if nargout > 1 Gain = max(dataout); % 获得增益 pks = sort(findpeaks(dataout), 'descend'); % 获得峰值并降序排序 if length(pks) >= 2 SL = pks(2) - pks(1); % 获得副瓣 else SL = NaN; % 副瓣不存在 end varargout{1} = Gain; if nargout > 2 varargout{2} = SL; end endend

用起来也简单,最简单的用法就是把文件名一填就可以

data = cst_far_2D('0deg.txt');

这样绘制data这个向量,就得到正确的图像

如果是希望指定读取某一行,比如我想看左旋极化分量,看一眼文档,是第4列,那就加一个参数

data = cst_far_2D('0deg.txt',4);

这样就拿到主极化分量

如果希望获得增益和副瓣,那么在输出那里多写俩参数存结果即可。

[data,gain,sl] = cst_far_2D('0deg.txt',4);

这样就都有了。

还挺舒适的。

电磁小技
微波电磁技术中,富有乐趣的小技巧。