1.简介
传统信息论准则(如AIC、MDL)依赖信号协方差矩阵的满秩特性,但相干信号用信息论准则来估计信号源数目时,只能对独立信号源的总数作出估计,但当信号源相干时,会导致协方差矩阵秩亏损,无法正确估计信源数,而且对信号源的类别和结构不能作出判断,如其中有几组独立信号源且每组信号源中有多个相干信号源的情况。
我们知道,阵列对信号分辨能力与阵元数M、信号的相关性及算法有关。对于独立信号的分辨能力,阵元数M应大于独立源数,即M≥K+1;对于前向(或后向)空间平滑法,应满足M≥K+J1,式中K是总源数, J1是相关源数目;对于双向平滑算法
(1)
为了弥补传统信息论准则无法估计相干源信源数的缺点,一种针对相干源信源数估计方法——平滑秩序列算法被提出。该方法通过空间平滑技术分割阵列并平均子阵列协方差矩阵,恢复秩特性,再结合信息论准则实现相干信源数的估计。
2.平滑秩算法原理
设R0是M×M维矩阵,k是正整数,定义一个(M-k)×M维矩阵
(2)
它的前j列和后k-j列为0矢量,I为单位矩阵。将R0分成交叉重叠矩阵,即
(3)
上式中的交叉重叠矩阵序列实质上是前向空间平滑矩阵。假设信号源由L组相关源的群组成,分别表示为g;(i=1,2,.,L),如i=1则表明该群是单个独立信号;i=3说明该群有三个相干源,L是最大的相关源数。若g2=3则说明有三个相关群,每群有两个相干源,则相关群的数目为
(4)
总信号数为
(5)
式中,fq表示第q组相关群的信号源数。如果从有限次快拍的数据中获得数据协方差矩阵,此时
(6)
而的信号子空间维数就是
的秩,故平滑秩序列为:
(7)
同时,根据MDL准则可得
(8)
根据式(7)和式(8)可以求得信号源的相关结构及信号源数。经上述分析,我们对平滑秩算法总结见算法1:
对于算法1我们再作几点说明。
(1)算法中当k=0,其实就是求原协方差矩阵维数。随着k的增加也就是对原协方差矩阵求k次前向或后向平滑后,再对修正的协方差矩阵求维数。
(2)如果上述算法改为双向平滑,即每次k对协方差矩阵进行双向平滑,再求修正矩阵的维数,则得到的就是双向平滑秩算法。
(3)信号源数及相关结构均是根据平滑秩序列来判断的,一般情况下k=0时的矩阵维数为独立组数,平滑秩中最大的数即为信号源数。
通过上面的分析,可以清楚地看出平滑秩算法是基于解相干基础的信号源数估计问题,所以其他的解相干处理算法同样也可以实现信号源数的估计问题,如矩阵分解方法等。
3.仿真实验
下面通过仿真来比较基于前向空间平滑(FSS)、后向空间平滑(BSS)和前后向空间平滑的平滑秩序算法的估计性能。实验针对3个相干信源,线性均匀阵列阵元数为12,快拍数为200,信号入射方向为5°、30°、50°,阵元间距为半波长,独立实验100次。仿真结果见图1所示;

从仿真实验可以得出以下结论:
这类基于解相干基础的信号源数估计方法,与信息论方法相比有如下优点:当信噪比较大、快拍数较大时,平滑秩序列法比AIC及HQ算法的性能要好;当人射信号包括几个相干源群时,平滑秩算法不但可以估计出信号源总数,而且还可估计出信号源结构,信息论方法只能估计信号源数,无法对结构进行估计。
部分仿真代码
%% Author:Poulen
%% Data:2025.3.13
%% 平滑秩估计算法仿真,该脚本提供展示了一种平滑秩序列算法估计相干信源数;同时本脚本还展示了
%% 前向平滑(FSS)/后向平滑(BSS)/前后向(FBSS)平滑去相干算法的实现过程。
%% 算法的平滑
clear
close all;
clc
%信号模型建立
%仿真初始值设定
M=12; %阵元单元
c=3e8; %光速
f0=77e9; %初始频率
lambda=c/f0; %波长
slope=30e12; %调频斜率
time=60e-6; %60us
d=0:lambda/2:(M-1)*lambda/2;%阵列天线
thita=[-10,0,20]; %波达方向
K = length(thita); %真实信源数
%产生原始信号
N=200;%信号长度
t=linspace(0,time,N);
St = exp(1j*2*pi*(f0*t(:)+1/2*slope*t(:).^2));
A=zeros(M,K);%导向向量空间 M*K
S=zeros(K,N);%信号空间
%% 蒙特卡洛实验
SNR_Scale = -20:0.5:20;
result1 = zeros(1,length(SNR_Scale));
result2 = zeros(1,length(SNR_Scale));
result3 = zeros(1,length(SNR_Scale));
for idx =1: length(SNR_Scale)
Moteclo_num = 100;
Moteclo = Moteclo_num;
count_1 = 0;
count_2 = 0;
count_3 = 0;
while(Moteclo)
for i = 1:K
A(:,i) = exp(-1j*2*pi/lambda*d(:)*sind(thita(i)));
S(i,:) = St;
end
S = A*S; %% 产生阵列接收数据
S = S +(randn(size(S)).*std(S))/db2mag(SNR_Scale(idx)); %% 向数据添加白噪声
%% 开始执行
n = SmoothRankAlgorithm(M,N,S);
if(n(1) == K)
count_1 = count_1 + 1;
end
if(n(2) == K)
count_2 = count_2 + 1;
end
if(n(3)== K)
count_3 = count_3 + 1;
end
S=zeros(K,N);
Moteclo = Moteclo -1;
end
result1(idx) = 100 * count_1 / Moteclo_num;
result2(idx) = 100 * count_2 / Moteclo_num;
result3(idx) = 100 * count_3 / Moteclo_num;
end
%% 绘图
figure;
plot(SNR_Scale,result1,'-.<');hold on;
plot(SNR_Scale,result2,'-.>');hold on;
plot(SNR_Scale,result3,'-.*');hold on;
xlabel('SNR/dB');
ylabel('成功概率/%');
legend('FSS-MLD准则','BSS-MLD准则','FBSS-EDC准则');
补充:
在上述源码中,有关平滑秩序列算法的实现过程,以及包括FSS/BSS/FBSS平滑算法的实现全部集成于SmoothRankAlgorithm接口中,下面对该接口进行简要的描述:
% 输入参数
% @param1 阵元数
% @param2 快拍数
% @param3 阵元接收数据
% @param4 选择空间平滑模式,1-FSS、2-BSS、3-FBSS、如果不输入@param4,则默认
% FSS/BSS/FBSS都执行,此时该API的输出为这三种平滑秩序列估计值构成的矢量
% 输出参数
% @param1 信源估计数量
%% 平滑秩序列信源估计算法API函数原型
n = SmoothRankAlgorithm(M,N,S,mode)
有关该算法实现以及仿真源码链接已被我放至文末,感兴趣的小伙伴可以参考借阅。
4.结束语
本期内容仅供学习参考,若存在笔误之处,希望各位看官老爷毫不吝啬的指出。另外创作不易,如果对你有帮助,那就留下你的点赞关注再走吧~,感谢各位的支持。
5.参考资料
空间谱估计理论与算法,王永良、陈辉、彭应宁、万群等著
本文仿真源码链接:平滑秩序列算法