Этот пример показов, как смоделировать оборудование радара, обработку сигналов и окружения распространения для сценария вождения. Сначала вы моделируете сценарий шоссе, используя Automated Driving Toolbox™. Затем вы разрабатываете модель аппаратного оборудования передачи и приема радаров, обработки сигналов и трекера с помощью Radar Toolbox™. Наконец, вы моделируете многолучевые эффекты распространения на радиолокационной модели.
Вы можете смоделировать движение транспортного средства при помощи drivingScenario
объект из Automated Driving Toolbox. Затем транспортное средство основной истины может использоваться как вход к модели радара, чтобы сгенерировать синтетические обнаружения датчика. Пример этого рабочего процесса см. в разделе Моделирование радиолокационных привидений из-за многолучевого возврата. Автомобильный радар, используемый в этом примере, использует статистическую модель, которая параметризована согласно спецификациям радара высокого уровня. Типовая архитектура радара, смоделированная в этом примере, не включает определенные строения антенны, формы волны или уникальные характеристики распространения канала. При разработке автомобильного радара или когда известна специфическая архитектура радара, рекомендуется использовать радарную модель, которая включает эту дополнительную информацию.
Radar Toolbox позволяет вам оценить различные архитектуры радаров. Можно исследовать различные строения передающих и приёмных массивов, формы сигналов и цепей обработки сигналов. Можно также оценить свои проекты по различным моделям каналов, чтобы оценить их робастность к различным условиям окружающей среды. Это моделирование помогает вам определить конкретный проект, который наилучшим образом соответствует вашим требованиям приложения.
В этом примере вы узнаете, как задать модель радара из набора системных требований для радара большой дальности. Затем вы симулируете сценарий вождения, чтобы сгенерировать обнаружения из вашей модели радара. Трекер используется, чтобы обработать эти обнаружения, чтобы сгенерировать точные оценки положения и скорости транспортных средств, обнаруженных вашим автомобильным радаром.
Радиолокационные параметры заданы для формы волны непрерывной волны с частотной модуляцией (FMCW), как описано в примере Автомобильный адаптивный круиз-контроль с использованием технологии FMCW. Радар работает на центральной частоте 77 ГГц. Эта частота обычно используется автомобильными радарами. Для дальних операций радар должен обнаружить транспортные средства на максимальной области значений 250-300 метров перед автомобилем , оборудованным датчиком. Радар необходим для разрешения объектов в области значений, которые находятся на расстоянии не менее 1 метра друг от друга. Поскольку это радар, обращенный вперед, радар также должен обрабатывать цели с большой скоростью закрытия, до 230 км/час.
Радар предназначен для использования формы волны FMCW. Эти формы волны распространены в автомобильных приложениях, потому что они позволяют оценить оценивание дальности и радиальной скорости объектов посредством вычислительно эффективных операций БПФ. Для рисунка цели в этом примере радар сконфигурирован на максимальной области значений 100 метров.
% Set random number generator for repeatable results rng(2017); % Compute hardware parameters from specified long-range requirements fc = 77e9; % Center frequency (Hz) c = physconst('LightSpeed'); % Speed of light in air (m/s) lambda = freq2wavelen(fc,c); % Wavelength (m) % Set the chirp duration to be 5 times the max range requirement rangeMax = 100; % Maximum range (m) tm = 5*range2time(rangeMax,c); % Chirp duration (s) % Determine the waveform bandwidth from the required range resolution rangeRes = 1; % Desired range resolution (m) bw = range2bw(rangeRes,c); % Corresponding bandwidth (Hz) % Set the sampling rate to satisfy both the range and velocity requirements % for the radar sweepSlope = bw/tm; % FMCW sweep slope (Hz/s) fbeatMax = range2beat(rangeMax,sweepSlope,c); % Maximum beat frequency (Hz) vMax = 230*1000/3600; % Maximum Velocity of cars (m/s) fdopMax = speed2dop(2*vMax,lambda); % Maximum Doppler shift (Hz) fifMax = fbeatMax+fdopMax; % Maximum received IF (Hz) fs = max(2*fifMax,bw); % Sampling rate (Hz) % Configure the FMCW waveform using the waveform parameters derived from % the long-range requirements waveform = phased.FMCWWaveform('SweepTime',tm,'SweepBandwidth',bw,... 'SampleRate',fs,'SweepDirection','Up'); if strcmp(waveform.SweepDirection,'Down') sweepSlope = -sweepSlope; end Nsweep = 192; sig = waveform();
Радар использует изотропный элемент для передачи и равномерный линейный массив (ULA) для приема радиолокационных сигналов. Использование линейного массива позволяет радару оценить азимутальное направление отраженной энергии, полученной от целевых транспортных средств. Радар большой дальности должен обнаружить цели через зону покрытия, которая охватывает 15 степени перед автомобилем , оборудованным датчиком. 6-элементный приёмный массив удовлетворяет этому требованию, обеспечивая 17-градусную половинную ширину луча. При передаче радар использует только один элемент массива, что позволяет ему покрывать большую площадь, чем при приеме.
% Model the antenna element antElmnt = phased.IsotropicAntennaElement('BackBaffled',true); % Construct the receive array Ne = 6; rxArray = phased.ULA('Element',antElmnt,'NumElements',Ne,... 'ElementSpacing',lambda/2); % Half-power beamwidth of the receive array hpbw = beamwidth(rxArray,fc,'PropagationSpeed',c)
hpbw = 17.1800
Моделируйте радиолокационный передатчик для одного канала передачи и моделируйте предварительный усилитель приемника для каждого канала приема, используя параметры, заданные в примере Автомобильный адаптивный круиз-контроль с использованием технологии FMCW.
antAperture = 6.06e-4; % Antenna aperture (m^2) antGain = aperture2gain(antAperture,lambda); % Antenna gain (dB) txPkPower = db2pow(5)*1e-3; % Tx peak power (W) txGain = antGain; % Tx antenna gain (dB) rxGain = antGain; % Rx antenna gain (dB) rxNF = 4.5; % Receiver noise figure (dB) % Waveform transmitter transmitter = phased.Transmitter('PeakPower',txPkPower,'Gain',txGain); % Radiator for single transmit element radiator = phased.Radiator('Sensor',antElmnt,'OperatingFrequency',fc); % Collector for receive array collector = phased.Collector('Sensor',rxArray,'OperatingFrequency',fc); % Receiver preamplifier receiver = phased.ReceiverPreamp('Gain',rxGain,'NoiseFigure',rxNF,... 'SampleRate',fs); % Define radar radar = radarTransceiver('Waveform',waveform,'Transmitter',transmitter,... 'TransmitAntenna',radiator,'ReceiveAntenna',collector,'Receiver',receiver);
Радар собирает несколько свипов формы волны на каждом из линейных антенных элементов фазированной решетки. Эти собранные сдвиги образуют кубик данных, который задан в Radar Data Cube. Эти свипы когерентно обрабатываются по быстродействующим и медленным размерностям куба данных для оценки диапазона и доплеровской области значений транспортных средств.
Оцените направление поступления принятых сигналов с помощью корневой оценки MUSIC. Beamscan также используется в иллюстративных целях, чтобы помочь визуализировать пространственное распределение энергии принимаемого сигнала.
% Direction-of-arrival estimator for linear phased array signals doaest = phased.RootMUSICEstimator(... 'SensorArray',rxArray,... 'PropagationSpeed',c,'OperatingFrequency',fc,... 'NumSignalsSource','Property','NumSignals',1); % Scan beams in front of ego vehicle for range-angle image display angscan = -80:80; beamscan = phased.PhaseShiftBeamformer('Direction',[angscan;0*angscan],... 'SensorArray',rxArray,'OperatingFrequency',fc); % Form forward-facing beam to detect objects in front of the ego vehicle beamformer = phased.PhaseShiftBeamformer('SensorArray',rxArray,... 'PropagationSpeed',c,'OperatingFrequency',fc,'Direction',[0;0]);
Используйте phased.RangeDopplerResponse
объект для выполнения области значений и доплеровской обработки на кубах радиолокационных данных. Используйте окно Hanning, чтобы подавить большие боковые оси, производимые транспортными средствами, когда они близки к радару.
Nft = waveform.SweepTime*waveform.SampleRate; % Number of fast-time samples Nst = Nsweep; % Number of slow-time samples Nr = 2^nextpow2(Nft); % Number of range samples Nd = 2^nextpow2(Nst); % Number of Doppler samples rngdopresp = phased.RangeDopplerResponse('RangeMethod','FFT',... 'DopplerOutput','Speed','SweepSlope',sweepSlope,... 'RangeFFTLengthSource','Property','RangeFFTLength',Nr,... 'RangeWindow','Hann',... 'DopplerFFTLengthSource','Property','DopplerFFTLength',Nd,... 'DopplerWindow','Hann',... 'PropagationSpeed',c,'OperatingFrequency',fc,'SampleRate',fs);
Идентифицируйте обнаружения в обработанной области значений и доплеровских данных с помощью постоянного детектора частоты ложных предупреждений (CFAR). Детекторы CFAR оценивают уровень фонового шума принятых радиолокационных данных. Обнаружения обнаруживаются в местах, где степень сигнала превышает расчетный уровень шума на определенный порог. Низкие пороговые значения приводят к большему числу зарегистрированных ложных обнаружений из-за шума окружающей среды. Увеличение порога создает меньше ложных обнаружений, но также уменьшает вероятность обнаружения фактической цели в сценарии. Для получения дополнительной информации об обнаружении CFAR смотрите пример обнаружения постоянной частоты ложных предупреждений (CFAR).
% Guard cell and training regions for range dimension nGuardRng = 4; nTrainRng = 4; nCUTRng = 1+nGuardRng+nTrainRng; % Guard cell and training regions for Doppler dimension dopOver = round(Nd/Nsweep); nGuardDop = 4*dopOver; nTrainDop = 4*dopOver; nCUTDop = 1+nGuardDop+nTrainDop; cfar = phased.CFARDetector2D('GuardBandSize',[nGuardRng nGuardDop],... 'TrainingBandSize',[nTrainRng nTrainDop],... 'ThresholdFactor','Custom','CustomThresholdFactor',db2pow(13),... 'NoisePowerOutputPort',true,'OutputFormat','Detection index'); % Perform CFAR processing over all of the range and Doppler cells freqs = ((0:Nr-1)'/Nr-0.5)*fs; rnggrid = beat2range(freqs,sweepSlope); iRngCUT = find(rnggrid>0); iRngCUT = iRngCUT((iRngCUT>=nCUTRng)&(iRngCUT<=Nr-nCUTRng+1)); iDopCUT = nCUTDop:(Nd-nCUTDop+1); [iRng,iDop] = meshgrid(iRngCUT,iDopCUT); idxCFAR = [iRng(:) iDop(:)]'; % Perform clustering algorithm to group detections clusterer = clusterDBSCAN('Epsilon',2);
The phased.RangeEstimator
и phased.DopplerEstimator
объекты преобразуют местоположения обнаружений, обнаруженных в данных Доплера диапазона, в измерения и соответствующие им отклонения измерений. Эти оценки подгоняют квадратичные кривые к данным Доплера диапазона, чтобы оценить пиковое местоположение каждого обнаружения. Полученные разрешения измерений представляет собой часть области значений и доплеровской выборки данных.
Средне-корневое разрешение области значений (RMS) переданной формы волны необходимо для вычисления отклонения измерений области значений. Разрешение области значений Релея для радара большой дальности определялось ранее как 1 метр. Разрешение Релея является минимальным разделением, при котором могут быть разрешены две уникальные цели. Это значение определяет расстояние между камерами разрешения области значений для радара. Однако отклонение цели в камере разрешения определяется разрешением RMS формы волны. Для формы волны ЛЧМ, отношение между разрешением Релея и разрешением RMS задано [1].
где - разрешение области значений RMS и - разрешение области значений Релея.
Отклонение доплеровских измерений зависит от количества обработанных свипов.
Теперь создайте объекты оценивания дальности и радиальной скорости объектов с помощью предварительно определенных параметров.
rmsRng = sqrt(12)*rangeRes; rngestimator = phased.RangeEstimator('ClusterInputPort',true,... 'VarianceOutputPort',true,'NoisePowerSource','Input port',... 'RMSResolution',rmsRng); dopestimator = phased.DopplerEstimator('ClusterInputPort',true,... 'VarianceOutputPort',true,'NoisePowerSource','Input port',... 'NumPulses',Nsweep);
Чтобы еще больше улучшить точность расчетных местоположений транспортного средства, передайте обнаружения радара в трекер. Сконфигурируйте трекер, чтобы использовать расширенный фильтр Калмана (EKF), который преобразует сферические радиолокационные измерения в автомобиль , оборудованный датчиком Декартову координатную систему координат. Также сконфигурируйте трекер, чтобы использовать постоянную динамику скорости для обнаруженных транспортных средств. Путем сравнения обнаружений транспортных средств в течение нескольких временных интервалов измерения, трекер дополнительно улучшает точность положения транспортного средства и обеспечивает оценки скорости транспортного средства.
tracker = radarTracker('FilterInitializationFcn',@initcvekf,... 'AssignmentThreshold',50);
Используйте канал свободного пространства, чтобы смоделировать распространение переданных и принятых радиолокационных сигналов.
В модели свободного пространства радиолокационная энергия распространяется вдоль прямой линии зрения между радаром и транспортными средствами, как показано на следующем рисунке.
Создайте сценарий движения по шоссе с тремя транспортными средствами, движущимися в окрестностях автомобиля , оборудованного датчиком. Транспортные средства моделируются как кубоиды и имеют различные скорости и положения, определенные в сценарии вождения. Автомобиль , оборудованный датчиком движется со скоростью 80 км/ч, а остальные три автомобиля движутся со скоростью 110 км/ч, 100 км/ч и 130 км/ч соответственно. Для получения дополнительной информации о моделировании сценария вождения смотрите пример «Создание траекторий актёра и транспортного средства» Программно (Automated Driving Toolbox). Радарный датчик установлен на передней части автомобиля , оборудованного датчиком.
Чтобы создать сценарий вождения, используйте helperAutoDrivingRadarSigProc
функция. Чтобы изучить содержимое этой функции, используйте edit('helperAutoDrivingRadarSigProc')
команда.
% Create driving scenario [scenario,egoCar,radarParams] = ... helperAutoDrivingRadarSigProc('Setup Scenario',c,fc);
В следующем цикле используется drivingScenario
возражает за продвижение транспортных средств в сценарии. На каждом временном шаге симуляции кубик радиолокационных данных собирается путем сбора 192 свипов формы волны радара. Собранный кубик данных затем обрабатывается в области значений и доплер. Затем области значений и доплеровскую обработанные данные формируют лучом, и обнаружение CFAR выполняется на сформированных лучом данных. Области значений, радиальная скорость и направление измерений прибытия оцениваются для обнаружений CFAR. Эти обнаружения затем собираются в objectDetection
объекты, которые затем обрабатываются radarTracker
объект.
% Initialize display for driving scenario example helperAutoDrivingRadarSigProc('Initialize Display',egoCar,radarParams,... rxArray,fc,vMax,rangeMax); tgtProfiles = actorProfiles(scenario); tgtProfiles = tgtProfiles(2:end); tgtHeight = [tgtProfiles.Height]; % Run the simulation loop sweepTime = waveform.SweepTime; while advance(scenario) % Get the current scenario time time = scenario.SimulationTime; % Get current target poses in ego vehicle's reference frame tgtPoses = targetPoses(egoCar); tgtPos = reshape([tgtPoses.Position],3,[]); % Position point targets at half of each target's height tgtPos(3,:) = tgtPos(3,:)+0.5*tgtHeight; tgtVel = reshape([tgtPoses.Velocity],3,[]); % Assemble data cube at current scenario time Xcube = zeros(Nft,Ne,Nsweep); for m = 1:Nsweep ntgt = size(tgtPos,2); tgtStruct = struct('Position',mat2cell(tgtPos(:).',1,repmat(3,1,ntgt)),... 'Velocity',mat2cell(tgtVel(:).',1,repmat(3,1,ntgt)),... 'Signature',{rcsSignature,rcsSignature,rcsSignature}); rxsig = radar(tgtStruct,time+(m-1)*sweepTime); % Dechirp the received signal rxsig = dechirp(rxsig,sig); % Save sweep to data cube Xcube(:,:,m) = rxsig; % Move targets forward in time for next sweep tgtPos = tgtPos+tgtVel*sweepTime; end % Calculate the range-Doppler response [Xrngdop,rnggrid,dopgrid] = rngdopresp(Xcube); % Beamform received data Xbf = permute(Xrngdop,[1 3 2]); Xbf = reshape(Xbf,Nr*Nd,Ne); Xbf = beamformer(Xbf); Xbf = reshape(Xbf,Nr,Nd); % Detect targets Xpow = abs(Xbf).^2; [detidx,noisepwr] = cfar(Xpow,idxCFAR); % Cluster detections [~,clusterIDs] = clusterer(detidx.'); % Estimate azimuth, range, and radial speed measurements [azest,azvar,snrdB] = ... helperAutoDrivingRadarSigProc('Estimate Angle',doaest,... conj(Xrngdop),Xbf,detidx,noisepwr,clusterIDs); azvar = azvar+radarParams.RMSBias(1)^2; [rngest,rngvar] = rngestimator(Xbf,rnggrid,detidx,noisepwr,clusterIDs); rngvar = rngvar+radarParams.RMSBias(2)^2; [rsest,rsvar] = dopestimator(Xbf,dopgrid,detidx,noisepwr,clusterIDs); % Convert radial speed to range rate for use by the tracker rrest = -rsest; rrvar = rsvar; rrvar = rrvar+radarParams.RMSBias(3)^2; % Assemble object detections for use by tracker numDets = numel(rngest); dets = cell(numDets,1); for iDet = 1:numDets dets{iDet} = objectDetection(time,... [azest(iDet) rngest(iDet) rrest(iDet)]',... 'MeasurementNoise',diag([azvar(iDet) rngvar(iDet) rrvar(iDet)]),... 'MeasurementParameters',{radarParams},... 'ObjectAttributes',{struct('SNR',snrdB(iDet))}); end % Track detections tracks = tracker(dets,time); % Update displays helperAutoDrivingRadarSigProc('Update Display',egoCar,dets,tracks,... dopgrid,rnggrid,Xbf,beamscan,Xrngdop); % Collect free space channel metrics metricsFS = helperAutoDrivingRadarSigProc('Collect Metrics',... radarParams,tgtPos,tgtVel,dets); end
Предыдущий рисунок показывает радиолокационные обнаружения и треки для 3 целевых транспортных средств на 1,1 секунде времени симуляции. На график с левой стороны показано поле зрения камеры погони сценария вождения с точки зрения автомобиля , оборудованного датчиком (показан синим цветом). Для ссылки автомобиля , оборудованного датчиком едет со скоростью 80 км/ч, а остальные три автомобиля едут со скоростью 110 км/ч (оранжевый автомобиль), 100 км/ч (желтый автомобиль) и 130 км/ч (фиолетовый автомобиль).
Правая сторона рисунка показывает график птичьего глаза, который представляет перспективу верхней части вниз». Все автомобили, обнаружения и дорожки показаны в автомобиль , оборудованный датчиком координатных систем координат. Оцененное отношение сигнал/шум (ОСШ) для каждого радиолокационного измерения печатается рядом с каждым обнаружением. Местоположение транспортного средства, оцененное трекером, показано на графике с использованием черных квадратов с текстом рядом с ними, указывающим идентификатор каждой дорожки. Расчетная скорость трекера для каждого транспортного средства показана в виде черной линии, указывающей в направлении скорости транспортного средства. Длина линии соответствует предполагаемой скорости с более длинными линиями, обозначающими транспортные средства с более высокими скоростями относителен автомобиль , оборудованный датчиком. Трасса фиолетового автомобиля (ID2) имеет самую длинную линию, в то время как трасса желтого автомобиля (ID1) имеет самую короткую линию. Отслеживаемые скорости соответствуют ранее перечисленным смоделированным скоростям транспортного средства.
На двух графиках с нижней левой стороны показаны радиолокационные изображения, сгенерированные обработкой сигнала. Верхний график показывает, как полученные радиолокационные эхо-сигналы от транспортных средств распределены по области значений и радиальной скорости. Здесь наблюдаются все три транспортных средства. Измеренные радиальные скорости соответствуют скоростям, оцененным трекером, как показано на графике птичьего глаза. Нижний график показывает, как полученные целевые эхо-сигналы пространственно распределены по области значений и углу. Снова, все три цели присутствуют, и их местоположения совпадают с тем, что показано на графике птичьего глаза.
Из-за близости к радару оранжевый вагон все еще может быть обнаружен, несмотря на большие потери формирования луча из-за его положения хорошо за пределами 3 дБ луча луча. Эти обнаружения сгенерировали дорожку (ID3) для оранжевого автомобиля.
В предыдущей симуляции сценария вождения использовалось распространение свободного пространства. Это простая модель, которая моделирует только прямое распространение линии визирования между радаром и каждой из целей. В действительности распространение радиолокационного сигнала намного сложнее, включая отражения от нескольких препятствий перед достижением каждой цели и возвращением назад к радару. Это явление известно как многолучевое распространение. Следующий рисунок показывает один такой случай многолучевого распространения, где сигнал, поражающий цель, поступает с двух направлений: линии зрения и единственного отскока от поверхности дороги.
Общий эффект многолучевого распространения заключается в том, что принятые радиолокационные эхо-сигналы могут вмешиваться конструктивно и разрушительно. Эта конструктивная и разрушительная интерференция возникает из-за различий в длине пути между различными путями распространения сигнала. Когда расстояние между радаром и транспортными средствами изменяется, эти различия в длине пути также изменяются. Когда различия между этими путями приводят к эхо-сигналам, принимаемым радаром, которые находятся почти на 180 степени вне фазы, эхо-сигналы разрушительно объединяются, и радар не делает никакого обнаружения для этой области значений.
Замените модель канала свободного пространства на модель двухлучевого канала, чтобы продемонстрировать окружение распространения, показанную на предыдущем рисунке. Повторно используйте оставшиеся параметры в сценарии вождения и модели радара, и запустите симуляцию снова.
% Reset the driving scenario [scenario,egoCar,radarParams,pointTgts] = ... helperAutoDrivingRadarSigProc('Setup Scenario',c,fc); % Run the simulation again, now using the two-ray channel model metrics2Ray = helperAutoDrivingRadarSigProc('Two Ray Simulation',... c,fc,rangeMax,vMax,Nsweep,... % Waveform parameters rngdopresp,beamformer,cfar,idxCFAR,clusterer,... % Signal processing rngestimator,dopestimator,doaest,beamscan,tracker,... % Estimation radar,sig); % Hardware models
Предыдущий рисунок показывает график погони, график птичьего глаза и радиолокационные изображения в 1,1 секунде времени симуляции, так же как было показано для сценария распространения канала свободного пространства. Сравнивая эти два рисунков, заметьте, что для двухлучевого канала не существует никакого обнаружения для фиолетового автомобиля в это время симуляции. Эта потеря обнаружения происходит из-за того, что различия в длине пути для этого автомобиля разрушительно мешают в этой области значений, что приводит к полной потере обнаружения.
Постройте график оценок ОСШ, сгенерированных из обработки CFAR, по оценкам области значений фиолетового автомобиля из симуляций свободного пространства и двухлучевых каналов.
helperAutoDrivingRadarSigProc('Plot Channels',metricsFS,metrics2Ray);
Когда машина приближается к области значений 72 метра от радара, большие потери в оценочном ОСШ от двухлучевого канала наблюдаются относительно канала свободного пространства. Именно около этой области значений многолучевая интерференция объединяется разрушительно, что приводит к потере обнаружения сигналов. Однако обратите внимание, что трекер способен преодолеть трассу в эти моменты потери сигнала и обеспечить предсказанное положение и скорость для фиолетового автомобиля.
Этот пример продемонстрировал, как смоделировать оборудование и обработку сигналов автомобильного радара с помощью Radar Toolbox. Вы также научились интегрировать эту модель радара с симуляцией сценария вождения Automated Driving Toolbox. Сначала вы сгенерировали синтетические радиолокационные обнаружения. Затем вы обработали эти обнаружения дополнительно с помощью трекера, чтобы сгенерировать точные оценки положения и скорости в координатной системе координат автомобиль , оборудованный датчиком. Наконец, вы научились симулировать эффекты многолучевого распространения.
Представленный рабочий процесс позволяет вам понять, как решения по проекту архитектуры радара влияют на системные требования более высокого уровня. Использование этого рабочего процесса позволяет вам выбрать радарный проект, которая удовлетворяет вашим уникальным требованиям приложения.
[1] Ричардс, Марк. Основы радиолокационной обработки сигналов. Нью-Йорк: McGraw Hill, 2005.