Отслеживание цели с помощью радара Sum-Difference Monopulse

В этом примере показано, как использовать phased.SumDifferenceMonopulseTracker Система object� для отслеживания движущейся цели. The 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;

Настройте векторы данных для хранения и отображения результатов

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.

Моноимпульсный трекер не может решить угол направления, если угловое разделение между выборками слишком велико. Максимально допустимое угловое разделение составляет примерно половину ширины луча массива от нуля до нуля. Для ULA с интервалом между 8 элементами с половинной длиной волны половинная ширина луча составляет приблизительно 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.

См. также

Функции

Объекты