基于特征子空间的波束形成算法原理介绍及MATLAB实现

原理介绍

期望信号的导向矢量属于导向矢量张成的子空间,因此可以将有误差的名义导向矢量向该子空间投影来修正导向矢量,进而减小误差。
对接收数据的协方差矩阵进行特征分解可以得到
R ^ = ∑ m = 1 M λ m u m u m H \hat{R}=\sum\limits_{m=1}^{M}{{{\lambda }_{m}}{{u}_{m}}u_{m}^{H}} R^=m=1MλmumumH
其中, λ m {{\lambda }_{m}} λm为其特征值, u m {{u}_{m}} um λ m {{\lambda }_{m}} λm对应的特征向量。假设 λ 1 ≥ λ 2 ≥ ⋯ λ M {{\lambda }_{1}}\ge {{\lambda }_{2}}\ge \cdots {{\lambda }_{M}} λ1λ2λM,可以选择前 K K K较大特征值对应的特征向量张成的子空间为信号子空间,因此可以得到信号子空间为
U s = [ u 1 , u 2 , ⋯   , u K ] {{U}_{s}}=\left[ {{u}_{1}},{{u}_{2}},\cdots ,{{u}_{K}} \right] Us=[u1,u2,,uK]
进而得到投影矩阵
P s = U s U s H {{P}_{s}}={{U}_{s}}U_{s}^{H} Ps=UsUsH
通过对名义导向矢量进行投影可以得到修正后的导向矢量
a ^ 0 = P s a ˉ 0 {{\hat{a}}_{0}}={{P}_{s}}{{\bar{a}}_{0}} a^0=Psaˉ0
那么可以得到最终的加权系数为
w = R − 1 a ^ 0 a ^ 0 H R − 1 a ^ 0 w=\frac{{{R}^{-1}}{{{\hat{a}}}_{0}}}{\hat{a}_{0}^{H}{{R}^{-1}}{{{\hat{a}}}_{0}}} w=a^0HR1a^0R1a^0
权系数也可以写作
w = U s Λ s − 1 U s H a ˉ 0 w={{U}_{s}}\Lambda _{s}^{-1}U_{s}^{H}{{\bar{a}}_{0}} w=UsΛs1UsHaˉ0
该算法的关键点在于重构投影矩阵,也就是怎么估计出准确的信号子空间。在实际应用中,基于大特征值所对应的特征矢量作为信号子空间的方法受限于信源数信息,及协方差矩阵的特征值容易受到低信噪比条件的影响导致大小非常接近,很难通过比较大小准确估计信号子空间。
针对该问题,研究者提出了一种改进的算法。
首先计算名义导向矢量 a ˉ 0 {{\bar{a}}_{0}} aˉ0在特征矢量 u m {{u}_{m}} um m = 1 , 2 , ⋯   , M m=1,2,\cdots ,M m=1,2,,M上投影的模值
p ( m ) = ∣ u m H a ˉ 0 ∣ 2 p\left( m \right)={{\left| u_{m}^{H}{{{\bar{a}}}_{0}} \right|}^{2}} p(m)=umHaˉ02
对模值进行排序
p 1 ≥ p 2 ≥ ⋯ ≥ p M {{p}_{1}}\ge {{p}_{2}}\ge \cdots \ge {{p}_{M}} p1p2pM
对于给定的门限 ρ \rho ρ,找到满足下面式子的最小 K ′ {K}' K
( p 1 + p 2 + ⋯ p K ′ ) / ∑ m = 1 M p ( m ) > ρ \left( {{p}_{1}}+{{p}_{2}}+\cdots {{p}_{{{K}'}}} \right)/\sum\limits_{m=1}^{M}{p\left( m \right)}>\rho (p1+p2+pK)/m=1Mp(m)>ρ
那么将 p m {{p}_{m}} pm m = 1 , 2 , ⋯   , K ′ m=1,2,\cdots ,{K}' m=1,2,,K对应的特征向量作为新的矩阵 U s {{U}_{s}} Us,构造新的投影矩阵
P = U s U s H P={{U}_{s}}U_{s}^{H} P=UsUsH
通过对名义导向矢量进行投影可以得到修正后的导向矢量
a ^ 0 = P s a ˉ 0 {{\hat{a}}_{0}}={{P}_{s}}{{\bar{a}}_{0}} a^0=Psaˉ0
那么可以得到最终的加权系数为
w = R − 1 a ^ 0 a ^ 0 H R − 1 a ^ 0 w=\frac{{{R}^{-1}}{{{\hat{a}}}_{0}}}{\hat{a}_{0}^{H}{{R}^{-1}}{{{\hat{a}}}_{0}}} w=a^0HR1a^0R1a^0
该算法期望通过相关性估计一个期望信号子空间,然而本质上只有期望信号子空间和干扰信号子空间组成的信号子空间,而期望信号子空间和干扰信号子空间并不是直和关系,除非导向矢量之间是正交的,即使是正交的,他们也是很难通过特征矢量分割的,而且该算法严重依赖门限值。同时,该算法在低信噪比的条件下较之前的特征子空间算法有较大的改善。

仿真参数设置

参数名称参数值
阵元数10
期望信号角度 − 5 ∘ -5^{\circ} 5
干扰信号角度 − 3 0 ∘ -30^{\circ} 30 3 0 ∘ 30^{\circ} 30
SNR10dB
INR20
快拍数60

仿真结果如下
在这里插入图片描述
这里采用的是固定信号子空间进行投影后的结果,当然也可以选择利用门限值确定信号子空间的方法,两者各有优缺点,不过都能改善波束形成器的性能。在阵列模型存在误差的条件下,更能体现该方法的优越性,这里就不再叙述。
代码如下:

clear;
close all;
clc;
warning off
%% 初始化
M = 10;             %阵元数
fs = 5000;          % 采样频率
f = 1000;           % 信号频率
snap = 60;         % 快拍数
T = 0.5;           %采样时间
t = 1/fs:1/fs:T;
c = 340;
lamda = c/f;              %波长
d = 0.5*lamda;          %阵元间距
theta0 =-5;                %期望信号角度
theta1 =-30;                %干扰角度
theta2 = 30;                %干扰角度
snr=10;                     %信噪比
inr1 =20;                   %干噪比
inr2 = 20;                   %干噪比
snr_noise = 0;              %噪声功率1,0dBW

%% 导向矢量
a0 = exp(-1j*2*pi*d*sind(theta0)*(0:M-1)'/lamda);
a1 = exp(-1j*2*pi*d*sind(theta1)*(0:M-1)'/lamda);
a2 = exp(-1j*2*pi*d*sind(theta2)*(0:M-1)'/lamda);

%% 信号、干扰和噪声
tar_sig = wgn(1,length(t), snr);
inf1 = wgn(1,length(t),inr1); 
inf2 = wgn(1,length(t),inr2); 
noise = wgn(M,length(t),snr_noise);

%% 阵列接收信号
rec_sig = a0*tar_sig + a1*inf1 + a2*inf2 + noise; 
interference = a1*inf1 + a2*inf2;
sig = a0 * tar_sig;

%% 协方差矩阵
Rx = rec_sig(:,1:snap)*rec_sig(:,1:snap)'/snap; 
Rs = sig(:,1:snap)*sig(:,1:snap)'/snap; 
Ri = interference(:,1:snap)*interference(:,1:snap)'/snap; 
Rn = noise(:,1:snap)*noise(:,1:snap)'/snap; 

%% EIG算法
[U, V] = eig(Rx);
[V_new, index] = sort(diag(V),'descend');
U_new = U(:,index);
K = 3;
uu=U_new(:,1:K);
P = uu * uu';
a0 = P * a0;
w = inv(Rx)*a0 /(a0'*inv(Rx)*a0);
optimal_weight = w;
theta = -90:0.1:90; % scan angle
p = exp(-1j*2*pi*d*(0:M-1)'*sind(theta)/lamda);
y = optimal_weight'*p;
yy = 20*log10(abs(y)/max(abs(y)));
%% 绘图
figure(1);
plot(theta,yy,'linewidth', 2);
xlabel('角度(\circ)');ylabel('归一化增益(dB)')
grid on;
xlim([-90 90])

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
% 宽带波束形成算法示例代码 % 使用相干信号空间法及阻塞矩阵预处理抑制主瓣干扰 clc; clear all; close all; %% 参数设置 K = 4; % 带数 N = 8; % 天线数 M = 16; % 信号数 theta = [-30 0 30]; % 信号入射角度 f = [0.1 0.3 0.5]; % 带频率 SNR = 20; % 信噪比 %% 信号发射矩阵 S = exp(1j*2*pi*(0:M-1)'*sind(theta)); % 信号发射矩阵 %% 接收信号模拟 noise = sqrt(0.5/SNR)*(randn(N,K,M)+1j*randn(N,K,M)); % 噪声信号 A = exp(-1j*2*pi*f'*(0:N-1)); % 天线阵列响应矩阵 X = zeros(N,K,M); % 接收信号矩阵 for k = 1:K X(:,k,:) = A*S(:,k,:) + noise(:,k,:); % 接收信号 end %% 相干信号空间波束形成 Rxx = zeros(N,N,K); % 信号协方差矩阵 for k = 1:K Rxx(:,:,k) = X(:,k,:)*X(:,k,:)'/M; end Rx = sum(Rxx,3)/K; % 平均信号协方差矩阵 [V,D] = eig(Rx); % 特征分解 [lambda,idx] = sort(diag(D),'descend'); % 特征值排序 V = V(:,idx); % 特征向量排序 V1 = V(:,1:M-K); % 干扰信号空间 V2 = V(:,M-K+1:end); % 信号空间 W = V2*V2'/V1/V1'; % 波束权向量 P = W*diag(diag(W)'>0); % 阻塞矩阵预处理 y = zeros(K,M); % 波束输出 for k = 1:K y(k,:) = P*X(:,k,:)*W; % 波束输出 end %% 结果显示 figure; subplot(121); plot(-90:90, 20*log10(abs(W'*A*S(:,1))), '-r', ... -90:90, 20*log10(abs(W'*A*S(:,2))), '-g', ... -90:90, 20*log10(abs(W'*A*S(:,3))), '-b'); legend('S1', 'S2', 'S3'); xlabel('Angle (degree)'); ylabel('Amplitude (dB)'); title('Antenna array pattern without blocking matrix'); grid on; subplot(122); plot(-90:90, 20*log10(abs(P*W'*A*S(:,1))), '-r', ... -90:90, 20*log10(abs(P*W'*A*S(:,2))), '-g', ... -90:90, 20*log10(abs(P*W'*A*S(:,3))), '-b'); legend('S1', 'S2', 'S3'); xlabel('Angle (degree)'); ylabel('Amplitude (dB)'); title('Antenna array pattern with blocking matrix'); grid on;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值