Симулируйте Радарные Фантомы из-за Многопутевого Возврата

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

Мотивация

Много магистральных сценариев включают не только другие автомобили, но также и барьеры и поручни. Полагайте, что простая магистраль создала использование Driving Scenario Designer (Automated Driving Toolbox) приложение. Для получения дополнительной информации о том, как смоделировать барьеры в drivingScenario смотрите, что Fusion Датчика Использует Синтетические Данные о Радаре и Видении (Automated Driving Toolbox) пример. Используйте функциональный 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.

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

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

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

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

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

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

2D возвратите пути

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

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

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

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

Путь с тремя возвратами

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

Фантомные целевые обнаружения модели

Установите 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 возвратами лежат в направлении цели с немного большей областью значений. Вторая ложь с 2 возвратами в направлении зеркального изображения цели, сгенерированной отражением от барьера и в той же области значений как первый с 2 возвратами. И обнаружения с 3 возвратами следуют за схемой изображенного фантома целевого транспортного средства.

Повторите дорожки

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

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

% 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.

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

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

Сигналы 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 и график. Приемопередатчик просто берет struct путей сверху и текущее время симуляции, как введено, и возвращает данные 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 уникальных пути к возврату, которые могут произвести эти фантомные обнаружения. Кинематика фантомных целевых обнаружений похожа на обнаружения истинной цели, и в результате эти фантомные цели могут создать фантомные дорожки, которые могут добавить дополнительную загрузку обработки в средство отслеживания и могут перепутать алгоритмы управления с помощью этих дорожек. 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