Why are detections for Swerling 1 fusionRadarSensor not generated according the provided detection probability?

10 Ansichten (letzte 30 Tage)
I am using the fusionRadarSensor to generate detections. The sensor is setup to detect a 0 dBm^2 RCS at a 100000 m range with 0.9 detection probability (i.e the default of the fusionRadarSensor). If I generate detections for such a target with such an RCS with Monte Carlo simulation, I get the correct detection probability for Swerling 0 (the default). But when I change to Swerling 1, the detection probability is incorrect, see example code below :
rdr = fusionRadarSensor(1,'ScanMode','No scanning','HasElevation',true,'RangeLimits',[0 1E6]);
% Default are the fields below :
% DetectionProbability: 0.9000
% ReferenceRange: 100000
% ReferenceRCS: 0
% So target with 0 dBm^2 at 100000 m is detected with probability 0.9
% Create target with 0 dBm^2 at 100000 m
rcs_dbm2 = 0; % Target RCS [dBm^2]
rdr.Profiles.Signatures{1} = rcsSignature("Pattern",rcs_dbm2*ones(2,2),'FluctuationModel','Swerling0');
tgtRg = 1e5; % target range, [m]
% Create struct with target position
[X,Y,Z] = sph2cart(deg2rad(0),deg2rad(0),tgtRg);
tgt = struct(PlatformID=1,Position=[X Y Z]);
% Create detections with Monte-Carlo
simTime = 0; % [s]
Nmc = 1000; % Number of runs
pd = 0;
for i = 1:Nmc
dets = rdr(tgt,simTime);
if ~isempty(dets)
pd = pd+1;
end
end
% Estimate the pd, should be close to 0.9
pd = pd/Nmc
pd =
0.9180
So roughly correct answer
But if I change the Swerling case to 1 (rdr.Profiles.Signatures{1} = rcsSignature("Pattern",rcs_dbm2*ones(2,2),'FluctuationModel','Swerling1'); and do the same it does not give me the expected pd = 0.9 :
pd =
0.5250
What is wrong in my code?
Regards Jan

Akzeptierte Antwort

Spencer
Spencer am 2 Jul. 2024
Bearbeitet: Spencer am 2 Jul. 2024
This is a great question. The good news is that you are not making any mistakes that I can see. You are just encountering fluctuation loss. Simply put, a fluctuating target's probability of detection (Pd) can be less than a non-fluctuating target in some cases. Fluctuation loss is described here and is addressed in the detectability function.
Using the Radar Toolbox, you can visualize this easily. In the screenshot immediately below. I created an automotive radar and changed the antenna gain and custom loss (highlighted) such that the Pd at 100 km is around .9 (inside the red rectangle in the bottom right). The Pd curve is also graphed for ranges 0 to 200 km.
If you change the target to a Swerling 1 target, then a fluctuation loss will appear on the right and the Pd curve in the middle will adjust accordingly. Notice that the Pd in the bottom right at 100 km is .53, right around what you had computed. Taking this further, I set the threshold Pd in the bottom table to .53 (which is roughly the resulting Pd). We can now see in the link budget panel on the right that we need an additional 1.87 dB at the receiver to achieve a Pd of .53 due to fluctuation loss.
I attached the .mat file to this answer. You can experiment yourself with different ranges and targets if you have the Radar Toolbox.
radarDesigner('radar_example.mat')
TL;DR You didn't make a mistake. Fluctuating targets can be harder to detect, and the MATLAB target models/sensors account for that.
  2 Kommentare
Jan Karelse
Jan Karelse am 3 Jul. 2024
Hi Spencer, thanks for the answer! But I have to elaborate a bit more on what my purpose is. I want to design the radar sensor such that it detects the Swerling 1 target with pd = 0.9 at the mentioned range. So the Pd is a requirement and not some uncontrolled result. It this possible?
Regards
Jan
Spencer
Spencer am 3 Jul. 2024
Bearbeitet: Spencer am 8 Jul. 2024
Another good question. Per the Prerelease notes, the workflow you are looking for can actually be automated with one click. I encourage you to check that feature out in the Prerelease here. Without that, you'll have to do an extra step or two to get what you want which I will demonstrate below.
First, open the file from my original reply in the Radar Designer app by writing radarDesigner('radar_example.mat') and select radar parameters that give you a Pd of .9 for a Swerling 1 target. If you start with the .mat file that I put in my original reply, all you have to do is increase the antenna gain to 114 dBi. Increasing the antenna gain is just one way to do this. There are many options that you have at your disposal in this app to change the gain of the system. For the purpose of the fusionRadarSensor, it won't matter where the gain comes from as long as you input the reference range, RCS, and Pd correctly when you instantiate the radar in your code.
The screenshot below is for a Swerling 1 target.
The fusionRadarSensor requires that your reference target be non-fluctuating here so it doesn't have to deal with fluctuation loss when the radar model is created. So, all you have to do is (without changing the radar) change the target back to a Swerling 0 target and then get a (range, Pd) pair that gives you a Pd of less than 1. I chose 170 km but could have chosen something else.
This gives you the following for a Swerling 0 target:
  • 'ReferenceRange' = 170e3
  • 'DetectionProbability',.77221
Then when you run the code below for a Swerling 1 target, you get right around a Pd of .9 like you were looking for in the first place.
rng('default')
swerlingModel = 'Swerling1';
tgtRg = 100e3; % target range, [m]
rdr = fusionRadarSensor(1,'ScanMode','No scanning','HasElevation',true,'RangeLimits',[0 1E6],'ReferenceRange',170e3,'ReferenceRCS',0,'DetectionProbability',.77221);
% Default are the fields below :
% ReferenceRCS: 0
rcs_dbm2 = 0; % Target RCS [dBm^2]
rdr.Profiles.Signatures{1} = rcsSignature("Pattern",rcs_dbm2*ones(2,2),'FluctuationModel',swerlingModel);
% Create struct with target position
[X,Y,Z] = sph2cart(deg2rad(0),deg2rad(0),tgtRg);
tgt = struct(PlatformID=1,Position=[X Y Z]);
% Create detections with Monte-Carlo
simTime = 0; % [s]
Nmc = 1000; % Number of runs
pd = 0;
for i = 1:Nmc
dets = rdr(tgt,simTime);
if ~isempty(dets)
pd = pd+1;
end
end
% Estimate the pd, should be close to 0.9
pd = pd/Nmc
pd = 0.9110

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan Karelse
Jan Karelse am 4 Jul. 2024
Thank you Spencer, this is exactly what I was looking for.
P.S. I came to the same procedure/solution, but I wanted to be sure if there was a more direct way to do this.
Regards Jan

Kategorien

Mehr zu Waveform-Level Simulations finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by