This commit is contained in:
shuibing811
2025-01-25 17:14:00 +08:00
parent f3cfdb677b
commit ae52c38492
2 changed files with 116 additions and 110 deletions

188
main.m
View File

@@ -1,8 +1,8 @@
clear;
clc;
close all;
clear;
clc;
close all;
%% <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
Time = 2; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
Time = 2; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
c = 3e8;
Gr = 1;
% λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
@@ -16,19 +16,19 @@ Gr = 1;
% 34.45,108.5,0;
% ];%Ŀ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
station = [31.2304, 121.4737,0;
31.5200, 121.6400,0
];
31.5200, 121.6400,0
];
Target = [31.2550, 121.4890,0; % Ŀ<EFBFBD><EFBFBD>1 ½
31.2800, 121.5200,0; % Ŀ<EFBFBD><EFBFBD>2 ½
31.1900, 121.4800,0; % Ŀ<EFBFBD><EFBFBD>3 ½
31.2700, 121.5500,0; % Ŀ<EFBFBD><EFBFBD>4 ½
31.2000, 121.6000,0; % Ŀ<EFBFBD><EFBFBD>5 ½
30.9500, 121.6500,0; % Ŀ<EFBFBD><EFBFBD>6 <EFBFBD><EFBFBD>
30.8500, 121.7200,0; % Ŀ<EFBFBD><EFBFBD>7 <EFBFBD><EFBFBD>
30.7800, 121.8000,0; % Ŀ<EFBFBD><EFBFBD>8 <EFBFBD><EFBFBD>
30.9200, 121.8500,0; % Ŀ<EFBFBD><EFBFBD>9 <EFBFBD><EFBFBD>
30.6700, 121.9000,0; % Ŀ<EFBFBD><EFBFBD>10 <EFBFBD><EFBFBD>
];
31.2800, 121.5200,0; % Ŀ<EFBFBD><EFBFBD>2 ½
31.1900, 121.4800,0; % Ŀ<EFBFBD><EFBFBD>3 ½
31.2700, 121.5500,0; % Ŀ<EFBFBD><EFBFBD>4 ½
31.2000, 121.6000,0; % Ŀ<EFBFBD><EFBFBD>5 ½
30.9500, 121.6500,0; % Ŀ<EFBFBD><EFBFBD>6 <EFBFBD><EFBFBD>
30.8500, 121.7200,0; % Ŀ<EFBFBD><EFBFBD>7 <EFBFBD><EFBFBD>
30.7800, 121.8000,0; % Ŀ<EFBFBD><EFBFBD>8 <EFBFBD><EFBFBD>
30.9200, 121.8500,0; % Ŀ<EFBFBD><EFBFBD>9 <EFBFBD><EFBFBD>
30.6700, 121.9000,0; % Ŀ<EFBFBD><EFBFBD>10 <EFBFBD><EFBFBD>
];
num = size(station,1); % <EFBFBD>۲<EFBFBD>վ<EFBFBD><EFBFBD>Ŀ
%<EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>
fs = 2e6; % <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>Ϊ2MHz
@@ -41,86 +41,86 @@ B = 2e5; %
% PRI = {[min,max],'mode'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SLI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
% RF = {<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ,<EFBFBD><EFBFBD><EFBFBD>Χ,'mode'};%<EFBFBD>ݱ<EFBFBD>ģʽ
%-------------------------Station 1-------------------------%
%-------------------------Station 1-------------------------%
Station(1).Pos = lla2ecef([31.2304, 121.4737,0])'; % <EFBFBD>۲<EFBFBD>վ1λ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>pdw
%-------------------------Station 2-------------------------%
%-------------------------Station 2-------------------------%
Station(2).Pos = lla2ecef([ 31.5200, 121.6400,0])'; % <EFBFBD>۲<EFBFBD>վ1λ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>λ
%-------------------------Radar 1-------------------------%
%-------------------------Radar 1-------------------------%
Radar(1).Pos = lla2ecef([31.2550, 121.4890,0])'; % <EFBFBD>״<EFBFBD>1λ<EFBFBD><EFBFBD>
Radar(1).PRI = {[1000e-6 ,1500e-6 ,3000e-6],'STA'};%<EFBFBD>β<EFBFBD>
Radar(1).Pt = 5.5e3;
Radar(1).RF = {1.1 * 10^9 , 0.5*10^9,'Agility'}; % <EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>RFrange
Radar(1).Gt = 10^2.5;
Radar(1).Gt = 10^2.5;
Radar(1).PW = 5e-6;
%-------------------------Radar 2------------------------%
Radar(2).Pos = lla2ecef([ 31.2800, 121.5200,0])';
Radar(2).Pos = lla2ecef([ 31.2800, 121.5200,0])';
% Radar(2).PRI = {[1.6e-3 , 1.8e-3],'SLI'};
Radar(2).PRI = {1732e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(2).PRI = {1732e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(2).Pt = 5e3;
Radar(2).RF = {1.1 * 10^9,0,'STB'};
Radar(2).Gt = 10^3;
Radar(2).Gt = 10^3;
Radar(2).PW = 3e-6;
%-------------------------Radar 3-------------------------%
Radar(3).Pos = lla2ecef([31.1900, 121.4800,0])';
Radar(3).PRI = {[1800e-6,3800e-6],'SLI'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%-------------------------Radar 3-------------------------%
Radar(3).Pos = lla2ecef([31.1900, 121.4800,0])';
Radar(3).PRI = {[1800e-6,3800e-6],'SLI'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Radar(3).Pt = 5e3;
Radar(3).RF = {1.8* 10^9,0.6*10^9,'Agility'};
Radar(3).Gt = 10^3;
Radar(3).Gt = 10^3;
Radar(3).PW = 2e-6;
%-------------------------Radar 4-------------------------%
Radar(4).Pos = lla2ecef([31.2700, 121.5500,0])';
%-------------------------Radar 4-------------------------%
Radar(4).Pos = lla2ecef([31.2700, 121.5500,0])';
% Radar(4).PRI = {1.7e-3,'STA'};
Radar(4).PRI = {2108e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(4).PRI = {2108e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(4).Pt = 5e3;
Radar(4).RF = {1.8* 10^9,0.6*10^9,'Agility'};
Radar(4).Gt = 10^3;
Radar(4).Gt = 10^3;
Radar(4).PW = 4e-6;
%-------------------------Radar 5-------------------------%
Radar(5).Pos = lla2ecef([ 31.2000, 121.6000,0])';
%-------------------------Radar 5-------------------------%
Radar(5).Pos = lla2ecef([ 31.2000, 121.6000,0])';
% Radar(5).PRI = {1.7e-3,'STA'};
Radar(5).PRI = {[5500e-6,4500e-6,3500e-6],'AGI'};%<EFBFBD>̶<EFBFBD>
Radar(5).PRI = {[5500e-6,4500e-6,3500e-6],'AGI'};%<EFBFBD>̶<EFBFBD>
Radar(5).Pt = 5e3;
Radar(5).RF = {4* 10^9,0.6*10^9,'Agility'};
Radar(5).Gt = 10^3;
Radar(5).Gt = 10^3;
Radar(5).PW = 3e-6;
%-------------------------Radar 6-------------------------%
Radar(6).Pos = lla2ecef([30.9500, 121.6500,0])';
Radar(6).PRI = {1100e-6,'STB'};%<EFBFBD>̶<EFBFBD>
%-------------------------Radar 6-------------------------%
Radar(6).Pos = lla2ecef([30.9500, 121.6500,0])';
Radar(6).PRI = {1100e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(6).Pt = 5e3;
Radar(6).RF = {1.8* 10^9,0.6*10^9,'Agility'};
Radar(6).Gt = 10^3;
Radar(6).Gt = 10^3;
Radar(6).PW = 3e-6;
%-------------------------Radar 7-------------------------%
Radar(7).Pos = lla2ecef([ 30.8500, 121.7200,0])';
Radar(7).PRI = {2489e-6,'JTR'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%-------------------------Radar 7-------------------------%
Radar(7).Pos = lla2ecef([ 30.8500, 121.7200,0])';
Radar(7).PRI = {2489e-6,'JTR'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Radar(7).Pt = 5e3;
Radar(7).RF = {1.8* 10^9,0.6*10^9,'Agility'};
Radar(7).Gt = 10^3;
Radar(7).Gt = 10^3;
Radar(7).PW = 6e-6;
%-------------------------Radar 8-------------------------%
Radar(8).Pos = lla2ecef([30.7800, 121.8000,0])';
Radar(8).PRI = {2763e-6,'STB'};%<EFBFBD>̶<EFBFBD>
%-------------------------Radar 8-------------------------%
Radar(8).Pos = lla2ecef([30.7800, 121.8000,0])';
Radar(8).PRI = {2763e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(8).Pt = 5e3;
Radar(8).RF = {3* 10^9,0.6*10^9,'Agility'};
Radar(8).Gt = 10^3;
Radar(8).Gt = 10^3;
Radar(8).PW = 9e-6;
%-------------------------Radar 9-------------------------%
Radar(9).Pos = lla2ecef([30.9200, 121.8500,0])';
Radar(9).PRI = {1377e-6,'STB'};%<EFBFBD>̶<EFBFBD>
%-------------------------Radar 9-------------------------%
Radar(9).Pos = lla2ecef([30.9200, 121.8500,0])';
Radar(9).PRI = {1377e-6,'STB'};%<EFBFBD>̶<EFBFBD>
Radar(9).Pt = 5e3;
Radar(9).RF = {1.8* 10^9,0.6*10^9,'Agility'};
Radar(9).Gt = 10^3;
Radar(9).Gt = 10^3;
Radar(9).PW = 3e-6;
%-------------------------Radar 10-------------------------%
Radar(10).Pos = lla2ecef([ 30.6700, 121.9000,0])';
Radar(10).PRI = {2918e-6,'JTR'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%-------------------------Radar 10-------------------------%
Radar(10).Pos = lla2ecef([ 30.6700, 121.9000,0])';
Radar(10).PRI = {2918e-6,'JTR'};%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Radar(10).Pt = 5e3;
Radar(10).RF = {5.1* 10^9,0.6*10^9,'Agility'};
Radar(10).Gt = 10^3;
Radar(10).Gt = 10^3;
Radar(10).PW = 1e-6;
%% PDW<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
StationNumber = size(station,1); % <EFBFBD>۲<EFBFBD>վ<EFBFBD><EFBFBD>Ŀ
StationNumber = size(station,1); % <EFBFBD>۲<EFBFBD>վ<EFBFBD><EFBFBD>Ŀ
RadarNumber = length(Radar);
RF = [];
TOA = [];
@@ -138,56 +138,56 @@ for i = 1:RadarNumber
propagationtime(i) = propagation_time(Radar(i).Pos , Station(1).Pos);
[TOA_ori, RadarPDW(i).PRI] = PRI_Generate3(Radar(i).PRI{2},Time,Radar(i).PRI{1});
RadarPDW(i).TOA = (TOA_ori + propagationtime(i))';%<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱ<EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RadarPDW(i).PulseNum = length(RadarPDW(i).TOA);
%PRI
RadarPDW(i).PRI = RadarPDW(i).PRI';
RadarPDW(i).PRI = RadarPDW(i).PRI + RadarPDW(i).PRI .* randn(RadarPDW(i).PulseNum,1) * 0.01;
RadarPDW(i).PRI = RadarPDW(i).PRI + RadarPDW(i).PRI .* randn(RadarPDW(i).PulseNum,1) * 0.01;
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RadarPDW(i).PulseNum = length(RadarPDW(i).TOA);
[station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(1,:),Target(i,:));
RadarPDW(i).DOA = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0]); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
RadarPDW(i).DOA = RadarPDW(i).DOA + randn(RadarPDW(i).PulseNum,1) / 1000;
[station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(2,:),Target(i,:)); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
RadarPDW(i).DOA(:,2) = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0]); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
RadarPDW(i).DOA(:,2)= RadarPDW(i).DOA(:,2) + randn(RadarPDW(i).PulseNum,1) / 1000;
% for j = 1 : StationNumber
% [station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(j,:),Target(i,:)); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
% RadarPDW(i).DOA(:,j) = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0])+rand(); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
% RadarPDW(i).DOA(:,j)= norm(RadarPDW(i).DOA(:,j)) + randn(RadarPDW(i).PulseNum,1) / 10;
% end
[station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(1,:),Target(i,:));
RadarPDW(i).DOA = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0]); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
RadarPDW(i).DOA = RadarPDW(i).DOA + randn(RadarPDW(i).PulseNum,1) / 1000;
[station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(2,:),Target(i,:)); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
RadarPDW(i).DOA(:,2) = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0]); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
RadarPDW(i).DOA(:,2)= RadarPDW(i).DOA(:,2) + randn(RadarPDW(i).PulseNum,1) / 1000;
% for j = 1 : StationNumber
% [station1_enu(1,1) ,station1_enu(1,2) , station1_enu(1,3)]= lla2enu(station(j,:),Target(i,:)); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
% RadarPDW(i).DOA(:,j) = CalculatDoaNorth( [station1_enu(1,1),station1_enu(1,2),station1_enu(1,3)] , [0,0,0])+rand(); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ƕ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>(<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>DOA<EFBFBD><EFBFBD>
% RadarPDW(i).DOA(:,j)= norm(RadarPDW(i).DOA(:,j)) + randn(RadarPDW(i).PulseNum,1) / 10;
% end
%<EFBFBD><EFBFBD>ƵRF
RadarPDW(i).RF = (RF_Generate(Radar(i).RF{3},Radar(i).RF{1},RadarPDW(i).PulseNum,Radar(i).RF{2}))';
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Pr
% <EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>˥<EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Pr
% <EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>˥<EFBFBD><EFBFBD>
RadarPDW(i).Pt = Radar(i).Pt + Radar(i).Pt * randn(RadarPDW(i).PulseNum,1) * 0.001;
R(i) = norm(Radar(i).Pos - Station(1).Pos); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lambda = c ./ RadarPDW(i).RF;
RadarPDW(i).Pr = Radar(i).Pt.*lambda.^2*Radar(i).Gt*Gr/(4*pi*R(i))^2;
%PA
RadarPDW(i).Pr = Radar(i).Pt.*lambda.^2*Radar(i).Gt*Gr/(4*pi*R(i))^2;
%PA
RadarPDW(i).PA = sqrt(RadarPDW(i).Pr);
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PW
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PW
RadarPDW(i).PW = Radar(i).PW + Radar(i).PW * randn(RadarPDW(i).PulseNum,1) * 0.01;
% <EFBFBD><EFBFBD>ǩ
RadarPDW(i).Label = ones(RadarPDW(i).PulseNum,1) * i;
%<EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> 'LFM''NLFM''DPSK''simple'
mode = {'LFM','NLFM','DPSK','simple'};
mode_index = randi([1, length(mode)]);
Wave_mode = mode(mode_index);
% RadarPDW(i).Waveform = Waveform_Generate(fs,T ,f0,B, 'Wave_mode');
% %% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% RF = [RF;RadarPDW(i).RF];
% TOA = [TOA;RadarPDW(i).TOA];
% PRI = [PRI;RadarPDW(i).PRI];
% DOA = [DOA;RadarPDW(i).DOA]
% PA = [PA;RadarPDW(i).PA];
% Pr = [Pr; RadarPDW(i).Pr];
% PW = [PW; RadarPDW(i).PW];
% Label = [Label;RadarPDW(i).Label];
% <EFBFBD><EFBFBD>ǩ
RadarPDW(i).Label = ones(RadarPDW(i).PulseNum,1) * i;
%<EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> 'LFM''NLFM''DPSK''simple'
mode = {'LFM','NLFM','DPSK','simple'};
mode_index = randi([1, length(mode)]);
Wave_mode = mode(mode_index);
% RadarPDW(i).Waveform = Waveform_Generate(fs,T ,f0,B, 'Wave_mode');
% %% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% RF = [RF;RadarPDW(i).RF];
% TOA = [TOA;RadarPDW(i).TOA];
% PRI = [PRI;RadarPDW(i).PRI];
% DOA = [DOA;RadarPDW(i).DOA]
% PA = [PA;RadarPDW(i).PA];
% Pr = [Pr; RadarPDW(i).Pr];
% PW = [PW; RadarPDW(i).PW];
% Label = [Label;RadarPDW(i).Label];
end

38
main.py
View File

@@ -337,11 +337,11 @@ def _(locate, radar_pdws):
return (radar_pdws_located,)
@app.cell
def _(lla2enu, np, stations):
app._unparsable_cell(
r"""
def locate(radar_pdws):
# values = sci.io.loadmat("radar_pdws.mat")
# radar_pdws = values["radar_pdws"]
# values = sci.io.loadmat(\"radar_pdws.mat\")
# radar_pdws = values[\"radar_pdws\"]
# print(len(radar_pdws))
stations_enu = np.empty((len(stations),3))
for i in range(len(stations)):
@@ -352,15 +352,15 @@ def _(lla2enu, np, stations):
location_estimated = np.empty((len(doa),3))
for j in range(len(doa)):
ned = least_square(doa[j],stations_enu[:,0],stations_enu[:,1])
# lat,lon,_ = ned2lla(ned[0],ned[1],0,*stations[0].lla)
# erro[j] = distance(targets[0].lla[0],targets[0].lla[1],lat,lon)
# location_estimated[j,:] = np.array([lat,lon,0])
lat,lon,_ = ned2lla(ned[0],ned[1],0,*stations[0].lla)
erro[j] = distance(targets[0].lla[0],targets[0].lla[1],lat,lon)
location_estimated[j,:] = np.array([lat,lon,0])
# radar_pdws[i].location = np.empty((len(radar_pdws[i].pri),3))
# radar_pdws[i].erro = np.empty(len(radar_pdws[i].pri))
# for j in range(len(radar_pdws[i].pri)):
# radar_pdws[i].location[j,:] = location_estimated[j,:]
# radar_pdws[i].erro[j] = erro[j]
radar_pdws[i].location = np.empty((len(radar_pdws[i].pri),3))
radar_pdws[i].erro = np.empty(len(radar_pdws[i].pri))
for j in range(len(radar_pdws[i].pri)):
radar_pdws[i].location[j,:] = location_estimated[j,:]
radar_pdws[i].erro[j] = erro[j]
return radar_pdws
def least_square(doa,e,n):
@@ -372,11 +372,13 @@ def _(lla2enu, np, stations):
hmtx = np.hstack((-np.tan(doa_rad).T,np.ones((l,1))))
ned = np.linalg.inv(hmtx.T @ hmtx) @ hmtx.T @ fmtx.T #确定是ned
return ned.flat
return least_square, locate
""",
name="_"
)
@app.cell
def _(np):
def _(dist, np):
import pyproj
import scipy.spatial.transform
from scipy.spatial.transform import Rotation as R
@@ -403,7 +405,7 @@ def _(np):
# 进行坐标转换
x, y, z = transformer.transform(lat, lon, alt, radians=False)
return x, y, z
#TODO提升效率
def lla2enu(lat, lon, alt, lat_org, lon_org, alt_org):
"""
将 LLA 坐标转换为 ENU 坐标
@@ -441,7 +443,7 @@ def _(np):
enu = rot_matrix.dot(ecef_delta)
return enu
#TODO提升效率
def enu2lla(x, y, z, lat_org, lon_org, alt_org):
"""
将 ENU 坐标转换为 LLA 坐标
@@ -489,8 +491,12 @@ def _(np):
lla = enu2lla(e, n, -d,lat0,lon0,alt0)
return lla[0],lla[1],lla[2]
#TODO要和matlab中的distance实现一致
def distance(lat1, lon1, lat2, lon2):
return geodesic((lat1, lon1), (lat2, lon2)).miles #.kilometers
# geod = pyproj.Geod(ellps="WGS84") # 使用 WGS84 椭球体
# _, _, dist = geod.inv(lon1, lat1, lon2, lat2) # 计算距离
return dist
# def haversine_distance(lat1, lon1, lat2, lon2):
# """