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

Диаграммы направленности антенн (часть 3)

В примере демонстрируется применение алгоритма взвешивания антенных элементов с целью улучшения характеристик диаграммы направленности (ДН).

Подключение библиотек и вспомогательных функций

In [ ]:
using Pkg; Pkg.add("Statistics");Pkg.add("SpecialFunctions")
using SpecialFunctions,Statistics

Подключим с помощью функции include файл "helper_weight_failed_array.jl" с дополнительными функциями:

In [ ]:
include("$(@__DIR__)/helper_weight_failed_array.jl")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
Out[0]:
viewURA (generic function with 1 method)

Исходные параметры антенны

Перед моделированием ДН зададим основные параметры антенных элементов:

In [ ]:
fc = 300e6 # частота излучения антенны
c = 3e8 # скорость распространения сигнала
lambda = c/fc # длина волны
freq_rng = [50e6 1000e6] # частотный диапазон антенны

azim_ang = reshape(Vector(-180:180),1,:) # диапазон азимутальных углов
elev_ang = reshape(Vector(-90:90),1,:); # диапазон по углу места

В качестве элемента антенной решетки выберем изотропный элемент:

In [ ]:
element = EngeePhased.IsotropicAntennaElement(
    FrequencyRange = freq_rng, # частотный диапазон
    BackBaffled=false # обратное рассеяние
)
Out[0]:
IsotropicAntennaElement: FrequencyRange=[5.0e7 1.0e9] BackBaffled=false

Геометрию антенной решетки выберем прямоугольную URA. Зададим 2 индентичные антенные решетки: sURA - будет эталонной АР без взвешивания, sURAweight - со взвешиванием.

In [ ]:
size_array = [16 16] # размер антенной решетки

sURA = EngeePhased.URA(
    Size = size_array,
    ElementSpacing = [lambda/2 lambda/2] # задание расстояние между элементами
)
# дублирование антенной решетки
sURAweightElements = deepcopy(sURA) 
Out[0]:
URA:
    Element=IsotropicAntennaElement: FrequencyRange=[0.0 1.0e20] BackBaffled=false
    Size=[16 16]
    ElementSpacing=[0.5 0.5]
    Lattice=Rectangular
    ArrayNormal=x
    Taper=1

Дополнительно, с помощью функции calcElemetPosition вычислим положение антенных элементов

In [ ]:
pos_array = calcElemetPosition(sURA)
Out[0]:
3×256 Matrix{Float64}:
  0.0    0.0    0.0    0.0    0.0   …   0.0    0.0    0.0    0.0    0.0
 -3.75  -3.75  -3.75  -3.75  -3.75      3.75   3.75   3.75   3.75   3.75
  3.75   3.25   2.75   2.25   1.75     -1.75  -2.25  -2.75  -3.25  -3.75

Визуализируем АР в пространстве при помощи функции viewURA

In [ ]:
viewURA(pos_array) 
Out[0]:

1. Взвешивание прямоугольной антенной решетки

В качестве взвешиваемой функции выберем оконную функцию Тейлора "TaylorSpectrumWindow"

In [ ]:
nbar = 3 # количество боковых лепестков постоянного уровня
sll = -25 # максимальный уровень боковых лепестков (дБ)

weight = zeros(size_array...) # выделение памяти под весовые коэффициенты

# Расчет весовых коэффициентов и взвешивание АР sURAweightElements
[weight[i,:].=TaylorSpectrumWindow(size_array[1],nbar, -sll) for i in 1:(size_array[2])]
sURAweightElements.Taper  = weight
Out[0]:
16×16 Matrix{Float64}:
 0.524908  0.605639  0.74989  0.928736  …  0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736  …  0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736  …  0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736     0.74989  0.605639  0.524908
 0.524908  0.605639  0.74989  0.928736  …  0.74989  0.605639  0.524908

Построим поверхность взвешанной функции:

