Skip to content
This repository was archived by the owner on Jun 19, 2024. It is now read-only.

Commit

Permalink
Add Side-Lobe-Level Error Analysis
Browse files Browse the repository at this point in the history
  • Loading branch information
hbartle committed Jan 8, 2019
1 parent 35da0d0 commit 0f97c4e
Show file tree
Hide file tree
Showing 4 changed files with 251 additions and 6 deletions.
55 changes: 55 additions & 0 deletions nf2ff_cylindrical.m
Original file line number Diff line number Diff line change
Expand Up @@ -261,3 +261,58 @@
xticklabels({'42x40','42x45','42x50'})
legend('Rectangular','Hamming','Tukey')

%% Side-Lobe Level Error Analysis
close all
fontsize = 14;

% Calculate Side-Lobe Level error
[~,~, sll_err_rect] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'cylindrical'),data_nf2ff_rect,'UniformOutput',false);
[~,~, sll_err_hamming] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'cylindrical'),data_nf2ff_hamming,'UniformOutput',false);
[~,~, sll_err_tukey] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'cylindrical'),data_nf2ff_tukey,'UniformOutput',false);

sll_err_rect = cell2mat(sll_err_rect);
sll_err_hamming = cell2mat(sll_err_hamming);
sll_err_tukey = cell2mat(sll_err_tukey);

xValues = [30,35,40,45,50];

% Increasing Area / Phi = 0 Cut
samples = [8,9,10,11,12];
figure('name','Side-Lobe-Level Error, Varying Area','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
'DefaultAxesFontSize',fontsize);
plot(xValues,sll_err_rect(samples),'-*')
hold on
plot(xValues,sll_err_hamming(samples),'-*')
plot(xValues,sll_err_tukey(samples),'-*')
grid on
xlabel('Number of probes in linear dimension');
xticks(xValues)
ylabel('SLL Error [dB]')
title({'Side-Lobe-Level Error','Varying Measurement Area, \lambda/2 spacing'})
legend('Rectangular','Hamming','Tukey')

% Varying Spacing Phi=0
samples = [10,7,6];
figure('name','Side-Lobe-Level Error, Varying Spacing','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
'DefaultAxesFontSize',fontsize);
plot(sll_err_rect(samples),'-*')
hold on
plot(sll_err_hamming(samples),'-*')
plot(sll_err_tukey(samples),'-*')
grid on
ylabel('SLL Error [Degrees]')
title({'Side-Lobe-Level Error','Varying Measurement Spacing, 30\lambda/2 x 30\lambda/2'})
xtickangle(45)
xticks(1:3)
xticklabels({'42x40','42x45','42x50'})
legend('Rectangular','Hamming','Tukey')








75 changes: 69 additions & 6 deletions nf2ff_planar.m
Original file line number Diff line number Diff line change
Expand Up @@ -179,13 +179,13 @@
fontsize = 14;

% Calculate HPBW error
[rect.hpbw_ff,rect.hpbw_nf2ff, rect.hpbw_err] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_rect,'UniformOutput',false);
[hamming.hpbw_ff,hamming.hpbw_nf2ff, hamming.hpbw_err] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_hamming,'UniformOutput',false);
[tukey.hpbw_ff,tukey.hpbw_nf2ff, tukey.hpbw_err] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_tukey,'UniformOutput',false);
[~,~, hpbw_err_rect] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_rect,'UniformOutput',false);
[~,~, hpbw_err_hamming] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_hamming,'UniformOutput',false);
[~,~, hpbw_err_tukey] = cellfun(@(data_nf2ff) HPBWError(data_ff,data_nf2ff,'planar'),data_nf2ff_tukey,'UniformOutput',false);

hpbw_err_rect = cell2mat(rect.hpbw_err);
hpbw_err_hamming = cell2mat(hamming.hpbw_err);
hpbw_err_tukey = cell2mat(tukey.hpbw_err);
hpbw_err_rect = cell2mat(hpbw_err_rect);
hpbw_err_hamming = cell2mat(hpbw_err_hamming);
hpbw_err_tukey = cell2mat(hpbw_err_tukey);

