线性最小均方误差算法(LMSE),最小二乘法(LS)

2023-05-16

目录

  • 背景
  • 正交投影引理
  • LMSE算法
  • LS算法
  • 直线拟合

背景

  对于一个系统,在给予一定的输入,那么通常都会产生相对应的输出。在实际的系统中,这样的输出必然伴随着噪声,这样被噪声污染的输出通常是传感器的输出信号,也叫观测信号

  同时,如果系统的模型是清晰的,我们可以通过严格的理论计算来得到真实值,通过作差的方式变把噪声去除了。

  然而在实际的系统中,我们对整个系统的物理模型通常是未知的或者有一些参数未知,也可能是模型不准确,某些参数值有一定的偏差。因此,我们为了得到真实的信号,就需要利用观测信号估计系统的模型,尽可能地去除噪声的影响(其实是信号处理的思想)

数学描述

   X = ( x 1 . . x n ) T X=(x_1 .. x_n)^T X=(x1..xn)T是观测信号, f ( u , θ ) f(u,\theta) f(uθ)是系统的模型, u , θ u,\theta u,θ 分别是系统的输入与未知参数, n n n是噪声。

  整个观测的过程可以描述为:具有的未知参数的系统在输入 u u u的激励下,产生了伴随噪声 n n n的输出(观测信号) X X X

  即: X = f ( u , θ ) + n X=f(u,\theta)+n X=f(u,θ)+n

  而LMSE,LS算法要做的工作是利用 X X X,去尽可能地得到一个 θ ^ \hat{\theta} θ^,使 θ ^ \hat{\theta} θ^接近真实的 θ \theta θ,而算法的条件是整个系统模型 f ( u , θ ) f(u,\theta) f(u,θ)得是线性的。

  即: X = H θ + n X=H\theta+n X=Hθ+n,也称为线性观测模型。

以上是数学描述。

  既然是要通过已知的观测信号 X X X来得到真实参数的一个进可能近似 θ ^ \hat{\theta} θ^,那么在LMSE与LS算法中,我们是把 θ ^ \hat{\theta} θ^看作是观测 X X X的线性组合。

即: θ ^ = a + B X \hat{\theta}=a+BX θ^=a+BX,在空间里面表现为真实值在 X X X上的投影。

正交投影引理

  定义:若 θ , X \theta,X θ,X是空间中随机矢量,那么 θ \theta θ X X X上的投影定义为 θ , X \theta,X θ,X的内积,记作 O P < θ ∣ X > OP<\theta|X> OP<θX>

引理Ⅰ:若 θ , X \theta,X θ,X是空间中随机矢量, θ \theta θ X X X上的投影唯一。

引理Ⅱ:正交投影满足线性性

O P [ A 1 θ 1 + A 2 θ 2 ∣ X ] = A 1 O P [ θ 1 ∣ X ] + A 2 O P [ θ 2 ∣ X ] OP[A_1\theta_1+A_2\theta_2|X]=A_1OP[\theta_1|X]+A_2OP[\theta_2|X] OP[A1θ1+A2θ2X]=A1OP[θ1X]+A2OP[θ2X]

以上两个引理比较简单,第三个引理在LMSE递推算法中至关重要。

引理Ⅲ:

x ( k ) = [ x ( k − 1 )    x k ] T x(k)=[x(k-1) \; x_k]^T x(k)=[x(k1)xk]T,这里面 x ( k ) , x ( k − 1 ) , x k x(k),x(k-1),x_k x(k)x(k1)xk都是随机矢量。那么,对于随机矢量 s s s,有:

O P [ s ∣ x ( k ) ] = O P [ s ∣ x ( k − 1 ) ] + O P [ s ~ ∣ x ~ k ] OP[s|x(k)]=OP[s|x(k-1)]+OP[\widetilde{s}|\widetilde{x}_k] OP[sx(k)]=OP[sx(k1)]+OP[s x k]

