亲爱的朋友们,好久没有见面了!今天给大家带来实质性的算法,卡尔曼滤波器!很多朋友肯定又要问,卡尔曼到底是什么东东,具体有什么用处?这就是今天实验的目标!
解释原理,我们摘抄一段百科里面的描述:
//=====================================================================================================================================
用通俗的话语讲:通入的原始数据抖动大,难于直接使用。相信很多朋友都是用过采用平均值的方法去除抖动,让输入数据平稳,但平均值会把误差噪声也引入,影响结果并且严重滞后输入反应。
是不是很神奇,我们接下来进入重点:
//===================================================================================================================================
DIM srcdata,resrcdata,outdata AS FLOAT
'====================================================================
DIM measurenoise_r,processniose_q AS FLOAT
measurenoise_r=10
processniose_q=0.5
DIM calall_data,calindex AS INTEGER
DIM state_x,state_k,state_noise AS FLOAT
calall_data=200
calindex=0
DIM serdata_tadr,noisedata_tadr,fliterdata_tadr,tablebuf_tadr AS INTEGER
serdata_tadr=0
noisedata_tadr=1000
fliterdata_tadr=2000
tablebuf_tadr=3000
TABLE(serdata_tadr,0)
TABLE(noisedata_tadr,0)
TABLE(fliterdata_tadr,0)
FOR calindex=1 TO calall_data
srcdata=100*SIN(PI*calindex/200)
TABLE(serdata_tadr+calindex,srcdata)
resrcdata=srcdata+(RND(100)-50)*0.05
TABLE(noisedata_tadr+calindex,resrcdata)
WA(2)
'===================================================
'FUNCTION kalmanfilter(serdata AS FLOAT,man_r AS FLOAT,proc_q AS FLOAT,tableadr AS INTEGER) AS FLOAT
outdata=kalmanfilter(resrcdata,measurenoise_r,processniose_q,tablebuf_tadr)
'===================================================
TABLE(fliterdata_tadr+calindex,outdata)
NEXT calindex
//===================================================================================================================================
首先我们画了一个正玄曲线
srcdata=100*SIN(PI*calindex/200)
为了试验数据,我们给正玄曲线添加随机噪声
resrcdata=srcdata+(RND(100)-50)*0.05
蓝色的曲线将是我们将要输入滤波器进行滤波的数据
outdata=kalmanfilter(resrcdata,measurenoise_r,processniose_q,tablebuf_tadr)
我们来试试滤波器后的效果
从示波器中可以看出,绿色曲线消除了蓝线中的抖动,并又很好的保留了趋势。
看了上面测试这么多,一点很期待算法原始程序吧
不要着急,马上上图:
算法到此为止,细心的朋友一定发现R Q两个参数,这个两个参数对滤波器性能很关键,根据实际需求控制滤波效果大小
1、R小 Q小的效果
结论:输入和输出基本一致,未有明显的滤波
2、R大 Q小的效果
结论:滤波效果明显,但响应滞后比较严重
3、R大 Q大的效果
结论:滤波效果很好,反应了曲线趋势,并又保存了响应性。
今天的课程到此结束,谢谢大家的关注,谢谢大家!