无线信道参数估计算法
对通信系统分析之前,首先需要建立一个能够完整反映该系统的传输信道的模型,其模型中的参数包括接收端接收信号的时延,发射端和接收端的联合方向分布等,获取这些参数的过程就是无线信道参数估计的过程。
方法可以大致分为三类:
- 谱估计算法:多重信号分类法
- 参数子空间估计算法:旋转不变技术估计信号参数算法
- 确定性参数估计算法:期望最大算法以及演进的空间交替广义期望最大算法
0. 前言
阵列信号处理基础本质上属于参数估计问题,和信道估计知识基本上别无二致。末学在这里整理了阵列信号处理的基础知识,包括公式推导,以及代码。一方面为了节省同行人士寻找资料和整理吸收的时间,开方便之门。另一方面为了和大家多多交流这方面的知识,寻找研究灵感。
如果有任何问题或者有相关的 MATLAB 代码,本着交流的态度请分享到我的邮箱:[email protected]。
愿以此功德,庄严佛净土。上报四重恩,下济三途苦。
若有见闻者,悉发菩提心。尽此一报身,同生极乐国。
2. 旋转不变性子空间法
ESPRIT 算法原理
基于子空间的 DOA 估计算法包括两大类:MUSIC 类算法及 ESPRIT 类算法。旋转不变性子空间(ESPRIT)类算法和前面讲述的 MUSIC 类算法一样也需要对阵列接收数据协方差矩阵进行特征分解。但两者也有明显的不同点:其中 MUSIC 类算法是利用接收数据协方差矩阵的噪声子空间的正交性,而 ESPRIT 类算法是利用接收数据协方差矩阵的信号子空间的旋转不变性。
与 MUSIC 算法相比,ESPRIT 类算法优点在于计算量小,不需要在空间中不断的进行搜索谱峰。与 ROOT-MUSIC 算法相比,ESPRIT 类算法是利用各子阵的信号子空间之间的旋转不变性求出信号的入射角信息,而 ROOT-MUSIC 算法则是利用导向矢量与噪声子空间的正交性构造多项式并通过对多项式的求解来实现估计。
考虑一个有 个阵元的平面阵列结构,其元素被恒定位移矢量 分离。该阵列由两个完全相同的子阵构成,阵元数目均为 个。其中子阵 1 由前 个阵元组成,子阵 2 由后 个阵元组成。假设子阵 1 向 轴正方向移动 时与子阵 2 重合。
假设位于远场的具有相同波长的 个统计独立的窄带信号 ,从方位方向 入射到阵列。分别用 表示子阵 1,2 的接收的来波信号矩阵。子阵 1,2 的输出噪声为 ,假设它们为零均值且方差为 的统计独立的高斯白噪声,且与信号矩阵不相关。
则对子阵 1、2 所接收的来波信号矩阵为:
其中,
,
为两阵列间的延迟相位,
。由上式可知,
是由
旋转得到的。因此可以联立两个子阵的模型得到:
这里可得到协方差矩阵
取 个时刻的快拍数据,得:
假设各到达角互不相同,即矩阵 的列向量之间线性独立( 列满秩)。实际中,只能利用输出采样值估计 ,对协方差矩阵做特征分解:
其中, 的规模是 ,因此 是 的, 是 的。由之前的性质知道 与 张成的子空间一致,则一定存在唯一的非奇异矩阵 ,使得 。则可以分解为
从上式可立即得到 ,其中 。 一旦求出矩阵 ,就可以得到 旋转矩阵:
入射角度就可以通过上面的关系求得。从以上推导可知有如下关键信息:
但实际应用中,我们只能得到有限的有噪声的测量数据去估计 ,从而 ,甚至 。所以这时我们无法找到 使得 。必须寻找一个准则以获得 的合适估计,通常情况下应用的是最小二乘 (LS) 估计。
TLS-ESPRIT 步骤
假设模型 中, 已知且误差由 引起,若要获得 的估计通常应用标准的 LS 准则。这里容易证明 和 中同样存在噪声,那么 LS 准则只考虑了 的噪声扰动,即 就是不合适的。
考虑
和
都有噪声存在的准则是:整体最小二乘法 (TLS)。其思想是同时扰动
,同时矫正
中存在的噪声:
于是 TLS 的解等价于
上面的问题通过下面的最小化问题得到 的最小二乘解。记 ,寻找一个酉矩阵 。上面的 TLS 问题转化为
我们发现只要使得 与 和 都正交即可,则 可以从 的特征分解中得到。因为
其中 是从大到小排列的特征值构成的对角矩阵,由 , 应该取后面的噪声子空间 ,对应的 ,可以达到最小化的目的。于是有
其中,我们对矩阵 做了划分:
因此有 ,然后求特征值,得到对应的到达角。
ESPRIT 算法仿真
% TLS_ESPRIT ALOGRITHM
% DOA ESTIMATION BY TLS_ESPRIT ALOGRITHM
clear variables;
close all; clc;
%信噪比(dB)
snr=-10:2:10;
lsnr = length(snr);
RMSE=zeros(1,lsnr);
test_num = 300;
source_number=1; % 信源数
sensor_number=8; % 原阵元数
m=7; % 子阵元数
N_x=1024; % 信号长度
snapshot_number=N_x; % 快拍数
w=pi/4; % 信号频率
l=2*pi*3e8/w; % 信号波长
d=0.5*l; % 阵元间距
array_distance=d; % 两组阵元轴线方向的间距
source_a= 50; % 两个信号的入射角度
source_doa= source_a *pi/180; % 两个信号的入射角度
% 阵列流型
A=[exp(-1i*(0:sensor_number-1)*d*2*pi*sin(source_doa)/l)].';
for isnr = 1:lsnr
RMSE_i = zeros(1, test_num);
for iter = 1:test_num
% 仿真信号
s=sqrt(10.^(snr(isnr)/10))*exp(1i*w*[0:N_x-1]);
%x=awgn(s,snr);
% 加了高斯白噪声后的阵列接收信号
x=A*s+(1/sqrt(2))*(randn(sensor_number,N_x)+1i*randn(sensor_number,N_x));
x1=x(1:m,:); % 子阵1接受的数据矢量
x2=x(2:(m+1),:); % 子阵2接受的数据矢量
% 对两个子阵的模型进行合并
X = [x1; x2];
R=X*X'/snapshot_number;
% 对R进行奇异值分解
[U,S,V]=svd(R);
R=R-S(2*m,2*m)*eye(2*m);
[U,S,V]=svd(R);
Us=U(:,1:source_number);
% disp(Us);
Us1=Us(1:m,:);
Us2=Us((m+1):2*m,:);
%Us12=[Us1 Us2];
% 形成矩阵Us12
Us12=[Us1,Us2];
% 对“Us12'*Us12”进行特征分解,得到矩阵E
[E,Sa,Va]=svd(Us12'*Us12);
% disp('E');
% disp(E);
% disp(Sa);
% 将 E_4x4 分解为四个小矩阵
E11=E(1,1);
E12=E(1,2);
E21=E(2,1);
E22=E(2,2);
% 按照公式得到旋转不变矩阵M
M=-(E12*(inv(E22)));
% disp('M');
% disp(M);
% 对得到的旋转不变矩阵进行特征分解
[Vm,Dm]=eig(M);
% disp(Dm);
Dm=(diag(Dm)).';
doa=-asin(angle(Dm)/pi)*180/pi;
disp(doa);
RMSE_i(iter)=sqrt((doa-source_a)^2);
end
RMSE(isnr) = sum(RMSE_i)/test_num;
end
%% plot
figure;
plot(snr,RMSE,'m-s');
%legend('elevation','azimuth');
xlabel('SNR (dB)');
ylabel('RMSE of(degree)');
%axis([-100 100 -40 60]);
%set(gca, 'XTick',[-100:20:100]);
grid on;
运行效果如图: