当前位置:   article > 正文

卡尔曼滤波算法 C语言实现 示例_卡尔曼滤波c语言实现

卡尔曼滤波c语言实现

1.概念

   卡尔曼滤波(Kalman filtering)是一种利用

{\hat{X}}'_{k}k时刻 状态预测值(先验估计值)
\hat{X}_{k-1}k-1时刻 状态最优估计值(后验估计值)
{P}'_{k}k时刻 状态预测协方差(先验预测协方差)真实值与预测值之间的协方差
P_{k}k时刻 状态最优估计协方差(后验最优估计协方差)真实值与最优估计值之间的协方差
P_{k-1}k-1时刻 状态最优估计协方差(后验最优估计协方差)
Q过程激励噪声协方差
R测量噪声协方差
G_{k}​​​​​​​​​​​​​​k时刻 卡尔曼增益
A^{T}​​​​​​​​​​​​​​
H^{T}​​​​​​​​​​​​​​

4.卡尔曼滤波 代码示例

4.1.卡尔曼滤波 C语言代码示例

4.1.1. 卡尔曼滤波 五大公式简化

U_{k}k时刻 状态输入控制量无输入控制量,可以为 0
A​​​​​​​​​​​​​​状态转移矩阵以1维数据为例,可以为 1
B​​​​​​​​​​​​​​控制输入矩阵以1维数据为例,可以为 1
H​​​​​​​​​​​​​​状态观测矩阵以1维数据为例,可以为 1

{\hat{X}}'_{k} = 1*\hat{X}_{k-1} + 1*0​​​​​​​                            ===>         {\hat{X}}'_{k} = \hat{X}_{k-1}​​​​​​​                                   (1)

{P}'_{k} = 1*P_{k-1} *1^{T}+ Q​​​​​​​​​​​​​​                         ===>          {P}'_{k} = P_{k-1} + Q​​​​​​​​​​​​​​                           (2)

G_{k} = {P}'_{k}*1^{T} / (1*{P}'_{k} *1^{T}+ R)          ===>          G_{k} = {P}'_{k} / ({P}'_{k} + R)                     (3)

\hat{X}_{k} = {\hat{X}_{k} }' + G_{k}*(Z_{k} - 1*{\hat{X}_{k} }' )​​​​​​​            ===>          \hat{X}_{k} = {\hat{X}_{k} }' + G_{k}*(Z_{k} - {\hat{X}_{k} }' )​​​​​​​    (4)

P_{k} = (1-G_{k} *1)* {P_{k}}'​​​​​​​​​​​​​​                          ===>          P_{k} = (1-G_{k} )* {P_{k}}'​​​​​​​​​​​​​​                   (5)

卡尔曼简化后的公式:

{P}'_{k} = P_{k-1} + Q​​​​​​​​​​​​​​                                      (2)

G_{k} = {P}'_{k} / ({P}'_{k} + R)                                (3)

\hat{X}_{k} = \hat{X}_{k-1} + G_{k}*(Z_{k} - \hat{X}_{k-1} )​​​​​​​       (4)

P_{k} = (1-G_{k} )* {P_{k}}'​​​​​​​​​​​​​​                             (5)

4.1.2.卡尔曼滤波 C语言代码

