自适应波束形成算法及MATLAB仿真算法(RLS和LMS)

一、概述

  自适应研究的重点一直都是自适应算法,经典的自适应波束形成算法可分为闭环算法(反馈控制算法)和开环算法(也称直接求解方法)。

  一般而言,闭环算法比开环算法要简单,实现方便,但其收敛速率受到系统稳定性要求的限制。闭环算法包括最小均方(LMS)算法、差分最陡下降(DSD)算法、加速梯度(AG)算法及3种算法的变形。

  后来更多的集中在开环算法的研究上。开环算法是一种直接求解方法,不存在收敛问题,可以提供更快的暂态响应性能,但同时也受到处理精度和阵列协方差矩阵求逆运算量的控制。事实上,开环算法可认为是实现自适应处理的最佳途径,现在被广泛应用,但开环运算量大。鉴于该问题,人们想到了采用自适应处理技术,它减轻了自适应算法的实时计算负荷,并且能较快产生较快的自适应响应。

二、自适应波束形成的最佳权向量:

  传统自适应波束形成的结构如图1所示,波束形成的权重通过自适应信号处理获得。假定阵元m的输出为连续基带(复包络)信号xm(t),经过A/D转换后,变成了离散基带信号xm(k),m=0,1,...,M-1,并且以阵元0为参考点。另外,假定共有Q个信源存在,wq(k)表示在时刻k对第q个信号解调所加的权向量,其中q=1,...,Q。权向量用某种准则确定,来使解调出来的第q个信号的质量在某种意义上最优

图片

 图1 传统自适应波束形成的结构

  在最佳波束形成中,权向量通过代价函数的最小化来确定在典型情况下,这种代价函数越小,阵列输出信号的质量就越好,因此当代价函数最小时,自适应阵列输出信号的质量最好

  代价函数有两种常用的形式:最小均方误差(MMSE)和最小二乘方法(LS)

  1、MMSE方法

  MMSE方法是在波形估计、信号检测和系统参数辨识等信号处理中广泛应用的一种优化方法。所以MMSE方法就是使得估计误差y(k)-dq(k)的均方值最小化,即代价函数取:

图片

式中,x(k)=[x0(k),x1(k),...xM-1(k)]T。代价函数为第q个信号的阵列输出与该信号在时刻k的期望形式之间的平方误差的数学期望值,将上式展开可得。

图片

由上式可得:

图片

上式中Rx是数据向量x(k)的自相关矩阵,即

图片

 而rxd是数据向量x(k)与期望信号dq(k)的互相关向量,即:

图片

 令

图片

,那么得到:

图片

这就是MMSE方法下的最佳阵列权向量,它是维纳滤波理论中最佳滤波器的标准。

  2、LS方法

  在MMSE方法中,代价函数定义为阵列输出与第q个用户期望响应之间误差平方的总体平均(均方差),实际数据向量总是有限长的,假如直接定义代价函数为其误差平方,则得到LS方法

  假定有N个快拍的数据向量x(k),k=1,...,N,定义为代价函数;

图片

 则求出的梯度为:

图片

令梯度等于0,可以得到:

图片

 这就是最小二乘意义下针对第q个用户的波束形成器的最佳权向量,上式中Xdq分别表示数据向量和期望信号向量,其值为:

图片

   上面介绍的MMSE和LS的核心问题是,在对第q个用户进行波束形成时,需要在接收端使用该用户的期望响应。为了提供这个期望响应,必须周期性的发送对发射机和接收机二者都知道的训练序列。但训练序列会占用频谱资源,这是MMSE和LS共有的问题。

  一种可以代替训练序列的方法是采用决策指向更新对期望响应进行学习。在决策指向更新中,期望信号样本的估计根据阵列输出和信号解调器输出重构。由于期望信号是在接收端产生的,不需要发射数据的知识,因此不用训练序列。

