# phased_MUSICEstimator2D


使用窄带 MUSIC 算法估计二维到达方向

函数库: TyPhasedArray

# 说明

phased_MUSICEstimator2D 系统对象为二维平面或三维阵列(如均匀矩形阵列(URA))实现了窄带多信号分类(MUSIC)算法。MUSIC 是一种高分辨率测向算法,能够分辨间距较近的信号源。该算法基于传感器协方差矩阵的特征空间分解。

估计到达方向(DOA):

  1. 定义并设置 phased_MUSICEstimator2D 系统对象。请参阅构造。

  2. 调用 step 方法,根据 phased_MUSICEstimator2D 的属性估计 DOA。

# 构造

# 语法

estimator = phased_MUSICEstimator2D() 
estimator = phased_MUSICEstimator2D(; Name=Value)

# 说明

estimator = phased_MUSICEstimator2D() 创建一个 MUSIC DOA 估计器系统对象 estimator。


estimator = phased_MUSICEstimator2D(; Name=Value) 创建一个系统对象 estimator,其中每个指定的属性 Name 都设置为指定的 Value。您还可以按照 (Name1=Value1,...,NameN=ValueN) 的任意顺序指定其他名称-值对参数。

# 属性

SensorArray - 传感器阵列
具有默认阵列属性(默认)的 phased_ULA 阵列 | 相控阵系统工具箱 阵列系统对象

传感器阵列,指定为相控阵系统工具箱阵列系统对象。

示例: phased_URA()

PropagationSpeed - 信号传播速度
physconst("LightSpeed")(默认) | 实值正标量

信号传播速度,指定为实值正标量。单位为 m/s。默认传播速度是 physconst("LightSpeed") 返回的值。

示例: 3e8

OperatingFrequency - 工作频率
300e6(默认值) | 正标量

工作频率,指定为正标量。单位为 hz。

示例: 1e9

ForwardBackwardAveraging - 执行前后平均
false(默认值) | true

执行前后平均,指定为 false 或 true。将此属性设为 true,可使用前后平均估算具有共轭对称阵列流形的传感器阵列的协方差矩阵。

AzimuthScanAngles - 方位扫描角度
collect(-90:90)(默认) | 实值向量

方位角扫描角度,指定为实值向量。角度单位为度。角度值必须介于 -180° 和 180° 之间(含 180°),并按升序排列。

示例: collect(-30:20)

ElevationScanAngles - 仰角扫描角度
0(默认) | 实值向量

以实值向量形式指定的仰角扫描角度。角度单位为度。角度值必须介于 -90° 和 90° 之间(包括 90°),并按升序排列。

示例: collect(-70:75)

NumSignalsSource - 信号数量来源
"Auto"(默认) | "Property"

到达信号数量的来源,指定为 "Auto" 或 "Property"。

  • "Auto" - 系统对象使用 NumSignalsMethod 属性中指定的方法估算到达信号的数量;

  • "Property" - 使用 NumSignals 属性指定到达信号的数量。

NumSignalsMethod - 用于估计到达信号数量的方法
"AIC"(默认) | "MDL"

用于估计到达信号数量的方法,指定为 "AIC" 或 "MDL"。

  • "AIC" - Akaike 信息准则;

  • "MDL" - 最小描述长度标准。

依赖关系

要启用此属性,请将 NumSignalsSource 设置为 "Auto"。

NumSignals - 到达信号的数量
1(默认) | 正整数

用于 DOA 估计的到达信号数,指定为正整数。

示例: 3

依赖关系

要启用此属性,请将 NumSignalsSource 设置为 "Property"。

# 方法

函数 说明
step 使用 2-D MUSIC 估算到达方向

# 示例

估算两个信号的 DOAs

假设两个频率分别为 450 Hz 和 600 Hz 的正弦波从两个不同方向冲击 URA。信号分别从方位角 -37°、仰角 0° 和方位角 17°、仰角 20° 到达。使用二维 MUSIC 估算这两个信号的到达方向。阵列工作频率为 150 MHz,信号采样频率为 8 kHz。

using TyPhasedArray
f1 = 450.0
f2 = 600.0
doa1 = [-37; 0]
doa2 = [17; 20]
fc = 150e6
c = physconst("LightSpeed")
lam = c / fc
fs = 8000

使用默认各向同性元件创建 URA。设置元件的频率响应范围。

array = phased_URA(; Size=[11 11], ElementSpacing=[lam / 2 lam / 2])
array.Element.FrequencyRange = [50.0e6 500.0e6]

创建两个信号并添加随机噪声。

t = collect(0:(1 / fs):1)
x1 = cos.(2 * pi * t * f1)
x2 = cos.(2 * pi * t * f2)
x = collectPlaneWave(array, [x1 x2], [doa1 doa2], fc)
noise = 0.1 * (randn(size(x)) + 1im * randn(size(x)))

