В этом примере показано, как программно создать основанную на физике радарную модель из статистической радарной модели.
Радар является системой восприятия, которая использует антенную или антенную решетку, чтобы получить энергию RF, которая является затем downconverted и обработана, чтобы предоставить информацию об объектах в поле зрения радара. Полученный сигнал должен пройти и через подсистему обработки сигналов и через подсистему обработки данных.
Цель подсистемы обработки сигналов состоит в том, чтобы перевести, получил сигналы IQ предназначаться для обнаружений. Подсистема обработки данных берет те обнаружения и производит дорожки, соответствующие обнаруженным целям.
Подсистема обработки сигналов помогает сгенерировать снимок состояния сцены в текущее время и включает информацию о том, является ли объект в покрытии и, если так, где это. Подсистема обработки данных соединяет те снимки состояния, таким образом, операторы могут изучить то, что происходило в зависимости от времени. Это помогает получить информацию о Доплере в дополнение к предсказаниям того, куда цели направляются.
Радарные инженеры, которые симулируют и моделируют алгоритмы и системы, должны работать через область значений уровней абстракции, которые охватывают области обработки данных и сигнал. Уровень абстракции зависит от фазы радарного жизненного цикла разработки, длины сцены, симулируемой, и тип выполняемых инженерных работ.
На ранних стадиях проекта, когда компромиссы проекта исследуются, моделируя на уровне основного уравнения радиолокации, может соответствовать. В то время как проект прогрессирует, будет необходимо увеличить уровень точности модели, перемещающейся от статистического уровня до симуляции уровня сигнала. Кроме того, длина сценария может продиктовать, какое моделирование уровня абстракции целесообразно. Например, в течение более длительных времен сценария (секунды, минуты, или дольше), может быть лучше сгенерировать статистические или вероятностные радарные обнаружения и дорожки, чтобы покрыть миссию или протестировать алгоритмы cочетания датчиков и отслеживание. В качестве альтернативы более высокая точность, основанные на физике симуляции, которые включают переданные формы волны, распространение сигнала через среду, отражения от целей и полученные сигналы в получить массиве, необходима для мероприятий или для того, когда алгоритмы обработки сигналов разрабатываются.
В этом примере сцена создается и с радаром и с целями. Во-первых, обнаружения сгенерированы с помощью статистической модели на основе основного уравнения радиолокации. Затем эквивалентная основанная на физике радарная модель создается из статистической модели. Основанная на физике радарная модель затем используется, чтобы симулировать 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 метров над землей. Радарное определение датчика включает ключевые радарные параметры, такие как тип сканирования и информация о поле зрения.
radarDataGenerator
генерирует обнаружения статистически на основе основного уравнения радиолокации.
rpm = 12.5; fov = [1.4;5]; % [azimuth; elevation] scanrate = rpm*360/60; % deg/s updaterate = scanrate/fov(1); % Hz sensor = radarDataGenerator(1, 'Rotator', ... 'DetectionProbability', 0.99, ... '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 и проверку, если алгоритм обработки приводит к результату, похожему на тот из статистического датчика. Заметьте, что цикл симуляции, который генерирует сигнал 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_iq) iqdetpos(m,:) = detBuffer_iq{m}.Measurement.'; end iqdet = detectionPlotter(tp,'DisplayName','IQ Detection',... 'Marker','o','MarkerSize',10,'MarkerEdgeColor','k'); plotDetection(iqdet,iqdetpos)
График ясно показывает, что результат, полученный из генерации сигнала IQ, похож на результат, сгенерированный от статистической модели.
В этом примере статистическая модель используется, чтобы сгенерировать радарные обнаружения на основе основного уравнения радиолокации. Затем основанная на физике радарная модель программно создается из статистической модели, и новый набор обнаружений выведен из сигнала IQ, сгенерированного из этой основанной на физике радарной модели. Обнаружения из обеих моделей совпадают с основной истиной хорошо. Этот рабочий процесс является очень удобным способом разбудить модель уровня сигнала и запускающийся быстро. Если модель базового сигнала существует, она может быть расширена, когда проект диктует.