Автомобильный радар для оценки дальности одной цели¶
В примере рассматривается проектирование системной модели автомобильного радара на основе сигнала с линейной частотной модуляции (ЛЧМ) для определения дальностей объектов.
Используемые функции¶
using DSP,FFTW,LinearAlgebra
function run_model( name_model, path_to_folder ) # определение функции для прогона модели
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
else
model = engee.load( Path, force=true ) # Загрузить модель
engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return
end;
function DataFrame2Array(X)
out = collect(X)
out_data = zeros(eltype(out.value[1]),size(out.value[1],1),size(out.value[1],2),length(out.value))
[out_data[:,:,i] = out.value[i] for i in 1:length(out.value)]
return out_data, out.time
end
function calc_spectrogram(x::Array,fs::Real,title::String;
num_pulses::Int64 = 4,
window_length::Int64 = 64,
nfft::Int64=512,
lap::Int64 = 60,
thesh::Real = -Inf)
gr()
spec_out = spectrogram(x[:,:,1:num_pulses][:],window_length,lap;window=kaiser(window_length,3.95),nfft=nfft,fs=fs)
power = pow2db.(spec_out.power)
power .= map(x -> x < thesh ? thesh : x,power)
power_new = zeros(size(power))
power_new[1:round(Int64,size(power,1)/2),:] .= power[round(Int64,size(power,1)/2)+1:end,:]
power_new[round(Int64,size(power,1)/2)+1:end,:] .= power[1:round(Int64,size(power,1)/2),:]
fig = heatmap(fftshift(spec_out.freq).*1e-6,spec_out.time .*1e6, permutedims(power_new),color= :jet,
gridalpha=0.5,margin=5Plots.mm,size=(900,400))
xlabel!("Частота, МГц")
ylabel!("Время, мкс")
title!(title)
return fig
end;
1. Описание структуры модели¶
1.1 Общая схема системной модели¶
Общая структурная схема системной модели представлена ниже:
Рассмотрим более детально структуру модели:
- Генератор ЛЧМ-сигнала (FMCW Waveform): в качестве зондирующего сигнала (ЗС) используется непрерывный ЛЧМ-сигнал;
- Передатчик (Transmitter): в передатчике усиливается сигнал и формируется диаграмма направленности (ДН);
- Среда распространения (Channel): сигнал распространяется до целей и обратно до приемника, при этом учитывается аттенюация в зависимости от расстояния до цели;
- Объект (Car): представляет собой движущийся автомобиль;
- Приемник (Receiver Preamp): сигнал отраженный от машины поступает на приемную антенную решетку и усиливается, при этом учитываются собственные тепловые шумы приемника;
- Цифоровая обработка сигнала (Signal Processing): оценивает дальность транспортного средства.
Схема работы модели представлена на рисунке ниже.
1.2 Описание этапов цифровой Обработки сигнала¶
В радилокационном приемнике отраженный сигнал проходит несколько этапов обработки прежде чем будет получена оценка дальности до целевого объекта - автомобиля. Процесс обработки сигналов (Signal Processing) состоит из двух этапов:
- 1 Этап: Обработка сигнала по дальности. Принятый сигнал перемножается со комплексно-сопряженным входных сигналом, в результате возникает разностная частота (или частота биений) вследствие движения цели между отраженным и ЗС. Затем в происходит когерентное накопление 64 импульсов, которые складываются в подсистеме Сoherent Integration, что повышает отношение сигнал/шум. Далее, данные передаются в блок Range Response, который выполняет быстрое преобразование Фурье (БПФ) для последующей оценки дальности.
- 2 Этап: обнаружение и оценка дальности объекта состоит из 5 параллельных каналов обработки данных для обнаружения и оценки дальности целевого объекта.
На этапе 2 каждый канал включает в себя 3 этапов обработки:
Обнаружения объекта: данные радара сначала передаются в одномерный обнаружитель с заданной вероятностью ложных тревоги (CFAR), использующий алгоритм скользящее-среднего окна. Этот блок определяет наличие отраженного сигнала.
Кластеризация: затем выполняется процесс кластеризации в блоке "DBSCAN Clusterer", где объединяются ячейки обнаружения в группы по дальности, используя данные полученные в блоке CFAR.
Оценка дальности: в заключительном этапе определения объектов обнаружения и кластеров последним шагом является блок Range Estimator. На этом этапе оценивается дальность обнаружения целей по данным радара.
1.3 Модель канала и цели¶
Подсистема модели «Канал и цель» имитирует распространение сигнала и его отражение от транспортного средства — цели.
- Канал — имитирует распространение сигнала между транспортным средством-радаром и транспортным средством-целью. Канал может быть настроен как канал прямого прохождения в свободном пространстве (модель Free Space Channel) или как двухлучевой канал, в котором сигнал поступает на приёмник как по прямому, так и по отражённому от земли пути (модель Two-Ray Channel). По умолчанию выбран канал в свободном пространстве.
- Цель - Отражает падающий сигнал и моделирует траекторию движения целевого транспортного средства. Подсистема, показанная ниже, состоит из двух частей: модели цели для имитации отраженного сигнала (блок - Target) и модели объекта в пространстве для имитации динамики движения целевого транспортного средства (блок - Platform).
2.Инициализация входных параметров¶
В сценарии модели транспортное средство, оснащенное радаром, начинает движение из точки отсчёта со скоростью 100 км/ч (27,8 м/с), а целевой объект начинает движение в 43 метрах перед ним со скоростью 96 км/ч (26,7 м/с). Положения и скорости радара и цели используются в канале распространения для расчёта задержки, эффекта Доплера и затухания сигнала.
Для инициализации входных параметров модели подключим файл "FMCWParam.jl". Если требуется изменить значения параметров, то откройте данный файл и отредактируйте необходимые параметры.
include("$(@__DIR__)/FMCWParam.jl") # подключение файла с входными параметрами
paramRadarFMCW = FMCWParam(); # запись входных параметров в структуру
T = paramRadarFMCW.T; # шаг дискретизации модели
simT = 640*T; # время симуляции модели
3. Запуск модели¶
Запустим расчет симуляции модели при помощи функции run_model:
run_model("FMCW_Radar_Range_Estimation",@__DIR__); # Запустить модель
4. Cчитывание выходных данных¶
Извлечем результаты симуляции из переменных, записанных в рабочую область, в массив для дальнейшей визуализации:
input_signal, _ = DataFrame2Array(in_sig) # входной ЛЧМ-сигнал
dec_signal, _ = DataFrame2Array(dec_sig) # сигнал после цифровой обработки
range_estimate, slow_time = DataFrame2Array(rng_est) # оценки дальности
RPos, fast_time = DataFrame2Array(RPos) # положение радара
CPos,_ = DataFrame2Array(CPos); # положение объекта
5. Визуализация работы радара¶
5.1 Cпектрограмма входного сигнала¶
Сначала рассмотрим спектрограмму излученного ЛЧМ-сигнала.
calc_spectrogram(
input_signal, # ЛЧМ-сигнал
paramRadarFMCW.Fs, # частота дискретизации
"Cпектрограмма ЛЧМ-сигнала";
num_pulses=4 # количество импульсов отображения
)
Спектрограмма приведенная выше, показывает, что девиация частоты составляет 150 МГц c периодом каждые 7 микросекунд, что соответствует разрешению примерно в 1 метр.
5.2 Cпектрограмма сигнала после цифровой обработки¶
Далее, рассмотрим спектрограмму сигнала после цифровой обработки:
calc_spectrogram(
dec_signal[:,:,2:end], # сигнал после обработки (отображается со 2 импульса)
paramRadarFMCW.Fs/paramRadarFMCW.NumSweeps, # частота дискретизации
"Cпектрограмма сигнала после обработки";
num_pulses=4, # количество импульсов
thesh=-300 # порог, дБ
)
На графике показано, что частота биений, создаваемая объектов, составляет приблизительно 100 кГц. Обратите внимание, что после обработки сигнал имеет только одну частотную составляющую. Итоговая оценка дальности рассчитывается на основе частоты биений, с точностью в 1 метр.
5.3 Оценка дальности до объекта¶
И наконец, посмотрим на результат работы радара:
gr()
true_range = [norm(CPos[:,1,i].-RPos[:,1,i]) for i in 1:size(CPos,3)]
p1 = plot(Vector(slow_time)*1e3,range_estimate[:],label="оценка расстояния",margin=5Plots.mm,
titlefont=font(10,"Computer Modern"),guidefont = font(8,"Computer Modern"),legendfont = font(8,"Computer Modern"))
plot!(Vector(fast_time)*1e3,true_range,label="истинное расстояние")
ylabel!("Расстояние, м")
title!("Зависимость оценки расстояния до цели от времени")
p2 = plot(Vector(slow_time)*1e3,abs.(range_estimate[:].-true_range[1:paramRadarFMCW.NumSweeps:end]),lab="",
titlefont=font(10,"Computer Modern"),guidefont = font(8,"Computer Modern"),legendfont = font(8,"Computer Modern"))
xlabel!("Время, мс")
ylabel!("Расстояние, м")
title!("Отклонение оценки")
plot(p1,p2,layout=(2,1),size=(900,460))
Таким образом, точность оценки расстояние от радара до целевого объекта соответствует заявленной точности - 1 м.
5.4 Анализ влияния двухлучевого распространения сигнала¶
Результат из предыдущего пункта достигается при модели канала прямого распространения в свободном пространстве. В действительности для распространения между транспортными средствами часто используется несколько путей между передатчиком и приемником. Следовательно, сигналы с разных путей могут складываться либо в фазе или в противофазе.
Если установить модель распространение по двухлучевому каналу (Two-Ray), являющийся простейшим многолучевым каналом, можно заметить, что главную частоту биений невозможно различить на фоне спектра шума (см. спектрограмму ниже) поскольку прямой сигнал складываются с отраженным.
Залючение¶
В примере было рассмотрено моделирование базовой модели атомобильного радара с применение в качестве зондирующего сигнала - непрерывный ЛЧМ-сигнал. В результате работы модели была найдена оценка расстояние от радара до целевого объекта (автомобиля) с точностью разрешения радара - 1 метр.
Также было исследовано влияние модели распространения сигнала: канал прямого распространения и канал двулучевого распространения. Результаты показали, что модель двухлучевого распространения может негативно влиять на работу радара путем компенсации компоненты частоты биения, и тем самым, делая невозможным оценирование дальности.