Сообщество Engee

Алгоритмы пеленгации Beamscan и MVDR для прямоугольной ФАР

Автор
avatar-alexey777alexey777
Соавторы
avatar-dimabalakindimabalakin
Notebook

Алгоритмы пеленгации Beamscan и MVDR для прямоугольной ФАР

В этом примере демонстрируется применение алгоритмов пеленгации Beamscan и MVDR для определения азимутального и угломестного направления прихода сигнала с применением прямоугольной фазированной антенной решетки (ФАР)

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

In [ ]:
# Фунция для считывания данных из переменной `simout`
function DataFrame2Array(X)
    squeeze(A) = reshape(A, filter(!=(1), size(A))...)
    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 squeeze(out_data), out.time
end
function plot_map_doa(X,param,n_step::Int64 = 3;title="",x_lab="Азимутальный угол, град",
    y_lab="Угол места, град",threshold = "auto")
    plotlyjs()
    PARULA_GRAD = cgrad(
        [
            "#352A87", "#0F5CDD", "#127DD8", 
            "#079CCF", "#15B1B4", "#59BD8C", 
            "#A5BE6B", "#E1B952", "#FCCE2E", 
            "#F9FB0E"
    ])
    heatmap(param.RangeAzimuths,param.RangeElevations,X[:,:,n_step],
        color=PARULA_GRAD, title=title,xlabel = x_lab,ylabel=y_lab) |> display;
    return 
end
# функция построения динамическогой визуализации изменения дальности и частоты Доплера
function calc_matrix_visual(out,param;title_name="") 
    gr()
    default(titlefontsize=12,top_margin=5Plots.px,guidefont=10,
        fontfamily = "Computer Modern",colorbar_titlefontsize=8,size=(600,400),
        margin = 2Plots.mm
    )
    PARULA_GRAD = cgrad(
        [
            "#352A87", "#0F5CDD", "#127DD8", 
            "#079CCF", "#15B1B4", "#59BD8C", 
            "#A5BE6B", "#E1B952", "#FCCE2E", 
            "#F9FB0E"
    ])

    x_grid = param.RangeAzimuths
    y_grid = param.RangeElevations
    
    heatmap(x_grid,y_grid,out[:,:,1],color=PARULA_GRAD,
        xlabel="Азимутальный угол, град",ylabel="Угол места, град",title=title_name,
        colorbartitle="Амплитуда")

    @info "Построение визуализации изменения оценок пеленга во времени..." 
    anim1 = @animate for i in axes(out,3)
        mod(i,10)==0 && (@info "$(round(100*i/size(out,3))) %")
        heatmap!(x_grid,y_grid,out[:,:,i],color=PARULA_GRAD)
    end
    @info " ✅ Построение визуализации успешно завершено..." 
    return anim1
end;
# Фунция для прогона модели
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;

1. Описание структуры модели

Рассмотрим более детально структурную схему модели:

Формирование сигнала

Данный модуль создает 2 тестовых сигнала, каждый изменяется из которых перемещается в азимутальной и угломестной плоскостях.

  • Сигнал (signal): реализует сигнал с помощью псевдослучайно последовательности с нормальным распределением. В блоке можно задать среднеквадратическое отклонение (СКО) амплитуды, математическое ожидание и количество отсчетов в сигнале;
  • Объединение (reshape): Объединяет входные сигналы по 2 размерности;
  • Направление прихода (Signal directions): формирует закон изменения азимутального и угломестного направления прихода сигнала. На выходе формируется матрица с размерностью [2,L], где L - количество сигналов.

Приемный тракт

Подсистема реализует прием и предварительное усиление пришедшего сигнала для заданной геометрии прямоугольной ФАР (в примере [10,5]) с учетом изменения направления пеленга сигнала.

  • Прямоугольная ФАР (Narrowband Rx Array): используется для моделирования приема сигнала прямоугольной ФАР с перестрой луча согласно матрице азимутально-угломестного направления;
  • Усилитель (Receiver Preamp): моделирует прохождения сигнала через МШУ для заданного усиления и коэффициента шума (шумовой температуры) ;

Алгоритмы пеленга

В данном модуле непосредственно решается задача определения направления на цель по азимуту и углу места с помощью алгоритмов MVDR Spectrum и Beamscan Spectrum.

  • MVDR Spectrum: реализует алгоритм минимизации дисперсии отклика для расчета пеленга сигнала;
  • Beamscan Spectrum: реализует алгоритм спектрального анализа луча сканирования для расчета пеленга сигнала.

Общая структурная схема системной модели пеленгации приведена ниже:

image.png

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

Для инициализации входных параметров модели подключим конфигурационный файл "Param2DBeamscanMVDRDOA.jl".

In [ ]:
include("$(@__DIR__)/Param2DBeamscanMVDRDOA.jl");
Параметры инициализированы успешно!

В рассматриваемом примере используется 2 источника сигналов с различными сценариями движения - изменения пеленга:

  • источник-1 перемещается из [30° аз., 10° мест.] в [50° аз., -5° мест.]
  • источник-2 (с меньшей мощностью на 3 дБ) перемещается из [50° аз., -5° мест.] в [30° аз., 10° мест.]

