openEMS/matlab/plotFFdB.m

75 lines
1.8 KiB
Matlab

function h = plotFFdB(nf2ff,varargin)
% h = plotFFdB(nf2ff,varargin)
%
% plot far field pattern in dBi
%
% input:
% nf2ff: output of CalcNF2FF
%
% variable input:
% 'freq_index': - use the given frequency index, see nf2ff.freq
% - default is 1
% 'xaxis': - 'phi' (default) or 'theta'
% 'param': - array positions of parametric plot
% - if xaxis='phi', theta is parameter, and vice versa
% - default is 1
%
% example:
% plotFFdB(nf2ff, 'freq_index', 2, ...
% 'xaxis', 'phi', 'param', [1 46 91])
%
% see examples/NF2FF/infDipol.m
%
% See also CalcNF2FF, plotFF3D
%
% openEMS matlab interface
% -----------------------
% author: Thorsten Liebig, Stefan Mahr
% defaults
freq_index = 1;
xaxis = 'phi';
param = 1;
for n=1:2:numel(varargin)
if (strcmp(varargin{n},'freq_index')==1);
freq_index = varargin{n+1};
elseif (strcmp(varargin{n},'xaxis')==1);
xaxis = varargin{n+1};
elseif (strcmp(varargin{n},'param')==1);
param = varargin{n+1};
end
end
D_log = nf2ff.E_norm{freq_index} / max(nf2ff.E_norm{freq_index}(:));
D_log = 20*log10(D_log) + 10*log10(nf2ff.Dmax);
if (strcmp(xaxis,'theta')==1);
xax = nf2ff.theta;
yax = D_log(:,param);
parval = nf2ff.phi(param);
param = 'phi';
elseif (strcmp(xaxis,'phi')==1);
xax = nf2ff.phi;
yax = D_log(param,:);
parval = nf2ff.theta(param);
param = 'theta';
end
%figure
h = plot( xax / pi * 180 , yax );
xlabel( sprintf('%s (deg)',xaxis ));
ylabel( 'directivity (dBi)');
createlegend = @(d)sprintf('%s = %3.1f',param,d / pi * 180);
legendtext = arrayfun(createlegend,parval,'UniformOutput',0);
legend( legendtext );
title( sprintf('far field pattern @ f = %e Hz',nf2ff.freq(freq_index)) );
grid on;
if (nargout == 0)
clear h;
end
end