In [ ]:
surface(weight,title="Оконная функция Гаусса")
Out[0]:

Данное окно усиливает влияние центральных элементов и ослабляет боковые, что позволяет улучшить направелнные свойства АР. Далее, построим сечение диаграммы направелности в азимутальной плоскости до и после взвешивания:

In [ ]:
plot_pattern2_arrray(sURA,sURAweightElements,c,fc,["Без взвешивания" "После взвешивания"])
Out[0]:

На графике можно заметить, что ДН после взвешивания имеет существенно ниже уровень боковых лепестков по сравнению с невзвешанной.

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

При оценки надежности радиолокационной системы целесообразно проанализировать насколько устойчива геометрия АР к поломке случайных антенных элементов. С помощью взвешивания возможно смоделировать ситуацию выхода из строя случайных элементов антенной решетки.

С помощью функции rand зададим вероятность 10% выхода из строя любого элемента антенной решетки

In [ ]:
release!(sURA) # обновление системного объекта АР
sURAfailedElements = deepcopy(sURA)  # дублирование антенной решетки

# Имитация выхода из строя элементов с вероятностью 10%
sURAfailedElements.Taper  = Float64.(rand(size_array...) .> 0.1)
Out[0]:
16×16 Matrix{Float64}:
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  …  1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  0.0  0.0  1.0  1.0  1.0  1.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0     0.0  1.0  1.0  1.0  1.0  1.0  1.0
 0.0  1.0  1.0  1.0  1.0  0.0  1.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  …  1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  0.0  1.0  0.0  1.0  1.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  0.0  1.0  0.0  1.0  0.0     1.0  1.0  1.0  1.0  1.0  1.0  0.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 0.0  1.0  1.0  0.0  1.0  1.0  1.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  0.0  1.0  1.0  …  1.0  1.0  1.0  1.0  1.0  1.0  0.0
 1.0  0.0  1.0  1.0  1.0  1.0  1.0  1.0     0.0  1.0  1.0  1.0  1.0  1.0  1.0
 0.0  0.0  1.0  1.0  1.0  1.0  1.0  1.0     0.0  0.0  1.0  1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0     1.0  1.0  1.0  0.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0     0.0  1.0  1.0  1.0  0.0  0.0  1.0
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  …  1.0  1.0  1.0  1.0  1.0  1.0  0.0
In [ ]:
num_element = prod(size_array) # всего элементов

# количество сломанных элементов
num_failed_element = length(sURAfailedElements.Taper[sURAfailedElements.Taper.==0]) 

# вывод статистики сломанных элементов
println("Общее количество элементов: $(num_element)")
println("Количество сломанных элементов: $(num_failed_element) ($(round(num_failed_element/num_element*100)) %) ")
Общее количество элементов: 256
Количество сломанных элементов: 31 (12.0 %) 

Для визуализации сломанных элементов, воспользуемся ранее упомянутой функцией viewURA c флагом true параметра is_failed

In [ ]:
viewURA(
    pos_array; # координаты элементов
    is_failed=true, # флаг учета сломанных элементов
    weight = sURAfailedElements.Taper # коэффициенты работы элементов
)
Out[0]:

На рисунке видно, что сломанные элементы распределены случайным образом по геометрии антенной решетке.

Теперь, проанализируем влияние поломки данных элементов:

In [ ]:
plot_pattern2_arrray(sURA,sURAfailedElements,c,fc,["При полной работе" "После выхода из строя"])
Out[0]:

На графике видно, что главный лепесток остался практически без изменений, при этом уровень боковых лепестков несколько увеличился.

Заключение

Таким образом, в заключительной части, посвященной построению ДН антенных элементов и АР, был рассмотрен метод взвешивания элементов антенной решетки, позволяющий улучшить направленные характеристики антенны. Также, данный метод позволил смоделировать и оценить степень влияния выхода из строя отдельных элементов с заданной вероятностью поломки.