Симулируйте радиолокационные призраки из-за многолучевого возврата

Этот пример показывает, как симулировать обнаружения призрачных целей и дорожки из-за многолучевых отражений, где энергия сигнала отражается от другой цели перед возвращением к радару. Вы будете симулировать призраки как с помощью статистической модели радара, так и с помощью более подробной модели приемопередатчика, которая генерирует сигналы IQ.

Мотивация

Во многих сценариях шоссе участвуют не только другие автомобили, но и барьеры и ограждения. Рассмотрим простое шоссе, созданное с помощью приложения Driving Scenario Designer. Для получения дополнительной информации о том, как смоделировать барьеры в drivingScenario см. пример Sensor Fusion Using Synthetic Radar and Vision Data. Используйте функцию helperSimpleHighwayScenarioDSD экспортировано из Driving Scenario Designer, чтобы получить наш сценарий шоссе и указатель на автомобиль , оборудованный датчиком.

% Set random seed for reproducible results
rndState = rng('default');

% Create scenario using helper
[scenario, egoVehicle] = helperSimpleHighwayScenarioDSD();

Чтобы смоделировать обнаружения, сгенерированные перспективным автомобильным радаром, используйте radarDataGenerator. Используйте центральную частоту 77 ГГц, что типично для автомобильного радара. Мы сгенерируем обнаружения до 100 метров в области значений и выберем PRF, который позволяет однозначно измерить скорости закрытия до 67 м/с.

% Automotive radar system parameters
fc = 77e9;                      % Center frequency (Hz) 
rangeMax = 100;                 % Maximum range (m)
rangeRes = 2.5;                 % Range resolution (m)
vMax = 67;                      % Maximum closing rate of cars (m/s)

c = physconst('LightSpeed');    % Speed of light (m/s)
bw = rangeres2bw(rangeRes,c);   % Signal bandwidth (Hz)

lambda = freq2wavelen(fc,c);    % Wavelength (m)
prf = speed2dop(2*vMax,lambda); % Maximum Doppler shift (Hz)
Ramb = c/(2*prf);               % Maximum unambiguous range (m) 

% Create a forward-looking automotive radar
rdr = radarDataGenerator(1, 'No scanning', ...
    'MountingLocation', [3.4 0 0.2], ...
    'AzimuthResolution', 4, ...
    'RangeResolution', rangeRes, ...
    'CenterFrequency', fc, ...
    'Bandwidth', bw, ...
    'HasRangeRate', true, ...
    'RangeRateResolution', 10, ...
    'ReferenceRange', 100, ...
    'FieldOfView', [70 5], ...
    'RangeLimits', [0 rangeMax], ...
    'RangeRateLimits', [-100 100], ...
    'HasRangeAmbiguities', true, ...
    'MaxUnambiguousRange', Ramb, ...
    'HasRangeRateAmbiguities', true, ...
    'MaxUnambiguousRadialSpeed', vMax/2, ...
    'TargetReportFormat', 'Detections', ...
    'HasOcclusion', false, ...
    'Profiles',actorProfiles(scenario));

% Show all detections for illustrative purposes
rdr.DetectionProbability = 1;

% Create bird's eye plot and detection plotter function
[~,detPlotterFcn] = helperSetupBEP(egoVehicle,rdr);

% Generate raw detections
time = scenario.SimulationTime;
tposes = targetPoses(egoVehicle);
[dets,~,config] = rdr(tposes,time);

% Plot detections
detPlotterFcn(dets,config);
title('Free Space (no multipath)')

Figure contains an axes. The axes with title Free Space (no multipath) contains 4 objects of type line, patch. These objects represent Road, Radar FoV, Radar detections.

Предыдущий рисунок показывает местоположение обнаружений вдоль целевого транспортного средства, а также вдоль стороны барьера. Однако обнаружения не всегда так хорошо себя ведут. Одним из явлений, которое может поставить значительные проблемы для радиолокационных инженеров, является многолучевой канал. Многолучевой канал - это когда сигнал не только распространяется непосредственно на намеченную цель и обратно на радар, но и включает дополнительные отражения от объектов в окружении.

Многолучевые отражения

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

Чтобы понять модель с тремя отказами, сначала рассмотрим более простые пути с одним и двумя отказами, как показано на следующих рисунках.