Диапазон сканирования зададим -10:60 по азимуту и -20:20 по углу места.

Если требуется изменить значения параметров, то откройте данный файл, отредактируйте необходимые параметры и сохраните изменения. Если параметры обновлены, в так случае будет выведено сообщение : "Параметры инициализированы успешно!". В противном случае, проверьте корректность изменений, внесенных в конфигурационный файл.

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

Запустим симуляцию модели с помощью ранее инициализированной функции run_model:

In [ ]:
run_model("2DBeamscanMVDRDOA", @__DIR__);
Building...
Progress 0%
Progress 7%
Progress 12%
Progress 17%
Progress 25%
Progress 32%
Progress 40%
Progress 45%
Progress 52%
Progress 57%
Progress 65%
Progress 70%
Progress 75%
Progress 82%
Progress 90%
Progress 95%
Progress 100%
Progress 100%

Как только диалоговая информация будет гласить "Progress 100%" - значит модель отработала успешно.

4. Считывание выходных данных

Результаты моделирования для залогированных выходов записываются в переменную "simout" . Воспользуемся функцией DF2Arr для считывания данных на выходе алгоритмов пеленгации:

In [ ]:
sim = collect(simout) # извлекаем вектор залогированных переменных
Ang1,_ = DataFrame2Array(sim[1]) # Результирующее направление на выходе алгоритма MVDR
Ang2,_ = DataFrame2Array(sim[4])  # Результирующее направление на выходе алгоритма Beamscan
Y1,_ = DataFrame2Array(sim[2]) # Карта откликов на выходе алгоритма MVDR
Y2,_ = DataFrame2Array(sim[3]);  # Карта откликов на выходе алгоритма Beamscan

Далее, с помощью функции plot_map_doa визуализируем результат работы алгоритмов для заданного шага моделирования:

In [ ]:
n_step =3 # номер шага моделирования
plot_map_doa(Y1,param2DBeamscanMVDRDOA,n_step;
    title="Результат работы MVDR Spectrum на $(n_step) шаге моделирования"
)
In [ ]:
n_step = 3 # номер шага моделирования
plot_map_doa(Y2,param2DBeamscanMVDRDOA,n_step;
    title="Результат работы BeamScan Spectrum на $(n_step) шаге моделирования"
)

5. Анимация результатов моделирования

Для построения анимации работы алгоритмов воспользуемся функцией "cacl_matrix_visual", результатом работы которой формируется набор изображений, сохраняемый в формате видео с расширением.gif:

In [ ]:
# Алглоритм MVDR Spectrum
anim1 = calc_matrix_visual(Y1,param2DBeamscanMVDRDOA;title_name="Результат работы MVDR Spectrum")
gif(anim1, "Visual_MVDR.gif", fps = 10);
[ Info: Построение визуализации изменения оценок пеленга во времени...
[ Info: 24.0 %
[ Info: 49.0 %
[ Info: 73.0 %
[ Info: 98.0 %
[ Info:  ✅ Построение визуализации успешно завершено...
[ Info: Saved animation to /user/models/block/Radar_models/2DBeamscanMVDRDOA/Visual_MVDR.gif

В результате, в файловом браузере текущей директории добавится файл с расширением gif.

mvdr_gif.png

Результат анимации для MVDR приведен ниже:

Visual_MVDR.gif

Аналогично вычислим динамическую анимацию для результата работы алгоритма BeamScan Spectrum:

In [ ]:
# Алглоритм BeamScan Spectrum
anim2 = calc_matrix_visual(Y2,param2DBeamscanMVDRDOA;title_name="Результат работы BeamScan Spectrum")
gif(anim2, "Visual_BeamScan.gif", fps = 10);
[ Info: Построение визуализации изменения оценок пеленга во времени...
[ Info: 24.0 %
[ Info: 49.0 %
[ Info: 73.0 %
[ Info: 98.0 %
[ Info:  ✅ Построение визуализации успешно завершено...
[ Info: Saved animation to /user/models/block/Radar_models/2DBeamscanMVDRDOA/Visual_BeamScan.gif
Visual_BeamScan.gif

Анализируя полученные графики, можно отметить, что алгоритм MVDR Spectrum имеет более высокую разрешающую способность относительно BeamScan Spectrum: при приближении целей когда расстояние междуними меньше ширины луча, их направление прихода невозможно точно определить с помощью метода сканирования луча. При этом, алгоритм MVDR Spectrum сильно ослабляет сигнал в случае даже небольшого отклонения от целевого направления, поэтому наблюдаются "мерцания" целей на диаграмме углов.

Заключение

Таким образом, В примере было рассмотрено моделирование приемного тракта с блоком обработки по угловым координатам и проведен сравнительный анализ алгоритмов пеленгации MVDR Spectrum и BeamScan Spectrum.

Результаты моделирования показали достоинства и недостатки данных алгоритмов:

  • MVDR Spectrum - целесообразно использовать когда с хорошей точностью известны направления прихода сигнала поскольку обладает высокой разрешающей способностью;
  • Beamscan Spectrum - применим в случае повышенных требований на детектирование цели т.к. обладает лучшей помехоустойчивостью, уступаю разрешающей способностью.