数据处理(伪)代码:卡尔曼滤波 vs. 卡尔曼平滑

2023-05-16

步骤一、导入csv或txt格式的试验数据

最简洁也是据说读取速度最快的方法是:

pPath = 'C:\data_org\9#-1.txt'	% 数据文件
data = importdata(pPath);  % 读取 pPath 的结果到 一个数据结构变量 data 中。
pData = data.data;		% 提取有效数据数组

data 的数据结构如下:

data.data % 数组
data.textdata % cell
data.name
保存与试验参数相关的一些信息:

pInfo = temp.textdata{1:28};

保存试验数据的变量名称及其单位等相关信息:

index = find(temp.textdata{29}()==';');
index = [0, index];
lenIdx = length(index);

pUnit = temp.textdata(30,1:6);
pVarious = temp.textdata(29,1);
i = 1;
while i<lenIdx
    pName{1,i} = pVarious{1}(index(i)+1:index(i+1)-1);
    i = i+1;
end
pName{1,i} = pVarious{1}(index(i)+1:end);
clear pVarious temp

步骤二、试验数据预处理

设置需要处理的数据序列起始点s和长度num

Y1 = pData(s:s+num,1);  % Tension
Y2 = pData(s:s+num,2);  % Torsion
Y3 = pData(s:s+num,3);  % Moment_X
Y4 = pData(s:s+num,4);  % Moment_Y
Y5 = sqrt(Y3.^2+Y4.^2);  % Moment_XY
pTime = pData(s:s+num,5)';	% Time

设置试验数据的采样时间间隔——由试验数据的时间戳可以求出,这里是1600Hz采样频率下的结果,因此有:

dt = 6.25e-04;        % 采样时间间隔,1600Hz

估计或者计算试验数据的量测噪声强度——预估或者由试验结果计算。这里假设 Q = 1; R = 500^2。

q = 1;                % 估计方差,模型噪声
sd = 500;           % 预设方差,量测噪声

设置系统状态、协方差的初始值、系统的状态方程和输出向量等。

A1 = [2 -1; 1 0];	   % 离散量的状态方程
Q1 = diag([q*dt 0]);   % 模型噪声
M1 = [0;0];            % 初始值 x0
P1 = diag([0.25 2]);   % 协方差矩阵
R1 = sd^2;             % 量测噪声
H1 = [1 0];            % 输出

分配Kalman滤波后的数据空间,以及对应的协方差矩阵序列

MM1 = zeros(size(M1,1),size(Y1,2));
PP1 = zeros(size(M1,1),size(M1,1),size(Y1,2));

根据数量序列的大小,使用 Kalman Filter 依次求解滤波后的结果。

%
% KF for Tension
%
for k=1:size(Y1,2)
    [M1,P1] = kf_predict(M1,P1,A1,Q1);			% 使用模型 X_k = A1*x_k-1 + Q1 预测系统状态 M1
    [M1,P1] = kf_update(M1,P1,Y1(k),H1,R1);		% 由量测值对结果进行修正(更新)
    
    MM1(:,k) = M1;		% 保存 修正结果
    PP1(:,:,k) = P1;  	% 保持 协方差
    
    % 使用 `Kalman Filter` 处理数据时的实时结果显示
    % figure()			   % 清理 绘图框内容 clf
    if rem(k,1000)==1
      plot(pTime,Y1,'k:', ...
           pTime(k),M1(1),'ro',...
           pTime(1:k),MM1(1,1:k),'r-');
      drawnow;
    end
end

然后,使用 Kalman smoother 对滤波的结果进行平滑处理。
(需要前面 Kalman Filter 过程中所使用的协方差矩阵序列 PP1。)

SM1 = rts_smooth(MM1,PP1,A1,Q1);

或者

  if size(A1,3)==1
    A1 = repmat(A1,[1 1 size(M1,2)]);
  end
  if size(Q1,3)==1
    Q1 = repmat(Q1,[1 1 size(M1,2)]);
  end
  %
  % Run the smoother
  %
  D1 = zeros(size(M,1),size(M1,1),size(M1,2));
  SM1 = M1;
  for k=(size(M1,2)-1):-1:1
    P_pred   = A1(:,:,k) * P1(:,:,k) * A1(:,:,k)' + Q1(:,:,k);
    D1(:,:,k) = P1(:,:,k) * A1(:,:,k)' / P_pred;
    SM(:,k)   = SM1(:,k) + D1(:,:,k) * (SM1(:,k+1) - A1(:,:,k) * SM1(:,k));
    P1(:,:,k) = P1(:,:,k) + D1(:,:,k) * (P1(:,:,k+1) - P_pred) * D1(:,:,k)';
  end

