码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 阵列信号处理——LMS自适应波束形成算法


    一、LMS自适应波束形成算法 

    最小均方算法(LMS)采用迭代模式,在每个迭代步骤n时刻的权向量加上一个校正量后,即组成n + 1时刻的权向量,用它逼近最佳权向量。LMS自适应波束形成算法如下表所示:

    二、自适应波束形成的最佳权矢量
    一般来说,并不希望直接求解方程,其理由如下:①由于移动用户环境是时变的,所以权向量的解必须能及时更新;②由于估计最佳解需要的数据是含噪声的,所以希望使用一种更新技术,可利用已求出的权向量求平滑最佳响应的估计,以减小噪声的影响。因此,希望使用自适应算法周期更新权向量。实际上就是自适应滤波的工程,使得输出不断向期望信号收敛。这里以MMSE(最小均方误差)为例,说明如何把他变成一种自适应算法。

    1、MMSE方法
    MMSE准则就是使误差y(k)-d(k)的均方值最小化,即代价函数取

    实际上就是数学中的问题,给了y,要去求使得y取得最小最小值的x,在一维中我们直接求导数就可以,在二维和高维中,我们利用雅可比行列式,实际上是和一元差不多。在一元函数中,我们寻找最优点往往就是先给定初始x,然后以一个步长往梯度的反方向步进,在这里也是一样。我们将上式子展开


     

    上式对wq求导,得

    只要求出了梯度,我们就可以迭代,一步一步沿着梯度的方向去步进。
    2、LMS算法
    MMSE方法可以用LMS算法实现。
    考虑随机梯度算法,其更新权矢量的一般公式为

    式中\bigtriangledown =\frac{\partial }{\partial w_{q}(k)}J(w_{q}(k)),u是收敛因子,实际上就是步长,这个步长,选长了,容易收敛不了,就一直在最优点旁边左右移动,选短了,需要的迭代次数增加。
    上面已经求出

    但是E这个东西是个什么呢?在实际运算中,我们如何求E呢?实际上E是一个总体的特征,当样本
    足够多时,我们可以去估计它,但是我们现在要求实时更新,也就是采一次样,那么就利用LMS算法去更新一次,现在有E是不可以的,LMS算法的基本思路是把数学期望用各自的瞬时值代替,即得到k时刻的梯度估计值如下

    实际上

    即\tilde{\bigtriangledown ^{}}是\bigtriangledown的一个无偏估计,在某些情况下,我们是可以替代的。
    我们将梯度值代回权矢量的更新公式,得到了LMS算法为

    w(k+1)=w(k)+ux(k)f(k)

    三、MATLAB代码实现 

    1、代码逻辑

    2、代码实现,程序如下

    1. clear all
    2. close all
    3. clc
    4. M=16; % 天线数
    5. K=2; % 信源数
    6. theta=[0 30]; % 信号入射角度
    7. d=0.3; % 天线间距
    8. N=500; % 采样数
    9. Meann=0; varn=1; % 噪声均值、方差
    10. SNR=20;
    11. INR=20;
    12. pp=zeros(100,N);pp1=zeros(100,N);
    13. rvar1=sqrt(varn)*10^(SNR/20); % 信号功率
    14. rvar2=sqrt(varn)*10^(INR/20); % 干扰功率
    15. for q=1:100
    16. s=[rvar1*exp(1i*2*pi*(50*0.001*[0:N-1]));rvar2*exp(1i*2*pi*(100*0.001*[0:N-1]+rand))]; % 生成源信号
    17. A=exp(-1i*2*pi*d*[0:M-1].'*sin(theta*pi/180)); % 方向向量
    18. e=sqrt(varn/2)*(randn(M,N)+1i*randn(M,N)); % 噪声
    19. Y=A*s+e; % 接收信号
    20. % LMS算法
    21. L=200;
    22. de=s(1,:);
    23. mu=0.0005;
    24. w=zeros(M,1);
    25. for k=1:N
    26. y(k)=w'*Y(:,k); % 预测下一个采样和误差
    27. e(k)=de(k)-y(k); % 误差
    28. w=w+mu*Y(:,k)*conj(e(k)); % 调整权向量
    29. end
    30. end
    31. % 波束形成
    32. beam=zeros(1,L);
    33. for i=1:L
    34. a=exp(-1i*2*pi*d*[0:M-1].'*sin(-pi/2+pi*(i-1)/L));
    35. beam(i)=20*log10(abs(w'*a));
    36. end
    37. % 作图
    38. figure
    39. angle=-90:180/200:(90-180/200);
    40. plot(angle,beam);
    41. grid on
    42. xlabel('方向角/degree');
    43. ylabel('幅度响应/dB');
    44. figure
    45. for k=1:N
    46. en(k)=(abs(e(k))).^2;
    47. end
    48. semilogy(en);hold on
    49. xlabel('迭代次数');
    50. ylabel('MSE');

    运行结果如下:

    参考文献:

    https://blog.csdn.net/weixin_43601588/article/details/124312470?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166134186016782184615363%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166134186016782184615363&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-124312470-null-null.142^v42^new_blog_pos_by_title,185^v2^tag_show&utm_term=LMS%E8%87%AA%E9%80%82%E5%BA%94%E6%B3%A2%E6%9D%9F%E5%BD%A2%E6%88%90%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4187

    阵列信号处理及MATLAB实现;张小飞,陈华伟,仇小锋(编著) 

  • 相关阅读:
    博客园设置Silence主题
    第二课第二周第1-5节-基于树的模型用于医学预后
    如何看待2022年秋招Java后端开发岗一片红海?
    打表技巧和矩阵处理技巧
    图论·搜索最短路径
    Vue 2 nextTick方法|异步更新|事件循环
    一文读懂自动泊车的自动化等级
    函数是否使用结构体C++引用情况说明
    实验项目5.1 深度学习算法与硬件加速器
    46:第四章:开发文件服务:7:在【files】文件服务中,整合阿里OSS;
  • 原文地址:https://blog.csdn.net/qq_42233059/article/details/126511573
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号