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

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

Мотивация

Много магистральных сценариев включают не только другие автомобили, но также и барьеры и поручни. Полагайте, что простая магистраль создала использование приложения Driving Scenario Designer. Для получения дополнительной информации о том, как смоделировать барьеры, смотрите, что Cочетание датчиков Использует Синтетический пример Данных о Радаре и Видении. Используйте helperSimpleHighwayScenarioDSD функция, экспортируемая от Driving Scenario Designer, чтобы получить магистральный сценарий и указатель на автомобиль, оборудованный датчиком.

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

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

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

% Automotive radar system parameters
freq = 77e9; % Hz
rgMax = 150; % m
spMax = 100; % m/s
rcs = 10;    % dBsm

azRes = 4;   % deg
rgRes = 2.5; % m
rrRes = 0.5; % m/s

% Create a forward-looking automotive radar
rdg = radarDataGenerator(1, 'No scanning', ...
    'UpdateRate', 10, ...
    'MountingLocation', [3.4 0 0.2], ...
    'CenterFrequency', freq, ...
    'HasRangeRate', true, ...
    'FieldOfView', [70 5], ...
    'RangeLimits', [0 rgMax], ...
    'RangeRateLimits', [-spMax spMax], ...
    'HasRangeAmbiguities',true, ...
    'MaxUnambiguousRange', rgMax, ...
    'HasRangeRateAmbiguities',true, ...
    'MaxUnambiguousRadialSpeed', spMax, ...
    'ReferenceRange', rgMax, ...
    'ReferenceRCS',rcs, ...
    'AzimuthResolution',azRes, ...
    'RangeResolution',rgRes, ...
    'RangeRateResolution',rrRes, ...
    'TargetReportFormat', 'Detections', ...
    'Profiles',actorProfiles(scenario));

% Create bird's eye plot and detection plotter function
[~,detPlotterFcn] = helperSetupBEP(egoVehicle,rdg);
title('Free Space (no multipath)');

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

% Plot detections
detPlotterFcn(dets,config);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

% Create a new bird's eye plot to plot the tracks
[bep,trkPlotterFcn] = helperSetupBEP(egoVehicle,rdg);
title('Simple Multipath Environment');

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

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

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

    % Visualize dynamic tracks
    helperPlotScenario(bep,egoVehicle);
    trkPlotterFcn(dyntrks,config);
end

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

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

Сигналы IQ модели

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

Статистический радар имеет следующую область значений и уровень области значений (Доплер) параметры, которые определяют ограничения для формы волны, используемой radarTransceiver.

rgMax = rdg.RangeLimits(2)       % m
rgMax = 150
spMax = rdg.RangeRateLimits(2)   % m/s
spMax = 100

Вычислите импульсную частоту повторения (PRF), которая удовлетворит уровню области значений для радара.

lambda = freq2wavelen(rdg.CenterFrequency);
prf = 2*speed2dop(2*spMax,lambda);

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

rrRes = rdg.RangeRateResolution
rrRes = 0.5000
dopRes = 2*speed2dop(rrRes,lambda);
numPulses = 2^nextpow2(prf/dopRes)
numPulses = 512
prf = dopRes*numPulses
prf = 1.3150e+05

Подтвердите, что однозначная область значений, которая соответствует этому PRF, вне максимального предела области значений.

rgUmb = time2range(1/prf)
rgUmb = 1.1399e+03

Создайте эквивалентный radarTransceiver непосредственно от radarDataGenerator.

release(rdg);

% Set the range and range-rate ambiguities according to desired PRF and
% number of pulses
rdg.MaxUnambiguousRange = rgUmb;
rdg.MaxUnambiguousRadialSpeed = spMax;

% Set the statistical radar to report clustered detections to compare to
% the IQ video from the radar transceiver.
rdg.TargetReportFormat = 'Clustered detections';
rdg.DetectionCoordinates = 'Body';
azRes = rdg.AzimuthResolution;
rdg.AzimuthResolution = rdg.FieldOfView(1);