卡尔曼函数、调试main函数:

  1. #include <stdio.h> //库头文件
  2. #define TEST_PULSE_BUF_LEN 800
  3. extern float testPulseBuf[];
  4. //1. 结构体类型定义
  5. typedef struct
  6. {
  7. float P; //估算协方差
  8. float G; //卡尔曼增益
  9. float Q; //过程噪声协方差,Q增大,动态响应变快,收敛稳定性变坏
  10. float R; //测量噪声协方差,R增大,动态响应变慢,收敛稳定性变好
  11. float Output; //卡尔曼滤波器输出
  12. }KFPTypeS; //Kalman Filter parameter type Struct
  13. //2.定义卡尔曼结构体参数并初始化
  14. KFPTypeS kfpVar =
  15. {
  16. 20, //估算协方差. 初始化值为 0.02
  17. 0, //卡尔曼增益. 初始化值为 0
  18. 1, //过程噪声协方差,Q增大,动态响应变快,收敛稳定性变坏. 初始化值为 0.001
  19. 1000, //测量噪声协方差,R增大,动态响应变慢,收敛稳定性变好. 初始化值为 1
  20. 930 //卡尔曼滤波器输出. 初始化值为 0
  21. };
  22. /**
  23. ******************************************************************************
  24. * @brief 卡尔曼滤波器 函数
  25. * @param *kfp - 卡尔曼结构体参数
  26. * @param input - 需要滤波的参数的测量值(即传感器的采集值)
  27. * @return 卡尔曼滤波器输出值(最优值)
  28. * @note
  29. ******************************************************************************
  30. */
  31. float KalmanFilter(KFPTypeS *kfp, float input)
  32. {
  33. //估算协方差方程:当前 估算协方差 = 上次更新 协方差 + 过程噪声协方差
  34. kfp->P = kfp->P + kfp->Q;
  35. //卡尔曼增益方程:当前 卡尔曼增益 = 当前 估算协方差 / (当前 估算协方差 + 测量噪声协方差)
  36. kfp->G = kfp->P / (kfp->P + kfp->R);
  37. //更新最优值方程:当前 最优值 = 当前 估算值 + 卡尔曼增益 * (当前 测量值 - 当前 估算值)
  38. kfp->Output = kfp->Output + kfp->G * (input - kfp->Output); //当前 估算值 = 上次 最优值
  39. //更新 协方差 = (1 - 卡尔曼增益) * 当前 估算协方差。
  40. kfp->P = (1 - kfp->G) * kfp->P;
  41. return kfp->Output;
  42. }
  43. /**
  44. ******************************************************************************
  45. * @brief 主函数
  46. * @param None
  47. * @return None
  48. * @note
  49. ******************************************************************************
  50. */
  51. void main(void)
  52. {
  53. for(int i=0; i<TEST_PULSE_BUF_LEN; i++)
  54. {
  55. printf("%4d\r\n", (int)KalmanFilter(&kfpVar, testPulseBuf[i])); //打印
  56. }
  57. }

