Радар является системой восприятия, которая использует антенну или антенную решетку для захвата энергии RF, которая затем преобразуется вниз и обрабатывается, чтобы предоставить информацию об объектах в поле зрения радара. Принятый сигнал должен проходить как через подсистему обработки сигналов, так и через подсистему обработки данных.
Цель подсистемы обработки сигналов состоит в том, чтобы преобразовать принятые сигналы IQ в целевые обнаружения. Подсистема обработки данных принимает эти обнаружения и формирует дорожки, соответствующие обнаруженным целям.
Подсистема обработки сигналов помогает сгенерировать моментальный снимок сцены в текущее время и включает информацию о том, находится ли объект в покрытии, и если да, то где он находится. Подсистема обработки данных связывает эти снимки вместе, чтобы мы могли понять, что произошло со временем. Это помогает получить информацию Доплера в дополнение к предсказаниям того, куда движутся цели.
Радиолокационные инженеры, которые моделируют и моделируют алгоритмы и системы, должны работать с областью значений уровней абстракции, которые охватывают области обработки сигналов и данных. Уровень абстракции зависит от фазы жизненного цикла разработки радара, длины моделируемой сцены и типа выполняемых инженерных работ.
На ранних стадиях проекта, когда исследуются проектные компромиссы, моделирование на уровне основного уравнения радиолокации может быть адекватным. По мере развития проекта необходимо будет повысить уровень точности модели, переходя от статистического уровня к симуляции уровня сигнала. В сложение, длина сценария может диктовать, какой уровень абстракции моделирования имеет смысл. Для примера в течение более длительного времени сценария (секунды, минуты или больше) может быть лучше сгенерировать статистические или вероятностные радиолокационные обнаружения и дорожки для покрытия миссии или протестировать алгоритмы слежения и слияния датчиков. Альтернативно, более высокая точность, основанные на физике симуляции, которые включают переданные формы волны, распространение сигнала через окружение, отражения от целей и принятые сигналы в приёмном массиве, необходимы для событий, представляющих интерес, или для того, когда разрабатываются алгоритмы обработки сигналов.
Этот пример начинается со статистической модели для заданной сцены, а затем эквивалентная модель уровня сигнала IQ создается программно из статистической модели.
В первом фрагменте примера мы создадим статистическую модель и сгенерируем обнаружения на основе основного уравнения радиолокации. Во втором фрагменте примера мы создадим эквивалентную модель уровня сигнала IQ для того же сценария и сравним результаты. Этот рабочий процесс является очень удобным способом получить модель уровня сигнала вверх и быстро. Когда базовая модель сигнала находится на месте, она может быть расширена, как диктует проект.
Для начала зададим сценарий с радаром наблюдения фиксированного местоположения. В поле зрения радара есть три цели. На графике ниже показаны местоположения радара и целей.
% Create targets. tgt1 = struct( ... 'PlatformID', 1, ... 'Position', [0 -50e3 -1e3], ... 'Velocity', [0 900*1e3/3600 0]); tgt2 = struct( ... 'PlatformID', 2, ... 'Position', [20e3 0 -500], ... 'Velocity', [700*1e3/3600 0 0]); tgt3 = struct( ... 'PlatformID', 3, ... 'Position', [-20e3 0 -500], ... 'Velocity', [300*1e3/3600 0 0]); tp = theaterPlot('XLim',[-30e3 30e3],'YLim',[-60e3 10e3],'ZLim',[-10e3 1e3]); gtplot = platformPlotter(tp,'DisplayName','Target Ground Truth',... 'Marker','^','MarkerSize',8,'MarkerFaceColor','r'); plotPlatform(gtplot,[tgt1.Position;tgt2.Position;tgt3.Position],... [tgt1.Velocity;tgt2.Velocity;tgt3.Velocity],{'Target1','Target2','Target3'});
Затем мы задаем радар наблюдения аэропорта, который генерирует обнаружения из статистической модели. Радар наблюдения аэропорта установлен в 15 метрах над землей. Определение радарного датчика включает ключевые параметры радара, такие как тип сканирования и информация о поле зрения.
The radarDataGenerator
сгенерированы обнаружения статистически на основе основного уравнения радиолокации.
% Create an airport surveillance radar 15 meters above the ground rpm = 12.5; fov = [1.4;5]; % [azimuth; elevation] scanrate = rpm*360/60; % deg/s updaterate = scanrate/fov(1); % Hz sensor = radarDataGenerator(1, 'Rotator', ... 'UpdateRate', updaterate, ... 'MountingLocation', [0 0 -15], ... 'MaxAzimuthScanRate', scanrate, ... 'FieldOfView', fov, ... 'AzimuthResolution', fov(1)); radarPosition = [0 0 0]; radarVelocity = [0 0 0]; radarplot = platformPlotter(tp,'DisplayName','Radar',... 'Marker','s','MarkerSize',8,'MarkerFaceColor','b'); plotPlatform(radarplot,radarPosition,radarVelocity,{'Radar'})
Приведенный ниже код моделирует полный скан радара наблюдения.
% Generate detections from a full scan of the radar simTime = 0; detBuffer = {}; rng(2020); while true [dets, numDets, config] = sensor([tgt1 tgt2 tgt3], simTime); detBuffer = [detBuffer;dets]; %#ok<AGROW> % Is full scan complete? if config.IsScanDone break % yes end simTime = simTime+1/sensor.UpdateRate; end stadetpos = zeros(numel(detBuffer),3); for m = 1:numel(detBuffer) stadetpos(m,:) = detBuffer{m}.Measurement.'; end stadet = detectionPlotter(tp,'DisplayName','Statistical Detection',... 'Marker','d','MarkerSize',6,'MarkerFaceColor','g'); plotDetection(stadet,stadetpos)
На рисунке выше можно увидеть сгенерированные обнаружения, совпадающие с основной истиной целевыми местоположениями. Все три цели, указанные маркером истинности, имеют обнаружение, которое показано как наложение на маркер истинности.
Далее, если мы удовлетворены симуляцией статистического уровня, мы хотели бы перейти к симуляции сигнала IQ, чтобы мы могли проверить, работают ли наши алгоритмы обработки сигналов правильно. Используя следующую команду, мы можем легко создать радиолокационный приемопередатчик, который производит сигнал IQ на основе статистического датчика, который мы сконфигурировали ранее.
sensor_iq = radarTransceiver(sensor)
sensor_iq = radarTransceiver with properties: Waveform: [1x1 phased.RectangularWaveform] Transmitter: [1x1 phased.Transmitter] TransmitAntenna: [1x1 phased.Radiator] ReceiveAntenna: [1x1 phased.Collector] Receiver: [1x1 phased.ReceiverPreamp] MechanicalScanMode: 'Circular' InitialMechanicalScanAngle: -0.1000 MechanicalScanRate: 75 ElectronicScanMode: 'None' MountingLocation: [0 0 -15] MountingAngles: [0 0 0] NumRepetitionsSource: 'Property' NumRepetitions: 1
Заметьте, что конфигуратин sensor_iq
переменная более близка к физической системе, как показано ниже. Все эти строения могут быть изменены для проведения торговых исследований. он выводит sensor_iq
формирует сигналы IQ, которые затем могут быть обработаны. В этом примере простой порог реализован, чтобы сгенерировать обнаружения, поскольку наша цель - создать эквивалентный результат, который мы получили в первой части примера.
% configure signal processing component coeff = getMatchedFilter(sensor_iq.Waveform); mf = phased.MatchedFilter('Coefficients',coeff,'GainOutputPort',true); npower = noisepow(1/sensor_iq.Waveform.PulseWidth,... sensor_iq.Receiver.NoiseFigure,sensor_iq.Receiver.ReferenceTemperature); threshold = npower * db2pow(npwgnthresh(sensor.FalseAlarmRate)); fs = sensor_iq.Waveform.SampleRate; prf = sensor_iq.Waveform.PRF; c = physconst('lightspeed'); fc = sensor_iq.TransmitAntenna.OperatingFrequency; lambda = c/fc; Nsamp = round(fs/prf); rgates = (0:Nsamp-1)/fs*c/2; tvg = phased.TimeVaryingGain(... 'RangeLoss',2*fspl(rgates,lambda),... 'ReferenceLoss',2*fspl(Nsamp/fs*c/2,lambda));
Затем мы можем выполнить симуляцию IQ и проверить, может ли наш алгоритм обработки дать нам результат simialr в качестве нашего статистического датчика. Заметьте, что цикл симуляции для генерации сигнала IQ почти идентичен циклу, который генерирует статистическое обнаружение. Также в цикле показано, как обработать сигнал IQ, чтобы получить обнаружение.
simTime = 0; detBuffer_iq = {}; while true [sig, config] = sensor_iq([tgt1 tgt2 tgt3], simTime); if config.IsScanDone break; end % Processing [sigp,Gmf] = mf(sig); sigp = tvg(sigp); th = sqrt(threshold*db2pow(Gmf)); ind = abs(sigp)>th; if any(ind) [~,idx] = max(abs(sigp)); rng_est = rgates(idx); meas_sensor = [0;0;rng_est]; meas_body = local2globalcoord(meas_sensor,'sr',... config.OriginPosition,config.Orientation); dets_iq = struct('Time',simTime,'Measurement',meas_body); detBuffer_iq = [detBuffer_iq;dets_iq]; %#ok<AGROW> end simTime = simTime+1/updaterate; end iqdetpos = zeros(numel(detBuffer_iq),3); for m = 1:numel(detBuffer) iqdetpos(m,:) = detBuffer_iq{m}.Measurement.'; end iqdet = detectionPlotter(tp,'DisplayName','IQ Detection',... 'Marker','o','MarkerSize',10,'MarkerEdgeColor','k'); plotDetection(iqdet,iqdetpos)
График выше ясно указывает, что повторное использование, полученное из генерации сигнала IQ, подобно результату, сгенерированному из статистической модели.
В этом примере мы построим статистическую модель, чтобы сгенерировать обнаружения на основе основного уравнения радиолокации. Затем мы создали эквивалентную модель уровня сигнала IQ для того же сценария и сравнили результаты. Этот рабочий процесс является очень удобным способом получить модель уровня сигнала вверх и быстро. Когда базовая модель сигнала находится на месте, она может быть расширена, как диктует проект.