How to fix altitude bias of fusionRadarSeneor detections?

7 views (last 30 days)
When I simulate a geoTrajectory trackingScenario with fusionRadarSensor, I recive some bias in the altitude of the detections. Changing the biasFraction to 0.0 didn't help. If it happens because the radar simulates refraction, I would like to know how it can be disabled/corrected. I would like to use those detections for tracking algorithms development and this bias would interefere with performance evaluation of the trackers.
Thanks :)

Accepted Answer

Elad Kivelevitch
Elad Kivelevitch on 10 Nov 2022
Hi Stav,
As they say in Hebrew: It's not a bug, it's a feature :-)
The altitude bias is indeed caused by atmospheric refraction. We included it in the model to provide exactly the kind of "difficult" test case for trackers that you have encountered. There is also a range bias simulated due to the refraction. Reference [1] in this doc page provides more information about the refraction model and how biases are added.
I believe that we do not have a way to disable atmospheric refraction in the radar model. However, one way to mitigate that is to take the detections returned by the fusionRadarSensor object and use refraction tables from a text book to "undo" the refraction and try to estimate where the detection should really be. From what I hear from my radar colleagues, this is the workflow that tracking/radar engineers are expected to follow when dealing with refraction biases from real radar systems.
FYI: The BiasFraction has nothing to do with simulating refraction biases. It is used to put a lower bound on the detection noise to satisfy the Cramer-Row Lower Bound for high SNR targets.
Elad
  3 Comments
Trevor Roose
Trevor Roose on 16 Nov 2022
Hi Stav,
Your approach looks correct, though it will not completely remove the bias because a slightly different model (not the CRPL model) was used to model the bias.
I suspect what you may be more interested is just disabling the bias completely. While there is not a way to do that with the shipping features, here is a workaround which can disable it, though it does rely on internal properties which may at some point change. In other words, it will work for you today, but may stop working in a future release, since it is relying on internal functionality that is not documented.
What you can do is extend the fusionRadarSensor class with a new class, and add a method to that class which you can use to disable the internal atmospheric refraction model. Your class should look something like this. You can treat the new myRadar class just as you would the original fusionRadarSensor. It will have all of the same properties, methods, and functionality, but will have one new method disableRefraction that enables you to turn off the refraction bias model inside of fusionRadarSensor.
classdef myRadar < fusionRadarSensor
methods
function disableRefraction(obj)
obj.pHasAtmosphericRefraction = false;
end
end
end
You can verify that this disables the refraction bias using a simple example like this.
% Create a radar that detects everything without noise or false alarms
rdrOn = myRadar(1,'No scanning', ...
'FieldOfView',[360 180], ...
'RangeLimits',[0 1e6], ...
'DetectionProbability',1, ...
'HasElevation',true, ...
'HasNoise',false, ...
'HasFalseAlarms',false, ...
'DetectionCoordinates','Sensor spherical');
% Create a copy of the radar with the refraction bias disabled
rdrOff = clone(rdrOn);
disableRefraction(rdrOff);
% Create a bunch of targets to show variation of bias with range
grg = 10e3:10e3:500e3;
hgt = 10e3;
tgts = repmat(struct('PlatformID',1,'Position',[0 0 -hgt]),numel(grg),1);
for m = 1:numel(grg)
tgts(m).PlatformID = m;
tgts(m).Position(1) = grg(m);
end
% Generate detections using the two radar models
detsOn = rdrOn(tgts,0);
detsOff = rdrOff(tgts,0);
% Collect the measurements
measOn = cell2mat(cellfun(@(d)d.Measurement,detsOn(:)','UniformOutput',false));
measOff = cell2mat(cellfun(@(d)d.Measurement,detsOff(:)','UniformOutput',false));
% Compute the true slant range and elevation of the targets
pos = reshape([tgts.Position],3,[]);
[~,ph,srg] = cart2sph(pos(1,:),pos(2,:),pos(3,:));
el = rad2deg(ph);
% Plot the range and elevation biases
figure;
tiledlayout(2,1); nexttile;
plot(grg/1e3,measOn(3,:)-srg,'o',grg/1e3,measOff(3,:)-srg,'^');
ylabel('Range error (m)'); grid on; grid minor;
legend('Refraction on','Refraction off');
nexttile;
plot(grg/1e3,measOn(2,:)-el,'o',grg/1e3,measOff(2,:)-el,'^');
ylabel('Elevation error (deg)'); grid on; grid minor;
xlabel('Ground range (km)');
The folowing figure shows the range and elevation measurements from the radar with the refraction bias disabled in red.

Sign in to comment.

More Answers (0)

Categories

Find more on Environment and Clutter in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!