目录
- 简介
- 波束跃度
- 不同移相器位数对方向图的影响
- 不同移相器位数对波束跃度的影响
- 虚位技术
- 不同虚位位数对指向精度的影响
- 不同虚位位数对副瓣电平的影响
- 幅度相位误差分析
- 随机误差
- 周期误差
- Python代码示例
简介
阵列天线的成本、批量和可制造性等实际问题的解决方案的选择直接影响阵列天线的性能。对这些方面的考虑所导致的结果是:制造具有固定量化电平的功率分配网络和生产3位或4位(或更多位)数字移相器而不是连续可变移相器。上述选择均会在阵列上产生周期性的幅度或相位误差,它们将产生大而明显的副瓣误差或栅瓣型波瓣误差,这些峰值叫做量化瓣。同时不连续的移相器会形成不连续的波束跃度,并且可以通过使用虚位技术来获得更小的波束跃度
波束跃度
绝大多数的相控阵系统中都采用数字式移相器,移相器的移相量将 以二进制方式改变,呈现不连续性。若数字式移相器位数为 K,则移相器的最小移相量为:
则波束跃度,即由于移相器的最小移相量变化造成的波束指向的改变量
K是移相器的位数,θp是波束指向,d是单元间距,λ是波长,△φ 是移相量差值,Δθp 是由移相量差值引起的波束指向差值。
最小波束跃度
不同移相器位数对方向图的影响
一个12单元的直线阵列,扫描角度15度,移相器位数对方向图的影响如下所示:
不同移相器位数对波束跃度的影响
一个12单元的直线阵列,理想的波束跃度为1度,移相器位数对波束跃度的影响如下所示:
虚位技术
实际工程中,由于移相器的精度有限,同时出于成本的考虑采用虚位技术。就是,理论计算得到所需的的波束跃度所需的的移相器位数为k,而实际采用m位移相器(m<k),则k-m表示虚位。这时实际的移相量为理论移相量的量化,常见的量化方式有四舍五入法。
不同虚位位数对指向精度的影响
一个12单元的直线阵列, 不同虚位位数对指向精度的影响如下所示:
不同虚位位数对副瓣电平的影响
一个12单元的直线阵列, 不同虚位位数对副瓣电平的影响如下所示:
幅度相位误差分析
在工程实际中阵列天线的各单元的馈电相位是不可能达到理想的馈电相位情况的,总存在相位误差。当移相器、衰减器本身的移相、衰减特性不理想或存在单元随机相位、幅度误差时,此时的相位、幅度误差可看作是一个随机变量。
随机误差
当衰减器本身的衰减特性不理想、存在单元随机幅度误差或是阵元失效等因素的影响时,幅度误差可以看作是一个随机变量,满足一定的概率分布,因而每次随机实验得到的副瓣电平值也是不同的。远离波束峰值,并以波束峰值归一化的的平均副瓣电平如下所示:
δ2是相位误差方差,φ2是幅度误差方差,εA为效率,N为阵列规模。
阵元间距0.5λ,阵元数量16,原始阵列为等幅同相馈电,每组阵列随机产生-40到40度的相位误差的,产生100W组样本,并计算每组的相位均方根误差对和阵列天线副瓣电平,并绘制误差线,点线是该相位均方根误差下的副瓣电平的平均值,竖线是副瓣电平的最大值和最小值,如下所示:
周期误差
阵列天线的成本、批量和可制造性等实际问题的解决方案的选择直接影响阵列天线的性能。对这些方面的考虑所导致的结果是:制造具有固定量化电平的功率分配网络和生产3位或4位(或更多位)数字移相器而不是连续可变移相器,以及采用时间延迟单元对宽带相扫子阵馈电来代替每个天线单元使用一个时间延迟单元。上述选择均会在阵列上产生周期性的幅度或相位误差,就像阵列是由具有个别特定量化状态的子阵所构成的一样,由于这些误差是高度相关的,它们将产生大而明显的副瓣误差或栅瓣型波瓣误差,这些峰值叫做量化瓣。
阵元间距0.5λ,阵元数量24,不同衰减器位数对应的切比雪夫阵列激励分布如下所示:
阵元间距0.5λ,阵元数量24,不同衰减器位数对应的切比雪夫阵列分布的方向图如下所示:
阵元间距0.5λ,阵元数量24,不同衰减器位数和不同移相器位数对应的切比雪夫阵列分布的方向图如下所示:
Python代码示例
绘制随机误差对副瓣电平影响的误差线python代码如下所示:
import numpy as np
from Array_Pattern import Pattern
import sys
import matplotlib.pyplot as plt
# 计算均方根误差
def get_rmse(records_real, records_predict):
if len(records_real) == len(records_predict):
return np.sqrt(sum([(x - y) ** 2 for x, y in zip(records_real, records_predict)]) / len(records_real))
else:
return None
f = 1.5 # 频率
k = 0.5 # 间距系数
n_cell = 12 # 阵元数量
n_group = 100000 # 样本数
low_limit = -20 # 随机相位的下限
high_limit = 20 # 随机相位的上限
# 单元天线的方向图,全向方向图
data_angle = np.arange(-180, 181) / 2
data_gain = np.ones(361)
# 阵列的位置和幅度,0.5λ间距,等幅度
myposition = np.arange(n_cell) * 300 / f * k
mypower = np.ones(n_cell)
# 产生随机相位样本
myphase_list = np.random.uniform(low_limit, high_limit, (n_group, n_cell))
# 产生零相位列表
phase_real = np.zeros(n_cell)
# 记录RMSE,角度误差,SSLL
pattern_dict = {'RMSE': [], 'Angle_Error': [], 'SSLL': []}
# 记录最大角度误差和最大副瓣电平的相位
sll_phase_list = []
angle_phase_list = []
angle_error = -sys.maxsize
ssll = -sys.maxsize
# 进行方向图综合并记录数据
pattern = Pattern()
for i in range (0,n_group):
# 计算阵列方向图
array_pattern = pattern.pattern_main(f, n_cell, myposition, myphase_list[i], mypower, data_angle, data_gain, 1)
myphase_temp = np.mean(myphase_list[i])
phase_predict = myphase_list[i]-myphase_temp
# 计算阵列方向图的最大值和角度并记录相位
array_angle = pattern.Pattern_Max(array_pattern,data_angle)
if abs(array_angle[1]) >= angle_error:
angle_phase_list.append(myphase_list[i].tolist())
angle_error = abs(array_angle[1])
# 计算阵列方向图的副瓣电平并记录相位
array_ssll = pattern.Pattern_SSLL(array_pattern,data_angle)
if (array_ssll[0] >= ssll):
sll_phase_list.append(myphase_list[i].tolist())
ssll = array_ssll[0]
# 计算相位的均方根误差
phase_rmse = int(get_rmse(phase_real, phase_predict))
# 记录数据
pattern_dict['RMSE'].append(phase_rmse)
pattern_dict['Angle_Error'].append(array_angle[1])
pattern_dict['SSLL'].append(round(array_ssll[0],1))
# 归类数据
rmse_min = min(pattern_dict['RMSE'])
rmse_max = max(pattern_dict['RMSE'])
rmse_list = np.arange(rmse_min, rmse_max+1)
ssll_list =[[] for i in range(rmse_max-rmse_min+1)]
for i in range(0,len(pattern_dict['RMSE'])):
ssll_list[pattern_dict['RMSE'][i]-rmse_min].append(pattern_dict['SSLL'][i])
ssll_mean = []
ssll_min_list=[]
ssll_max_list =[]
for i in range(0,len(rmse_list)):
ssll_mean .append(np.mean(ssll_list[i]))
ssll_min_list.append(np.min(ssll_list[i]))
ssll_max_list.append(np.max(ssll_list[i]))
# 绘制误差线
x = rmse_list
y = np.array(ssll_mean)
lower_error = np.array(ssll_mean)-np.array(ssll_min_list)
upper_error = np.array(ssll_max_list)-np.array(ssll_mean)
asymmetric_error = [lower_error, upper_error]
fig = plt.figure()
plt.errorbar(x, y, yerr=asymmetric_error, fmt='-o')
plt.show()