高斯信号的贝叶斯步长最小均方算法(Matlab代码实现)

news2024/11/24 10:52:41

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

LMS算法具有时变步长,在某些情况下可以证明其大小等效于卡尔曼滤波器。只要仔细选择卡尔曼滤波器的状态噪声和LMS算法的步长即可。卡尔曼滤波器是给定状态和测量噪声协方差矩阵的最佳线性估计器(贝叶斯),但这些矩阵并不总是已知的。这封信考虑了这些矩阵未知的情况,在卡尔曼滤波器简化为 LMS 的特殊情况下。这会导致一种算法选择具有很少先验的 LMS 算法的步长。最佳步长可以使用系数估计 (qw) 和测量噪声方差 (qv) 的概率密度函数 (PDF) 的估计值来计算。可以使用贝叶斯规则并假设高斯参考和测量噪声信号从数据中估计 PDF。经过一些近似,确定qw和qv的结果算法是第二个小卡尔曼滤波器。

📚2 运行结果

 

 部分代码:

function [w, qo, A, b, mu] = BSLMS(uv, d, w, qo, A, b, N, alpha, max_trace_A, k)

    % constants
    delta = 1e-9;   % a very small number close to the mantissa precision
    ddelta = 1e-99; % a very very small number close to the floating-point precision
 
    e = d - uv'*w;

    %%%%%% q measure update

    PT = uv'*uv + ddelta;
    P = PT/N;
    a = [PT, 1]';

    inv_zeta_sq_times_2 = 1/(2*(a'*qo)^2 + ddelta);

    A = A + inv_zeta_sq_times_2*(a*a');
    b = b + inv_zeta_sq_times_2*e^2*a;

    qo = (A+(ddelta+delta*trace(A))*eye(2)) \ b;

    xi = b'*qo;
    c = b/xi;
    nx = 4*xi/k;

    z = qo(1)/(qo(1)*PT+qo(2));
    if z < 0
        z = 0;
    end
    if z > 1/PT
        z = 1/PT;
    end
    
    %%%%%% Calculation of mu=E[z]

    if nx <= 4
        mu = z;
    else
        % first derivative
        d1 = ...
            -(nx*(pi*z*(A(1,1) - 2*PT*A(1,2)) + pi*(z*A(1,1) - 2*(-1 + PT*z)*A(1,2)) + ...
            2*pi*PT*(-1 + PT*z)*A(2,2)))/...
            (4.*(pi*z*(z*A(1,1) - 2*(-1 + PT*z)*A(1,2)) + pi*power(-1 + PT*z,2)*A(2,2))) + ...
            ((-4 + nx)*(c(1) - PT*c(2)))/(2.*(z*c(1) + c(2) - PT*z*c(2)));

        % second derivative
        d2 = ...
            -((-4 + nx)*power(c(1) - PT*c(2),2)*power(z*c(1) + c(2) - PT*z*c(2),-2))/2. + ...
            (nx*power(pi*z*(A(1,1) - 2*PT*A(1,2)) + pi*(z*A(1,1) - 2*(-1 + PT*z)*A(1,2)) + ...
            2*pi*PT*(-1 + PT*z)*A(2,2),2)*power(pi*z*(z*A(1,1) - 2*(-1 + PT*z)*A(1,2)) + ...
            pi*A(2,2)*power(-1 + PT*z,2),-2))/4. - ...
            (nx*(2*pi*(A(1,1) - 2*PT*A(1,2)) + 2*pi*A(2,2)*power(PT,2))*...
            power(pi*z*(z*A(1,1) - 2*(-1 + PT*z)*A(1,2)) + pi*A(2,2)*power(-1 + PT*z,2),-1))/4;

        if d2 >= 0
            mu = 1/(2*PT);  % at the middle of the interval
        else

            z0  = z - d1 / d2;   % z0 is approximately equal to z at the maximum
            pz = - d2;           % 1/pz is the gaussian variance

            ax = sqrt(pz)*(1-z0*PT)/(sqrt(2)*PT);
            bx = z0*sqrt(pz)/sqrt(2);

            if ax+bx < 1e-9   % the denominator is very small
                mu = 0; % lim a -> -b
            elseif abs(ax) > 10 && abs(bx) > 10  ...
                    && sign(ax)<0 && sign(bx)>0 % erfc saturates at 0
                mu = z0 + (-2+2*exp(-bx^2+ax^2))/...
                    (sqrt(2*pi*pz)*(...
                    -exp(-1/(2*ax^2))/(sqrt(pi)*ax)+...
                    -exp(-bx^2+ax^2-1/(2*bx^2))/(sqrt(pi)*bx)));
                % erfc(x) +-= exp(-x^2-1/(2x^2))/(sqrt(pi)*x)
            elseif abs(ax) > 10 && abs(bx) > 10  ...
                    && sign(ax)>0 && sign(bx)<0 % erfc saturates at 0
                mu = z0 + (-2*exp(bx^2-ax^2)+2)/...
                    (sqrt(2*pi*pz)*(...
                    -exp(bx^2-ax^2-1/(2*ax^2))/(sqrt(pi)*ax)+...
                    -exp(-1/(2*bx^2))/(sqrt(pi)*bx)));
                % erfc(x) +-= exp(-x^2-1/(2x^2))/(sqrt(pi)*x)
            elseif abs(ax) > 3 && abs(bx) > 3  ...
                    && sign(ax)*sign(bx) == -1 % erfs saturates at +1 and -1
                mu = z0 + (-2*exp(-ax^2)+2*exp(-bx^2))/...
                    (sqrt(2*pi*pz)*(...
                    -sign(ax)*erfc(abs(ax))+...
                    -sign(bx)*erfc(abs(bx))));
            else
                mu = z0 + (-2*exp(-ax^2)+2*exp(-bx^2))/...
                    (sqrt(2*pi*pz)*(erf(ax)+erf(bx)));
            end
        end
    end
    
    w = w + mu*uv*e;

    %%%%%% q time update

    gamma1 = 1;
    if qo(1) < 0
        gamma1 = -1;
    end
    gamma2 = 1;
    if qo(2) < 0
        gamma2 = -1;
    end

    C = [gamma1*(1-alpha*mu*P)^2, gamma2*alpha*mu^2*P;...
                         0,              gamma2];

    C1 = inv(C);
    A = C1'*A*C1;
    b = C1'*b;

    %%%%%% Limit A
    if trace(A) > max_trace_A
        kx = max_trace_A/trace(A);
        A = kx*A;
        b = kx*b;
    end
end
 

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Paulo Alexandre Crisóstomo Lopes (2019) A Bayesian Step Least Mean Squares Algorithm for Gaussian Signals

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生爱好者周刊 | 使用 WASM 来写博客是什么感觉?

开源项目推荐 zzhack zzhack 是一个静态博客框架&#xff0c;是一个纯正的 WASM 应用&#xff0c;它由 Rust & Yew 来作为技术栈进行搭建&#xff0c;UI 设计比较美观&#xff0c;大家也可以直接使用该项目的设计模板零成本构建 WASM 应用。 Tracee Tracee 是一个运行时…

数据结构与算法之双向链表的设计与实现

文章目录前言一、双向链表1.1 概念1.2 双向链表的应用1.3 双向链表的node方法1.4 双向链表的add方法1.5 双向链表的remove方法1.6 整体代码1.7 接口测试二、对比学习2.1 单向链表 vs 双向链表2.2 双向链表 vs 动态数组2.3 ArrayList和LinkedList的区别前言 文章链接之前所介绍…

基于python的C环境安装(NLP文本纠错项目使用)

1.下载c环境&#xff1a;&#xff08;window系统&#xff09; 链接&#xff1a;Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 2.安装 1.打开下载的安装包 2.进入如下页面&#xff0c;按照下图进行勾选&#xff0c;注意&#xff0c;其它不要动…

全渠道营销与多渠道营销:定义、比较、示例

关键词&#xff1a;全渠道营销、多渠道营销 全渠道还是多渠道&#xff1f;您正在踏上跨境电子商务之旅&#xff0c;为您的品牌寻找合适的营销策略&#xff0c;但这一切似乎都过于理论化和复杂。 我们将使事情变得更容易&#xff0c;因为本文全面解释了多渠道营销和全渠道营销之…

【文本检测】1、DBNet | 实时场景文本检测器

文章目录一、背景二、方法2.1 二值化2.2 Adaptive threshold2.3 可变形卷积2.4 生成标签2.5 优化过程三、效果3.1 实验数据3.2 实验细节3.3 消融实验3.4 和其他方法的对比论文&#xff1a;Real-time Scene Text Detection with Differentiable Binarization 代码&#xff1a;h…

不懂应该怎么选合适的医疗器械进销存?

在医院运行过程中&#xff0c;需要管理医疗设备的采购、养护、报废等各个环节。医疗器械进销存软件是集医院设备、物资、耗材的申请、采购、出入库、维修、维护、折旧、固定资产管理、效益分析等全流程管理功能于一体&#xff0c;实现医院医疗设备的信息化&#xff0c;数据库规…

数据结构之【时间复杂度和空间复杂度】

如何去评价一个代码它的效率高不高呢&#xff1f; 我们通常从两个方面去看&#xff01; 时间复杂度&#xff1a;主要衡量一个算法的运行速度空间复杂度&#xff1a;主要衡量一个算法所需要的额外空间 1. 时间复杂度 1.1 时间复杂度的定义 在计算机科学中&#xff0c;算法的…

算法题中常用的位运算

文章目录为什么使用位运算&#xff1f;十进制和二进制之间的转化短除法&#xff08;十进制转二进制&#xff09;幂次和&#xff08;二进制转十进制&#xff09;位运算符异或运算&#xff08;xor&#xff09;指定位置的位运算位运算实战要点为什么使用位运算&#xff1f; 机器采…

代码随想录刷题记录day46 最长公共子序列+不相交的线+最大子数组和

代码随想录刷题记录day46 最长公共子序列不相交的线最大子数组和 1143. 最长公共子序列 思想 1.dp数组的定义 dp[i][j]表示 以i-1为结尾的字符串text1和以j-1为结尾的字符串2的最长公共子序列长度 2.递推公式 如果text1.charAt(i-1)text2.charAt(j-1) dp[i][j]dp[i-1][j-1…

TS 对象可能为“未定义”,不能将类型“ XXXX | undefined “分配给类型{ xxxx }

前言&#xff1a; 最近用 typeScript &#xff0c;也就是大家常说的 【 TS 】写点东西&#xff0c;但是老是提醒这个未定义&#xff0c;那个可能为空&#xff0c;主要是 tsconfig.json 中的严格模式我没关&#xff0c;所以今天总结一下&#xff0c;严格模式中【TS】中遇到 对象…

Learning Disentangled Label Representations for Multi-label Classification

Learning Disentangled Label Representations for Multi-label Classification&#xff0c;2022 学习多标签分类的解纠缠标签表示 要点&#xff1a; 1、主流多标签分类&#xff1a;遵循单标签&#xff08;多类别&#xff09;分类的特征学习机制——学习一个共享的图像特征来…

【Vue实践】尚硅谷张天禹Vue学习笔记(087-135)-20221212~20221218

&#xff08;任意组件通信&#xff09;084-086_全局事件总线 全局事件总线SOP 086_TodoList案例_事件总线 src/mian.js: import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({el:"#app",render: h > h(App),beforeCreate()…

docker高级篇第二章-分布式存储之实战案例:3主3从redis集群搭建

在上一篇文章中&#xff0c;我们介绍了分布式存储的三种方式&#xff1a;hash取余分区、一致性哈希算法分区以及哈希槽分区。本篇&#xff0c;我们就来实战3主3从的哈希槽Redis集群搭建。 大家好,我是凯哥Java(kaigejava)&#xff0c;乐于分享&#xff0c;每日更新技术文章&…

【Redis深度专题】「核心技术提升」分析探究如何实现LFU的热点key发现机制以及内部的Scan扫描技术的原理

前言介绍 业务中存在访问热点是在所难免的&#xff0c;redis也会遇到这个问题&#xff0c;然而如何发现热点key一直困扰着许多用户&#xff0c;redis4.0为我们带来了许多新特性&#xff0c;其中便包括基于LFU的热点key发现机制。 Least Frequently Used Least Frequently Us…

基于节点导纳矩阵的三相配电系统建模(Matlab实现)

目录 1 概述 2 算例仿真 2.1 IEEE 37节点测试 2.2 EEE 123 节点测试 2.3 500 节点测试 2.4 906 母线低压馈线 2.5 小节 3 Matlab代码实现 1 概述 本文的主要是适用于 Z-Bus 潮流的三相配电系统建模。提供了星形和三角形恒功率、恒电流和恒阻抗负载的详细模型。布置了…

无线投屏(智慧教室)

大家好&#xff0c;我是小杜&#xff0c;打工人又开始了这一周的“搬砖”了。周末两天很好的“休息”后&#xff0c;今天浑身充满了干劲&#xff0c;都可以打死一头“牛”&#xff0c;从今天开始就要参与公司的一些业务了&#xff0c;剩余时间就是打工人最喜欢的学习时间了。 …

Nacos系列——Java SDK(2.x版本)2-1

Nacos系列——Java SDK&#xff08;2.x版本&#xff09;2-1资源地址README概述&#xff08;intro&#xff09;Nacos Java SDK 官方文档(official doc address)工程说明&#xff08;project intro &#xff09;工程目录&#xff08;project dir&#xff09;pom依赖(pom dependen…

面向切面编程

Spring AOP简介 AOP把业务功能分为核心、非核心两部分。 核心业务功能&#xff1a;用户登录、增加数据、删除数据。非核心业务功能&#xff1a;性能统计、日志、事务管理。 在Spring的面向切面编程&#xff08;AOP&#xff09;思想里&#xff0c;非核心业务功能被定义为切面。…

Springboot+echarts:ajax前后端分离交互

文章目录一、样例说明二、后端代码实现2.1 依赖2.2 applicaiton.properties配置2.3 TotalCountData类实现2.4 totalCountDataMapper接口2.5 totalCountDataMapper.xml实现2.6 Controller层代码三、前端代码一、样例说明 通过mysql存储数据&#xff0c;springboot整合mybatis框…

从云到「链」,京东云成为中国第四朵云背后

在产业加速到数实融合加速的今年&#xff0c;云计算不再是云厂商的唯一考校指标。 作者|叶子 出品|产业家 京东云再次破圈。 信号来自接连发布的几份报告。在国际权威研究机构Forrester发布的名为《The Forrester Wave&#xff1a;Public Cloud Development And Infrast…