测试的原始数据:

  1. float testPulseBuf1[800] =
  2. {
  3. 939
  4. ,1032
  5. ,1059
  6. ,1031
  7. ,898
  8. ,849
  9. ,878
  10. ,993
  11. ,991
  12. ,1010
  13. ,975
  14. ,1151
  15. ,1027
  16. ,902
  17. ,977
  18. ,996
  19. ,1069
  20. ,1140
  21. ,900
  22. ,907
  23. ,1202
  24. ,1004
  25. ,1027
  26. ,994
  27. ,883
  28. ,827
  29. ,1055
  30. ,1017
  31. ,977
  32. ,1020
  33. ,823
  34. ,977
  35. ,816
  36. ,1047
  37. ,938
  38. ,1044
  39. ,891
  40. ,985
  41. ,825
  42. ,1036
  43. ,1283
  44. ,940
  45. ,934
  46. ,1004
  47. ,951
  48. ,1027
  49. ,922
  50. ,710
  51. ,1016
  52. ,930
  53. ,1149
  54. ,968
  55. ,1013
  56. ,1161
  57. ,985
  58. ,1013
  59. ,1249
  60. ,1035
  61. ,1147
  62. ,1072
  63. ,954
  64. ,1000
  65. ,943
  66. ,991
  67. ,1120
  68. ,1003
  69. ,956
  70. ,988
  71. ,1107
  72. ,984
  73. ,975
  74. ,989
  75. ,1042
  76. ,782
  77. ,973
  78. ,820
  79. ,1123
  80. ,859
  81. ,930
  82. ,1147
  83. ,1015
  84. ,916
  85. ,1122
  86. ,949
  87. ,999
  88. ,768
  89. ,851
  90. ,1085
  91. ,986
  92. ,904
  93. ,975
  94. ,969
  95. ,1146
  96. ,952
  97. ,1066
  98. ,845
  99. ,1135
  100. ,1002
  101. ,976
  102. ,957
  103. ,912
  104. ,928
  105. ,848
  106. ,907
  107. ,1035
  108. ,997
  109. ,898
  110. ,1006
  111. ,1132
  112. ,920
  113. ,901
  114. ,925
  115. ,1073
  116. ,987
  117. ,877
  118. ,936
  119. ,959
  120. ,1095
  121. ,1065
  122. ,927
  123. ,1003
  124. ,786
  125. ,1049
  126. ,1038
  127. ,1010
  128. ,1007
  129. ,900
  130. ,995
  131. ,1042
  132. ,1101
  133. ,1209
  134. ,963
  135. ,883
  136. ,1051
  137. ,979
  138. ,1191
  139. ,961
  140. ,1006
  141. ,1085
  142. ,1058
  143. ,926
  144. ,983
  145. ,974
  146. ,1157
  147. ,929
  148. ,1171
  149. ,1105
  150. ,1031
  151. ,1036
  152. ,847
  153. ,1033
  154. ,928
  155. ,1198
  156. ,1270
  157. ,1021
  158. ,915
  159. ,1071
  160. ,1093
  161. ,897
  162. ,958
  163. ,959
  164. ,1017
  165. ,1135
  166. ,1027
  167. ,963
  168. ,1093
  169. ,1080
  170. ,1063
  171. ,951
  172. ,885
  173. ,997
  174. ,930
  175. ,927
  176. ,937
  177. ,1073
  178. ,1073
  179. ,1017
  180. ,1080
  181. ,1125
  182. ,1058
  183. ,951
  184. ,979
  185. ,785
  186. ,1076
  187. ,702
  188. ,1131
  189. ,952
  190. ,1120
  191. ,1314
  192. ,965
  193. ,959
  194. ,890
  195. ,1103
  196. ,1058
  197. ,805
  198. ,1034
  199. ,923
  200. ,1114
  201. ,1005
  202. ,895
  203. ,986
  204. ,913
  205. ,1075
  206. ,1036
  207. ,1062
  208. ,975
  209. ,1095
  210. ,987
  211. ,892
  212. ,995
  213. ,1022
  214. ,1034
  215. ,819
  216. ,1071
  217. ,964
  218. ,998
  219. ,961
  220. ,875
  221. ,913
  222. ,849
  223. ,799
  224. ,1069
  225. ,1108
  226. ,1075
  227. ,1014
  228. ,987
  229. ,1009
  230. ,946
  231. ,1186
  232. ,1037
  233. ,833
  234. ,816
  235. ,742
  236. ,982
  237. ,952
  238. ,1045
  239. ,771
  240. ,1032
  241. ,1080
  242. ,1218
  243. ,1024
  244. ,950
  245. ,992
  246. ,933
  247. ,973
  248. ,880
  249. ,787
  250. ,1023
  251. ,894
  252. ,955
  253. ,1088
  254. ,928
  255. ,1031
  256. ,891
  257. ,760
  258. ,1107
  259. ,1007
  260. ,1028
  261. ,1017
  262. ,1063
  263. ,1118
  264. ,902
  265. ,959
  266. ,983
  267. ,915
  268. ,956
  269. ,1150
  270. ,1213
  271. ,1090
  272. ,1113
  273. ,944
  274. ,972
  275. ,978
  276. ,776
  277. ,937
  278. ,1184
  279. ,890
  280. ,924
  281. ,1152
  282. ,962
  283. ,1041
  284. ,1024
  285. ,792
  286. ,1070
  287. ,1075
  288. ,1145
  289. ,1093
  290. ,898
  291. ,843
  292. ,897
  293. ,862
  294. ,998
  295. ,864
  296. ,1116
  297. ,990
  298. ,1140
  299. ,916
  300. ,827
  301. ,1082
  302. ,824
  303. ,1079
  304. ,1008
  305. ,1043
  306. ,825
  307. ,811
  308. ,1134
  309. ,967
  310. ,1007
  311. ,862
  312. ,892
  313. ,1003
  314. ,1013
  315. ,1008
  316. ,1025
  317. ,1099
  318. ,958
  319. ,943
  320. ,924
  321. ,956
  322. ,1025
  323. ,968
  324. ,981
  325. ,1182
  326. ,919
  327. ,997
  328. ,926
  329. ,1008
  330. ,982
  331. ,1062
  332. ,1011
  333. ,944
  334. ,956
  335. ,851
  336. ,1155
  337. ,952
  338. ,939
  339. ,1052
  340. ,1002
  341. ,1011
  342. ,1034
  343. ,1079
  344. ,1131
  345. ,906
  346. ,1029
  347. ,976
  348. ,833
  349. ,1046
  350. ,1206
  351. ,953
  352. ,1168
  353. ,789
  354. ,899
  355. ,1039
  356. ,856
  357. ,801
  358. ,850
  359. ,814
  360. ,784
  361. ,975
  362. ,952
  363. ,1029
  364. ,881
  365. ,955
  366. ,1011
  367. ,1066
  368. ,1120
  369. ,987
  370. ,1036
  371. ,919
  372. ,993
  373. ,1123
  374. ,851
  375. ,1155
  376. ,967
  377. ,902
  378. ,1086
  379. ,970
  380. ,936
  381. ,926
  382. ,895
  383. ,998
  384. ,1120
  385. ,1084
  386. ,900
  387. ,968
  388. ,1110
  389. ,1153
  390. ,1082
  391. ,1071
  392. ,895
  393. ,845
  394. ,1048
  395. ,986
  396. ,987
  397. ,1073
  398. ,1059
  399. ,924
  400. ,1170
  401. ,952
  402. ,849
  403. ,950
  404. ,1014
  405. ,992
  406. ,920
  407. ,999
  408. ,1057
  409. ,986
  410. ,964
  411. ,1092
  412. ,878
  413. ,1009
  414. ,908
  415. ,1072
  416. ,1112
  417. ,1038
  418. ,1017
  419. ,1074
  420. ,799
  421. ,968
  422. ,909
  423. ,948
  424. ,1000
  425. ,848
  426. ,771
  427. ,1014
  428. ,1091
  429. ,960
  430. ,1074
  431. ,1061
  432. ,1134
  433. ,968
  434. ,1187
  435. ,1029
  436. ,938
  437. ,1098
  438. ,1015
  439. ,942
  440. ,855
  441. ,964
  442. ,1024
  443. ,892
  444. ,1119
  445. ,905
  446. ,956
  447. ,859
  448. ,889
  449. ,1017
  450. ,1174
  451. ,825
  452. ,1097
  453. ,973
  454. ,927
  455. ,1112
  456. ,1018
  457. ,984
  458. ,1098
  459. ,995
  460. ,932
  461. ,944
  462. ,891
  463. ,930
  464. ,921
  465. ,936
  466. ,876
  467. ,1042
  468. ,856
  469. ,1085
  470. ,856
  471. ,1108
  472. ,990
  473. ,834
  474. ,1091
  475. ,1059
  476. ,943
  477. ,1081
  478. ,1107
  479. ,1029
  480. ,884
  481. ,1074
  482. ,1028
  483. ,858
  484. ,961
  485. ,991
  486. ,954
  487. ,1020
  488. ,1008
  489. ,941
  490. ,1020
  491. ,1077
  492. ,886
  493. ,946
  494. ,1190
  495. ,1107
  496. ,968
  497. ,1287
  498. ,982
  499. ,995
  500. ,1050
  501. ,1015
  502. ,970
  503. ,936
  504. ,1156
  505. ,1026
  506. ,1023
  507. ,988
  508. ,930
  509. ,971
  510. ,1081
  511. ,916
  512. ,958
  513. ,1206
  514. ,994
  515. ,799
  516. ,915
  517. ,1056
  518. ,1041
  519. ,1081
  520. ,1017
  521. ,927
  522. ,1111
  523. ,932
  524. ,931
  525. ,1057
  526. ,1118
  527. ,1069
  528. ,929
  529. ,948
  530. ,876
  531. ,1059
  532. ,837
  533. ,1166
  534. ,1115
  535. ,955
  536. ,920
  537. ,1109
  538. ,993
  539. ,1066
  540. ,793
  541. ,782
  542. ,886
  543. ,982
  544. ,1065
  545. ,970
  546. ,962
  547. ,1015
  548. ,1200
  549. ,902
  550. ,877
  551. ,937
  552. ,927
  553. ,1028
  554. ,1095
  555. ,1057
  556. ,1067
  557. ,975
  558. ,986
  559. ,985
  560. ,884
  561. ,1051
  562. ,992
  563. ,750
  564. ,1079
  565. ,982
  566. ,918
  567. ,1073
  568. ,823
  569. ,1064
  570. ,941
  571. ,797
  572. ,895
  573. ,933
  574. ,1126
  575. ,804
  576. ,1133
  577. ,1091
  578. ,1006
  579. ,1085
  580. ,974
  581. ,992
  582. ,1015
  583. ,889
  584. ,1120
  585. ,1079
  586. ,982
  587. ,1109
  588. ,1038
  589. ,1024
  590. ,832
  591. ,890
  592. ,917
  593. ,1059
  594. ,798
  595. ,924
  596. ,1048
  597. ,1016
  598. ,915
  599. ,933
  600. ,934
  601. ,843
  602. ,1161
  603. ,902
  604. ,1018
  605. ,1063
  606. ,931
  607. ,1280
  608. ,936
  609. ,866
  610. ,915
  611. ,1051
  612. ,888
  613. ,1275
  614. ,1108
  615. ,1015
  616. ,978
  617. ,907
  618. ,873
  619. ,944
  620. ,1119
  621. ,1015
  622. ,969
  623. ,1103
  624. ,1092
  625. ,1066
  626. ,997
  627. ,1123
  628. ,929
  629. ,1188
  630. ,1108
  631. ,1032
  632. ,881
  633. ,948
  634. ,987
  635. ,940
  636. ,978
  637. ,1119
  638. ,1104
  639. ,998
  640. ,967
  641. ,998
  642. ,1077
  643. ,1025
  644. ,1056
  645. ,994
  646. ,922
  647. ,889
  648. ,1022
  649. ,982
  650. ,1147
  651. ,885
  652. ,1031
  653. ,731
  654. ,870
  655. ,930
  656. ,1116
  657. ,897
  658. ,1045
  659. ,1097
  660. ,1021
  661. ,1120
  662. ,944
  663. ,887
  664. ,967
  665. ,1176
  666. ,1088
  667. ,955
  668. ,836
  669. ,1070
  670. ,1063
  671. ,1176
  672. ,1091
  673. ,890
  674. ,852
  675. ,954
  676. ,1117
  677. ,1010
  678. ,1064
  679. ,923
  680. ,883
  681. ,879
  682. ,790
  683. ,883
  684. ,974
  685. ,1101
  686. ,851
  687. ,912
  688. ,1034
  689. ,1057
  690. ,952
  691. ,982
  692. ,1052
  693. ,1105
  694. ,999
  695. ,1187
  696. ,1093
  697. ,962
  698. ,1053
  699. ,1201
  700. ,1202
  701. ,1037
  702. ,929
  703. ,926
  704. ,897
  705. ,1134
  706. ,970
  707. ,1070
  708. ,961
  709. ,1038
  710. ,1088
  711. ,1018
  712. ,904
  713. ,883
  714. ,1000
  715. ,1063
  716. ,913
  717. ,1044
  718. ,1020
  719. ,1104
  720. ,1029
  721. ,1030
  722. ,1038
  723. ,894
  724. ,1001
  725. ,1228
  726. ,871
  727. ,982
  728. ,836
  729. ,1051
  730. ,1029
  731. ,1067
  732. ,1146
  733. ,976
  734. ,1000
  735. ,995
  736. ,1061
  737. ,1004
  738. ,882
  739. ,1053
  740. ,932
  741. ,1031
  742. ,861
  743. ,1111
  744. ,1144
  745. ,1034
  746. ,987
  747. ,1142
  748. ,1212
  749. ,971
  750. ,1029
  751. ,1016
  752. ,1051
  753. ,1153
  754. ,1071
  755. ,817
  756. ,1103
  757. ,1007
  758. ,1010
  759. ,1008
  760. ,1149
  761. ,914
  762. ,1006
  763. ,950
  764. ,986
  765. ,912
  766. ,1035
  767. ,914
  768. ,1160
  769. ,884
  770. ,1154
  771. ,990
  772. ,1013
  773. ,1014
  774. ,949
  775. ,978
  776. ,866
  777. ,894
  778. ,836
  779. ,1096
  780. ,967
  781. ,1029
  782. ,1017
  783. ,894
  784. ,1119
  785. ,1026
  786. ,1073
  787. ,929
  788. ,799
  789. ,1126
  790. ,941
  791. ,1044
  792. ,993
  793. ,991
  794. ,1093
  795. ,1007
  796. ,782
  797. ,940
  798. ,1081
  799. ,773
  800. ,882
  801. ,918
  802. ,941
  803. };