% Increasing Area / Phi = 0 Cut
samples = [4,5,10,16,21,23,25,26];
Expand Down Expand Up @@ -252,3 +252,66 @@
xticklabels({'30x30','35x35','40x40','45x45'})
legend('Rectangular','Hamming','Tukey')

%% Side-Lobe Level Error Analysis
close all
fontsize = 14;

% Calculate Side-Lobe Level error
[~,~, sll_err_rect] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_rect,'UniformOutput',false);
[~,~, sll_err_hamming] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_hamming,'UniformOutput',false);
[~,~, sll_err_tukey] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_tukey,'UniformOutput',false);

sll_err_rect = cell2mat(sll_err_rect);
sll_err_hamming = cell2mat(sll_err_hamming);
sll_err_tukey = cell2mat(sll_err_tukey);

% Increasing Area / Phi = 0 Cut
samples = [4,5,10,16,21,23,25,26];
figure('name','Side-Lobe-Level Error, Varying Area','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
'DefaultAxesFontSize',fontsize);
plot(sll_err_rect(samples),'-*')
hold on
plot(sll_err_hamming(samples),'-*')
plot(sll_err_tukey(samples),'-*')
grid on
ylabel('SLL Error [dB]')
title({'Side-Lobe-Level Error','Varying Measurement Area, \lambda/2 spacing'})
xtickangle(45)
xticklabels({'20x20','25x25','30x30','35x35','40x40','45x45','50x50','55x55'})
legend('Rectangular','Hamming','Tukey')

% Varying Spacing Phi=0
samples = [10,14,19,22];
figure('name','Side-Lobe-Level Error, Varying Spacing','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
'DefaultAxesFontSize',fontsize);
plot(sll_err_rect(samples),'-*')
hold on
plot(sll_err_hamming(samples),'-*')
plot(sll_err_tukey(samples),'-*')
grid on
ylabel('SLL Error [dB]')
title({'Side-Lobe-Level Error','Varying Measurement Spacing, 30\lambda/2 x 30\lambda/2'})
xtickangle(45)
xticks(1:4)
xticklabels({'30x30','35x35','40x40','45x45'})
legend('Rectangular','Hamming','Tukey')


















52 changes: 52 additions & 0 deletions nf2ff_planar_noisy.m
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@
mean(hpbw_err_tukey(:,32:41),2),...
mean(hpbw_err_tukey(:,42:51),2)];


%Phi = 0 Cut
figure('name','HPBW Error, Varying Area','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
Expand Down Expand Up @@ -272,3 +273,54 @@
ylabel('HPBW Error [Degrees]')
title({'HPBW Error','\lambda/2 spacing, Phi=90 Cut'})
legend('Rectangular','Hamming','Tukey')


%% Side-Lobe Level Error Analysis
close all
fontsize = 14;

sigma = [0,0.5,1,2,3,4];

% Calculate Side-Lobe Level error
[~,~, sll_err_rect] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_rect,'UniformOutput',false);
[~,~, sll_err_hamming] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_hamming,'UniformOutput',false);
[~,~, sll_err_tukey] = cellfun(@(data_nf2ff) SLLError(data_ff,data_nf2ff,'planar'),data_nf2ff_tukey,'UniformOutput',false);

sll_err_rect = cell2mat(sll_err_rect);
sll_err_rect_mean = [sll_err_rect(1),...
mean(sll_err_rect(2:11)),...
mean(sll_err_rect(12:21)),...
mean(sll_err_rect(22:31)),...
mean(sll_err_rect(32:41)),...
mean(sll_err_rect(42:51))];

sll_err_hamming = cell2mat(sll_err_hamming);
sll_err_hamming_mean = [sll_err_hamming(1),...
mean(sll_err_hamming(2:11)),...
mean(sll_err_hamming(12:21)),...
mean(sll_err_hamming(22:31)),...
mean(sll_err_hamming(32:41)),...
mean(sll_err_hamming(42:51))];