其中, s ~ = s − O P [ s ∣ s ( k − 1 ) ] , x ~ k = x k − O P [ x k ∣ x ( k − 1 ) ] \widetilde{s}=s-OP[s|s(k-1)],\widetilde{x}_k=x_k-OP[x_k|x(k-1)] s =sOP[ss(k1)],x k=xkOP[xkx(k1)]

因为要与随机变量的统计特征联系起来,所以可以推倒出:

O P [ s ~ ∣ x ~ k ] = E ( s ~ x ~ k T ) [ E ( x ~ k x ~ k T ) ] − 1 x ~ k OP[\widetilde{s}|\widetilde{x}_k]=E(\widetilde{s}{\widetilde{x}_k}^T)[E(\widetilde{x}_k{\widetilde{x}_k}^T)]^{-1}\widetilde{x}_k OP[s x k]=E(s x kT)[E(x kx kT)]1x k;具体的推导过程

可以察看参考文献。

LMSE算法

先验条件;

θ \theta θ:均值 μ θ \mu_\theta μθ,协方差矩阵 C θ C_\theta Cθ已知

X X X:均值 X θ X_\theta Xθ,协方差矩阵 C X C_X CX已知

互协方差矩阵 C θ X C_{\theta X} CθX已知。

解析法

要想使 θ ^ \hat{\theta} θ^ θ \theta θ尽可能接近,只需求解函数 E [ ( θ − θ ^ ) T ( θ − θ ^ ) ] E[(\theta- \hat{\theta})^T(\theta-\hat{\theta})] E[(θθ^)T(θθ^)]的最小值,这里面 θ \theta θ是真实值,是一
个常数。函数可以理解为内积后取平均。

解析法思想很简单,求导数取极值即可。

θ ^ = a + B X \hat{\theta}=a+BX θ^=a+BX

E [ ( θ − θ ^ ) T ( θ − θ ^ ) ] E[(\theta- \hat{\theta})^T(\theta-\hat{\theta})] E[(θθ^)T(θθ^)]= E [ ( θ − a − B X ) T ( θ − a − B X ) ] E[(\theta- a-BX)^T(\theta-a-BX)] E[(θaBX)T(θaBX)]

分别对 a , B a,B a,B求偏导=0

得到:
a L = μ θ − C θ X C X − 1 μ X a_L=\mu_\theta-C_{\theta X}C_{X}^{-1}\mu_X aL=μθCθXCX1μX

B L = C θ X C X − 1 B_L=C_{\theta X}C_{ X}^{-1} BL=CθXCX1

代入原函数中得到;

θ ^ = μ θ + C θ X C X − 1 ( X − μ X ) \hat{\theta}=\mu_\theta+C_{\theta X}C_{X}^{-1}(X-\mu_X) θ^=μθ+CθXCX1(XμX)

若观测与噪声独立,且噪声的统计特征已知,解析公式可以进一步简化为:

θ ^ = μ θ + C θ H T ( H C θ H T + C n ) − 1 ( X − H μ θ − μ n ) \hat{\theta}=\mu_\theta+C_{\theta}H^T(HC_{\theta}H^T+C_n)^{-1}(X-H{\mu_{\theta}}-\mu_n) θ^=μθ+CθHT(HCθHT+Cn)1(XHμθμn)

迭代法

基本思想:需要迭代 k k k次,且 θ ^ ( k ) = O P [ θ ( k ) ∣ x ( k ) ] \hat{\theta}(k)=OP[\theta(k)|x(k)] θ^(k)=OP[θ(k)x(k)],且 X ( k ) = [ x ( k − 1 )     x k ] T X(k)=[x(k-1) \ \ \ x_k]^T X(k)=[x(k1)   xk]T,在这里, x k x_k xk是新的一个观测值。

那么,根据正交投影引理Ⅲ,有:

O P [ θ ( k ) ∣ x ( k ) ] = O P [ θ ( k − 1 ) ∣ x ( k − 1 ) ] + O P [ θ ~ ( k ) ∣ x ~ ( k ) ] OP[\theta(k)|x(k)]=OP[\theta(k-1)|x(k-1)]+OP[\widetilde{\theta}(k)|\widetilde{x}(k)] OP[θ(k)x(k)]=OP[θ(k1)x(k1)]+OP[θ (k)x (k)]