​​​​​

卡尔曼滤波结果:

4.2.卡尔曼滤波 Python​​​​​​​语言代码示例

这里真实值为 x=-0.377,且假设A=1, H=1
观测值存在噪声,那么如何估计出实际的值呢?
这里给出两种方案,一种是北卡大学开源的,直接通过公式计算的结果

  1. # -*- coding=utf-8 -*-
  2. # Kalman filter example demo in Python
  3. # A Python implementation of the example given in pages 11-15 of "An
  4. # Introduction to the Kalman Filter" by Greg Welch and Gary Bishop,
  5. # University of North Carolina at Chapel Hill, Department of Computer
  6. # Science, TR 95-041,
  7. # http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html
  8. # by Andrew D. Straw
  9. #coding:utf-8
  10. import numpy
  11. import pylab
  12. #这里是假设A=1,H=1的情况
  13. # 参数初始化
  14. n_iter = 50
  15. sz = (n_iter,) # size of array
  16. x = -0.37727 # 真实值
  17. z = numpy.random.normal(x,0.1,size=sz) # 观测值 ,观测时存在噪声
  18. Q = 1e-5 # process variance
  19. # 分配数组空间
  20. xhat=numpy.zeros(sz) # x 滤波估计值
  21. P=numpy.zeros(sz) # 滤波估计协方差矩阵
  22. xhatminus=numpy.zeros(sz) # x 估计值
  23. Pminus=numpy.zeros(sz) # 估计协方差矩阵
  24. K=numpy.zeros(sz) # 卡尔曼增益
  25. R = 0.1**2 # estimate of measurement variance, change to see effect
  26. # intial guesses
  27. xhat[0] = 0.0
  28. P[0] = 1.0
  29. for k in range(1,n_iter):
  30. # 预测
  31. xhatminus[k] = xhat[k-1] #X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
  32. Pminus[k] = P[k-1]+Q #P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1
  33. # 更新
  34. K[k] = Pminus[k]/( Pminus[k]+R ) #Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
  35. xhat[k] = xhatminus[k]+K[k]*(z[k]-xhatminus[k]) #X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
  36. P[k] = (1-K[k])*Pminus[k] #P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1
  37. pylab.figure()
  38. pylab.plot(z,'k+',label='noisy measurements') #观测值
  39. pylab.plot(xhat,'b-',label='a posteri estimate') #滤波估计值
  40. pylab.axhline(x,color='g',label='truth value') #真实值
  41. pylab.legend()
  42. pylab.xlabel('Iteration')
  43. pylab.ylabel('Voltage')
  44. pylab.figure()
  45. valid_iter = range(1,n_iter) # Pminus not valid at step 0
  46. pylab.plot(valid_iter,Pminus[valid_iter],label='a priori error estimate')
  47. pylab.xlabel('Iteration')
  48. pylab.ylabel('$(Voltage)^2$')
  49. pylab.setp(pylab.gca(),'ylim',[0,.01])
  50. pylab.show()

