В этом примере показано, как использовать phased.SumDifferenceMonopulseTracker Система object� для отслеживания движущейся цели. phased.SumDifferenceMonopulseTracker трекер решает направление цели из сигналов, поступающих на однородную линейную матрицу (ULA). Моноимпульсный алгоритм суммарной разности требует предварительной оценки целевого направления, которое предполагается близким к фактическому направлению. В трекере текущая оценка служит предшествующей информацией для следующей оценки. Целью является узкополосный излучатель 500 МГц, движущийся с постоянной скоростью 800 kph. Для массива ULA вектор управления зависит только от широкополосного угла. Широкополосный угол - это угол между направлением источника и плоскостью, перпендикулярной линейному массиву. Любой поступающий сигнал определяется его широким углом.
Предположим, что цель находится в [0,10000,20000] относительно РЛС в локальной системе координат РЛС. Предположим, что цель движется вдоль оси y в направлении радара со скоростью 800 км/ч.
x0 = [0,10000,20000].'; v0 = -800; v0 = v0*1000/3600; targetplatform = phased.Platform(x0,[0,v0,0].');
Моноимпульсный трекер использует решетку 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Вычислите фактический широкополосный угол, broadang_actual.
Вычислите сигнал, signl, от фактического широкополосного угла, используя phased.SteeringVector Системный объект.
Использование phased.SumDifferenceMonopulseTracker трекер, оценка широкополосного угла, broadang_est, от сигнала. Широкополосный угол, полученный из предыдущего шага, служит начальной оценкой для текущего шага.
Вычислите разницу между расчетными широкими углами, 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)')
![]()
Постройте график расчетного широкополосного угла как функции времени.
plot(t,broadang_actual,'-o') xlabel('time (sec)') ylabel('Broadside angle (deg)')
![]()
Моноимпульсный трекер не может решить угол направления, если угловое разделение между выборками слишком велико. Максимально допустимое угловое разделение составляет приблизительно половину ширины луча от null до null массива. Для 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)')
![]()