LMS自适应波束形成算法(MATLAB)
文章目录
- 前言
- 一、自适应波束形成的最佳权矢量
- 二、MATLAB实现
- 1.代码逻辑
- 2.代码实现
- 3.实验结果
前言
记录阵列信号处理的学习过程。
一、自适应波束形成的最佳权矢量
一般来说,并不希望直接求解方程,其理由如下:①由于移动用户环境是时变的,所以权向量的解必须能及时更新;②由于估计最佳解需要的数据是含噪声的,所以希望使用一种更新技术,可利用已求出的权向量求平滑最佳响应的估计,以减小噪声的影响。因此,希望使用自适应算法周期更新权向量。
实际上就是自适应滤波的工程,使得输出不断向期望信号收敛。这里以MMSE(最小均方误差)为例,说明如何把他变成一种自适应算法。
1.MMSE方法
MMSE准则就是使误差y(k)−d(k)y(k)-d(k)y(k)−d(k)的均方值最小化,即代价函数取J(wq)=E[∣wqHx(k)−dq(k)∣2]J(w_q)=E[|w^H_qx(k) - d_q(k)|^2]J(wq)=E[∣wqHx(k)−dq(k)∣2]实际上就是数学中的问题,给了y,要去求使得y取得最小最小值的x,在一维中我们直接求导数就可以,在二维和高维中,我们利用雅可比行列式,实际上是和一元差不多。在一元函数中,我们寻找最优点往往就是先给定初始xxx,然后以一个步长往梯度的反方向步进,在这里也是一样。
我们将上式子展开
J(wq)=wHE[x(k)xH(k)]wq−E[dq(k)xH(k)]wq−wqHE[x(k)dq∗(k)]+E[dq(k)dq∗(k)]J(w_q)=w^HE[x(k)x^H(k)]w_q-E[d_q(k)x^H(k)]w_q-w_q^HE[x(k)d^*_q(k)]+E[d_q(k)d^*_q(k)]J(wq)=wHE[x(k)xH(k)]wq−E[dq(k)xH(k)]wq−wqHE[x(k)dq∗(k)]+E[dq(k)dq∗(k)]对上式子对wqw_qwq求导数(矩阵求导,下次抽空了写一下),求得
∂∂wqJ(wq)=2E[x(k)xH(k)]wq−2E[x(k)dq∗(k)]=2Rxwq−rxd\frac{\partial}{\partial w_q}J(w_q)=2E[x(k)x^H(k)]w_q-2E[x(k)d^*_q(k)]=2R_xw_q-r_{xd}∂wq∂J(wq)=2E[x(k)xH(k)]wq−2E[x(k)dq∗(k)]=2Rxwq−rxd
只要求出了梯度,我们就可以迭代,一步一步沿着梯度的方向去步进。
2.LMS算法
MMSE方法可以用LMS算法实现。
考虑随机梯度算法,其更新权矢量的一般公式为
wq(k+1)=wq(k)−12u∇w_q(k+1) = w_q(k) - \frac{1}{2}u\nabla wq(k+1)=wq(k)−21u∇
式中∇=∂∂wq(k)J(wq(k))\nabla = \frac{\partial}{\partial w_q(k)}J(w_q(k))∇=∂wq(k)∂J(wq(k)),uuu是收敛因子,实际上就是步长,这个步长,选长了,容易收敛不了,就一直在最优点旁边左右移动,选短了,需要的迭代次数增加。
上面已经求出
∇=2(E[x(k)xH(k)]wq(k)−E[x(k)dq∗(k)])\nabla = 2(E[x(k)x^H(k)]w_q(k) - E[x(k)d^*_q(k)])∇=2(E[x(k)xH(k)]wq(k)−E[x(k)dq∗(k)])
但是E[]E[]E[]这个东西是个什么呢?在实际运算中,我们如何求EEE呢?实际上EEE是一个总体的特征,当样本足够多时,我们可以去估计它,但是我们现在要求实时更新,也就是采一次样,那么就利用LMS算法去更新一次,现在有EEE是不可以的,LMS算法的基本思路是把数学期望用各自的瞬时值代替,即得到kkk时刻的梯度估计值如下
∇~(k)=2x(k)[xH(k)wq(k)−dq∗(k)]=−2x(k)f(k)\tilde{\nabla}(k) = 2x(k)[x^H(k)w_q(k)-d^*_q(k)]=-2x(k)f(k)∇~(k)=2x(k)[xH(k)wq(k)−dq∗(k)]=−2x(k)f(k)实际上
E[∇~]=∇E[\tilde{\nabla} ] = \nablaE[∇~]=∇,即∇~\tilde{\nabla}∇~是∇\nabla∇的一个无偏估计,在某些情况下,我们是可以替代的。
我们将梯度值代回权矢量的更新公式,得到了LMS算法为
w(k+1)=w(k+1)+ux(k)f(k)w(k+1) = w(k+1)+ux(k)f(k)w(k+1)=w(k+1)+ux(k)f(k)
算法 | 初始化 | 更新公式 |
---|---|---|
LMS | w0=0w_0=0w0=0 | y(k)=wH(k)x(k)f(k)=d(k)−y(k)w(k+1)=w(k)+ux(k)f∗(k)y(k)=w^H(k)x(k) \\ f(k)=d(k)-y(k) \\ w(k+1) = w(k) + ux(k)f^*(k)y(k)=wH(k)x(k)f(k)=d(k)−y(k)w(k+1)=w(k)+ux(k)f∗(k) |
二、MATLAB实现
1.代码逻辑
实际上LMS实现比较简单。
1.kkk时刻计算y(k)=wH(k)x(k)y(k)=w^H(k)x(k)y(k)=wH(k)x(k)
2.计算f(k)=d(k)−y(k)f(k)=d(k)-y(k)f(k)=d(k)−y(k)
3.更新权矢量w(k+1)=w(k)+ux(k)f∗(k)w(k+1) = w(k) + ux(k)f^*(k)w(k+1)=w(k)+ux(k)f∗(k)
4.进行第k+1k+1k+1次迭代
2.代码实现
clear;
clc;
M = 16;
thetas = [0 30 60];
lambda = 10;
d = lambda /2;N = 1000;
n = 0:N-1;
f0 = 2000;
s = [1*sin(2*pi*f0 *n/(8*f0));...2*sin(2*pi*2*f0 *n/(8*f0));...3*sin(2*pi*3*f0 *n/(8*f0))];
% 生成方向矢量
A = exp(-1i * 2 * pi * d * (0:M-1)' * sind(thetas) / lambda);
St = A*s + randn(M,N);
% LMS 算法 开始 进行自适应滤波
di = s(1,:); % 第一行为期望信号
u = 0.0005;
w = zeros(M,1); % 初始化权重向量for k = 1:Ny(k) = w'*St(:,k);e(k) = di(k) - y(k);w = w + u * St(:,k) * conj(e(k));
end
scan_theta = [-89:90];
beam = zeros(1,length(scan_theta));
for i = 1 :length(scan_theta)% 构造该方向的方向向量v = exp(-1i * 2 * pi *d* (0:M-1)'.*sind(scan_theta(i))/lambda);beam(i) = abs(w'*v);
end
figure;
plot(scan_theta,20*log10(beam/max(beam)))
title('方向图')
figure;
for k = 1:Nen(k) = (abs(e(k)))^2;
end
semilogy(en); hold on;
xlabel('迭代次数')
ylabel('MSE')
title('MSE')
3.实验结果
当以0度入射的信号为期望信号时
当以30度信号为期望信号时。
可见权值都收敛到了正确的方向图方向。
主要参考:张小飞.阵列信号处理及MATLAB实现[M].电子工业出版社
LMS自适应波束形成算法(MATLAB)相关推荐
- 阵列信号处理——LMS自适应波束形成算法
一.LMS自适应波束形成算法 最小均方算法(LMS)采用迭代模式,在每个迭代步骤n时刻的权向量加上一个校正量后,即组成n + 1时刻的权向量,用它逼近最佳权向量.LMS自适应波束形成算法如下表所示: ...
- 波束赋形技术lms算法在matlab仿真,自适应波束成形算法LMS、RLS、VSSLMS分解
1.传统的通信系统中,基站天线通常是全向天线,此时,基站在向某一个用户发射或接收信号时,不仅会造成发射功率的浪费,还会对处于其他方位的用户产生干扰.然而,虽然阵列天线的方向图是全向的,但是通过一定技术 ...
- 几类自适应波束形成算法推导
波束形成是声纳或者雷达信号处理的一个重要的步骤,它旨在使接收的阵列能够按照期望的方向接收信号,并且抑制其它方向信号的干扰.自适应波束形成往往具有比常规波束形成更尖的指向性和抗强干扰能力.在一些情况下更 ...
- 【自适应波束形成算法】 ---- 线性约束最小方差准则(公式推导)
波束形成是阵列信号处理中的一个重要领域.常规的波束形成,可以通过FFT是实现,其权矢量一般由期望方向的导向矢量加窗后得到. 假设有一个由N个阵元组成的线阵,有一来自方向的来波信号入射到阵元上,其导向矢 ...
- 高阶累积量四阶矩_基于四阶累积量的LCMV自适应波束形成算法
任培林 摘要 基于四阶累积量的线性约束最小方差(LCMV)算法的自适应形成波束,通过四噪声阶累积量中所含的冗余成分构建虚拟阵元,避免了相关高斯噪声的影响,保证了方向图能在期望信号方向增益最大,干扰方向 ...
- 时延估计 matlab,LMS自适应时延估计matlab程序
目前在做个超声波方便的东西,就是计算固定的距离的两点之间超声波的传播时间,因为我以前也没学过自适应滤波的知识,matlab也不怎么懂,所以现在就碰到一些困难. 附件是我用来仿真的一个MATLAB程序, ...
- 阵列算法matlab,这是张小飞的阵列信号的全部MAT
文件名大小更新时间 这是张小飞的阵列信号的全部MATLAB代码\1.MUSIC算法MATLAB程序02017-10-19 这是张小飞的阵列信号的全部MATLAB代码\1.MUSIC算法MATLAB程序 ...
- 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
[自适应波束形成]MVDR(Minimum Variance Distortionless Response )笔记 参考: https://blog.csdn.net/qq_40981790/art ...
- 声源定位系统设计(一)——MVDR波束形成算法
声源定位系统设计(一)--MVDR算法 下一篇:声源定位系统设计(二)--MUSIC算法以及Python代码实现将讲述本篇博客中算法的代码实现以及另一种波束形成算法. 目录 声源定位系统设计(一)-- ...
- 低轨卫星通信系统波束成形算法
摘要 宽带卫星互联网的迅速发展使得卫星通信进入新纪元,大规模低轨卫星星座的建立使得频谱资源逐渐饱和,频率使用的高度重合导致各个卫星通信系统间存在严重的干扰问题.卫星载荷通常使用相控阵天线进行通信,通过 ...
最新文章
- Ubuntu - 安装 jdk 、配置 Java 环境变量、编辑 Test.java 文件并输出 Hello World!
- 深度译文:机器学习那些事
- 1.在VS2010中文版中开发WP7程序
- 数据结构 链表(二)
- Binary Tree Level Order Traversal II 解题思路
- 云基础设施公司 HashiCorp 宣布完成 D 轮 1 亿美元融资
- linux java查看进程命令_linux一些查看进程情况的命令
- 12v电流表的正确接法_难点分析 | 电表的内外接法
- 邱跃鹏:软硬件一体化、Serverless、智能化是云计算三大趋势
- [BZOJ 2594] [Wc2006]水管局长数据加强版 【LCT】
- 【高清截图】UbuntuKylin 14.04 桌面版安装步骤
- python简单GUI(模拟记事本)
- PHP实现8进制转10进制,php 实现进制相互转换
- Ubuntu下替换软件列表
- EGO1—实现计数器74HC163
- 随笔二——班主任工作阶段总结
- 翻译题9寒假1周赛题
- fai 安装debian
- 2016.3.24 OneZero站立会议
- Git Bash 下进行快速复制粘贴