1. 程式人生 > >Matlab之Kalman:用線性系統狀態方程,通過系統輸入輸出觀測資料,對系統狀態進行最優估計的演算法

Matlab之Kalman:用線性系統狀態方程,通過系統輸入輸出觀測資料,對系統狀態進行最優估計的演算法

       卡爾曼濾波(Kalman filtering)一種利用線性系統狀態方程,通過系統輸入輸出觀測資料,對系統狀態進行最優估計的演算法。由於觀測資料中包括系統中的噪聲和干擾的影響,所以最優估計也可看作是濾波過程。
       斯坦利·施密特(Stanley Schmidt)首次實現了卡爾曼濾波器。卡爾曼在NASA埃姆斯研究中心訪問時,發現他的方法對於解決阿波羅計劃的軌道預測很有用,後來阿波羅飛船的導航電腦使用了這種濾波器。 關於這種濾波器的論文由Swerling (1958), Kalman (1960)與 Kalman and Bucy (1961)發表。
       資料濾波是去除噪聲還原真實資料的一種資料處理技術, Kalman濾波在測量方差已知的情況下能夠從一系列存在測量噪聲的資料中,估計動態系統的狀態. 由於, 它便於計算機程式設計實現, 並能夠對現場採集的資料進行實時的更新和處理, Kalman濾波是目前應用最為廣泛的濾波方法, 在通訊, 導航, 制導與控制等多領域得到了較好的應用.

clear all;
clc;
close all;


N=2000;
gv=0.0332;
m=500;
a=[-1.6 1.46 -0.616 0.1525];
Q2=0.005;%觀測噪聲方差
w=zeros(m*4,N);
alpher=zeros(m,N);

for j=1:m
    
    
v=randn(1,N)*sqrt(gv);

u=filter(1,a,v);


F=eye(4,4);
d=u;
C=zeros(4,N);
for i=5:N
    C(:,i)=[u(i-1);u(i-2);u(i-3);u(i-4)];
end
C(:,1)=[0;0;0;0];
C(:,2)=[d(1);0;0;0];
C(:,3)=[d(2);d(2);0;0];
C(:,4)=[d(3);d(2);d(1);0];

p_esti=eye(4,4);%狀態誤差自相關矩陣

for i=2:N
    w([4*j-3,4*j-2,4*j-1,4*j],i)=w([4*j-3,4*j-2,4*j-1,4*j],i-1);%一步預測誤差
    alpher(j,i)=d(i)-C(:,i)'*w([4*j-3,4*j-2,4*j-1,4*j],i).'';%計算資訊過程
    p_pre=p_esti;%一步預測誤差自相關矩陣
    A=C(:,i)'*p_pre*C(:,i)+Q2;%新息過程自相關矩陣
    k=p_pre*C(:,i)/A;
    w([4*j-3,4*j-2,4*j-1,4*j],i)=w([4*j-3,4*j-2,4*j-1,4*j],i)+k*alpher(j,i);%狀態估計
    p_esti=p_pre-k*C(:,i)'*p_pre;%狀態估計誤差自相關矩陣
end

end


MSE=sum(alpher.^2)/m;
MSE=MSE/max(MSE);
MSE=10*log10(MSE);
figure(1)
plot(MSE);
title(' 均方誤差變化曲線');
xlabel('迭代次數n');ylabel('MSE');

w_aver=zeros(4,N);
for i=1:m
    w_aver(1,:)=w_aver(1,:)+w(4*i-3,:);
    w_aver(2,:)=w_aver(2,:)+w(4*i-2,:);
    w_aver(3,:)=w_aver(3,:)+w(4*i-1,:);
    w_aver(4,:)=w_aver(4,:)+w(4*i,:);
end

w_aver=w_aver/m;
figure(2) 
hold on;
plot(w_aver(1,:),'b');
plot(w_aver(2,:),'b');
plot(w_aver(3,:),'b');
plot(w_aver(4,:),'b');
title('權向量的估計');
xlabel('迭代次數n');ylabel('抽頭權值');
hold off;

相關推薦

MatlabKalman線性系統狀態方程通過系統輸入輸出觀測資料系統狀態進行估計演算法

       卡爾曼濾波(Kalman filtering)一種利用線性系統狀態方程,通過系統輸入輸出觀測資料,對系統狀態進行最優估計的演算法。由於觀測資料中包括系統中的噪聲和干擾的影響,所以最優估計也

Django運維後臺的搭建url去精細定制與反向解析

django 反向解析 參數傳遞 url指向 上一篇文章裏,我們做了一個alionlineecs(阿裏雲線上環境服務器)的添加界面,但是要知道我們的計劃裏是有六個分支的,而alionlineecs僅僅是其中之一,要是每一個都這麽寫的話,那麽views.py肯定又臭又長,充滿了大量的復制片段。對

Django運維後臺的搭建bootstrap模板讓運維前臺變得更漂亮

html django bootstrap 靜態資源 我對於PHP和ajax是屬於二把刀的水平,所以做網頁前端肯定是比上天還難,但是我又想把網頁做的漂亮可愛,怎麽辦呢?我就只好去download別人的模板,在這裏我使用了bootstrap框架做的模板。各位可以去https://wrapboot

機器學習 python線性回歸 過擬合 L1與L2正則化

擬合 python sco bsp orm AS score 未知數 spa git:https://github.com/linyi0604/MachineLearning 正則化: 提高模型在未知數據上的泛化能力 避免參數過擬合正則化常用的方法: 在目

python輸入(一)