​​​​​​​另外一种是调用 

from filterpy.kalman 

 里的卡尔曼滤波函数

  1. from filterpy.kalman import KalmanFilter
  2. import numpy as np
  3. np.random.seed(0)
  4. kf = KalmanFilter(dim_x=1, dim_z=1)
  5. kf.F = np.array([1])
  6. kf.H = np.array([1])
  7. kf.R = np.array([0.1**2])
  8. kf.P = np.array([1.0])
  9. kf.Q = 1e-5
  10. xhat[0] = 0.0
  11. P[0] = 1.0
  12. for k in range(1,n_iter):
  13. kf.predict()
  14. xhat[k] = kf.x
  15. kf.update(z[k], 0.1**2, np.array([1]))
  16. pylab.figure()
  17. pylab.plot(z,'k+',label='noisy measurements') #观测值
  18. pylab.plot(xhat,'b-',label='a posteri estimate') #滤波估计值
  19. pylab.axhline(x,color='g',label='truth value') #真实值
  20. pylab.legend()
  21. pylab.xlabel('Iteration')
  22. pylab.ylabel('Voltage')
  23. pylab.figure()
  24. valid_iter = range(1,n_iter) # Pminus not valid at step 0
  25. pylab.plot(valid_iter,Pminus[valid_iter],label='a priori error estimate')
  26. pylab.xlabel('Iteration')
  27. pylab.ylabel('$(Voltage)^2$')
  28. pylab.setp(pylab.gca(),'ylim',[0,.01])
  29. pylab.show()