保存相关结果到 saveFile 文件中:

save(saveFile, 'pData', 'pTime', 'pName', 'pUnit');
save(saveFile, 'ss','se','dt','sd','q','A1','P1','-append');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据处理(伪)代码:卡尔曼滤波 vs. 卡尔曼平滑 的相关文章

  • 制作html css 步骤进度条(完整代码)

    这个动画步骤进度条的css制作的非常简单 那里有两个按钮可以控制步骤 xff0c 它们将逐步进行 我在这个多步骤进度条 css 中使用了 4 个步骤 如果你愿意 xff0c 你可以使用更多 我使用了一些 javascript 来创建这一步进
  • 搜狗语料库word2vec获取词向量

    一 中文语料库 本文采用的是搜狗实验室的搜狗新闻语料库 xff0c 数据链接 http www sogou com labs resource cs php 首先对搜狗语料库的样例文件进行分析 搜狗语料库由搜狗实验室提供 xff0c 我们使
  • c++堆排序原理和实现

    堆排序 xff0c C 43 43 实现 堆是一种特殊的树形数据结构 xff0c 即完全二叉树 堆分为大根堆和小根堆 xff0c 大根堆为根节点的值大于两个子节点的值 xff1b 小根堆为根节点的值小于两个子节点的值 xff0c 同时根节点
  • TCP流量控制和拥塞控制

    先来了解2个TCP的概念 xff1a MSS xff1a Maximum Segment Size xff0c TCP一次传输发送的最大数据段长度 RTT xff1a Round Trip Time xff0c 往返时延 xff0c 表示从
  • c++static关键字的作用

    c 43 43 static关键字的作用 c c 43 43 共有 1 xff09 xff1a 修饰全局变量时 xff0c 表明一个全局变量只对定义在同一文件中的函数可见 2 xff09 xff1a 修饰局部变量时 xff0c 表明该变量的
  • git合并解决

    远程分支被修改了 xff0c 本地分支落后修改 xff0c 合并 方法一 xff1a 在你自己的分支上 xff0c 如果有本地修改先 git stash git pull git merge origin master 如果本地分支是mas
  • TCP Keepalive

    TCP Keepalive的起源 TCP协议中有长连接和短连接之分 短连接环境下 xff0c 数据交互完毕后 xff0c 主动释放连接 xff1b 长连接的环境下 xff0c 进行一次数据交互后 xff0c 很长一段时间内无数据交互时 xf
  • 【转载】深入浅出讲解FOC算法与SVPWM技术——自制FOC驱动器

    原文链接 xff1a https zhuanlan zhihu com p 147659820 参考文献 xff1a https zhuanlan zhihu com p 364247816 https www zhihu com ques
  • Linux 基本用户和组命令

    Linux 基本用户和组命令 1有关用户的命令 1 新增用户 Useradd 43 用户名 2 查看用户是否存在 id 43 用户名 3 删除用户 sudo userdel 用户名 只会删除用户本身 sudo userdel r 43 用户
  • Linux文件及权限

    Linux文件及权限 1 xff0e 查看文件权限 1 ls l 命令 ll 命令 显示详细信息 例 xff1a root 64 localhost Desktop ll total 178752 rwxr xr x 1 root root
  • 各种排序算法和应用场景

    简介 插入排序 插入排序是一种较为简单的排序算法 xff0c 它的基本思想是通过构建有序序列 xff0c 对于未排序数据 xff0c 在已排序序列中从后向前扫描 xff0c 找到相应位置并插入 形象的可以理解为打扑克抓拍的过程 xff0c
  • C/C++(3)C++调用C语言的函数和头文件

    C 43 43 语言支持函数重载 xff0c C语言不支持函数重载 函数被C 43 43 编译后在库中的名字与C语言的不同 xff0c C xff0b xff0b 和C是两种完全不同的编译链接处理方式 xff0c 如果直接在C xff0b
  • 一文了解IMU原理、误差模型、标定、惯性传感器选型以及IMU产品调研(含IMU、AHRS、VRU和INS区别)

    在此记录一下测试IMU过程中的其它文章 xff0c 便于以后查看 xff1a IMU的误差标定以及姿态解算ROS下通过USB端口读取摄像头数据 包括笔记本自带摄像头 激光 摄像头 IMU等传感器数据同步方法 message filters
  • windows安装Ubuntu子系统以及图形化界面记录

    文章目录 1 windows环境设置2 开始安装3 ubuntu使用3 1 启动和退出 Linux 子系统3 2 安装位置3 3 更换源 4 安装图形化界面4 1 安装VcXsrv4 2 安装桌面环境 xff08 1 xff09 方法1 x
  • STM32 DMA正常模式等待传输完成和开始下一次传输

    选择DMA的正常模式 xff0c 即DMA只传输一次 如果当传输完一次后 xff0c 还想再传输一次 xff0c 就需要重启DMA xff1a DMA Cmd DMA1 Channel6 DISABLE 重新设置源地址 重新设置目的地址 重
  • 增量式编码器和绝对式编码器,ABI信号和UVW信号、编码器PWM信号

    一 编码器的分类 根据检测原理 xff0c 编码器可分为光学式 磁式 感应式和电容式 xff0c 根据其刻度方法及信号输出形式 xff0c 可分为增量式 绝对式以及混合式三种 1 增量式编码器 增量式编码器是直接利用光电转换原理输出三组方波
  • 路由器接口管理 控制端口 辅助端口 物理端口 逻辑端口 局域网

    路由器接口管理 路由器的接口相对于交换机来说最大的特点就是接口类型和配置更为复杂 xff0c 一般吧路由器上的接口分为三大类 xff1a 1 局域网的LAN接口 xff0c 2 用于广域网接入 互联的WAN接口 xff0c 3 应用于LAN
  • C++各大有名库的介绍

    C 43 43 各大有名库的介绍 在C 43 43 中 xff0c 库的地位是非常高的 C 43 43 之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论 现实中 xff0c C 43 43 的
  • 树莓派搭建nas服务器的详细过程

    前奏 默认的登录帐号为 pi xff0c 密码是 raspberry 开启 ssh 在根目录 xff0c 新建一个名为 ssh 的空白文件就行了 然后 xff0c 重启就可以ssh访问了 命令行下配置 xff1a sudo raspi co
  • buffer overflow detected错误

    最近在写并行程序的时候遇到这个问题 在上网查询之后发现好多是由于sprintf的缓冲区不够造成的 对比自己程序发现一个很低级的错误 char sc 61 new char 100 sprintf sc 34 d 34 rank string

