文章目录
- 一、概述
- 二、空间谱的概念
- 2.1 均匀直线阵的输入信号
- 2.2 均匀直线阵的空间频率
- 2.3 均匀直线阵信号方向矢量
- 2.4 均匀直线阵的空间傅里叶变换
- 2.5 空间分辨率
- 三、python语言实现空间谱变换
- 四、Tips
一、概述
阵列信号处理是现代信号处理的一个重要分支,其涉及雷达、声呐、通信、电子侦察等多个领域,应用十分广泛,本系列教程拟通过通俗易懂的python语言,实现阵列信号处理,与大家共同探索阵列信号处理的奥秘。
二、空间谱的概念
2.1 均匀直线阵的输入信号
图2.1 线阵接收平面波示意图
, 以 角度人射到均匀直线线阵, 均匀线阵由 个阵元等间距 (阵元间距为 ) 排列成一条直线组成, 线阵基线在 轴, 垂直于阵列的方向为法线方向, 人射方位角 是信号人射方向与线阵法线的夹角, 每个阵元接一部数字接收机,通过推导可得,第 个接收机收到信号 为:
个不同方向的正弦信号, 那么第 个阵元接收到的信号 为 个信号之和, 即:
2.2 均匀直线阵的空间频率
, 个阵元同时采样 (快拍), 得到一次快拍 数据 (空间采样数据), 当接收为单个信号时, 式 变为:
进行变换,快拍空间序列可变为:
为空间数字频率 ,
个阵元接收到的信号快拍为:
是 个正弦离散信号的叠加, 个空间数字频率为
个空间频率 反映了信号的空间分布
通过上述对空间频率的分析可以发现:
- 对于频率相同的多个信号 相同 , 由于来波方向不同 不同 时, 那么空间频率
- 当信号方向相同 ( 相同), 频率不同 ( 不同) 时, 那么空间频率
2.3 均匀直线阵信号方向矢量
一般为了理论推导方便, 可以认为接收的信号为复信号, 对实信号进行希尔伯特变换就可以得到复信号。
为一个复正弦信号, 即
可以等价为相位延迟 , 那么阵列收到信号为:
那么:
其中:
通过上述对方向矢量的分析可以发现:
- 方向矢量由各个阵元的相位延迟 组成。
26 - 每次快拍 矢量不同, 但不同快拍各个阵元相位延迟不变, 因此方向矢量
- 方向矢量由各个阵元相位延迟组成, 相位延迟又由来波方向、阵元位置与信号中心频率决定, 因此方向矢量可以反映来波方向与信号的中心频率。
, 又称做阵列流形。矢量 称为第
DOA估计的任务就是研究如何由观测信号及阵列结构估计出阵列流形中包含的信源个数及其方向。
2.4 均匀直线阵的空间傅里叶变换
进行 DTFT 可以得到连续的频谱 为
其幅度谱
的峰值位置空间频率 反映的空间信号位置并不直接, 可直接转换为与方位 有关的量 。将空间频率代人变为:
直接搜索 的峰值位置 来求方位。 是连续谱, 对于峰值位置的搜索不可能计算无数个点进行比较, 实际应用中可通过对 的方位 等分,如按 等分成 3600 个角度离散点), 计算离散点的 , 然后搜索峰值位置。
将空间谱写为矢量形式
那么:
2.5 空间分辨率
这里我们直接给出结论,详细推导过程可参考《宽带阵列信号波达方向估计理论与方法》。
), 分辨力越高, 另外分辨力与方位有关, 当
三、python语言实现空间谱变换
# 导入模块
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# 生成快拍数据
def gen_signal(fre, t_0, theta, speed, numbers, space):
res = []
for i in range(numbers):
res.append(np.exp(2j*np.pi*fre*t_0 + 2j*np.pi*fre*i*space*np.sin(theta)/speed))
return np.array(res)
# 生成方向矢量
def steer_vector(fre, theta, speed, numbers, sapce):
alphas = []
for i in range(numbers):
alphas.append(np.exp(2j*np.pi*fre*i*space*np.sin(theta)/speed))
return np.array(alphas).reshape(-1, 1)
# 计算空间谱
def cal_spectrum(fre, speed, numbers, space, signal):
mags = []
thetas = np.linspace(-np.pi/2, np.pi/2, 1800)
for _theta in thetas:
_alphas = steer_vector(fre, _theta, speed, numbers, space)
projection = np.matmul(np.conjugate(_alphas).T, signal.reshape(-1, 1))
mags.append(projection[0][0])
mags = np.array(mags)
return thetas/np.pi*180, mags
# 初始化数据
fs = 20000
# 定义源信号
fre = 100
t = np.arange(0, 0.01, 1/fs)
theta1 = -np.pi / 6
theta2 = np.pi / 3
# 传播速度
speed = 340
# 阵元数量
numbers = 32
# 阵元之间距离
space = 1
# 生成模拟快拍数据
signals = []
for t_0 in t:
signal1 = gen_signal(fre, t_0, theta1, speed, numbers, space)
signal2 = gen_signal(fre, t_0, theta2, speed, numbers, space)
signal = signal1 + signal2
signals.append(signal.tolist())
signals = np.array(signals).T
# 计算空间谱
thetas, mags = cal_spectrum(fre, speed, numbers, space, signal)
plt.figure(figsize=(10, 2))
plt.plot(thetas, abs(mags))
plt.xlim(-90, 90)
plt.xlabel('degree')
plt.ylabel('mag')
plt.show()
图3.1 空间谱变换结果
四、Tips
文中如有错误或不清晰的地方,敬请谅解,可留言指出,笔者将及时答复、更改,希望共同进步,谢谢支持。