Целевое отслеживание Используя радар моноимпульса различия суммы

В этом примере показано, как использовать phased.SumDifferenceMonopulseTracker Система object�, чтобы отследить движущуюся цель. phased.SumDifferenceMonopulseTracker средство отслеживания решает для направления цели от сигналов, прибывающих в универсальную линейную матрицу (ULA). Алгоритм моноимпульса различия суммы требует предшествующей оценки целевого направления, которое принято, чтобы быть близко к фактическому направлению. В средстве отслеживания текущая оценка служит предшествующей информацией для следующей оценки. Цель является узкополосным эмиттером на 500 МГц, перемещающимся в постоянную скорость 800 км/ч. Для массива ULA держащийся вектор зависит только от поперечного угла. Поперечный угол является углом между исходным направлением и плоскостью, нормальной к линейной матрице. Любой прибывающий сигнал задан его поперечным углом.

Создайте целевую платформу и задайте ее движение

Примите, что цель расположена в [0,10000,20000] относительно радара в системе локальной координаты радара. Примите, что цель проходит ось Y к радару на уровне 800 км/ч.

x0 = [0,10000,20000].';
v0 = -800;
v0 = v0*1000/3600;
targetplatform = phased.Platform(x0,[0,v0,0].');

Настройте массив ULA

Моноимпульсное средство отслеживания использует массив ULA, который состоит из 8 изотропных антенных элементов. Интервал элемента установлен в половину длины волны сигнала.

fc = 500e6;
c = physconst('LightSpeed');
lam = c/fc;
antenna = phased.IsotropicAntennaElement('FrequencyRange',[100e6,800e6],...
    'BackBaffled',true);
array = phased.ULA('Element',antenna,'NumElements',8,...
    'ElementSpacing',lam/2);

Примите узкополосный сигнал. Этот вид сигнала может быть симулирован с помощью phased.SteeringVector Системный объект.

steervec = phased.SteeringVector('SensorArray',array);

Отслеживание цикла

Инициализируйте цикл отслеживания. Создайте phased.SumDifferenceMonopulseTracker Системный объект.

tracker = phased.SumDifferenceMonopulseTracker('SensorArray',array,...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc);

На каждом временном шаге вычислите поперечный угол цели относительно массива. Установите время шага на 0,5 секунды.

T  = 0.5;
nsteps = 40;
t = [1:nsteps]*T;

Векторы данных Setup для того, чтобы сохранить и отобразить результаты

rng = zeros(1,nsteps);
broadang_actual = zeros(1,nsteps);
broadang_est = zeros(1,nsteps);
angerr = zeros(1,nsteps);

Продвиньтесь через цикл отслеживания. Сначала обеспечьте оценку начального поперечного угла. В этой симуляции известен фактический поперечный угол, но добавьте ошибку пяти градусов.

[tgtrng,tgtang_actual] = rangeangle(x0,[0,0,0].');
broadang0 = az2broadside(tgtang_actual(1),tgtang_actual(2));
broadang_prev = broadang0 + 5.0; % add some sort of error
  1. Вычислите фактический поперечный угол, broadang_actual.

  2. Вычислите сигнал, signl, от фактического поперечного угла, с помощью phased.SteeringVector Системный объект.

  3. Используя phased.SumDifferenceMonopulseTracker средство отслеживания, оцените поперечный угол, broadang_est, от сигнала. Поперечный угол, выведенный из предыдущего шага, служит первоначальной оценкой для текущего шага.

  4. Вычислите различие между предполагаемым поперечным углом, broadang_est, и фактический поперечный угол, broadang_actual. Это - мера того, насколько хороший решение.

for n = 1:nsteps
    x = targetplatform(T);
    [rng(n),tgtang_actual] = rangeangle(x,[0,0,0].');
    broadang_actual(n) = az2broadside(tgtang_actual(1),tgtang_actual(2));
    signl = steervec(fc,broadang_actual(n)).';
    broadang_est(n) = tracker(signl,broadang_prev);
    broadang_prev = broadang_est(n);
    angerr(n) = broadang_est(n) - broadang_actual(n);
end

Результаты

Постройте область значений в зависимости от времени, показав точку самого близкого подхода.

plot(t,rng/1000,'-o')
xlabel('time (sec)')
ylabel('Range (km)')

Figure contains an axes. The axes contains an object of type line.

Постройте предполагаемый поперечный угол в зависимости от времени.

plot(t,broadang_actual,'-o')
xlabel('time (sec)')
ylabel('Broadside angle (deg)')

Figure contains an axes. The axes contains an object of type line.

Моноимпульсное средство отслеживания не может решить для направляющего угла, если угловое разделение между выборками является слишком большим. Максимальное допустимое угловое разделение является приблизительно половиной ширины луча от пустого указателя к пустому указателю массива. Для с 8 элементами, "половина длины волны распределенный" ULA, полуширина луча является приблизительно 14,3 градусами в развороте. В этой симуляции самое большое угловое различие между выборками

maxangdiff = max(abs(diff(broadang_est)));
disp(maxangdiff)
    0.2942

Угловое разделение между выборками меньше полуширины луча.

Постройте угловую погрешность. Вот в чем разница между предполагаемым углом и фактическим углом. График показывает очень небольшую ошибку порядка микростепеней.

plot(t,angerr,'-o')
xlabel('time (sec)')
ylabel('Angle error (deg)')

Figure contains an axes. The axes contains an object of type line.

Смотрите также

Функции

Объекты