summaryrefslogtreecommitdiff
path: root/openEMS/matlab/plotFFdB.m
blob: 07e96e3f77dd13cdc3e643279be3851e3cafb937 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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, polarFF
% 
% 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};
    else
        warning('openEMS:plotFFdB',['unknown argument key: ''' varargin{n} '''']);
    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(freq_index));

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';
else
    error('openEMS:plotFFdB','unknown parameter to ''xaxis''');
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