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

空间平滑MUSIC算法(1)

1. 前言

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

MATLAB代码

% fss.m
% 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
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个子阵的接收数据为:
X J f = [ x J , x J + 1 , ⋯   , x J + N − 1 ] X_{J}^{f}=\left[x_{J}, x_{J+1}, \cdots, x_{J+N-1}\right] XJf=[xJ,xJ+1,,xJ+N1]那么第J个子阵接收数据的协方差矩阵(也称作空间平滑矩阵)可以表示为
R N j j = A 1 D j − 1 R s ( D j − 1 ) H A 1 H + σ 2 I N j = 1 , 2 , ⋯   , L R_{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, L RNjj=A1Dj1Rs(Dj1)HA1H+σ2INj=1,2,,L其中, D = diag ⁡ [ e − j − 2 π d λ sin ⁡ θ 1 , e − j 2 π d λ sin ⁡ θ 2 , ⋯ e − j 2 π 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[ejλ2πdsinθ1,ejλ2πdsinθ2,ejλ2πdsinθR],A1为第一个子阵即参考阵列的流型矩阵。
因此,前向空间平滑后的协方差矩阵可以由各个子阵的协方差矩阵求平均得到。
R ~ f = 1 L ∑ j = 1 L R N j j \tilde{R}^{f}=\frac{1}{L} \sum_{j=1}^{L} R_{N}^{j j} R~f=L1j=1LRNjj利用前向空间平滑协方差矩阵和MUSIC算法就可以分辨出多个相干信号的方位。可以证明,该方法最大可以检测M/2个相干的信号。

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
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:L
    Rf = 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;

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

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

  • 39
    点赞
  • 219
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: DOA(Direction of Arrival)估计是指在声源定位中,通过分析接收到的声音信号估计声源来自的方向。空间平滑music算法是一种常见的DOA估计方法,利用声音信号空间中的传播特性来推测声源的方位。 在Matlab中,可以使用空间平滑music算法来进行DOA估计。具体步骤如下: 1. 收集多个麦克风的声音信号,并对其进行预处理,包括噪音消除、信号增强等。 2. 对预处理后的声音信号进行时频分析,提取出音频特征。 3. 构造均匀线阵等阵型,确定麦克风的位置,并计算麦克风间的距离。 4. 利用时延差法计算相邻麦克风对之间的时延差,即声音信号到达不同麦克风的时间差。 5. 基于时延差的估计结果,使用空间平滑music算法估计声源的方向。该算法通过计算各个方向上的空间谱,得到声源方向的估计结果。 6. 对估计结果进行后处理,如抑制噪声,提高估计的准确性。 综上所述,空间平滑music算法是一种常用的DOA估计方法,它能够通过分析声音信号空间中的传播特性,推测声源的方向。在Matlab中,可以使用该算法来进行DOA估计,步骤包括预处理、时频分析、确定麦克风位置、计算时延差、应用空间平滑music算法以及后处理。 ### 回答2: DOA(Direction of Arrival)估计是一种用于确定信号到达方向的算法。在音乐信号处理中,空间平滑music算法是一种常用的DOA估计方法之一。它通过对音频信号进行空间谱分析来确定信号到达的方向。 在Matlab中,可以使用MATLAB工具箱来实现空间平滑music算法进行DOA估计。首先,需要以数组的形式加载音频信号数据。然后,使用fft函数进行信号的快速傅里叶变换,得到信号的频谱。接下来,根据特定的阵列几何形状,计算每个频率点上的传播矢量和空间谱。最后,通过对空间谱进行处理,可以得到信号到达的方向。 在代码实现上,可以使用MATLAB的函数库,例如MusicSpectrum或者RootMusic来实现算法。这些函数可以提供出色的性能和精确度,同时具有易于使用,高效的特点。 总之,空间平滑music算法是一种用于DOA估计算法,在Matlab中可以通过使用MATLAB工具箱中提供的函数库来实现。该算法可以对音频信号进行空间谱分析,并准确地估计信号到达的方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值