python-opencv中的卡尔曼滤波函数

  1. kalman = cv2.KalmanFilter(1, 1)
  2. kalman.transitionMatrix = np.array([[1]], np.float32) # 转移矩阵 A
  3. kalman.measurementMatrix = np.array([[1]], np.float32) # 测量矩阵 H
  4. kalman.measurementNoiseCov = np.array([[1]], np.float32) * 0.01 # 测量噪声 R
  5. kalman.processNoiseCov = np.array([[1]], np.float32) * 1e-5 # 过程噪声 Q
  6. kalman.errorCovPost = np.array([[1.0]], np.float32) # 最小均方误差 P
  7. xhat = np.zeros(sz) # x 滤波估计值
  8. kalman.statePost = np.array([xhat[0]], np.float32)
  9. for k in range(1, n_iter):
  10. # print(np.array([z[k]], np.float32))
  11. mes = np.reshape(np.array([z[k]], np.float32), (1, 1))
  12. # # print(mes.shape)
  13. xhat[k] = kalman.predict()
  14. kalman.correct(np.array(mes, np.float32))
  15. pylab.figure()
  16. pylab.plot(z, 'k+', label='noisy measurements') # 观测值
  17. pylab.plot(xhat, 'b-', label='a posteri estimate') # 滤波估计值
  18. pylab.axhline(x, color='g', label='truth value') # 真实值
  19. pylab.legend()
  20. pylab.xlabel('Iteration')
  21. pylab.ylabel('Voltage')
  22. pylab.show()

三者都能得到同一结果

​​​​​​​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/493716
推荐阅读
相关标签
  

闽ICP备14008679号