空间平滑MUSIC算法(1)

1. 前言

在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法的效果就会不理想。具体原因是多个入射信号相干时,有部分能量就会散发到噪声子空间,使得MUSIC算法不能对其进行有效估计。
针对这种情况,解相干方法被提出。本文主要讲解通过降维处理解相干,之所以叫降维处理是因为这种方法将原阵列拆分成很多个子阵列,通过子阵列的协方差矩阵重构接收数据协方差矩阵,阵列的自由度DOF会随之降低,即可分辨的相干信号数降低。
先看看传统MUSIC算法对相干信号进行DOA估计的效果。

MATLAB代码

% fss.m
% Code For Music Algorithm
% The Signals Are All Coherent
% Author:痒羊羊
% Date:2020/10/29clc; clear all; close all;
%% -------------------------initialization-------------------------
f = 500;                                        % frequency
c = 1500;                                       % speed sound
lambda = c/f;                                   % wavelength
d = lambda/2;                                   % array element spacing
M = 20;                                         % number of array elements
N = 100;                                        % number of snapshot
K = 6;                                          % number of sources
coef = [1; exp(1i*pi/6);... exp(1i*pi/3); exp(1i*pi/2);... exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals%% generate signal
dd = (0:M-1)'*d;                                % distance between array elements and reference element
A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
X = A*(coef*S);                                 % received data without noise, M*N
X = awgn(X,10,'measured');                      % received data with SNR 10dB%% calculate the covariance matrix of received data and do eigenvalue decomposition
Rxx = X*X'/N;                                   % covariance matrix
[U,V] = eig(Rxx);                               % eigenvalue decomposition
V = diag(V);                                    % vectorize eigenvalue matrix
[V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
U = U(:,idx);                                   % reset the eigenvector
P = sum(V);                                     % power of received data
P_cum = cumsum(V);                              % cumsum of V%% define the noise space
J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
J = J(1);                                       % number of principal component
Un = U(:,J+1:end);%% music for doa; seek the peek
theta = -90:0.1:90;                             % steer theta
doa_a = exp(-1i*2*pi*dd*sind(theta)/lambda);    % manifold array for seeking peak
music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
music = 10*log10(music/max(music));             % normalize the result and convert it to dB%% plot
figure;
plot(theta, music, 'linewidth', 2);
title('Music Algorithm For Doa', 'fontsize', 16);
xlabel('Theta(°)', 'fontsize', 16);
ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
grid on;


可以看到,对于相干信号,传统MUSIC算法DOA估计效果很差。

2. 空间平滑算法

降维处理解相干方法主要包括空间平滑类处理算法,而空间平滑类处理算法可以分成前向空间平滑算法(FSS)、后向平滑算法(BSS)、前后向平滑算法(FBSS),正如上面所说,这些算法的估计效果很好,但是损失了阵列孔径,导致可分辨的相干信号数降低。

2.1 线性阵列信号模型


关于这个线性阵列中符号的具体说明可以参考上一篇博文。子空间方法——MUSIC算法

2.2 前向空间平滑算法

前向空间平滑算法将阵列分成多个互相重叠的子阵列,然后对子阵接收数据的协方差矩阵作平均。当子阵阵元数目大于等于相干信号数时,可以有效解相干。

如上图所示,我们把M元阵列均匀分成L个子阵列,每个子阵列有N=M-L+1个阵元。以最左边的子阵列为参考阵列,定义第J个子阵的接收数据为:
XJf=[xJ,xJ+1,⋯,xJ+N−1]X_{J}^{f}=\left[x_{J}, x_{J+1}, \cdots, x_{J+N-1}\right]XJf​=[xJ​,xJ+1​,⋯,xJ+N−1​]那么第J个子阵接收数据的协方差矩阵(也称作空间平滑矩阵)可以表示为
RNjj=A1Dj−1Rs(Dj−1)HA1H+σ2INj=1,2,⋯,LR_{N}^{j j}=A_{1} D^{j-1} R_{s}\left(D^{j-1}\right)^{H} A_{1}^{H}+\sigma^{2} I_{N} \quad j=1,2, \cdots, LRNjj​=A1​Dj−1Rs​(Dj−1)HA1H​+σ2IN​j=1,2,⋯,L其中,D=diag⁡[e−j−2πdλsin⁡θ1,e−j2πdλsin⁡θ2,⋯e−j2πdλsin⁡θR]D=\operatorname{diag}\left[\mathrm{e}^{-j\frac{-2 \pi d}{\lambda} \sin \theta_{1}}, \mathrm{e}^{-j\frac{2 \pi d}{\lambda} \sin \theta_{2}}, \cdots \mathrm{e}^{-j\frac{2 \pi d}{\lambda} \sin \theta_{R}}\right]D=diag[e−jλ−2πd​sinθ1​,e−jλ2πd​sinθ2​,⋯e−jλ2πd​sinθR​],A1为第一个子阵即参考阵列的流型矩阵。
因此,前向空间平滑后的协方差矩阵可以由各个子阵的协方差矩阵求平均得到。
R~f=1L∑j=1LRNjj\tilde{R}^{f}=\frac{1}{L} \sum_{j=1}^{L} R_{N}^{j j}R~f=L1​j=1∑L​RNjj​利用前向空间平滑协方差矩阵和MUSIC算法就可以分辨出多个相干信号的方位。可以证明,该方法最大可以检测M/2个相干的信号。

MATLAB代码

% Code For Music Algorithm
% The Signals Are All Coherent
% Author:痒羊羊
% Date:2020/10/29clc; clear all; close all;
%% -------------------------initialization-------------------------
f = 500;                                        % frequency
c = 1500;                                       % speed sound
lambda = c/f;                                   % wavelength
d = lambda/2;                                   % array element spacing
M = 20;                                         % number of array elements
N = 100;                                        % number of snapshot
K = 6;                                          % number of sources
L = 10;                                         % number of subarray
L_N = M-L+1;                                    % number of array elements in each subarray
coef = [1; exp(1i*pi/6);... exp(1i*pi/3); exp(1i*pi/2);... exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals%% generate signal
dd = (0:M-1)'*d;                                % distance between array elements and reference element
A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
X = A*(coef*S);                                 % received data without noise, M*N
X = awgn(X,10,'measured');                      % received data with SNR 10dB%% reconstruct convariance matrix
%% calculate the covariance matrix of received data and do eigenvalue decomposition
Rxx = X*X'/N;                                   % origin covariance matrix
Rf = zeros(L_N, L_N);                           % reconstructed covariance matrix
for i = 1:LRf = Rf+Rxx(i:i+L_N-1,i:i+L_N-1);
end
Rf = Rf/L;
[U,V] = eig(Rf);                                % eigenvalue decomposition
V = diag(V);                                    % vectorize eigenvalue matrix
[V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
U = U(:,idx);                                   % reset the eigenvector
P = sum(V);                                     % power of received data
P_cum = cumsum(V);                              % cumsum of V%% define the noise space
J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
J = J(1);                                       % number of principal component
Un = U(:,J+1:end);%% music for doa; seek the peek
dd1 = (0:L_N-1)'*d;
theta = -90:0.1:90;                             % steer theta
doa_a = exp(-1i*2*pi*dd1*sind(theta)/lambda);   % manifold array for seeking peak
music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
music = 10*log10(music/max(music));             % normalize the result and convert it to dB%% plot
figure;
plot(theta, music, 'linewidth', 2);
title('Music Algorithm For Doa', 'fontsize', 16);
xlabel('Theta(°)', 'fontsize', 16);
ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
grid on;


可以看到,在6个入射信号均相干的情况下,基于前向平滑的MUSIC算法能较好地对其进行DOA估计,但仍存在估计精度的问题,比如真实入射角度为75°的信号的方位被估计成了74.2°。
后向空间平滑MUSIC算法和前/后向空间平滑MUSIC算法在下一篇博客中讲解。
基于空间平滑MUSIC算法的相干信号DOA估计(2)

参考论文:《基于空间平滑MUSIC算法的相干信号DOA估计,陈文锋,吴桂清》
代码Code均为原创。
欢迎转载,表明出处。

基于空间平滑MUSIC算法的相干信号DOA估计(1)相关推荐

  1. 基于空间平滑MUSIC算法的相干信号DOA估计(2)

    空间平滑MUSIC算法(2) 继续上一篇博客,继续讲后向空间平滑和前/后向空间平滑MUSIC算法. 基于空间平滑MUSIC算法的相干信号DOA估计(1) 2.3 后向空间平滑算法 后向空间平滑更准确的 ...

  2. 基于matlab的相干信号的doa 估计,基于空间平滑MUSIC算法的相干信号DOA估计(1)

    基于空间平滑MUSIC算法的相干信号DOA估计(1) 基于空间平滑MUSIC算法的相干信号DOA估计(1) 空间平滑MUSIC算法(1) 在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法 ...

  3. 【压缩感知】基于matlab压缩感知理论的窄带信号DOA估计【含Matlab源码 2616期】

    ⛄一.压缩感知理论 阵列信号波达方向(Direction ofArrival,DOA)估计是阵列信号处理领域中主要研究内容之一,广泛应用于军事及民用领域.基于压缩感知理论的稀疏重构算法的阵列信号DOA ...

  4. 弱小目标检测跟踪算法研究(7) 基于简单平滑滤波算法的红外弱小目标检测之背景抑制

    基于简单平滑滤波算法的红外弱小目标检测之背景抑制 1. 前言 2. 平滑滤波算法 3. Matlab仿真 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵"弱"和&quo ...

  5. 阵列信号DOA估计系列(二).导向矢量与空间FFT(附代码)

    阵列信号DOA估计系列(二).导向矢量 在DOA估计里面,经常会看到导向矢量这个名词,也有的地方叫方向矢量,方向矩阵,基本上都是array steering vector 的翻译. 本文首先对均匀线阵 ...

  6. 阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)

    标题阵列信号DOA估计系列(三).MVDR/Capon波束形成 MVDR算法得基本思路是在频域/空间形成一个窄带滤波器,从此出发,可见MVDR不但对噪声有抑制作用,来对观察频率/角度之外的信号有抑制作 ...

  7. 宽带信号doa matlab,宽带信号DOA估计处理方法研究

    学术研究 DOI:10. 3969/j. issn. 1001-3824. 2012. 06. 008 宽带信号 DOA 估计处理方法研究 收稿日期:2012-06-14 闫 杰1,周 围1,2,杜晓 ...

  8. 阵列信号DOA估计系列(一).概述

    阵列信号DOA估计系列 之 概述 1.从相位差说起 2.空间相位差的来源 3.从"空间相位差"到"DOA估计" 3.1 时域 3.2 空域 3.3 DOA估计 ...

  9. matlab paticalcoff,关于DOA估计中加权前后向空间平滑算法的仿真问题

    参考论文:<相干信源波达方向估计的加权空间平滑算法> 王布宏 王永良 陈辉 武汉空军雷达学院重点实验室 武汉430010 摘  要 提出了一种用于空间相干源 DOA 估计的加权空间平滑算法 ...

最新文章

  1. 自定义控件的getChildCount
  2. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第4章-带有事件驱动控制的分数阶多智能体系统的一致性
  3. python3.7扩展库是什么_Python3.4以后的版本中,____________库用于安装管理Python扩展包,________________库用于发布Python包。_学小易找答案...
  4. Window下更新python pip源
  5. MySQL10061错误Access denied for user root@localhost(Windows下)
  6. Vue动态设置Style属性
  7. mysql命令成功数值不变_MySQL基础知识精华汇总_3(mysql基础命令操作)
  8. Linux C语言解析并显示.bmp格式图片
  9. FineUI之使用SQL脚本从数据库表中生成对应的输入控件
  10. Windows服务器配置fileZilla Server
  11. nero4j导入关系数据以及节点操作
  12. 什么是PHP,如何快速运行PHP文件
  13. 支持机顶盒的电影服务器,手把手教你用网络机顶盒看电影
  14. SignalTap II使用技巧_2
  15. Mysql监控工具介绍-Monyog
  16. [电动智能汽车-7]:汽车CAN总线详解
  17. linux cat命令查找文件内容
  18. 学习太极创客 — ESP8226 (二)
  19. 国内外物联网平台大全
  20. 联想拯救者u盘安装linux系统,联想拯救者Y7000 U盘装系统win8教程

热门文章

  1. Python3中的Excel表格操作
  2. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
  3. 三年级神奇电子计算机教案,人教版三年级上册信息技术教案
  4. mysql留存数据表_用mysql统计留存率
  5. 【MIMO】两种空间相关信道生成方式的记录(公式+MATLAB代码)
  6. n1 armbian php,斐讯N1盒子armbian 5.77蓝牙连接详细步骤斐讯N1刷入armbian 5.77写入emmc...
  7. 第二届国际计算成像会议-CITA
  8. 信息化,不只是技术 -某公司局域网改造实例 转
  9. 实例分析!如何快速搭建OA办公系统
  10. “正交阵”与“特征值和特征向量”