基于空间平滑MUSIC算法的相干信号DOA估计(1)
基于空间平滑MUSIC算法的相干信号DOA估计(1)
空间平滑MUSIC算法(1)
在上一篇博客中有提到,当多个入射信号相干时,传统MUSIC算法的效果就会不理想。具体原因是多个入射信号相干时,有部分能量就会散发到噪声子空间,使得MUSIC算法不能对其进行有效估计。
针对这种情况,解相干方法被提出。本文主要讲解通过降维处理解相干,之所以叫降维处理是因为这种方法将原阵列拆分成很多个子阵列,通过子阵列的协方差矩阵重构接收数据协方差矩阵,阵列的自由度DOF会随之降低,即可分辨的相干信号数降低。
先看看传统MUSIC算法对相干信号进行DOA估计的效果。
MATLAB代码
% Code For Music Algorithm
% The Signals Are All Coherent
% Author:痒羊羊
% Date:2020/10/29
clc; 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