• 【学习笔记】【DOA子空间算法】7 MUSIC-like 算法


    7 MUSIC-like 算法

      在学习 MUSIC-like 算法之前需要理解四阶累积量、Kronecker 积和 Khatri-Rao 积,在这里只简单介绍四阶累积量的概念,Kronecker 积和 Khatri-Rao 积的概念需要读者自行查阅资料(如参考内容 1)。
      假设接收数据 X ∈ C M × T \mathbf{X}\in\mathbb{C}^{M\times T} XCM×T 代表的是零均值的复平稳随机信号,那么其二阶矩 μ 2 ( k 1 , k 2 ∗ ) \mu_2(k_1,k_2^*) μ2(k1,k2) 及其估计值 μ ^ 2 ( k 1 , k 2 ∗ ) \hat{\mu}_2(k_1,k_2^*) μ^2(k1,k2) 定义如下:
    μ 2 ( k 1 , k 2 ∗ ) = E { x [ k 1 , t ] x [ k 2 , t ] ∗ } μ ^ 2 ( k 1 , k 2 ∗ ) = 1 T ∑ t = 1 T x [ k 1 , t ] x [ k 2 , t ] ∗

    μ2(k1,k2)=E{x[k1,t]x[k2,t]}μ^2(k1,k2)=1Tt=1Tx[k1,t]x[k2,t]" role="presentation">μ2(k1,k2)=E{x[k1,t]x[k2,t]}μ^2(k1,k2)=1Tt=1Tx[k1,t]x[k2,t]
    μ2(k1,k2)μ^2(k1,k2)=E{x[k1,t]x[k2,t]}=T1t=1Tx[k1,t]x[k2,t]
    其中 x [ k 1 , t ] x_{[k_1,t]} x[k1,t] 表示 X \mathbf{X} X 的第 k 1 k_1 k1 行第 t t t 个元素。
      四阶矩 μ 4 ( k 1 , k 2 , l 1 , l 2 ) \mu_4(k_1,k_2,l_1,l_2) μ4(k1,k2,l1,l2) 及其估计值 μ ^ 4 ( k 1 , k 2 , l 1 , l 2 ) \hat{\mu}_4(k_1,k_2,l_1,l_2) μ^4(k1,k2,l1,l2) 的定义如下:
    μ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) = E { x [ k 1 , t ] x [ k 2 , t ] x [ l 1 , t ] ∗ x [ l 2 , t ] ∗ } μ ^ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) = 1 T ∑ t = 1 T x [ k 1 , t ] x [ k 2 , t ] x [ l 1 , t ] ∗ x [ l 2 , t ] ∗
    μ4(k1,k2,l1,l2)=E{x[k1,t]x[k2,t]x[l1,t]x[l2,t]}μ^4(k1,k2,l1,l2)=1Tt=1Tx[k1,t]x[k2,t]x[l1,t]x[l2,t]" role="presentation">μ4(k1,k2,l1,l2)=E{x[k1,t]x[k2,t]x[l1,t]x[l2,t]}μ^4(k1,k2,l1,l2)=1Tt=1Tx[k1,t]x[k2,t]x[l1,t]x[l2,t]
    μ4(k1,k2,l1,l2)μ^4(k1,k2,l1,l2)=E{x[k1,t]x[k2,t]x[l1,t]x[l2,t]}=T1t=1Tx[k1,t]x[k2,t]x[l1,t]x[l2,t]

      四阶累积量 cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) \operatorname{cum}(k_1,k_2,l_1^*,l_2^*) cum(k1,k2,l1,l2) 定义如下:
    cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) =   μ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) −   μ 2 ( k 1 , k 2 ) μ 2 ( l 1 ∗ , l 2 ∗ ) −   μ 2 ( k 1 , l 1 ∗ ) μ 2 ( k 2 , l 2 ∗ ) −   μ 2 ( k 1 , l 2 ∗ ) μ 2 ( k 2 , l 1 ∗ )
    cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,k2)μ2(l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)" role="presentation">cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,k2)μ2(l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)
    =cum(k1,k2,l1,l2) μ4(k1,k2,l1,l2) μ2(k1,k2)μ2(l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)

    通常来说 μ 2 ( k 1 , k 2 ∗ ) = 0 \mu_2(k_1,k_2^*) = 0 μ2(k1,k2)=0,因此上式可以简化为:
    cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) =   μ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) −   μ 2 ( k 1 , l 1 ∗ ) μ 2 ( k 2 , l 2 ∗ ) −   μ 2 ( k 1 , l 2 ∗ ) μ 2 ( k 2 , l 1 ∗ )
    cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)" role="presentation">cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)
    =cum(k1,k2,l1,l2) μ4(k1,k2,l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)

      MUSIC-like 算法在很多论文中也被称作 FOC(Forth Order Cumulant)MUSIC 算法,通常 HOC(Higher Order Cumulant)指的也是四阶累积量;参考内容 3 提出了偶数阶的高阶累积量 MUSIC 算法,称为 2 q 2\rm{q} 2q-MUSIC 算法。

    7.1 算法原理

      传统的窄带阵列信号处理方法大多是基于二阶统计量(协方差矩阵)提出的。当接收信号为非高斯分布时,可以用基于高阶累积量的方法处理信号,因为高阶累积量对高斯信号不敏感,从而能有效地减小高斯噪声的影响,高阶累积量既可以抑制服从高斯分布的噪声,又可以比二阶统计量包含更多的信息。
      MUSIC-like 算法假设将 K K K 个信号分成 G G G 组,每个组中有 K g K_g Kg 个信号,自然地有 ∑ g = 1 G K g = K \sum_{g=1}^G K_g = K g=1GKg=K,而在第 g g g 组中, K g K_g Kg 个信号相互间是相关的(注意信号间是相关的,并非相干)。假若 K K K 个信号相互间均独立,则每组中只存在一个信号,即满足 G = K G = K G=K K g = 1 K_g = 1 Kg=1
      在之前的讨论中,我们已经知道信号模型 x ( t ) ∈ C M × 1 \mathbf{x}(t)\in\mathbb{C}^{M\times 1} x(t)CM×1 如下:
    x ( t ) = ∑ k = 1 K a ( θ k ) s k ( t ) + n ( t )

    x(t)=k=1Ka(θk)sk(t)+n(t)" role="presentation">x(t)=k=1Ka(θk)sk(t)+n(t)
    x(t)=k=1Ka(θk)sk(t)+n(t)
    a k = a ( θ k ) ∈ C M × 1 \mathbf{a}_{k} = \mathbf{a}(\theta_k)\in\mathbb{C}^{M\times 1} ak=a(θk)CM×1 x k ( t ) = a k s k ( t ) ∈ C M × 1 \mathbf{x}_k(t) = \mathbf{a}_ks_k(t)\in\mathbb{C}^{M\times 1} xk(t)=aksk(t)CM×1,则可以获得(忽略噪声部分,方便后续推导):
    x ( t ) = ∑ k = 1 K x k ( t ) = ∑ k = 1 K a k s k ( t )
    x(t)=k=1Kxk(t)=k=1Kaksk(t)" role="presentation">x(t)=k=1Kxk(t)=k=1Kaksk(t)
    x(t)=k=1Kxk(t)=k=1Kaksk(t)

    其矩阵形式为:
    X = ∑ k = 1 K X k = ∑ k = 1 K a k s k ∈ C M × T
    X=k=1KXk=k=1KakskCM×T" role="presentation">X=k=1KXk=k=1KakskCM×T
    X=k=1KXk=k=1KakskCM×T

    其中 s k = [ s k ( 1 ) , s k ( 2 ) , ⋯   , s k ( T ) ] \mathbf{s}_k = [s_k(1),s_k(2),\cdots,s_k(T)] sk=[sk(1),sk(2),,sk(T)]
      传统 MUSIC 算法中引入了协方差矩阵 R \mathbf{R} R,并将其分解成 R = A R S A \mathbf{R} = \mathbf{A}\mathbf{R}_S\mathbf{A} R=ARSA 的形式,而协方差矩阵的每一个元素其实就是对应的二阶矩;而 MUSIC-like 算法就是考虑用四阶矩构造四阶累积量矩阵 C \mathbf{C} C,该矩阵可以进行类似的分解 C = B C S B \mathbf{C} = \mathbf{B}\mathbf{C}_S\mathbf{B} C=BCSB,如此就可以进行后续的搜索步骤。接下来令:
    C k =   E { [ x k ( t ) ⊗ x k ∗ ( t ) ] [ x k ( t ) ⊗ x k ∗ ( t ) ] H } − E { x k ( t ) x k H ( t ) } ⊗ E { [ x k ( t ) x k H ( t ) ] ∗ }
    Ck= E{[xk(t)xk(t)][xk(t)xk(t)]H}E{xk(t)xkH(t)}E{[xk(t)xkH(t)]}" role="presentation">Ck= E{[xk(t)xk(t)][xk(t)xk(t)]H}E{xk(t)xkH(t)}E{[xk(t)xkH(t)]}
    Ck= E{[xk(t)xk(t)][xk(t)xk(t)]H}E{xk(t)xkH(t)}E{[xk(t)xkH(t)]}

    代入 x k ( t ) = a k s k ( t ) \mathbf{x}_k(t) = \mathbf{a}_ks_k(t) xk(t)=aksk(t) 可得:
    C k =   E { [ a k s k ( t ) ⊗ a k ∗ s k ∗ ( t ) ] [ a k s k ( t ) ⊗ a k ∗ s k ∗ ( t ) ] H } − E { a k s k ( t ) s k H ( t ) a k H } ⊗ E { a k ∗ s k ∗ ( t ) s k T ( t ) a k T } =   ( a k ⊗ a k ∗ ) ( E { s k ( t ) s k ∗ ( t ) s k ( t ) s k ∗ ( t ) } − E { s k ( t ) s k ∗ ( t ) } E { s k ( t ) s k ∗ ( t ) } ) ( a k ⊗ a k ∗ ) H
    Ck= E{[aksk(t)aksk(t)][aksk(t)aksk(t)]H}E{aksk(t)skH(t)akH}E{aksk(t)skT(t)akT}= (akak)(E{sk(t)sk(t)sk(t)sk(t)}E{sk(t)sk(t)}E{sk(t)sk(t)})(akak)H" role="presentation">Ck= E{[aksk(t)aksk(t)][aksk(t)aksk(t)]H}E{aksk(t)skH(t)akH}E{aksk(t)skT(t)akT}= (akak)(E{sk(t)sk(t)sk(t)sk(t)}E{sk(t)sk(t)}E{sk(t)sk(t)})(akak)H
    Ck= = E{[aksk(t)aksk(t)][aksk(t)aksk(t)]H}E{aksk(t)skH(t)akH}E{aksk(t)skT(t)akT}(akak)(E{sk(t)sk(t)sk(t)sk(t)}E{sk(t)sk(t)}E{sk(t)sk(t)})(akak)H

    将其转化为矩阵运算的形式,就可以得到如下式子:
    C k = 1 T ( X k ⊙ X k ∗ ) ( X k ⊙ X k ∗ ) H − 1 T 2 ( X k X k ∗ ) ⊗ ( X k X k ∗ ) ∗ = ( a k ⊗ a k ∗ ) [ 1 T ( s k ⊙ s k ∗ ) ( s k ⊙ s k ∗ ) H − 1 T 2 ( s k s k ∗ ) ⊗ ( s k s k ∗ ) ∗ ] ( a k ⊗ a k ∗ ) H
    Ck=1T(XkXk)(XkXk)H1T2(XkXk)(XkXk)=(akak)[1T(sksk)(sksk)H1T2(sksk)(sksk)](akak)H" role="presentation">Ck=1T(XkXk)(XkXk)H1T2(XkXk)(XkXk)=(akak)[1T(sksk)(sksk)H1T2(sksk)(sksk)](akak)H
    Ck=T1(XkXk)(XkXk)HT21(XkXk)(XkXk)=(akak)[T1(sksk)(sksk)HT21(sksk)(sksk)](akak)H

    T 2 c k = T ( s k ⊙ s k ∗ ) ( s k ⊙ s k ∗ ) H − ( s k s k ∗ ) ⊗ ( s k s k ∗ ) ∗ T^2c_k = T(\mathbf{s}_k\odot\mathbf{s}_k^*)(\mathbf{s}_k\odot\mathbf{s}_k^*)^H - (\mathbf{s}_k\mathbf{s}_k^*)\otimes(\mathbf{s}_k\mathbf{s}_k^*)^* T2ck=T(sksk)(sksk)H(sksk)(sksk),要注意 c k c_k ck 是一个标量。由上式可以得到完整的四阶累积量矩阵 C \mathbf{C} C
    C = ∑ k = 1 K C k = ( A ⊙ A ∗ ) ( c 1 ⋱ c K ) ( A ⊙ A ∗ ) H = B C s B H
    C=k=1KCk=(AA)(c1cK)(AA)H=BCsBH" role="presentation">C=k=1KCk=(AA)(c1cK)(AA)H=BCsBH
    C=k=1KCk=(AA) c1cK (AA)H=BCsBH

    如此我们获得了类似的分解,同时因为 B = A ⊙ A ∗ \mathbf{B} = \mathbf{A}\odot\mathbf{A}^* B=AA,则在搜索空间的时候需要将方向矢量 a ( θ ) \mathbf{a}(\theta) a(θ) 更新如下:
    a ( θ ) ≜ b ( θ ) = a ( θ ) ⊗ a ∗ ( θ )
    a(θ)b(θ)=a(θ)a(θ)" role="presentation">a(θ)b(θ)=a(θ)a(θ)
    a(θ)b(θ)=a(θ)a(θ)

    7.1.1 关于四阶累积量矩阵网上流传错误版本的一些讨论

      现在网上可以找到的很多论文,均认为四阶累积量矩阵的构造如下:
    C = E { ( X ⊗ X ∗ ) ( X ⊗ X ∗ ) H }   − E { ( X ⊗ X ∗ ) } E { ( X ⊗ X ∗ ) H }   − E { ( X X ∗ ) } E { ( X X ∗ ) H }

    C=E{(XX)(XX)H} E{(XX)}E{(XX)H} E{(XX)}E{(XX)H}" role="presentation">C=E{(XX)(XX)H} E{(XX)}E{(XX)H} E{(XX)}E{(XX)H}
    C=E{(XX)(XX)H} E{(XX)}E{(XX)H} E{(XX)}E{(XX)H}
      参考内容 4 中给出了一种实现:
    C ≜ 1 T ( X ⊗ X ∗ ) ( X ⊗ X ∗ ) H − 1 T 2 ( X ⊗ X ∗ ) ( X ⊗ X ∗ ) H − 1 T 2 ( X X ∗ ) ⊗ ( X X ∗ ) ∗
    C1T(XX)(XX)H1T2(XX)(XX)H1T2(XX)(XX)" role="presentation">C1T(XX)(XX)H1T2(XX)(XX)H1T2(XX)(XX)
    CT1(XX)(XX)HT21(XX)(XX)HT21(XX)(XX)

      错误的地方很多:

    1. 原论文(参考内容 2)中 MUSIC-like 算法的前提就是可以获得各个信号的接收数据 X k \mathbf{X}_k Xk,根据 X k \mathbf{X}_k Xk 获得对应的四阶累积量 C k \mathbf{C}_k Ck,最后进行累加 C = ∑ C k \mathbf{C} = \sum\mathbf{C}_k C=Ck,很多论文中没有体现该点。
    2. 还有一个最大的错误就是 X ⊗ X ∗ \mathbf{X}\otimes\mathbf{X}^* XX,该矩阵维度为 M 2 × T 2 M^2 \times T^2 M2×T2,假若采样数 T T T 过大,该矩阵自然很难保存;事实上原论文是对单个采样的 x k ( t ) \mathbf{x}_k(t) xk(t) 进行求均值,如 E { [ x k ( t ) ⊗ x k ∗ ( t ) ] [ x k ( t ) ⊗ x k ∗ ( t ) ] H } \mathrm{E}\{[\mathbf{x}_k(t)\otimes \mathbf{x}_k^*(t)][\mathbf{x}_k(t)\otimes \mathbf{x}_k^*(t)]^H\} E{[xk(t)xk(t)][xk(t)xk(t)]H},如此转化成矩阵形式应该是 1 / T ( X k ⊙ X k ∗ ) ( X k ⊙ X k ∗ ) H 1/T(\mathbf{X}_k\odot\mathbf{X}_k^*)(\mathbf{X}_k\odot\mathbf{X}_k^*)^H 1/T(XkXk)(XkXk)H
    3. 根据参考内容 4 中的实现来看,等式右边的第一项和第二项是没有区别的。

      现在我们重新来考量利用四阶累积量 cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) \operatorname{cum}(k_1,k_2,l_1^*,l_2^*) cum(k1,k2,l1,l2) 来构造四阶累积量矩阵。可以认为传统 MUSIC 算法利用二阶矩 μ 2 ( k 1 , k 2 ∗ ) \mu_2(k_1,k_2^*) μ2(k1,k2) 构造协方差矩阵 R ∈ C M × M \mathbf{R}\in\mathbb{C}^{M\times M} RCM×M,其中 1 ≤ m , n ≤ M 1\leq m,n\leq M 1m,nM;因为 1 ≤ k 1 , k 2 , l 1 , l 2 ≤ M 1\leq k_1,k_2,l_1,l_2\leq M 1k1,k2,l1,l2M,所以存在 M 4 M^4 M4 个四阶累积量 cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) \operatorname{cum}(k_1,k_2,l_1^*,l_2^*) cum(k1,k2,l1,l2),从而组成的四阶累积量矩阵为 C k ∈ C M 2 × M 2 \mathbf{C}_k\in\mathbb{C}^{M^2 \times M^2} CkCM2×M2
      具体来说, C k \mathbf{C}_k Ck 的第 ( k 1 − 1 ) × M + l 1 (k_1-1)\times M+l_1 (k11)×M+l1 行第 ( l 2 − 1 ) × M + k 2 (l_2-1)\times M+k_2 (l21)×M+k2 列元素为 cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) \operatorname{cum}(k_1,k_2,l_1^*,l_2^*) cum(k1,k2,l1,l2)
    [ C k ] ( k 1 − 1 ) × M + l 1 , ( l 2 − 1 ) × M + k 2 =   cum ⁡ ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) =   μ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) −   μ 2 ( k 1 , l 1 ∗ ) μ 2 ( k 2 , l 2 ∗ ) −   μ 2 ( k 1 , l 2 ∗ ) μ 2 ( k 2 , l 1 ∗ )

    [Ck](k11)×M+l1,(l21)×M+k2= cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)" role="presentation">[Ck](k11)×M+l1,(l21)×M+k2= cum(k1,k2,l1,l2)= μ4(k1,k2,l1,l2) μ2(k1,l1)μ2(k2,l2) μ2(k1,l2)μ2(k2,l1)
    = =   [Ck](k11)×M+l1,(l21)×M+k2cum(k1,k2,l1,l2)μ4(k1,k2,l1,l2)μ2(k1,l1)μ2(k2,l2)μ2(k1,l2)μ2(k2,l1)
      我们用符号 E 1234 \mathbf{E}_{1234} E1234 E 2 \mathbf{E}_{2} E2 E 3 \mathbf{E}_{3} E3 分别表示利用 μ 4 ( k 1 , k 2 , l 1 ∗ , l 2 ∗ ) \mu_4(k_1,k_2,l_1^*,l_2^*) μ4(k1,k2,l1,l2) μ 2 ( k 1 , l 1 ∗ ) μ 2 ( k 2 , l 2 ∗ ) \mu_2(k_1,l_1^*)\mu_2(k_2,l_2^*) μ2(k1,l1)μ2(k2,l2) μ 2 ( k 1 , l 2 ∗ ) μ 2 ( k 2 , l 1 ∗ ) \mu_2(k_1,l_2^*)\mu_2(k_2,l_1^*) μ2(k1,l2)μ2(k2,l1) 得到的矩阵分量,即 C k ≜ E 1234 − E 2 − E 3 {\mathbf{C}_k} \triangleq \mathbf{E}_{1234}- \mathbf{E}_{2} - \mathbf{E}_{3} CkE1234E2E3,根据参考内容 4 中的实现,不难看出所做的矩阵运算如下:
    E 1234 = 1 T ( X ⊗ X ∗ ) ( X ⊗ X ∗ ) H E 2 = 1 T 2 ( X ⊗ X ∗ ) ( X ⊗ X ∗ ) H E 3 = 1 T 2 ( X X ∗ ) ⊗ ( X X ∗ ) ∗
    E1234=1T(XX)(XX)HE2=1T2(XX)(XX)HE3=1T2(XX)(XX)" role="presentation">E1234=1T(XX)(XX)HE2=1T2(XX)(XX)HE3=1T2(XX)(XX)
    E1234E2E3=T1(XX)(XX)H=T21(XX)(XX)H=T21(XX)(XX)

    再次强调该实现是错误的,例如 E 1234 \mathbf{E}_{1234} E1234 的两个相乘矩阵维度分别为 M 2 × T 2 M^2\times T^2 M2×T2 T 2 × M 2 T^2\times M^2 T2×M2,因此期间做了 M 4 M^4 M4 T 2 T^2 T2 次的逐点相乘,这和原来只需要做 M 4 M^4 M4 T T T 次的逐点相乘的意图相违背。
      在上面的式子中, E 1234 \mathbf{E}_{1234} E1234 E 2 \mathbf{E}_{2} E2 的实现是错误的,应该修正如下:
    E 1234 = 1 T ( X ⊙ X ∗ ) ( X ⊙ X ∗ ) H v = mean ⁡ ( ( X ⊙ X ∗ ) , 2 ) E 2 = v v H
    E1234=1T(XX)(XX)Hv=mean((XX),2)E2=vvH" role="presentation">E1234=1T(XX)(XX)Hv=mean((XX),2)E2=vvH
    E1234vE2=T1(XX)(XX)H=mean((XX),2)=vvH

    其中 mean ⁡ ( A , 2 ) \operatorname{mean}(\mathbf{A},2) mean(A,2) 表示对矩阵 A \mathbf{A} A 的逐行进行求均值,即 v \mathbf{v} v 为矩阵逐行求均值后得到的列向量。
      最后总结一下,逐元素创建 C k \mathbf{C}_k Ck 是可行的,但是要注意索引,而利用矩阵运算构造 C k \mathbf{C}_k Ck 自然也是可行,但是需要注意的是,在 matlab 中对该两种方法进行实现得到的矩阵会有精度上的差别,主要是由浮点数相乘顺序导致的,而四阶累积量的精度问题会导致后续奇异值分解的结果产生较大差异(尽量选择逐元素的方法创建四阶累积量矩阵)。

    7.1.2 关于细节的一些讨论

      Q1:为什么根据四阶累积量构造矩阵的时候,索引是 ( k 1 − 1 ) × M + l 1 (k_1-1)\times M+l_1 (k11)×M+l1 ( l 2 − 1 ) × M + k 2 (l_2-1)\times M+k_2 (l21)×M+k2
      A1:注意看 ( X ⊙ X ∗ ) ( X ⊙ X ∗ ) H = ( X ⊙ X ∗ ) ( X ∗ ⊙ X ) T (\mathbf{X}\odot\mathbf{X}^*)(\mathbf{X}\odot\mathbf{X}^*)^H = (\mathbf{X}\odot\mathbf{X}^*)(\mathbf{X}^*\odot\mathbf{X})^T (XX)(XX)H=(XX)(XX)T
      Q2:为什么 7.1.1 中的实现 C k = E 1234 − E 2 − E 3 \mathbf{C}_k = \mathbf{E}_{1234} - \mathbf{E}_{2} - \mathbf{E}_{3} Ck=E1234E2E3 和 MUSIC-like 算法原文中 C k \mathbf{C}_k Ck 的实现不同?
      A2:MUSIC-like 算法原文(参考内容 2)中 C k \mathbf{C}_k Ck 的实现其实就是 E 1234 − E 3 \mathbf{E}_{1234} - \mathbf{E}_{3} E1234E3
      Q3:有噪声的情况下会有什么不同吗?
      A3:结论不会有所不同,即使有噪声,四阶累积量的最终推导都是 C = B C S B \mathbf{C} = \mathbf{B}\mathbf{C}_S\mathbf{B} C=BCSB 的形式,不带有噪声分量。
      Q4:假若 G ≠ K G\neq K G=K,结果会有所不同吗?
      A4:推导上稍有不同,最重要的不同是,构造噪声子空间时,应该选择 M 2 − ∑ g = 1 G K g 2 M^2 - \sum_{g=1}^G K_g^2 M2g=1GKg2 个小特征值对应的特征向量来构成。
      Q5:MUSIC-like 算法的优点是什么?
      A5:第一点,扩展阵列,该算法可以估计到 M 2 − 1 M^2-1 M21 个信源;第二点,消除噪声的影响,在推导上,服从高斯分布变量的四阶累积量等于 0 0 0,因此理论上来说四阶累积量模型可以消除噪声,但是在单次迭代中无法直接观察到该现象,所以在后续实现中本人并未给数据加上噪声,感兴趣的读者可以将数据加上噪声进行 MUSIC 算法和 MUSIC-like 算法的 RMSE verse SNR 对比。

    7.2 算法步骤

      MUSIC-like 算法步骤如下(输入为阵列接收矩阵 X \mathbf{X} X):

    1. 计算四阶累积量矩阵 C \mathbf{C} C,可逐元素创建或者矩阵运算构造。
    2. C \mathbf{C} C 进行特征值分解,并对特征值进行排序,然后取得 M 2 − K M^2-K M2K 个较小特征值对应的特征向量来组成噪声子空间 U N \mathbf{U}_N UN
    3. 以下式遍历 θ = 0 ∘ , 1 ∘ ⋯   , 18 0 ∘ \theta = 0^{\circ}, 1^{\circ} \cdots, 180^{\circ} θ=0,1,180
      P ( θ ) = 1 b H ( θ ) U N U N H b ( θ )
      P(θ)=1bH(θ)UNUNHb(θ)" role="presentation">P(θ)=1bH(θ)UNUNHb(θ)
      P(θ)=bH(θ)UNUNHb(θ)1

      其中 b ( θ ) = a ( θ ) ⊗ a ∗ ( θ ) \mathbf{b}(\theta) = \mathbf{a}(\theta)\otimes\mathbf{a}^*(\theta) b(θ)=a(θ)a(θ)。此时得到一组 P ( θ ) P(\theta) P(θ) K K K 个最大值对应的 θ \theta θ 就是需要返回的结果。

    7.3 代码实现

    • 代码实现如下,其中 kr 积的实现见参考内容 5(其实可以简单实现 kr 积,对矩阵逐行调用 matlab 中带有的 kron 函数即可):
      % music_like.m
      clear all;
      clc;
      close all;
      
      %% 参数设定
      lambda = 1500;                                        % 波长
      d = lambda/2;                                         % 阵元间距,可设 2*d = lambda
      twpi = 2.0*pi;                                        % 2pi
      derad = pi/180;                                       % 角度转弧度
      theta = [-40,-30,0,30,60,70]*derad;                   % 待估计角度
      idx = 0:1:4; idx = idx';                              % 阵元位置索引
      
      M = length(idx);                                      % 阵元数
      K = length(theta);                                    % 信源数
      T = 1000;                                             % 快拍数
      SNR = 10;                                             % 信噪比
      
      %% 信号模型建立-四阶累积量模型
      S = randn(K,T) + 1j*randn(K,T);                       % 复信号矩阵S,维度为K*T
      % A = exp(-1j*twpi*d*idx*sin(theta)/lambda);           % 方向矢量矩阵A,维度为M*K
      A = exp(-1j*pi*idx*sin(theta));                       % 2d = lambda,直接忽略不写
      % 四阶累积量矩阵初始化
      C4 = zeros(M^2, M^2);
      C5 = zeros(M^2, M^2);
      % 构造四阶累积量矩阵
      for k = 1:K
          Ck = A(:,k)*S(k,:);
          C4 = C4 + cum41(Ck, T);                           % 构造四阶累积量矩阵,利用矩阵运算(尽量不要选择该方法构造四阶累积量矩阵)
          C5 = C5 + cum42(Ck, M);                           % 构造四阶累积量矩阵,逐元素构造
      end
      
      %% MUSIC-like 算法
      % 特征值分解并取得噪声子空间
      [U,D] = eig(C5);                                      % 特征值分解
      [D,I] = sort(diag(D));                                % 将特征值排序从小到大
      U = fliplr(U(:, I));                                  % 对应特征矢量排序,fliplr 之后,较大特征值对应的特征矢量在前面
      Un = U(:, K+1:M^2);                                   % 噪声子空间
      Gn = Un*Un';
      % 空间谱搜索
      searchGrids = 0.1;                                    % 搜索间隔
      beginAng = -90;
      endAng = 90;
      ang = (beginAng:searchGrids:endAng)*derad;
      Pmusic = zeros(1, length(ang));                       % 空间谱
      for i = 1:length(ang)
          a = exp(-1j*pi*idx*sin(ang(i)));
          b = kron(a, conj(a));                             % 阵列扩展
          Pmusic(:, i) = 1/(b'*Gn*b);
      end
      % 归一化处理,单位化为 db
      Pmusic = abs(Pmusic);
      Pmusic = 10*log10(Pmusic/max(Pmusic));
      % 作图
      figure;
      plot(ang/derad, Pmusic, '-', 'LineWidth', 1.5);
      set(gca, 'XTick',(beginAng:30:endAng));
      xlabel('\theta(\circ)', 'FontSize', 12, 'FontName', '微软雅黑');
      ylabel('空间谱(dB)', 'FontSize', 12, 'FontName', '微软雅黑');
      % 找出空间谱Pmusic中的峰值并得到其对应角度
      [pks, locs] = findpeaks(Pmusic);                      % 找极大值
      [pks, id] = sort(pks);
      locs = locs(id(end-K+1:end))-1;
      Theta = locs*searchGrids - endAng;
      Theta = sort(Theta);
      disp('估计结果:');
      disp(Theta);
      
      function C4 = cum41(X, T)
          R = X*X'/T;
          a = kr(X, conj(X));
          b = mean(a,2);
          E1234 = (a*a')/T;
          E2 = b*b';
          E3 = kron(R, conj(R));
          C4 = E1234 - E2 - E3;
      end
      
      function C4 = cum42(X, M)
          C4 = zeros(M^2,M^2);
          for m = 1:M
              for n = 1:M
                  for k = 1:M
                      for l = 1:M
                          left = (m-1)*M+k;
                          right = (l-1)*M+n;
                          c1 = X(m,:);
                          c2 = X(n,:);
                          c3 = conj(X(k,:));
                          c4 = conj(X(l,:));
                          C4(left, right) = cum4(c1,c2,c3,c4);
                      end
                  end
              end
          end
      end
      
      function  c4_ele = cum4(m,n,k,l)
          E1234 = 1*mean(m.*n.*k.*l);
          E1 = 0*mean(m.*n)*mean(k.*l); % 通常认为该项为 0
          E2 = 1*mean(m.*k)*mean(n.*l);
          E3 = 1*mean(m.*l)*mean(n.*k);
          
          c4_ele = E1234 - E1 -E2 -E3;
      end
      
      function X = kr(U,varargin)
      %KR Khatri-Rao product.
      %   kr(A,B) returns the Khatri-Rao product of two matrices A and B, of 
      %   dimensions I-by-K and J-by-K respectively. The result is an I*J-by-K
      %   matrix formed by the matching columnwise Kronecker products, i.e.
      %   the k-th column of the Khatri-Rao product is defined as
      %   kron(A(:,k),B(:,k)).
      %
      %   kr(A,B,C,...) and kr({A B C ...}) compute a string of Khatri-Rao 
      %   products A o B o C o ..., where o denotes the Khatri-Rao product.
      %
      %   See also kron.
      
      %   Version: 21/10/10
      %   Authors: Laurent Sorber (Laurent.Sorber@cs.kuleuven.be)
      
      if ~iscell(U), U = [U varargin]; end
      K = size(U{1},2);
      if any(cellfun('size',U,2)-K)
          error('kr:ColumnMismatch', ...
                'Input matrices must have the same number of columns.');
      end
      J = size(U{end},1);
      X = reshape(U{end},[J 1 K]);
      for n = length(U)-1:-1:1
          I = size(U{n},1);
          A = reshape(U{n},[1 I K]);
          X = reshape(bsxfun(@times,A,X),[I*J 1 K]);
          J = I*J;
      end
      X = reshape(X,[size(X,1) K]);
      end
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138

    7.4 参考内容

    1. 张贤达. 矩阵分析与应用[M]. 清华大学出版社有限公司, 2004.
    2. Porat B, Friedlander B. Direction finding algorithms based on high-order statistics[C]//International Conference on Acoustics, Speech, and Signal Processing. IEEE, 1990: 2675-2678.
    3. Chevalier P, Ferréol A, Albera L. High-resolution direction finding from higher order statistics: the 2 q 2 \rm{q} 2q-MUSIC algorithm[J]. IEEE Transactions on signal processing, 2006, 54(8): 2986-2997.
    4. 【CSDN】基于四阶累积量的MUSIC算法与MUSIC-like算法(DOA估计)
    5. 【MathWorks】Khatri-Rao product
  • 相关阅读:
    在springboot框架中用Configuration注解的方式写一个java过滤器的详细实例?
    centos安装mysql5.7
    Android system文件系统管理主模块:fs_mgr模块
    【CesiumJS入门】(12)Vite+Vue3+Cesium 简易安装与配置
    OpenGL原理与实践——核心模式(六):光照贴图、光源分类以及多光源场景主要源码实现
    cloud的初级使用方法
    pdf 插件和node报错问题
    Perfetto分析进阶
    ov多域名SSL数字证书1200元一年送一月
    安达发APS|国货品牌崛起,制造业迎来智能排产新机遇
  • 原文地址:https://blog.csdn.net/weixin_44705592/article/details/132590458