Merge remote-tracking branch 'dac/master'
commit
8359b9aeaf
|
@ -0,0 +1,167 @@
|
|||
function h = polarFF(nf2ff,varargin)
|
||||
% h = polarFF(nf2ff,varargin)
|
||||
%
|
||||
% plot polar far field pattern
|
||||
%
|
||||
% input:
|
||||
% nf2ff: output of CalcNF2FF
|
||||
%
|
||||
% variable input:
|
||||
% 'freq_index': - use element from cell array
|
||||
% - 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
|
||||
% 'normalize': - true/false, normalize linear plot
|
||||
% - default is false, log-plot is always normalized!
|
||||
% 'logscale': - if set, plot logarithmic polar
|
||||
% - set the dB value for point of origin if scalar
|
||||
% - set point of origin and maximum if 2-element array
|
||||
% - values below minimum will be clamped
|
||||
% - default is -20
|
||||
% 'xtics': - set the number of tics for polar grid
|
||||
%
|
||||
% example:
|
||||
% polarFF(nf2ff, 'freq_index', 2, ...
|
||||
% 'xaxis', 'phi', 'param', [1 46 91] );
|
||||
%
|
||||
% polarFF(..., 'normalize', true );
|
||||
% polarFF(..., 'logscale', -30 );
|
||||
% polarFF(..., 'logscale', [-30 10]);
|
||||
%
|
||||
% polarFF(..., 'xtics', 10);
|
||||
%
|
||||
% see examples/antenna/infDipol.m
|
||||
%
|
||||
% See also CalcNF2FF, plotFFdB, plotFF3D
|
||||
%
|
||||
% openEMS matlab interface
|
||||
% -----------------------
|
||||
% author: Thorsten Liebig, Stefan Mahr
|
||||
|
||||
% defaults
|
||||
freq_index = 1;
|
||||
xaxis = 'phi';
|
||||
param = 1;
|
||||
logscale = [];
|
||||
xtics = 5;
|
||||
normalize = 0;
|
||||
|
||||
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};
|
||||
elseif (strcmp(varargin{n},'normalize')==1);
|
||||
normalize = varargin{n+1};
|
||||
elseif (strcmp(varargin{n},'logscale')==1);
|
||||
logscale = varargin{n+1};
|
||||
elseif (strcmp(varargin{n},'xtics')==1);
|
||||
xtics = varargin{n+1};
|
||||
end
|
||||
end
|
||||
|
||||
E_far_max = max(nf2ff.E_norm{freq_index}(:));
|
||||
if ~isempty(logscale)
|
||||
gridmin = logscale(1);
|
||||
|
||||
Dmax = 10*log10(nf2ff.Dmax);
|
||||
E_far_scale = Dmax - gridmin;
|
||||
E_far = 20*log10(nf2ff.E_norm{freq_index}) - 20*log10(E_far_max) + E_far_scale;
|
||||
E_far = E_far .* ( E_far > 0 );
|
||||
E_far = E_far ./ E_far_scale;
|
||||
|
||||
titletext = sprintf('electrical far field [dBi] @ f = %e Hz',nf2ff.freq(freq_index));
|
||||
|
||||
if numel(logscale) == 2 % normalize to maximum grid
|
||||
gridmax = logscale(2);
|
||||
E_far = E_far .* E_far_scale/(gridmax-gridmin);
|
||||
else
|
||||
gridmax = Dmax;
|
||||
end
|
||||
elseif (normalize==0)
|
||||
E_far = nf2ff.E_norm{freq_index};
|
||||
|
||||
titletext = sprintf('electrical far field [V/m] @ f = %e Hz',nf2ff.freq(freq_index));
|
||||
|
||||
gridmin = 0;
|
||||
gridmax = E_far_max;
|
||||
else % normalize == 1
|
||||
E_far = nf2ff.E_norm{freq_index} / E_far_max;
|
||||
|
||||
titletext = sprintf('normalized electrical far field @ f = %e Hz',nf2ff.freq(freq_index));
|
||||
|
||||
gridmin = 0;
|
||||
gridmax = 1;
|
||||
end
|
||||
|
||||
|
||||
if (strcmp(xaxis,'theta')==1);
|
||||
xax = nf2ff.theta(:);
|
||||
yax = E_far(:,param);
|
||||
parval = nf2ff.phi(param);
|
||||
param = 'phi';
|
||||
elseif (strcmp(xaxis,'phi')==1);
|
||||
xax = nf2ff.phi(:);
|
||||
yax = E_far(param,:)';
|
||||
parval = nf2ff.theta(param);
|
||||
param = 'theta';
|
||||
end
|
||||
|
||||
if ~isempty(logscale)
|
||||
scalegrid = 1;
|
||||
else
|
||||
scalegrid = gridmax;
|
||||
end
|
||||
|
||||
% workaround for polar plot
|
||||
gridcolor = [0.85 0.85 0.85];
|
||||
% plot xtics circles
|
||||
a=linspace(0,2*pi,60);
|
||||
b=linspace(0,scalegrid,xtics+1);
|
||||
b=repmat(b(2:end),numel(a),1)';
|
||||
a=repmat(a,size(b,1),1);
|
||||
[x,y] = pol2cart(a,b);
|
||||
h = plot(x',y');
|
||||
%h=polar(a,b,'-k');
|
||||
set(h,'Color',gridcolor);
|
||||
set(h(end),'Color',gridcolor*0.8);
|
||||
hold on;
|
||||
% plot degree lines
|
||||
a=bsxfun(@plus,[0:pi/6:pi-pi/6],[0 pi]');
|
||||
b=scalegrid.*ones(size(a));
|
||||
h=polar(a,b,'-k');
|
||||
set(h,'Color',gridcolor);
|
||||
set(h([1 4]),'Color',gridcolor*0.8);
|
||||
text(scalegrid*0.05,scalegrid*0.05,num2str(gridmin))
|
||||
text(scalegrid*1.05,scalegrid*0.05,num2str(gridmax))
|
||||
|
||||
|
||||
% draw far field
|
||||
xax = repmat(xax,1,size(yax,2));
|
||||
[x,y] = pol2cart(xax,yax);
|
||||
h = plot(x,y);
|
||||
%h = polar( xax, yax );
|
||||
|
||||
% legend
|
||||
ylabel( sprintf('%s / deg', xaxis) );
|
||||
title( titletext );
|
||||
createlegend = @(d)sprintf('%s = %3.1f',param,d / pi * 180);
|
||||
legendtext = arrayfun(createlegend,parval,'UniformOutput',0);
|
||||
legend( h, legendtext ,'location','southeast');
|
||||
|
||||
% workaround for polar plot
|
||||
axis equal tight
|
||||
axis ([-scalegrid scalegrid -scalegrid scalegrid]);
|
||||
axis off
|
||||
hold off
|
||||
set(gcf,'Color','white');
|
||||
|
||||
if (nargout == 0)
|
||||
clear h;
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue