Автомобильный радар на основе сигнала с многопозиционной частотной модуляцией (MFSK)¶
В примере рассматривается проектирование автомобильного радара на основе сигнала с многопозиционной частотной модуляцией (MFSK) для оценки дальности и скорости нескольких объектов.
Используемые функции¶
include("$(@__DIR__)/calcParamMFSK.jl")
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 = 32,
nfft::Int64=32,
lap::Int64 = 30,
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 .*1e3, permutedims(power_new),color= :jet,
gridalpha=0.5,margin=5Plots.mm,size=(900,400))
xlabel!("Частота, МГц")
ylabel!("Время, мс")
title!(title)
return fig
end;
1. Описание структуры модели¶
Структурная схема cхожа с примером (Автомобильный радар для оценки дальности и скорости нескольких целей). Главными отличия заключаются в:
- Использовании генератора непрерывного излучения с многопозиционной частотной модуляцией;
- Обработке сигнала, учитывающей два параметра: частоту биений и сдвига по фазе между развертками
Блок обработки сигнала
Подсистема обработки сигналов состоит из следующих этапов:
- Принятый сигнал перемножается с комплексно-сопряженным входных сигналом в блоке Dechirp, в результате чего сигнал демодулируется;
- На следующем этапе демодулярованный сигнал обрабатывает в блоке Sweep Spectrum, где рассчитывается его спектр в частотной области с помощью быстрого преобразования Фурье;
- Далее, происходит процесс обнаружения пиков в спектре, соответствующие целям, с использованием одномерного детектора (CA CFAR Detector)
- На заключительном этапе с помощью найденных значений частот биений и разности фаз между развертками происходит расчет оценок по дальности и скорости целей в блоке Solve Range Doppler Equation;
2. Инициализация входных параметров¶
Сценарий моделирования представляет собой следующий сценарий: транспортное средство с радаром движется из точки отсчёта со скоростью 100 км/ч (27,8 м/с)
В зоне обзора присутствуют два целевых транспортных средства, представляющие собой легковой автомобиль и грузовик, у каждого транспортного средства есть соответствующий канал распространения. Автомобиль двигается на расстоянии 50 метров от радара и движется со скоростью 60 км/ч (16,7 м/с). Грузовик расположен на расстоянии 150 метров от радара и движется со скоростью 130 км/ч (36,1 м/с).
Канал распространения сигнала представлет собой свободное пространство.
Для инициализации входных параметров модели подключим файл "calcParamMFSK.jl". Если требуется изменить значения параметров, то откройте данный файл и отредактируйте необходимые параметры.
include("$(@__DIR__)/calcParamMFSK.jl") # подключения файла с валидационными параметрами
paramRadarMFSKMT = CalcParamMFSK(); # валидация входных параметров
T = paramRadarMFSKMT.T; # шаг моделирования
SimT = T; # Время моделирования
3. Запуск модели¶
run_model("MFSK_Radar_Range_Estimation_MT",@__DIR__); # Запуск модели
4. Cчитывание результатов симуляции¶
sig_MFSK, fast_time = DataFrame2Array(MFSK) # входной ЛЧМ-сигнал
out_range, _ = DataFrame2Array(Range) # сигнал после цифровой обработки
out_speed, slow_time = DataFrame2Array(Speed); # оценки дальности
5. Визуализация работы радара¶
5.1 Cпектрограмма входного сигнала¶
Построим спектрограмму входного сигнала с помощью функции calc_spectrogram
calc_spectrogram(
sig_MFSK, # ЛЧМ-сигнал
paramRadarMFSKMT.Fs, # частота дискретизации
"Cпектрограмма сигнала c MFSK";
num_pulses=1 # количество импульсов отображения
)
Частотная составляющая спектрограммы ЗС имеет ступенчатый характер, что соответствует многопозиционной частотной модуляции сигнала. Фактически, сигнал с MFSK состоит из двух развертк сигнала FMCW с фиксированным дискретным смещением частоты. Время сканирования излученного сигнала, которое определяется произведением дискретного шага на количество шагов, примерно 2 мс, что на несколько порядков больше чем для непрерывного ЛЧМ сигнала (около 7 мкс).
5.2 Оценка дальности и скорости объектов¶
Проанализируем результат работы радара
Сравним оценки и истинные значения дальностей и скоростей (дальность до автомобиля - 50 м, до грузовика - 150 м)
println("Оценка дальности автомобиля $(round(out_range[1,1,end];sigdigits=5)) м")
println("Оценка дальности грузовика $(round(out_range[2,1,end];sigdigits=5)) м")
println("Оценка дальности автомобиля $(round(out_range[1,1,end]-50;sigdigits=5)) м")
println("Оценка дальности грузовика $(round(out_range[2,1,end]-150;sigdigits=5)) м")
Теперь сравним оценки и истинные значения скорости (относительная скорость автомобиля - 40 км/ч, грузовика - -30 км/ч)
println("Оценка относительной скорости автомобиля $(round(out_speed[1,1,end]*3.6;sigdigits=5)) км/ч")
println("Оценка относительной скорости грузовика $(round(out_speed[2,1,end]*3.6;sigdigits=5)) км/ч")
println("Погрешность оценки относительной скорости автомобиля $(round(out_speed[1,1,end]*3.6-40;sigdigits=5)) км/ч")
println("Погрешность оценки относительной скорости грузовика $(round(out_speed[2,1,end]*3.6-(-30);sigdigits=5)) км/ч")
Анализируя полученные результаты моделирования, можно заключить, что значения оценок радара соотвествует заявленной точности по дальности (1 метр) и скорости (1 км/ч)
Заключение¶
В примере было рассмотрено проектирование модели атомобильного радара с применением зондирующего сигнала с многопозиционной частотной модуляцией. В результате работы модели была найдена оценка оносительной скорости и расстояния от радара до объектов (автомобиля и грузовика) с точностью разрешения радара - 1 метр по дальности и примерно 1 км/ч по скорости.
Также необходимо отметить: использование рассмотренного сигнала позволило увеличить время сканирования по сравнению с непрерывным ЛЧМ сигналом с 7 мкс до 2 мс, что может снизить стоимость оборудования.