三、权向量更新的自适应算法

  上面提到的自适应阵列的最佳权向量的确定需要求解相关方程,一般来说,不是很希望直接求解方程。理由如下:

  (1)由于移动目标环境是实时变化的,所以权向量的解必须实时更新。

  (2)由于估计最佳解需要的数据是含有噪声的,所以希望使用一种更新的技术,能够利用已经求得的权向量求平滑最佳响应的估计,从而减小噪声的影响。

  所以希望使用自适应算法周期更新权向量。

  自适应算法即可采用迭代模式也可采用分块模式。

  (1)所谓迭代模式,就是在每个迭代步骤,n时刻的权向量加上一个校正量后,就组成了n+1时刻的权向量,用这个新的权向量来逼近最佳权向量。

  (2)在分块模式下,权向量并不是实时更新的,而是间隔一定时间周期才更新;由于在一定时间周期内对应于一个数据块而不是一个数据点。所以这种更新又称为分块更新。

  为了使阵列系统能够自适应工作,就必须将第二节介绍的方法归到自适应算法中。以MMSE为例子,看看如何将它变为一种自适应算法。

  考虑到随机梯度算法,其更新权向量的一般公式为:

图片

  其中,

图片

,μ称为收敛因子,它控制自适应算法的收敛速度,则:

图片

  上式中的数学期望用各自的瞬时值代替,就得到了k时刻的梯度估计值。

图片

  公式中,

图片

,代表阵列输出与第q个用户期望响应dq(k)之间的瞬时误差。容易证明,梯度估计是真实梯度的无偏估计。

  将梯度估计值公式带入更新权向量的一般公式中可得熟悉的LMS自适应算法。

图片

  MMSE方法可以用LMS算法实现,而LS方法的自适应算法可以递推最小二乘(RLS)算法,下表给出了3种自适应波束形成算法的比较,分别是LMS算法、RLS算法和Bussgang算法。从表中可以看出LMS和RLS算法需要使用训练序列,但Bussgang算法不需要训练序列。

  注意Bussgang算法中,g[y(k)]是一个非线性的估计子,,它对解调器的输出信号y(k)起作用,并用g[y(k)]代替期望信号d(k),然后产生误差函数e(k)。

图片

四、matlab仿真:

  本文仅对上表中的最小均方算法和递推最小二乘算法进行仿真,如果后面有用到Bussgang算法,再来学习这个算法。需要注意一点的是在RLS算法中,遗忘因子的值越接近1波束形成效果越好,越接近0,波束形成的效果会很差。

 1、最小均方(LMS)算法matlab仿真

%最小均方算法(LMS)采用迭代模式,在每个迭代步骤n时刻的权向量加上一个校正量后
%就得到n+1时刻的权向量,用它来逼近最佳权向量。
clc
clear all
close all
M=16;                      %天线数
K=2;                       %信源数
theta=[0 30];              %信号入射角度
d=0.3;                     %天线间距
N=500;                    %采样点数
Mean_noise=0;              %噪声均值
varn_noise=1;              %噪声方差

SNR=10;                               %信噪比
INR=10;                               %干噪比

pp=zeros(100,500);
pp1=zeros(100,500);

rvar1=sqrt(varn_noise)*10^(SNR/20);          %信号功率
rvar2=sqrt(varn_noise)*10^(INR/20);          %干扰功率

