Документация Engee
Notebook

Автомобильный радар на основе сигнала с многопозиционной частотной модуляцией (MFSK)

В примере рассматривается проектирование автомобильного радара на основе сигнала с многопозиционной частотной модуляцией (MFSK) для оценки дальности и скорости нескольких объектов.

Используемые функции

In [ ]:
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. Описание структуры модели

image_2.png

Структурная схема cхожа с примером (Автомобильный радар для оценки дальности и скорости нескольких целей). Главными отличия заключаются в:

  • Использовании генератора непрерывного излучения с многопозиционной частотной модуляцией;
  • Обработке сигнала, учитывающей два параметра: частоту биений и сдвига по фазе между развертками

Блок обработки сигнала

image_2.png

Подсистема обработки сигналов состоит из следующих этапов:

  1. Принятый сигнал перемножается с комплексно-сопряженным входных сигналом в блоке Dechirp, в результате чего сигнал демодулируется;
  2. На следующем этапе демодулярованный сигнал обрабатывает в блоке Sweep Spectrum, где рассчитывается его спектр в частотной области с помощью быстрого преобразования Фурье;
  3. Далее, происходит процесс обнаружения пиков в спектре, соответствующие целям, с использованием одномерного детектора (CA CFAR Detector)
  4. На заключительном этапе с помощью найденных значений частот биений и разности фаз между развертками происходит расчет оценок по дальности и скорости целей в блоке Solve Range Doppler Equation;

2. Инициализация входных параметров

Сценарий моделирования представляет собой следующий сценарий: транспортное средство с радаром движется из точки отсчёта со скоростью 100 км/ч (27,8 м/с)

В зоне обзора присутствуют два целевых транспортных средства, представляющие собой легковой автомобиль и грузовик, у каждого транспортного средства есть соответствующий канал распространения. Автомобиль двигается на расстоянии 50 метров от радара и движется со скоростью 60 км/ч (16,7 м/с). Грузовик расположен на расстоянии 150 метров от радара и движется со скоростью 130 км/ч (36,1 м/с).

Канал распространения сигнала представлет собой свободное пространство.

Для инициализации входных параметров модели подключим файл "calcParamMFSK.jl". Если требуется изменить значения параметров, то откройте данный файл и отредактируйте необходимые параметры.

In [ ]:
include("$(@__DIR__)/calcParamMFSK.jl") # подключения файла с валидационными параметрами
paramRadarMFSKMT = CalcParamMFSK(); # валидация входных параметров
T = paramRadarMFSKMT.T; # шаг моделирования
SimT = T; # Время моделирования

3. Запуск модели

In [ ]:
run_model("MFSK_Radar_Range_Estimation_MT",@__DIR__); # Запуск модели
Building...
Progress 0%
Progress 100%
Progress 100%

4. Cчитывание результатов симуляции

In [ ]:
sig_MFSK, fast_time = DataFrame2Array(MFSK) # входной ЛЧМ-сигнал
out_range, _ = DataFrame2Array(Range) # сигнал после цифровой обработки
out_speed, slow_time = DataFrame2Array(Speed); # оценки дальности

5. Визуализация работы радара

5.1 Cпектрограмма входного сигнала

Построим спектрограмму входного сигнала с помощью функции calc_spectrogram

In [ ]:
calc_spectrogram(
    sig_MFSK, # ЛЧМ-сигнал
    paramRadarMFSKMT.Fs, # частота дискретизации
    "Cпектрограмма сигнала c MFSK";
    num_pulses=1 # количество импульсов отображения
)
Out[0]:

Частотная составляющая спектрограммы ЗС имеет ступенчатый характер, что соответствует многопозиционной частотной модуляции сигнала. Фактически, сигнал с MFSK состоит из двух развертк сигнала FMCW с фиксированным дискретным смещением частоты. Время сканирования излученного сигнала, которое определяется произведением дискретного шага на количество шагов, примерно 2 мс, что на несколько порядков больше чем для непрерывного ЛЧМ сигнала (около 7 мкс).

5.2 Оценка дальности и скорости объектов

Проанализируем результат работы радара

Сравним оценки и истинные значения дальностей и скоростей (дальность до автомобиля - 50 м, до грузовика - 150 м)

In [ ]:
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)) м")
Оценка дальности автомобиля 49.664 м
Оценка дальности грузовика 149.99 м
Оценка дальности автомобиля -0.3361 м
Оценка дальности грузовика -0.011043 м

Теперь сравним оценки и истинные значения скорости (относительная скорость автомобиля - 40 км/ч, грузовика - -30 км/ч)

In [ ]:
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)) км/ч")
Оценка относительной скорости автомобиля 39.941 км/ч
Оценка относительной скорости грузовика -30.857 км/ч
Погрешность оценки относительной скорости автомобиля -0.059183 км/ч
Погрешность оценки относительной скорости грузовика -0.85661 км/ч

Анализируя полученные результаты моделирования, можно заключить, что значения оценок радара соотвествует заявленной точности по дальности (1 метр) и скорости (1 км/ч)

Заключение

В примере было рассмотрено проектирование модели атомобильного радара с применением зондирующего сигнала с многопозиционной частотной модуляцией. В результате работы модели была найдена оценка оносительной скорости и расстояния от радара до объектов (автомобиля и грузовика) с точностью разрешения радара - 1 метр по дальности и примерно 1 км/ч по скорости.

Также необходимо отметить: использование рассмотренного сигнала позволило увеличить время сканирования по сравнению с непрерывным ЛЧМ сигналом с 7 мкс до 2 мс, что может снизить стоимость оборудования.

Блоки, использованные в примере