Antenna radiation patterns (Part 3)
The example demonstrates the application of an algorithm for weighing antenna elements in order to improve the characteristics of the radiation pattern.
Connecting libraries and auxiliary functions
let
installed_packages = collect(x.name for (_, x) in Pkg.dependencies() if x.is_direct_dep)
list_packages = ["Statistics","SpecialFunctions"]
for pack in list_packages
pack in installed_packages || Pkg.add(pack)
end
end
using SpecialFunctions,Statistics
We will connect using the function include the file "helper_weight_failed_array.jl" with additional functions:
include("$(@__DIR__)/helper_weight_failed_array.jl")
Initial antenna parameters
Before modeling the DN, we will set the basic parameters of the antenna elements:
fc = 300e6 # antenna radiation frequency
c = 3e8 # signal propagation speed
lambda = c/fc # wavelength
freq_rng = [50e6 1000e6] # antenna frequency range
azim_ang = reshape(Vector(-180:180),1,:) # azimuth angle range
elev_ang = reshape(Vector(-90:90),1,:); # the range of the seat angle
We will choose an isotropic element as an element of the antenna array.:
element = EngeePhased.IsotropicAntennaElement(
FrequencyRange = freq_rng, # frequency range
BackBaffled=false # backscattering
)
Let's choose a rectangular antenna array geometry. URA. Let's set 2 identical antenna arrays: sURA - will be the reference AP without weighing, sURAweight - with weighing.
size_array = [16 16] # antenna array size
sURA = EngeePhased.URA(
Size = size_array,
ElementSpacing = [lambda/2 lambda/2] # setting the distance between the elements
)
# duplication of the antenna array
sURAweightElements = deepcopy(sURA)
Additionally, using the function calcElemetPosition calculate the position of the antenna elements
pos_array = calcElemetPosition(sURA)
We visualize AR in space using the function viewURA
viewURA(pos_array)
1. Weighing of a rectangular antenna array
Let's choose the Taylor window function "TaylorSpectrumWindow" as the weighted function.
nbar = 3 # the number of side lobes of a constant level
sll = -25 # maximum side lobe level (dB)
weight = zeros(size_array...) # allocation of memory for weighting factors
# Calculation of weighting coefficients and weighing of AR sURAweightElements
[weight[i,:].=TaylorSpectrumWindow(size_array[1],nbar, -sll) for i in 1:(size_array[2])]
sURAweightElements.Taper = weight
Let's construct the surface of a weighted function:
surface(weight,title="The Gauss window function")
This window enhances the influence of the central elements and weakens the lateral ones, which makes it possible to improve the directional properties of the AR. Next, we will plot the cross section of the directional pattern in the azimuthal plane before and after weighing:
plot_pattern2_arrray(sURA,sURAweightElements,c,fc,["Without weighing" "After weighing"])
On the graph, you can see that the bottom after weighing has a significantly lower level of side lobes compared to the unweighted one.
2. Simulation of the failure of the elements
When assessing the reliability of a radar system, it is advisable to analyze how resistant the AR geometry is to breakage of random antenna elements. With the help of weighing, it is possible to simulate the situation of failure of random elements of the antenna array.
Using the function rand let's set the probability of 10% failure of any element of the antenna array.
release!(sURA) # updating the AR system object
sURAfailedElements = deepcopy(sURA) # duplication of the antenna array
# Simulation of the failure of the elements with a probability of 10%
sURAfailedElements.Taper = Float64.(rand(size_array...) .> 0.1)
num_element = prod(size_array) # total elements
# number of broken items
num_failed_element = length(sURAfailedElements.Taper[sURAfailedElements.Taper.==0])
# displaying statistics of broken items
println("Total number of elements: $(num_element)")
println("Number of broken elements: $(num_failed_element) ($(round(num_failed_element/num_element*100)) %) ")
To visualize the broken elements, use the previously mentioned function. viewURA with a flag true the parameter is_failed
viewURA(
pos_array; # coordinates of the elements
is_failed=true, # flag for accounting for broken items
weight = sURAfailedElements.Taper # coefficients of operation of the elements
)
The figure shows that the broken elements are randomly distributed according to the geometry of the antenna array.
Now, let's analyze the impact of the breakdown of these elements.:
plot_pattern2_arrray(sURA,sURAfailedElements,c,fc,["When fully operational" "After the failure"])
The graph shows that the main lobe remained virtually unchanged, while the level of the side lobes increased slightly.
Conclusion
Thus, in the final part devoted to the construction of the bottom antenna elements and AR, the method of weighing the elements of the antenna array was considered, which makes it possible to improve the directional characteristics of the antenna. Also, this method made it possible to simulate and evaluate the degree of impact of the failure of individual elements with a given probability of failure.