sll_err_tukey = cell2mat(sll_err_tukey);
sll_err_tukey_mean = [sll_err_tukey(1),...
mean(sll_err_tukey(2:11)),...
mean(sll_err_tukey(12:21)),...
mean(sll_err_tukey(22:31)),...
mean(sll_err_tukey(32:41)),...
mean(sll_err_tukey(42:51))];


figure('name','Side-Lobe-Level Error, Varying Area','numbertitle','off',...
'units','normalized','outerposition',[0 0 1 1],...
'DefaultAxesFontSize',fontsize);
plot(sigma,sll_err_rect_mean,'-*')
hold on
plot(sigma,sll_err_hamming_mean,'-*')
plot(sigma,sll_err_tukey_mean,'-*')
grid on
xlabel('Standard Deviation of Probe Position [mm]');
ylabel('SLL Error [dB]')
title({'Side-Lobe-Level Error','\lambda/2 spacing'})
legend('Rectangular','Hamming','Tukey')

75 changes: 75 additions & 0 deletions plot_functions/SLLError.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
function [sll_ff,sll_nf2ff,sll_err] = SLLError(data_ff,data_nf2ff,scanner_case)
%SLLERROR Side-Lobe-Level Error analysis


switch scanner_case
case 'planar'
phi_cut = pi/2;
% Far-Field
i = find(data_ff.phi==phi_cut);
m = find(data_ff.phi==phi_cut+pi);
ff_cut_angles = [-fliplr(data_ff.theta(m)') data_ff.theta(i)'];
maxValue1 = (max(data_ff.Eabs(i)));
maxValue2 = (max(data_ff.Eabs(m)));
if maxValue1>maxValue2
maxValue =maxValue1;
else
maxValue=maxValue2;
end
ff_cut = [fliplr(data_ff.Eabs(m)')'; data_ff.Eabs(i)]/maxValue;


% Near Field
i = find(data_nf2ff.phi==phi_cut);
nf2ff_cut_angles = data_nf2ff.theta(i)';
maxValue = max(max(data_nf2ff.Eabs(i)));
nf2ff_cut = data_nf2ff.Eabs(i)/maxValue;

case 'cylindrical'
phi_cut=0;
% Far-Field
i = find(data_ff.phi==phi_cut);
m = find(data_ff.phi==phi_cut+pi);
ff_cut_angles = [-fliplr(data_ff.theta(m)') data_ff.theta(i)'];
maxValue1 = (max(data_ff.Eabs(i)));
maxValue2 = (max(data_ff.Eabs(m)));

if maxValue1>maxValue2
maxValue =maxValue1;
else
maxValue=maxValue2;
end
ff_cut = [fliplr(data_ff.Eabs(m)')'; data_ff.Eabs(i)]/maxValue;

% Near-Field
i = find(abs(data_nf2ff.phi-phi_cut)<0.000001);
m = find(abs(data_nf2ff.phi-(phi_cut+pi))<0.000001);
nf2ff_cut_angles = [-fliplr(data_nf2ff.theta(m)') data_nf2ff.theta(i)'];
maxValue1 = (max(data_nf2ff.Eabs(i)));
maxValue2 = (max(data_nf2ff.Eabs(m)));

if maxValue1>maxValue2
maxValue =maxValue1;
else
maxValue=maxValue2;
end
nf2ff_cut = [fliplr(data_nf2ff.Eabs(m)')'; data_nf2ff.Eabs(i)]/maxValue;

case 'spherical'
end


% Side-Lobe Level Far-Field
[pks_ff,idx_ff] = findpeaks(ff_cut);
[m,i] = max(pks_ff(pks_ff<0.5));
sll_ff = 20*log10(m);

if pks_ff(i) == 1
i = i+1;
end
sll_nf2ff = 20*log10(nf2ff_cut(idx_ff(i)-90));

sll_err = sll_ff - sll_nf2ff;

end

0 comments on commit 0f97c4e

Please sign in to comment.