exponenta event banner

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

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

Мотивация

Во многих сценариях шоссе задействованы не только другие автомобили, но и заграждения и ограждения. Рассмотрим простую магистраль, созданную с помощью приложения Конструктор сценариев вождения (Automated Driving Toolbox). Для получения дополнительной информации о моделировании барьеров в drivingScenario см. пример слияния датчиков с использованием синтетических данных радара и зрения (Automated Driving Toolbox). Используйте функцию helperSimpleHighwayScenarioDSD экспортирован из конструктора сценариев вождения, чтобы получить наш сценарий шоссе и ручку к эго-транспортному средству.

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

Призрачные дорожки

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

Установите TargetReportFormat свойство на radarDataGenerator to '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 добавляет информацию о сигнатуре в структуру позы, которая сообщает приемопередатчику 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) и диапазон, который простирается до нашего максимального диапазона, с одним образцом на ячейку разрешения.

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