%for q=1:100
s=[rvar1*exp(j*2*pi*(50*0.001*[0:N-1]));rvar2*exp(j*2*pi*(100*0.001*[0:N-1]+rand))];      %生成源信号
A=exp(-j*2*pi*d*[0:M-1]'.*sind(theta));              %来自波达方向theta的发射源的方向向量
noise=sqrt(varn_noise/2)*(randn(M,N)+j*randn(M,N));
Y=A*s+noise;                                             %接收信号
%LMS算法
L=200;                 %快拍数
w1=[];
beam1=[];
for i=1:length(theta)
    de=s(i,:);             %期望信号
    mu=0.0005;             %步长参数
    w=zeros(M,1);
    for k=1:N
        y(k)=w'*Y(:,k);               %预测下一个采样和误差
        e(k)=de(k)-y(k);              %误差
        w=w+mu*Y(:,k)*conj(e(k));     %更新权向量
    end
    w1=[w1 w];
    for i=1:L
        a=exp(-j*2*pi*d*[0:M-1]'.*sin(-pi/2+pi*(i-1)/L));
        beam(i)=20*log10(abs(w'*a));
        
    end
    beam1=[beam1;beam];
    
end
sum1=sum(beam1);
figure
angle=-90:180/200:(90-180/200);
plot(angle,beam1(1,:));
grid on;
xlabel("角度/degree")
ylabel("波束图/dB")
title("入射角度0,LMS波束图")
figure
angle=-90:180/200:(90-180/200);
plot(angle,beam1(2,:));
grid on;
xlabel("角度/degree")
ylabel("波束图/dB")
title("入射角度30,LMS波束图")

图片

 2、递推最小二乘(RLS)算法仿真

clc
clear all
close all
M=16;    %天线数
K=2;     %信号源个数
theta=[0 30];      %信号入射角度
d=0.5;             %天线间距
N=500;             %采样点数

Mean_noise=0;              %噪声均值
varn_noise=1;              %噪声方差

SNR=10;                               %信噪比
INR=10;                               %干噪比

rvar1=sqrt(varn_noise)*10^(SNR/20);          %信号功率
rvar2=sqrt(varn_noise)*10^(INR/20);          %干扰功率

s=[rvar1*exp(j*2*pi*(50*0.001*[0:N-1]));rvar2*exp(j*2*pi*(100*0.001*[0:N-1]+rand))];      %生成源信号
A=exp(-j*2*pi*d*[0:M-1]'.*sind(theta));              %来自波达方向theta的发射源的方向向量
noise=sqrt(varn_noise/2)*(randn(M,N)+j*randn(M,N));
Y=A*s+noise;
beam1=[];
lamda=0.99;             %遗忘因子
L=200;                 %快拍数
for i=1:length(theta)
    %RLS算法  
    de=s(i,:);             %期望信号
    w=zeros(M,1);          %初始化权值
    P0=0.5*eye(M);
    P=P0;
    y=zeros(M,1);
    for k=1:N
        v(:,k)=P*Y(:,k);
        u=inv(lamda)*v(:,k)./(1+inv(lamda)*Y(:,k)'*v(:,k));
        a(k)=de(k)-w'*Y(:,k);
        w=w+u*conj(a(k));
        P1=inv(lamda)*[eye(M)-u.*Y(:,k)']*P;
        P=P1;
    end
    beam=zeros(1,L);
    for i=1:L
        a1=exp(-j*2*pi*d*[0:M-1]'.*sin(-pi/2+pi*(i-1)/L));
        beam(i)=20*log10(abs(w'*a1));
    end
    beam1=[beam1;beam];
end
sum1=sum(beam1);
figure
angle=-90:180/200:(90-180/200);
plot(angle,beam1(1,:));
grid on;
xlabel("角度/degree")
ylabel("波束图/dB")
title("入射角度0,RLS波束图")
figure
angle=-90:180/200:(90-180/200);
plot(angle,beam1(2,:));
grid on;
xlabel("角度/degree")
ylabel("波束图/dB")
title("入射角度30,RLS波束图")

图片

五、参考内容

  《阵列信号处理及MATLAB仿真》

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: matlab 自适应波束形成算法是一种用于无线通信和雷达系统中的信号处理技术。它的主要目标是在多个接收信号中将所需信号的能量最大化,同时抑制其他干扰信号和噪声。 该算法的基本原理是通过调整阵列天线的权重来达到所需信号的空间增益最大化。首先,需要对信号进行采样和量化,然后将其传递给自适应波束形成算法。 该算法的核心是利用波束权重的自适应调整来实现最优的信号增益。它通过不断估计波束权重的值,根据接收到的信号和已知的系统参数进行计算,以使得目标信号增益最大化。 自适应波束形成算法通常包括以下步骤:首先,计算接收信号的协方差矩阵,以确定系统的特定参数。然后,根据特定的算法或准则,计算出波束权重的更新值。最后,通过调整每个天线的权重,将波束指向目标信号的方向。 matlab 在实现自适应波束形成算法时具有很大的优势。它提供了丰富的信号处理工具和函数库,使得算法的实施过程更加简便和高效。用户可以使用 matlab 中的内置函数,如cov和lms,来处理和计算信号的协方差矩阵和波束权重的更新值。 总之,matlab 自适应波束形成算法是一种利用波束权重自适应调整来实现最优信号增益的信号处理算法。通过利用 matlab 的信号处理工具和函数库,可以实现该算法的简单且高效的实际应用。 ### 回答2: Matlab中的自适应波束形成算法是一种信号处理技术,它使用空间滤波器来增强所感兴趣信号的接收,同时抑制干扰信号。该算法主要包括以下几个步骤: 1. 信号采集:首先,通过阵列天线收集到多个传感器位置上的信号。 2. 信号预处理:对采集到的信号进行预处理,如去噪、滤波等,以减少干扰信号的影响。 3. 构建波束权重:基于接收阵列的几何结构和所感兴趣信号的方向,利用自适应算法计算出各个传感器的波束权重。这些权重将使阵列的主瓣指向感兴趣信号的方向。 4. 波束形成:将波束权重应用于接收信号,通过对各个传感器的接收信号进行加权叠加,形成一个合成的波束。这样,合成的波束将增强感兴趣信号的接收。 5. 干扰抑制:通过波束形成,使阵列对于感兴趣信号具有方向选择性。在阵列主瓣指向感兴趣信号的方向上,干扰信号将被抑制,从而提高信号的信噪比。 6. 输出信号评估:对形成的波束输出信号进行评估,如计算接收信号的功率、信噪比等指标,以评估自适应波束形成算法的性能。 Matlab提供了丰富的信号处理工具箱和函数,可以方便地实现自适应波束形成算法,并进行仿真和实验研究。通过调整算法参数和优化策略,可以进一步提高算法的性能,使其能够适应不同环境和场景中的波束形成需求。 ### 回答3: 自适应波束形成算法是一种通过自动调整权重系数来提高信号接收系统性能的算法。在MATLAB中,我们可以使用自适应波束形成算法来提高阵列信号处理的效率。 具体来说,自适应波束形成算法通过分析各个接收天线的输入信号,从而自动生成适当的权重系数。这些权重系数可以用来调整各个天线的输出信号,使得在特定方向上的期望信号被加强,而不希望接收的干扰信号则被抑制。 MATLAB中常用的自适应波束形成算法包括最小均方误差(Least Mean Square, LMS)和逆协方差矩阵(Inverse Covariance Matrix, ICM)等。其中,LMS算法通过迭代调整权重系数,使得输出信号与参考信号之间的均方误差最小化。而ICM算法则通过计算接收信号的协方差矩阵及其逆矩阵,得到最优权重系数。 在MATLAB中,使用自适应波束形成算法可以通过计算接收信号的功率谱密度、相关矩阵和协方差矩阵来实现。其中,功率谱密度可以使用periodogram函数计算,相关矩阵和协方差矩阵可以使用cov函数计算。然后,根据所选择的自适应算法,使用LMS或ICM等函数来计算权重系数,并将其应用于接收信号的分析和处理中。 总的来说,MATLAB提供了丰富的函数和工具,使得自适应波束形成算法的实现变得非常简单和高效。通过使用MATLAB来分析和调整权重系数,我们可以获得更好的阵列信号处理效果,提高信号接收系统的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值