% Construct the radar transceiver from the radar data generator
rtxrx = radarTransceiver(rdg)
rtxrx = 
  radarTransceiver with properties:

                Waveform: [1×1 phased.RectangularWaveform]
             Transmitter: [1×1 phased.Transmitter]
         TransmitAntenna: [1×1 phased.Radiator]
          ReceiveAntenna: [1×1 phased.Collector]
                Receiver: [1×1 phased.ReceiverPreamp]
      MechanicalScanMode: 'None'
      ElectronicScanMode: 'None'
        MountingLocation: [3.4000 0 0.2000]
          MountingAngles: [0 0 0]
    NumRepetitionsSource: 'Property'
          NumRepetitions: 512

rdg.AzimuthResolution = azRes;

radarTransceiver имеет только одну передачу, и получите элемент, но статистический радар использует универсальную линейную матрицу (ULA), чтобы сформировать несколько лучей. Присоедините массив ULA к получить антенне radarTransceiver. Номер или элементы в ULA определяются разрешением и длиной волны азимута радара.

numRxElmt = ceil(beamwidth2ap(rdg.AzimuthResolution,lambda,0.8859)/(lambda/2))
numRxElmt = 26
elmt = rtxrx.ReceiveAntenna.Sensor;
rxarray = phased.ULA(numRxElmt,lambda/2,'Element',elmt);
rtxrx.ReceiveAntenna.Sensor = rxarray;

Сгенерируйте выборки IQ

Используйте helper3BounceGhostPaths function вычислить пути с тремя возвратами для цели и положений датчика из многопутевого сценария.

restart(scenario);
tposes = targetPoses(egoVehicle);

% Generate 3-bounce propagation paths for the targets in the scenario
paths = helper3BounceGhostPaths(tposes,rdg);

Используйте radarTransceiver сгенерировать основную полосу произвело данные IQ, полученные радаром.

time = scenario.SimulationTime; % Current simulation time
Xcube = rtxrx(paths,time);      % Generate IQ data for transceiver from the 3-bounce path model

Область значений и Доплер, обрабатывающий

Куб принятых данных имеет три измерения: быстро-разовые выборки, получите антенный элемент и медленно-разовые выборки.

size(Xcube)
ans = 1×3

   456    26   512

Используйте phased.RangeDopplerResponse Системный объект, чтобы выполнить область значений и Доплера, обрабатывающего по первым и третьим измерениям куба данных.

rngdopproc = phased.RangeDopplerResponse( ...
    'RangeMethod','Matched filter', ...
    'DopplerOutput','Speed', ...
    'PropagationSpeed',rtxrx.ReceiveAntenna.PropagationSpeed, ...
    'OperatingFrequency',rtxrx.ReceiveAntenna.OperatingFrequency, ...
    'SampleRate',rtxrx.Receiver.SampleRate);
mfcoeff = getMatchedFilter(rtxrx.Waveform);
[Xrngdop,rggrid,rrgrid] = rngdopproc(Xcube,mfcoeff);

Beamforming

Используйте phased.PhaseShiftBeamformer Системный объект, чтобы сформировать лучи из получить элементов антенной решетки вдоль второго измерения куба данных.

azFov = rdg.FieldOfView(1);
anggrid = -azFov/2:azFov/2;
bmfwin = @(N)normmax(taylorwin(N,5,-60));
beamformer = phased.PhaseShiftBeamformer( ...
        'Direction',[anggrid;0*anggrid],...
        'SensorArray',rtxrx.ReceiveAntenna.Sensor, ...
        'OperatingFrequency',rtxrx.ReceiveAntenna.OperatingFrequency);