创建并执行二维 MUSIC 估计器,以找到到达方向。

estimator = phased_MUSICEstimator2D(;
    SensorArray=array,
    OperatingFrequency=fc,
    NumSignalsSource="Property",
    NumSignals=2,
    AzimuthScanAngles=collect(-50:0.5:50),
    ElevationScanAngles=collect(-30:0.5:30),
)
_, doas = step(estimator, x + noise)
doas = 2×2 Matrix{Float64}:
 -37.0  17.0
   0.0  20.0

估计的 DOAs 与真实的 DOAs 完全吻合。

提示

  1. 估计得到的 DOAs 输出顺序随机。

  2. DOAs 的估计结果可能略有不同。

估计圆盘阵列上两个信号的 DOAs

假设两个频率分别为 1.6 kHz 和 1.8 kHz 的正弦波从两个不同方向冲击一个圆盘阵列。圆盘元件之间的间距为 1/2 波长。信号分别从方位角 -31°、仰角 -11° 和方位角 35°、仰角 55° 到达。使用二维 MUSIC 估算两个信号的到达方向。阵列工作频率为 300 MHz,信号采样频率为 8 kHz。

using TyPhasedArray
f1 = 1.6e3
f2 = 1.8e3
doa1 = [-31; -11]
doa2 = [35; 55]
fc = 300e6
c = physconst("LightSpeed")
lam = c / fc
fs = 8.0e3

使用默认各向同性元件创建保形阵列。首先,创建 URA 以获取元件位置。

uraarray = phased_URA(; Size=[21 21], ElementSpacing=[lam / 2 lam / 2])
pos = getElementPosition(uraarray)

从中提取一个子集,形成一个刻有图案的圆盘。

radius = 10.5 * lam / 2
pos = pos[:, .!vec(sum(pos .^ 2; dims=1) .> radius^2)]

然后,利用这些位置创建保形阵列。

confarray = phased_ConformalArray(; ElementPosition=pos)

设置元件的频率响应范围。

confarray.Element.FrequencyRange = [50.0e6 600.0e6]

创建两个信号并添加随机噪声。

t = collect(0:(1 / fs):1.5)
x1 = cos.(2 * pi * t * f1)
x2 = cos.(2 * pi * t * f2)
x = collectPlaneWave(confarray, [x1 x2], [doa1 doa2], fc)
noise = 0.1 * (randn(size(x)) + 1im * randn(size(x)))

创建并执行二维 MUSIC 估计器,以找到到达方向。

estimator = phased_MUSICEstimator2D(;
    SensorArray=confarray,
    OperatingFrequency=fc,
    NumSignalsSource="Property",
    NumSignals=2,
    AzimuthScanAngles=collect(-60:0.1:60),
    ElevationScanAngles=collect(-60:0.1:60),
)
_, doas = step(estimator, x + noise)
doas = 2×2 Matrix{Float64}:
 35.0  -31.0
 55.0  -11.0

估计的 DOAs 与真实的 DOAs 完全吻合。

提示

  1. 估计得到的 DOAs 输出顺序随机。

  2. DOAs 的估计结果可能略有不同。

# 算法

MUSIC 算法

MUSIC 是多重目标分类(MUltiple SIgnal Classification)的缩写。MUSIC 是一种高分辨率测向算法,可根据阵列传感器数据的协方差矩阵估算信号到达阵列的方向(DOA)。MUSIC 属于子空间分解测向算法系列。与传统的波束成形算法不同,MUSIC 可以解析间距较近的信号源。

基于传感器协方差矩阵的特征空间分解,MUSIC 将观测空间划分为正交的信号子空间和噪声子空间。最大特征值对应的特征向量跨越信号子空间。与较小特征值相对应的特征向量跨越噪声子空间。由于到达(或导向)向量位于信号子空间中,因此它们与噪声子空间是正交的。到达向量取决于信号的到达方向。对于二维或三维阵列,方向由信号源的方位角和仰角决定。通过在到达角网格上搜索,该算法可以找到那些投影到噪声子空间为零或至少非常小的到达向量。

MUSIC 要求已知信号源的数量。如果指定的信号源数量与实际信号源数量不符,算法的性能就会下降。一般情况下,您必须提供信号源数量的估计值,或使用内置的信号源数量估计方法之一。有关用于估计信号源数量的方法,详细信息,请参见 aictestmdltest 函数。

该算法根据传感器数据计算样本协方差矩阵,以取代真实的传感器协方差矩阵。MUSIC 适用于非相干信号,但也可利用前向-后向平均技术扩展到相干信号。

# 参考文献

[1] Van Trees, H. L., Optimum Array Processing. New York: Wiley-Interscience, 2002.

# 另请参阅

# 函数

aictest | mdltest | musicdoa | rootmusicdoa

# 对象

phased_MUSICEstimator | phased_RootMUSICEstimator