同理,根据正交投影引理Ⅲ:

θ ~ ( k ) = θ − O P [ θ ∣ X ( k − 1 ) ] , x ~ k = x k − O P [ x k ∣ X ( k − 1 ) ] \widetilde{\theta}(k)=\theta-OP[\theta|X(k-1)],\widetilde{x}_k=x_k-OP[x_k|X(k-1)] θ (k)=θOP[θX(k1)],x k=xkOP[xkX(k1)] ,这一步是更新的增量,相当于把第 k k k次观测中与前 k − 1 k-1 k1次观测相关的信息去掉,留下新的信息。

进一步推倒可得到递推算法;

θ ^ 0 = μ θ \hat{\theta}_0=\mu_\theta θ^0=μθ

M 0 = C θ M_0=C_\theta M0=Cθ

f o r   1 : K for \ 1:K for 1:K

K k = M k − 1 H k T ( H k M k − 1 H k T + C n k ) − 1 K_k=M_{k-1}{H_k}^T(H_kM_{k-1}{H_k}^T+C_{n_k})^{-1} Kk=Mk1HkT(HkMk1HkT+Cnk)1

θ ^ k = θ ^ k − 1 + K k ( X k − H k θ ^ k − 1 − μ n k ) \hat{\theta}_k=\hat{\theta}_{k-1}+K_k(X_k-H_k\hat{\theta}_{k-1}-\mu_{n_k}) θ^k=θ^k1+Kk(XkHkθ^k1μnk)

M k = ( I − K k H k ) M k − 1 M_k=(I-K_kH_k)M_{k-1} Mk=(IKkHk)Mk1

e n d end end

LS算法

LS算法的特点是不需要各类参数以及噪声的先验信息,相当于直接把真实值看成参数,并且直接在 X X X上面进行投影。然后误差均方最小。

解析法

解析法与LSME算法一样,只是目标函数变成了 ( X − H θ ^ ) T ( X − H θ ^ ) (X-H\hat{\theta})^T(X-H\hat{\theta}) (XHθ^)T(XHθ^)

求导=0得:

θ ^ = ( H T H ) − 1 H T X \hat{\theta}=(H^TH)^{-1}H^TX θ^=(HTH)1HTX

迭代法

令系统输出的真实值为 X r , X_r, Xr,,观测值为 X X X

递推原理如下:

O P [ X r ∣ X ( k ) ] = O P [ X r ∣ X ( k − 1 ) ] + O P [ M ∣ N ] OP[X_r|X(k)]=OP[X_r|X(k-1)]+OP[M|N] OP[XrX(k)]=OP[XrX(k1)]+OP[MN]

M = X r − O P [ X r ∣ X ( k − 1 ) ] M=X_r-OP[X_r|X(k-1)] M=XrOP[XrX(k1)]

N = x k − O P [ x k ∣ X ( k − 1 ) ] N=x_k-OP[x_k|X(k-1)] N=xkOP[xkX(k1)]

直线拟合

%%%本程序基于LMSE算法,利用20个点的数据拟合直线。

%%产生数据
clear;clc;
N=50;
x=1:1:N; 
k=1;
b=0.5;

n=normrnd(0.6,1.5,[N,1]);  %N(0.6,0.3) 20*1的噪声
y=k*x'+b+n;


%%%把数据转换为观测方程
X=y;
AT=1:N;
%H=[X,ones(N,1)];
%问题一 H矩阵是模型矩阵,里面不可能有观测量X
H=[AT',ones(N,1)];

%%给定初始值
u_theta=[0.5;0.8];     %theta均值矩阵
C_theta=[0.1,0;0,0.4]';%theta协方差矩阵

u_n=ones(N,1);           %n的均值矩阵
C_n=diag(0.3*ones(N,1)); %n的协方差矩阵

%%LMSE计算解析解:
%假设观测与噪声独立的

%theta=u_theta+C_theta*H'/(H*C_theta*H'+C_n)*(X-H*u_theta-u_n);
%问题二 多减了u_n
theta=u_theta+C_theta*H'/(H*C_theta*H'+C_n)*(X-H*u_theta);