Путь с одним отказом

Одноотбойный путь распространяется от радара (1) к цели (2) и затем отражается от цели (2) назад к радару. Это часто упоминается как прямой или прямой путь зрения.

Пути с двумя отказами

Существует два уникальных пути распространения, которые состоят из двух отскоков.

Первый двухфокусный путь распространяется от радара (1) к отражающей поверхности (3), затем к цели (2) перед возвращением к радару (1). Поскольку сигнал, принятый на радар, приходит от последнего отскока от истинной цели, он будет генерировать обнаружения призрака в том же направлении, что и истинная цель. Поскольку длина пути для этого распространения больше, она появится в более дальней области значений, чем истинные целевые обнаружения.

Второй двухфокусный путь распространяется от радара (1) к цели (2), затем к отражающей поверхности (3) перед возвращением к радару (1). В этом случае обнаружение призрака появится на другой стороне отражающей поверхности, поскольку это направление, в котором радар получит отраженный сигнал.

Заметьте, что длина пути для обоих путей с двумя отказами одинаковая. В результате измеренный диапазон и скорость области значений для этих путей также будут одинаковыми.

Трехфазный

Путь

Трехотбойный путь отражается от барьера дважды. Этот путь никогда не распространяется непосредственно на цель или непосредственно назад к радару. Обнаружение призрака с тремя отказами появится на другой стороне отражающей поверхности, поскольку это направление, в котором радар получит отраженный сигнал. Кроме того, он имеет самую длинную длину пути распространения трех путей отскока и, следовательно, будет иметь самую длинную измеренную область значений из трех путей. Этот путь соответствует зеркальному отражению истинной цели на другой стороне барьера.

Моделируйте обнаружение призрачных целей

Установите HasGhosts свойство на radarDataGenerator чтобы смоделировать обнаружения, сгенерированные этими путями с тремя отказами.

% Enable ghost target model
release(rdr);
rdr.HasGhosts = true;

% Generate raw detections
time = scenario.SimulationTime;
tposes = targetPoses(egoVehicle);
[dets,~,config] = rdr(tposes,time);

% Plot detections
detPlotterFcn(dets,config);
title('Simple Multipath Environment');

Figure contains an axes. The axes with title Simple Multipath Environment contains 7 objects of type line, patch. These objects represent Road, Radar FoV, Radar detections, 1^{st} 2-bounce ghosts, 2^{nd} 2-bounce ghosts, 3-bounce ghosts.

Предыдущий рисунок воспроизводит анализ трех путей распространения. Первые 2-bounce призраки лежат в направлении цели с немного большей областью значений. Второй 2-отскок лежит в направлении зеркального изображения цели, генерируемого отражением от барьера, и находится в той же области значений, что и первый 2-отскок. И 3 обнаружения отскока следуют контуру визуализированного призрака целевого транспортного средства.

Следы призрака

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

Установите TargetReportFormat свойство на radarDataGenerator к 'Tracks', чтобы смоделировать дорожки, сгенерированные радаром в присутствии многолучевого распространения.

% Output tracks instead of detections
release(rdr);
rdr.TargetReportFormat = 'Tracks';
rdr.ConfirmationThreshold = [2 3];
rdr.DeletionThreshold = [5 5];
FilterInitializationFcn = 'initcvekf'; % constant-velocity EKF

% Create a new bird's eye plot to plot the tracks
[bep,trkPlotterFcn] = helperSetupBEP(egoVehicle,rdr);

% Run simulation
restart(scenario);
scenario.StopTime = 7.5;
while advance(scenario)
    time = scenario.SimulationTime;
    tposes = targetPoses(egoVehicle);

    % Generate tracks
    [trks,~,config] = rdr(tposes,time);

    % Filter out tracks corresponding to static objects (e.g. barrier)
    dyntrks = helperKeepDynamicObjects(trks, egoVehicle, rdr);

    % Visualize dynamic tracks
    helperPlotScenario(bep,egoVehicle);
    trkPlotterFcn(dyntrks,config);
end
title('Simple Multipath Environment');

Figure contains an axes. The axes with title Simple Multipath Environment contains 9 objects of type line, patch, text. These objects represent Road, Radar FoV, Radar tracks, Ghost tracks.