Xbfmrngdop = Xrngdop;
[Nr,Ne,Nd] = size(Xbfmrngdop);
Xbfmrngdop = permute(Xbfmrngdop,[1 3 2]); % Nr x Nd x Ne
Xbfmrngdop = reshape(Xbfmrngdop,[],Ne);
Xbfmrngdop = beamformer(Xbfmrngdop.*bmfwin(Ne)');
Xbfmrngdop = reshape(Xbfmrngdop,Nr,Nd,[]); % Nr x Nd x Nb
Xbfmrngdop = permute(Xbfmrngdop,[1 3 2]); % Nr x Nb x Nd

Используйте helperPlotBeamformedRangeDoppler функционируйте, чтобы построить карту угла области значений от beamformed, области значений, и Доплер обработал куб данных.

helperPlotBeamformedRangeDoppler(Xbfmrngdop,rggrid,anggrid,rtxrx);

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

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

helperPlayStatAndIQMovie(scenario,egoVehicle,rtxrx,rdg,rngdopproc,beamformer,bmfwin);

Многопутевой наземный возврат

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

[scenario, egoVehicle] = helperGroundBounceScenarioDSD;
ax3d = helperRadarChasePlot(egoVehicle);

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

viewLoc = [scenario.Actors(2).Position(1)-10 -10];
chasePlot(egoVehicle,'ViewLocation',viewLoc,'ViewHeight',0,'ViewYaw',40,'Parent',ax3d);

Многопутевой может пройти через пробел между нижней стороной автомобиля и поверхностью дороги.

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

release(rdg);
rdg.RangeRateResolution = 0.5;
rdg.FieldOfView(2) = 10;
rdg.TargetReportFormat = 'Detections';

tprofiles = actorProfiles(scenario);
rdprofiles = helperRoadProfiles(scenario);
rdg.Profiles = [tprofiles;rdprofiles];

% Create bird's eye plot and detection plotter function
[bep,detPlotterFcn] = helperSetupBEP(egoVehicle,rdg);
[ax3d,detChasePlotterFcn] = helperRadarChasePlot(egoVehicle,rdg);
camup(ax3d,[0 0 1]);
pos = egoVehicle.Position+[-5 -5 0];
campos(ax3d,pos);
camtarget(ax3d,[15 0 0]);

% Generate clustered detections
time = scenario.SimulationTime;
tposes = targetPoses(egoVehicle);
rdposes = helperRoadPoses(egoVehicle);
poses = [tposes rdposes];

[dets,~,config] = rdg(poses,time);

% Plot detections
dyndets = helperKeepDynamicObjects(dets,egoVehicle);
detPlotterFcn(dyndets,config);

Обнаружение от закрытого автомобиля возможно из-за пути с тремя возвратами, который существует между дорожным покрытием и нижней стороной красного автомобиля.

% Find the 3-bounce detection from the occluded car
i3 = find(cellfun(@(d)d.ObjectAttributes{1}.BouncePathIndex,dyndets)==3);
det3 = dyndets{i3};

% Plot the 3-bounce path between the radar and the occluded car
iBncTgt = find([poses.ActorID]==det3.ObjectAttributes{1}.BounceTargetIndex);
iTgt = find([poses.ActorID]==det3.ObjectAttributes{1}.TargetIndex);
pos = [rdg.MountingLocation;poses(iBncTgt).Position;poses(iTgt).Position]+egoVehicle.Position;
hold(ax3d,'on');
plot3(ax3d,pos(:,1),pos(:,2),pos(:,3),'r-*','LineWidth',2);
campos([-6 -15 2]); camtarget([17 0 0]);

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

% Show bounce path arriving at the occluded yellow car
campos([55 -10 3]); camtarget([35 0 0]);

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

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

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

% Restore random state
rng(rndState);

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

helperKeepDynamicObjects

function dynrpts = helperKeepDynamicObjects(rpts,egoVehicle)
% Filter out target reports corresponding to static objects (e.g. guardrail)
%
% This is a helper function and may be removed or modified in a future
% release.

dynrpts = rpts;
if ~isempty(rpts)
    if iscell(rpts)
        vel = cell2mat(cellfun(@(d)d.Measurement(4:end),rpts(:)','UniformOutput',false));
    else
        vel = cell2mat(arrayfun(@(t)t.State(2:2:end),rpts(:)','UniformOutput',false));
    end
    vel = sign(vel(1,:)).*sqrt(sum(abs(vel(1:2,:)).^2,1));
    egoVel = sign(egoVehicle.Velocity(1))*norm(egoVehicle.Velocity(1:2));
    gndvel = vel+egoVel; % detection speed relative to ground
    isStatic = gndvel > -4 & ... greater than 4 m/s departing and,
        gndvel < 8; % less than 8 m/s closing speed
    dynrpts = rpts(~isStatic);
end
end

normmax

function y = normmax(x)
if all(abs(x(:))==0)
    y = ones(size(x),'like',x);
else
    y = x(:)/max(abs(x(:)));
end
end

Похожие темы