%%%下面展示利用递推算法;
%%给定初始条件

M=C_theta;
theta_1=u_theta;
%以上相当于迭代第一次

for i=2:N
  
    %K=M*H(1:i,:)'/(H(1:i,:)*M*H(1:i,:)'+C_n(1:i,1:i));%计算K矩阵
    %问题三 递推过程中,H矩阵一直都是1*2的,元素值是随采样时刻变化的
    %C_n是2*1的
    H_1=[i;1]';%12列的递推H矩阵
    K=M*H_1'/(H_1*M*H_1'+C_n(i,i));%21列的矩阵
    theta_1=theta_1+K*(X(i,1)-H_1*theta_1);%更新theta矩阵
    
    %更新M矩阵
    [k,l]=size(M);
    M=(eye(k)-K*H_1)*M;
       
end
   
   
%%下面利用最小二乘法
theta_2=(H'*H)\H'*X;

%%作图对比
figure(1);
plot(x',y,'*');  %观测点

hold on;
x=1:0.1:N;
H_=[x',ones(length(x),1)];
y_=H_*theta;

plot(x',y_,'r');   %LMSE解析法

hold on;

y_1=H_*theta_1;
plot(x',y_1,'g');  %LMSE迭代法 

hold on;
y_2=H_*theta_2;
plot(x',y_2,'b');  %LS算法

legend('测量曲线','LMSE解析法','LMSE迭代法','LS');
hold off


效果:

在这里插入图片描述
三种算法拟合效果几乎一样。

参考文献:

赵树杰, 赵建勋. 信号检测与估计理论[M]. 电子工业出版社, 2013.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性最小均方误差算法(LMSE),最小二乘法(LS) 的相关文章

  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • 扩展卡尔曼线性化近似与仿真

    扩展卡尔曼线性化近似与仿真 关于线性化直入主题 上例子小车运动方式 xff1a 沿着圆心在原点 半径为5的圆进行匀速圆周运动 xff0c 其角速度为w 即每次更新变化w个角度 仿真结果总结Matlab测试代码 xff08 EKF test
  • Ubuntu挂载硬盘

    Ubuntu挂载硬盘 1 查看磁盘信息命令 fdisk l 2 查看硬盘的UUID命令sudo blkid 3 mkdir创建挂载点WorkpaceP2和WorkpaceP2 4 永久性挂载分区 xff0c 修改分区文件 xff0c 输入如
  • FreeRTOS——创建任务

    FreeRTOS的设计小巧且简易 xff0c 整个核心代码只有3到4个C文件 xff0c 为了让代码容易阅读 移植和维护 xff0c 大部分的代码都是以C语言编写 xff0c 只有一些函数 xff08 多数是架构特定排班副程序 xff09
  • QT二次开发Kvaser

    前言 最近工作中需要自己去开发一个上位机 xff0c 上位机的通讯方式是CAN xff0c 利用Kvaser将CAN信息传递到上位机 xff0c 所以就需要二次开发Kvaser xff0c 保证上位机的正常通讯 原本是本着前人栽树 xff0
  • Ubuntu 安装ROS (解决rosdep init 失败)

    当前网络上有很多的ROS安装教程 xff0c 但是由于国内的网络问题 xff0c 所以在教程进行到rosdep init时 xff0c 会出现问题 xff0c 所以这篇博客主要解决这个问题 xff0c 以下为教程全部内容 xff1a 引用教
  • Ubuntu20.04部署编译LVI-SAM

    该动图来自LVI SAM开源地址 xff08 https github com TixiaoShan LVI SAM xff09 1 写在开头 1 1 为何诞生此文 近期在学习SLAM相关知识 xff0c 拜读了此篇经典论文LVI SAM
  • QT中的强制类型转换

    当使用C语言那种形式的强制转换 xff0c 发现QT会给出一个使用旧的方式的警告 所以在QT中使用如下类型转换 xff0c 就不会有警告 xff0c 而且这种方式的强制转换更加的安全 xff08 1 xff09 dynamic cast l
  • QT之QCharts的使用(绘制折线图)

    一 画折线图 1 修改 pro文件 在里面添加QT 43 61 charts 2 MyWidget h程序 ifndef MYWIDGET H define MYWIDGET H include lt QWidget gt 添加以下三个头文
  • 恢复经过软件处理过的U盘导致的U盘空间显示不正确等问题

    1 win 43 R xff0c 打开运行 xff0c 输入CMD xff0c 点击确定 2 在命令行中输入DISKPART并回车 xff0c 会跳出一个窗口 xff0c 这就进入了diskpart 3 在跳出的窗口diskpart 中输入
  • 关于STM32 CAN 发送失败问题解释

    首先解释一下CAN几个配置的功能 xff1a 1 CAN InitStruct CAN TTCM 61 DISABLE 这个只在某些CAN标准中使用 xff0c 就设置为DISABLE 2 CAN InitStruct CAN ABOM 6
  • VS2022调试vector无法显示详细信息

    使用vs2022调试vector发现这样的现象 xff1a 为了显示vector大小以及详细的元素 xff0c 需要编写natvis文件 span class token operator lt span span class token
  • STM32H7 PVD断电的使用

    1 遇到的问题 我使用的是STM32H747 xff0c 在初始化后发现断电后并没有进入中断 最后查找到因为STM32H747是双核CPU xff0c 在HAL库源码中 xff0c 有双核的宏定义将一些配置给屏蔽了 xff0c 因为我只用到
  • STM32H7A3 ADC+DMA使用问题

    问题1 xff1a DMA采用半字传输16位ADC值 xff0c 用于存储ADC数据的数组一定是采集数的两倍 xff0c 否则会产生ADC溢出的错误中断HAL ADC ErrorCallback xff0c 从而无法进入ADC采集完成中断H
  • STM32使用RTOS BootLoader跳转app进入异常中断问题

    一 问题描述 在boot中不使用RTOS xff0c 跳转到APP中 xff0c APP可以正常运行 但是boot中使用RTOS跳转到APP中 xff0c 程序配置完时钟后就会进入MemManage Handler错误中断 二 解决方法 1
  • STM32H7 SPI+DMA只发送一次,然后一直报busy的问题

    网上看了很多讲SPI 43 DMA问题的帖子 xff0c 有说必须发送DMA和接收DMA必须同时配置的 xff0c 有的说DMA发送前需要手动调用HAL SPI Abort函数的 首先我尝试的同时配置发送DMA和接收DMA xff0c 还是
  • STM32 EventRecorder printf不打印输出在调试窗口的问题解决

    一 添加event recorder到工程中 也可以自己移植源码到工程里面 xff0c 添加好后 xff0c 工程中会多出几个文件 xff0c 如下图所示 xff0c 我这是自己移植的源码到工程中的 xff0c 没有使用keil添加 二 初
  • linux只W25Q256驱动,使用m25p80,支持w25q系列nor flash

    1 内核编译选项增加 1 xff09 Device Drivers Memory Technology Device MTD support gt 2 Device Drivers Memory Technology Device MTD
  • STM32f103时钟系统简介

    主要是讲解怎么看懂这个图 一 内置RC振荡器 xff08 HSI RC xff09 频率是约为8MHz xff0c 因为其频率不是很稳定 其可作为系统时钟的一个选项 二 晶振振荡器 xff08 HSE OSC xff09 从图中可以看到其是
  • Keil软件仿真

    首先就是配置上面图中的debug xff0c 选择软件仿真 然后是选择芯片 xff0c 根据自己的硬件芯片选择 8号标注是进入该图中的debyg模式 1号标注 xff1a 这个是一个RST按钮 xff0c 和硬件一样是复位的功能 2号标注

随机推荐