Предыдущий рисунок показывает подтвержденные положения дорожки с помощью квадратных маркеров. Дорожки, соответствующие статическим объектам (то есть барьер), не построены. Заметьте, что с ведущим автомобилем связано несколько дорожек. Дорожки, которые накладываются на головной автомобиль, соответствуют истинному обнаружению и первому призраку с 2 отскоком. Дорожки, которые лежат от дороги на другой стороне ограждения, соответствуют вторым 2-отскочивающим и 3-отскакивающим призракам.

Скорости дорожки указаны длиной и направлением векторов, указывающих от положения дорожки (они малы, потому что они относятся к автомобилю , оборудованному датчиком). Обнаружения призраков могут обмануть трекер, потому что у них кинематика, подобная кинематике истинных целей. Эти следы-призраки могут оказаться проблематичными, так как они добавляют трекеру дополнительную нагрузку на обработку и, возможно, запутают управляющие решения с помощью целевых треков.

Моделируйте сигналы IQ

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

Поскольку приемопередатчик не будет выполнять никакого обнаружения или оценки, установите разрешение угла радара равным его FoV. Также установите вероятность обнаружения равной 0,9, чтобы приемопередатчик использовал реалистичную степень передачи и шумовой рисунок.

% Reset radarDataGenerator and get the transceiver
release(rdr);
rdr.AzimuthResolution = rdr.FieldOfView(1);
rdr.DetectionProbability = 0.9;
transceiver = radarTransceiver(rdr);

Используйте NumRepetitions свойство, указывающее, сколько импульсов собирать на каждый вызов приемопередатчика.

% Total number of pulses to collect
numPulses = 128;

% Number of pulses per collection
transceiver.NumRepetitions = numPulses;

Функция помощника helperIncludeSignatures добавит информацию о сигнатуре в struct положения, которая сообщает приемопередатчику RCS каждого целевого объекта. helperGetPathsFromPoses будет генерировать информацию о каждом пути распространения в окружении, включая те, которые включают несколько отскоков. Приемопередатчик будет использовать это, чтобы вычислить наш многолучевой возврат.

restart(scenario); % restart the scenario

tgtPoses = targetPoses(egoVehicle); % Get target poses in ego vehicle's reference frame
tgtPoses = helperIncludeSignatures(tgtPoses,scenario);

% Get propagation path information
paths = helperGetPathsFromPoses( tgtPoses,scenario,rdr,lambda );

Теперь соберите один интервал когерентной обработки (CPI) данных, сформируйте RDM и постройте график. Приемопередатчик просто принимает пути, структурированные сверху, и текущее время симуляции как вход и возвращает данные IQ, форматированные как диапазон за импульсом, обычно называемый историей фазы (PH).

time = scenario.SimulationTime; % Current simulation time
rx = transceiver(paths,time); % Get IQ data from transceiver for real and ghost targets

% Match filter the received signal
matchingcoeff = getMatchedFilter(transceiver.Waveform);
matchedfilter = phased.MatchedFilter('Coefficients',matchingcoeff);
matchingdelay = size(matchingcoeff,1)-1;
mfiltOut = matchedfilter(rx);
mfiltOut = buffer(mfiltOut(matchingdelay+1:end),size(mfiltOut,1));

Используйте DC-центрированную Допплеровскую карту (RDM) и область значений swath, которая простирается до наших максимальных областей значений с одной выборкой на камеру разрешения.

df = prf / numPulses;                   % Doppler filter spacing
dopAx = (-prf/2:df:prf/2-df).';         % Doppler axis
rngAx = (rangeRes:rangeRes:rangeMax).'; % Range axis

% Select only the range gates up to our max range
PH = mfiltOut(1:numel(rngAx),:);

% Form  DC-centered RDM
RDM = fftshift(fft(PH,[],2),2);

% Plot RDM and close-up of target vehicle
helperPlotRDM( RDM,rngAx,dopAx,scenario.SimulationTime );

Figure contains 2 axes. Axes 1 with title RDM at T = 0.00 s contains an object of type image. Axes 2 with title Vehicle Return contains an object of type image.