随机推荐

  • 聊一聊关于ROS开发常用的调试工具(rostopic,rosnode等等)

    ROS常用的调试工具有rosnode xff0c rostopic 1 rosnode 参数用法作用listrosnode list查看当前运行了哪些节点inforosnode info node name查看该节点发布 接受哪些话题以及服
  • 关于SLAM-Hector建图方法的一些基础点

    hector建图算法 1 简介 hector slam不需要里程计数据 xff0c 使用高斯牛顿方法 xff0c 直接使用激光雷达数据估算里程计信息 所以 xff0c 只需要激光雷达数据 xff0c 即可完成建图 2 优缺点 优点 xff1
  • 查全率(Recall)、查准率(Precision)以及综合评价指标(F1-Measure )

    xfeff xfeff 原文转载于 xff1a http www cnblogs com bluepoint2009 archive 2012 09 18 precision recall f measures html 在信息检索和自然语
  • 什么是码,主码,主属性,非主属性

    xfeff xfeff 码 xff1a 代表数目的符号 主码 我们在建立数据库的时候 xff0c 需要为每张表指定一个主码 xff0c 主码也叫主键 所谓主码就是在实体集中区分不同实体的候选码 一个实体集中只能有一个主码 xff0c 但可以
  • 整数二进制补码的数学原理(two's complement)

    转载自 整数二进制补码的数学原理 two 39 s complement 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • IP,子网掩码,默认网关和DNS都是什么,有什么用

    彻底明白IP 地址 完整版 xff08 含CIDR 讲解 xff09 不管是学习网络还是上网 xff0c IP 地址都是出现频率非常高的词 Windows 系统中设置IP 地址的界面如图1 所示 xff0c 图中出现了IP 地址 子网掩码
  • 催经的方法【吐血整理】

    xfeff xfeff 催经的方法 吐血整理 1 生姜红糖茶 2 益母草颗粒 xff0c 中成药 xff0c 很有效 3 乌鸡白凤丸 43 逍遥丸 艾灸 至少对我这个寒性体质导致的姨妈不来很有效 一周不到姨妈必来 4 把药膏贴在肚脐眼 气血
  • 向量的模和范数

    xfeff xfeff 向量的模 向量 的 大小 或长度 xff09 叫做向量的模 xff0c 记作 平面向量 61 x y xff0c 模长是 xff1a 空间向量 61 x y z xff0c 模长是 xff1a 对于向量 属于 n 维
  • 基于LMS的正弦信号去噪

    coding utf 8 34 34 34 Created on Thu May 30 21 17 42 2013 64 author Timchen525 34 34 34 import numpy as np import matplo
  • 查找本机 CD-Key 的方法

    背景 由于笔记本的硬盘快满了 xff0c 打算换个新硬盘并重装 windows系统还希望继续使用原来的正版CD Key 方法 1 powershell 搜索 powershell xff0c 以管理员身份运行 2 查找ProductKey
  • libSVM简介及核函数模型选择

    xfeff xfeff 转自 xff1a libSVM简介及核函数模型选择 1 libSVM简介 训练模型的结构体 struct svm problem 储存参加计算的所有样本 int l 记录样本总数 double y 指向样本类别的组数
  • opencv学习系列教程之一 整体框架

    现在就业人数最多的是计算机专业 xff0c 而这个专业的很多人都是做深度学习 xff0c 或者行为识别这块 xff0c 这讲主要介绍一下很常用的一个工具 opencv 很多人说 xff0c 这是一个程序 xff0c 有些人这是很多算法 xf
  • C/C++ Socket UDP 广播消息的发送与接收

    C C 43 43 Socket UDP 广播消息的发送与接收 局域网内全网段广播消息的IP地址为 xff1a 255 255 255 255 xff0c 向该IP地址发送广播消息 xff0c 局域网下的任何网段的客户机都能收到广播 对于发
  • A* 寻路算法

    A 寻路算法 原文地址 xff1a http www gamedev net reference articles article2003 asp 概述 虽然掌握了 A 算法的人认为它容易 xff0c 但是对于初学者来说 xff0c A 算
  • 防止头文件被重复引用

    一 下划线 属于编程风格的内容 xff0c 对程序没有影响 不用下划线也可以 xff0c 用几个下划线也由个人习惯 二 其实质是一个宏名 由此我们可以防止发生重复定义或声明 假设你的头文件名为head h xff0c 根据习惯 xff0c
  • UDP通信绑定指定IP

    由于测试需要 xff0c 自己用vconfig在自己的虚拟机里添加了很多ip xff0c 实现不同Ip间的通信 UDP客户端向服务器发送报文时 xff0c 绑定会有最近IP原则 xff0c 比如 xff0c 你机器上有如下几个IP xff1
  • C++中两个同名头文件的引用顺序

    明人不说暗话 xff0c 直接上代码 xff1a 这里有两个路径下的同名head h头文件 includea head h define A 100 int funA return A includeb head h define A 20
  • 用户态协议栈学习,DKDK基本用法介绍

    网络数据流 xff0c 先了解一下用户态协议栈在什么位置 这里以DPDK为例 xff1a xff08 目的是为了获得原始的网络数据 xff0c 除了DPDK xff0c socket raw xff0c netmap也能获取获取以太网数据
  • 多旋翼基本组成

    一 总体认识 多旋翼三大系统 机身 动力系统 控制系统 xff08 导航模块 控制模块 决策模块 xff09 二 机身主体 xff1a 机架 xff08 1 xff09 作用 多旋翼的承载平台 xff0c 所有设备都是用机架承载 因此 xf
  • 数据处理(伪)代码:卡尔曼滤波 vs. 卡尔曼平滑

    步骤一 导入csv或txt格式的试验数据 最简洁也是据说读取速度最快的方法是 xff1a pPath span class token operator 61 span span class token string 39 C data o