经常要用matlab读取CST的二维方向图,比如这样:
导出这个方向图,获得这样的一个数据文档:
有个麻烦的地方,就是它的坐标是theta从0到180°,然后phi换到90°,继续theta从0到180°。这不符合一般的theta从-180到180的习惯数据。不如写给小函数来处理。最好同时能获得增益和副瓣。
代码如下:
function [dataout, varargout] = cst_far_2D(filename, column)
%UNTITLED2 读取CST远区场二维结果
% 获得远区场的结果,并且对其进行位移,整理数据的范围为theta = -180:180
% 默认看总能量曲线(第三列)
% 如果需要,获得最大增益和第一副瓣电平。
% 参数:
% 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
end
end
用起来也简单,最简单的用法就是把文件名一填就可以
data = cst_far_2D('0deg.txt');
这样绘制data这个向量,就得到正确的图像
如果是希望指定读取某一行,比如我想看左旋极化分量,看一眼文档,是第4列,那就加一个参数
data = cst_far_2D('0deg.txt',4);
这样就拿到主极化分量
如果希望获得增益和副瓣,那么在输出那里多写俩参数存结果即可。
['0deg.txt',4); ] = cst_far_2D(
这样就都有了。
还挺舒适的。