老師 用法 inf 代碼 用戶輸入 display 用戶 -- class python之路:用戶輸入(一) 好了,現在我學了點博客的用法,現在不會像以前的那麽土了。好吧,不多說,我要講課了。 今天,我會用情景實例給大家說這個用戶輸入。 情景是:你是IT教育的python帶

前端專案實踐“道”了方法效率翻番

作者:個推Web前端首席前端架構師姜季廷 現在前端非常火熱,相關的技術更是層出不窮,前端人也在不停地學學學。那麼有沒有什麼“偷懶”的方式,幫助我們更加有效地完成編碼的KPI呢?本人從事前端開發工作多年,負責公司多個大型專案前端架構設計與落地實踐,本文就和大家聊一聊前端的“專案實踐之道”與“

MLLiRPLiR懲罰線性迴歸PLiR演算法簡介、分類、程式碼實現詳細攻略

ML之LiR之PLiR:懲罰線性迴歸PLiR演算法簡介、分類、程式碼實現之詳細攻略   PLiR演算法簡介     PLiR演算法分類 1、RiR VS Lasso迴歸        

開發者的進階語法樹來實現預編譯

能夠 項目 未來 部分 領域 編譯器 提高 cfb ima 如何在保證安全性的前提下,提升開發過程的效率,是每個開發者都在不斷探索的問題。借助語法樹,開發者能夠更好地展現和修改源程序代碼,優化開發環節,提高安全系數,還能進一步實現安卓預編譯。 本文基於個推高級研發工程師李健

天坑js給選中文字新增樣式

前言 本例基於react,但是實際上就是用原生js做的。相容性做到了IE9,但是按照這個思路做是可以做到IE8甚至更低的。 需求與最初的思路 當我拿到這個需求的時候以為很簡單,就是可以給頁面上的文章做記號,比如添加個下劃線,或者背景塗色做成熒光筆的樣子。 因為只需要相容IE9,所以window.get

PC軟體開發技術C#開發基於自動化介面的OPC客戶端

OPC全稱是Object Linking and Embedding(OLE) for Process Control,它的出現為基於Windows的應用程式和現場過程控制應用建立了橋樑。OPC作為一整套介面、屬性和方法的協議標準集,與具體的開發語言沒有關係。 1、OPC客戶端介面方式

開啟Scrapy專案Scrapy進行專案爬蟲管理

1、進入scrapy資料夾下,建立Scrapy專案 scrapy startproject myfirstpjt 2、進入自己建立的scrapy專案中: cd myfirstpjt 進入後,我們可以對該爬蟲專案進行管理,可以通過工具命令實現,下節介紹。 3、爬蟲專

Muduo 網路程式設計示例 Timing wheel 踢掉空閒連線

Muduo 網路程式設計示例之八:Timing wheel 踢掉空閒連線 陳碩 (giantchen_AT_gmail) 這是《Muduo 網路程式設計示例》系列的第八篇文章,原計劃講檔案傳輸,這裡插入一點計劃之外的內容。 本文介紹如何使用 timing wheel 來踢

攻克論文寫作系列6得好Theory

來源|刀熊說說 文|刀熊  本篇我們來具體談一談在寫實證文章的時候如何有效使用theory。   Data和theory 在一篇實證性文章(Empirical Article )中的關係。 在實證性文章裡,因為肯定會有data (資料)的收集和分析,我們要記得

LIDAR系列2鐳射雷達檢測車道線

基於視覺系統的車道線檢測有諸多缺陷,首先是視覺系統對背景光線很敏感,諸如陽光強烈的林蔭道,車道線被光線分割成碎片,致使無法提取出車道線。其次,視覺系統需要車道線的標識完整,有些年久失修的道路,車道線標記不明顯,不完整,有些剛開通幾年的道路也是如此。第三,視覺系統需要車道線

Java資料結構——棧連結串列實現

class Node<E>{ E data; Node<E> next = null; public Node(E data){ this.data = data; } } public class ListStack<

Java資料結構——棧陣列實現

/** * This is an abstract data type interface for the stack. * This interface includes methods: * {@code pop},{@code push},{@code peek},{@code isEm

Hadoop學習筆記MRUnit做單元測試

引言 借年底盛宴品鑑之風,繼續抒我Hadoop之情,本篇文章介紹如何對Hadoop的MapReduce進行單元測試。MapReduce的開發週期差不多是這樣:編寫mapper和reducer、編譯、打包、提交作業和結果檢索等,這個過程比較繁瑣,一旦提交到分散式環境出了問題要定位除錯,重複這樣的過程實在無趣

MatlabDNN基於Matlab利用神經網路模型(epochs=10000000)預測勒布朗詹姆斯的2018年總決賽(騎士VS勇士)第一場得分、籃板、助攻

預測勒布朗詹姆斯的2018年NBA總決賽(騎士VS勇士)第一場得分數(33.6667)預測勒布朗詹姆斯的2018年NBA總決賽(騎士VS勇士)第一場籃板數(8.7333)預測勒布朗詹姆斯的2018年NB

Python學習Python製作一個打字訓練小工具

一、寫在前面   說道程式設計師,你會想到什麼呢?有人認為程式設計師象徵著高薪,有人認為程式設計師都是死肥宅,還有人想到的則是996和 ICU。      別人眼中的程式設計師:飛快的敲擊鍵盤、酷炫的切換螢幕、各種看不懂的字元程式碼。   然而現實中的程式設計師呢?對於很多程式設計師來說,沒有百度和

Eclipse-ADT版本SDKmanager更新時 注意Android SDK Tools和Platforms要匹配否則開發環境就不正常了

EclipseADT外掛開發Android應用程式時,一般使用SDK Manager來更新SDK Tools 和Android Platforms 。但是,如果SDK Tools的版本和Androi