На графике выше показан полный RDM вместе с крупным планом возврата транспортного средства. Полоса возврата на доплеровской частоте около 12 кГц находится с ограждений на обочине дороги. Целевое транспортное средство видимо около 30 метров в область значений, и при слегка отрицательном Допплере, поскольку он движется вперед быстрее, чем автомобиль , оборудованный датчиком. Другие две полосы возврата происходят от многолучевых отражений между ограждениями и целевым транспортным средством.

Ниже приведена запись около 60 системы координат данных в более высоком разрешении, и начиная примерно с 3 секунд, вместе с графиком птичьего глаза от ранее. Эта запись показывает только отражения с одним отскоком от ограждений. Многолучевой возврат от целевого транспортного средства начинается, когда он начинает перестраиваться, и его расстояние до ограждений уменьшается. Мы видим, что призрачная цель появляется на большей области значений и Допплер, чем реальная цель, затем медленно они сходятся, когда реальное транспортное средство стабилизируется в центре дороги.

% Restore random state
rng(rndState);

Сводные данные

В этом примере вы узнали, как обнаружения призрачных целей возникают из-за нескольких отражений, которые могут происходить между радаром и целью. Автомобильный радиолокационный сценарий использовался, чтобы выделить общий случай, когда призрачные цели генерируются ограждением в поле зрения радара. В результате существует 4 уникальных пути отскока, которые могут привести к этим обнаружениям призраков. Кинематика обнаружений призрачных целей подобна обнаружениям истинной цели, и в результате эти призрачные цели могут создать следы призрака, которые могут добавить дополнительную нагрузку обработки трекеру и могут запутать алгоритмы управления, используя эти дорожки. The radarTransceiver может использоваться, чтобы сгенерировать более точные данные IQ, которые подходят в качестве входных данных для алгоритмов обнаружения и отслеживания.

Вспомогательные функции

helperKeepDynamicObjects

function dyntrks = helperKeepDynamicObjects( trks,egoVehicle,rdr )
% Filter out tracks corresponding to static objects (e.g. guardrail)
%
% This is a helper function and may be removed or modified in a future
% release.

dyntrks = trks;
if ~isempty(trks)
    vel = cell2mat(arrayfun(@(t)t.State(2:2:end),trks(:)','UniformOutput',false));
    isStatic = (-vel(1,:) > egoVehicle.Velocity(1)-rdr.RangeRateResolution) & (-vel(1,:) < egoVehicle.Velocity(1)+rdr.RangeRateResolution);
    dyntrks = trks(~isStatic);
end
end

helperIncludeSignatures

function tgtPoses = helperIncludeSignatures( tgtPoses,scenario )
% Include signature information in the target poses struct for use by
% radarTransceiver
%
% This is a helper function and may be removed or modified in a future
% release.

prof = scenario.actorProfiles;
id0 = [prof.ActorID];
id = [tgtPoses.ActorID];

for ind = 1:numel(tgtPoses)    
    I = id0 == id(ind);
    tgtPoses(ind).Signatures = {rcsSignature("Azimuth",prof(I).RCSAzimuthAngles,"Elevation",...
        prof(I).RCSElevationAngles,"Pattern",prof(I).RCSPattern)};
end

end

helperPlotRDM

function helperPlotRDM( RDM,rngAx,dopAx,time )
% Plot the RDM and a close-up
%
% This is a helper function and may be removed or modified in a future
% release.

figure;
set(gcf,'Position',get(gcf,'Position')+[0 0 560 0]);

subplot(1,2,1);
imagesc(dopAx/1e3,rngAx,20*log10(abs(RDM)));
colorbar;
cx = caxis;
caxis([cx(2)-60 cx(2)]);
xlabel('Doppler (kHz)');
ylabel('Range (m)');
set(gca,'ydir','normal');
title(sprintf('RDM at T = %.2f s',time));

subplot(1,2,2);
rIdx = rngAx >= 22 & rngAx <= 38;
dIdx = dopAx >= -5e3 & dopAx <= 0;
imagesc(dopAx(dIdx)/1e3,rngAx(rIdx),20*log10(abs(RDM(rIdx,dIdx))));
colorbar;
cx = caxis;
caxis([cx(2)-60 cx(2)]);
xlabel('Doppler (kHz)');
ylabel('Range (m)');
set(gca,'ydir','normal');
title('Vehicle Return');

end

Похожие темы