卡尔曼滤波学习笔记

Kalman Filter

  • Ⅰ、直观理解
    • 1、描述
    • 2、例子
  • Ⅱ、适用范围
    • 1、线性系统
    • 2、噪声服从高斯分布
  • Ⅲ、相关公式
    • 1、原始公式
    • 2、预测公式
    • 3、更新公式
    • 4、初值赋予
    • 5、总结
  • Ⅳ、应用例子
  • Ⅴ、代码实现
  • Ⅵ、公式理解
    • 1、协方差矩阵的理解
      • 1.1 协方差
      • 1.2 协方差矩阵
      • 1.3、相关数学公式
    • 2、状态方程的理解

Ⅰ、直观理解

1、描述

从直观上来看,卡尔曼滤波是把两个存在误差的结果融合在一起,得到一个从数学上可以得到证明的最优估计值
而这两个存在误差的结果,一个是从理论上推导出来的,称之为先验估计值;一个是用传感器测量出来的,称之为测量值。它们之所以存在误差,是因为前者的理论模型存在现实干扰,后者的测量仪器存在不可避免的精度问题。
图片的具体解释比较复杂,此处可以且看且过。

图片解释:以上三个颜色都符合正太分布,其中橙色部分的期望是先验估计值,绿色部分的期望是测量值,蓝色部分的期望便是融合绿色和橙色之后的最优估计值。
Q1:为什么它们都呈现出正太分布呢?
图中橙色部分和绿色部分之所以呈现出正太分布,是因为前者存在过程噪声,后者存在测量噪声的缘故。而这两个噪声被假定为符合正太分布。至于蓝色部分,解释起来就复杂许多,下文再说了。
Q2:噪声从哪里来?
过程噪声正式前文提到的:“理论模型存在现实干扰” 中的现实干扰。测量噪声则是:“测量仪器存在不可避免的精度问题” 中的精度误差。也就是说,以上这个图是在理论之上考虑了现实干扰和仪器误差的图。
Q3:为什么噪声会符合正太分布?
事实上,噪声不可能完美的符合正太分布,只是自然界大多数噪声,甚至许多统计学的例子,都可以被近似为正太分布。比如世界上人的身高、智商、体重等的分布情况,大体上是符合正太分布的。
Q4:过程噪声和测量噪声的方差如何知道?
这是通过工程实际,试出来的,并非理论推导。想PID算法一样,P、I、D这三个量得试出来。这些无法确定的量,被称为超参数

2、例子

前提:现已知小车当下的位置、速度、加速,并有一卫星实施监测小车的位置。
目标:求小车下一时刻的位置。
分析:从由于存在阻力,人为因素等原因。我们所知道的小车当前位置、速度、加速度存在一定程度的误差。所以利用这些条件求得的小车下一时刻的位置存在偏差。而由于卫星精度的问题,仅仅靠卫星也无法得到小车下一时刻的准确位置。
解决:卡尔曼认为,可以取长补短,综合考虑理论上得出的结果和卫星的测量结果,得出最优解。比如理论上得出的小车下一时刻的位置是10m,卫星得出的是11m。那我们大致可以推断真实的小车位置大概介于10m和11m之间,至于最优解到底因该是多少m,这是卡尔曼滤波要解决的问题,。

Ⅱ、适用范围

1、线性系统

线性系统要求系统同时满足齐次性可加性
齐次性:输入扩大N倍,其输出也扩大N倍。

齐次性的数学表达: 如果: y 1 ( t ) = M { f 1 ( t ) } f 2 ( t ) = a f 1 ( t ) 则: y 2 ( t ) = M { f 2 ( t ) } = a y 1 ( t ) \begin{array}{l} 如果:\\{y_1}(t) = M\{ {f_1}(t)\} \\ {f_2}(t) = a{f_1}(t)\\ 则:\\{y_2}(t) = M\{ {f_2}(t)\} = a{y_1}(t) \end{array} 如果:y1(t)=M{f1(t)}f2(t)=af1(t)则:y2(t)=M{f2(t)}=ay1(t)

可加性:N个输入,输出等于N个输入独立的输出之和。

可加性的数学表达: 如果 : y 1 ( t ) = M { f 1 ( t ) } y 2 ( t ) = M { f 2 ( t ) } 且 : f 3 ( t ) = f 1 ( t ) + f 2 ( t ) y 3 ( t ) = M { f 3 ( t ) } 则 : y 3 ( t ) = y 1 ( t ) + y 2 ( t ) \begin{array}{l} 如果:\\ {y_1}\left( t \right) = M\{ {f_1}\left( t \right)\} \\ {y_2}\left( t \right) = M\{ {f_2}\left( t \right)\} \\ 且:\\ {f_3}\left( t \right) = {f_1}\left( t \right) + {f_2}\left( t \right)\\ {y_3}\left( t \right) = M\left\{ {{f_3}\left( t \right)} \right\}\\ 则:\\ {y_3}\left( t \right) = {y_1}\left( t \right) + {y_2}\left( t \right) \end{array} 如果:y1(t)=M{f1(t)}y2(t)=M{f2(t)}:f3(t)=f1(t)+f2(t)y3(t)=M{f3(t)}:y3(t)=y1(t)+y2(t)

简而言之:线性系统满足”和的响应等于响应的和“。

2、噪声服从高斯分布

高斯分布又称正态分布,而前文提到自然界中许多噪声都可以近似为正态分布,所以在一般情况下这个条件是满足的。

一维正态分布表达式: P ( a ) − N ( u , ∂ 2 ) P(a) -N\left( {u,{\partial ^2}} \right) P(a)N(u,2)

二维正态分布表达式: P ( a ) − N ( u 1 , u 2 , ∂ 1 2 , ∂ 2 2 , ρ ) P(a)-N\left( {{u_1},{u_2},{\partial _1}^2,{\partial _2}^2,\rho } \right) P(a)N(u1,u2,12,22,ρ)

二维正态分布的另一种表达式: P ( A ) − N ( U , P ) P\left( A \right)-N\left( {U,P} \right) P(A)N(U,P)
其中A,U分别是一个2x1的系数矩阵,而P则是一个协方差矩阵。如图
在这里插入图片描述

Ⅲ、相关公式

1、原始公式

i : x k = A x k − 1 + B u k − 1 + w k − 1 i:{x_k} = A{x_{k - 1}} + B{u_{k - 1}} + {w_{k - 1}} i:xk=Axk1+Buk1+wk1
i i : z k = H x k − v k ii:{z_k} =H{x_k} - {v_k} ii:zk=Hxkvk

即:

i:本次实际值 = 上一次的实际值 + 控制量 + 过程扰动
ii:本次测量值 = 实际值 - 测量误差

如果不加上噪声,那将推导出存在误差的计算值(先验估计值)和测量值。

i : x ^ k − = A x ^ k − 1 + B u k − 1 i: {\hat x_k}^- = A{{\hat x}_{k - 1}} + B{u_{k - 1}} i:x^k=Ax^k1+Buk1
i i : x ^ k m e a = H − z k ii: {{\hat x}_{kmea}} =H^-{z_k} ii:x^kmea=Hzk

即:

i:本次计算值 = 上一此最优估计值+ 控制量
ii:本次测量值 = 转化关系 x 本次传感器测量值

x k {x_k} xk是实际的目标状态的值, x ^ k − {{\hat x}_k}^ - x^k表示先验估计值, x ^ k m e a {{\hat x}_{kmea}} x^kmea表示测量值。A表示状态转移矩阵, x ^ k − 1 {{\hat x}_{k - 1}} x^k1表示上一次的最优估计值,B表示控制矩阵, u k − 1 {u_{k - 1}} uk1表示控制变量(即输入), w k {w_{k}} wk表示过程噪音, z k {z_k} zk表示传感器的测量值,H表示 z k {z_k} zk x ^ m e a {{\hat x}_{mea}} x^mea之间的关系矩阵, v k {v_{k}} vk表示测量噪音。
注:之所以需要H,是因为传感器测量出来的值不一定就是目标值,比如某项任务中,传感器测量出来的是开尔文,但我们需要的是摄氏度之类的。

2、预测公式

( 1 ) x ^ k − = A x ^ k − 1 + B u k − 1 (1){{\hat x}_k}^ - = A{{\hat x}_{k - 1}} + B{u_{k - 1}} 1x^k=Ax^k1+Buk1

( 2 ) P k − = A P k − 1 A T + Q (2){P_k}^ - =A{P_{k - 1}}{A^T} + Q 2Pk=APk1AT+Q

(2)中 P k − {P_k}^ - Pk表示( x k − x ^ k − {x_k} - {{\hat x}_k}^ - xkx^k)的协方差矩阵, P k {P_{k }} Pk表示( x k − x ^ k {x_k} - {{\hat x}_k} xkx^k)的协方差矩阵,Q表示噪音 w k {w_{k}} wk的协方差矩阵。

3、更新公式

( 3 ) K k = P k − H T H P k − H T + R (3){K_k} = \frac{{{P_k}^ - {H^T}}}{{H{P_k}^ - {H^T} + R}} 3Kk=HPkHT+RPkHT

( 4 ) x ^ k = x ^ k − + K k ( Z k − H x ^ k − ) (4){{\hat x}_k} = {{\hat x}_k}^ - + {K_k}\left( {{Z_k} - H{{\hat x}_k}^ - } \right) 4x^k=x^k+Kk(ZkHx^k)

( 5 ) P k = ( I − K k H ) P k − (5){P_k} = \left( {I - {K_k}H} \right){P_k}^ - 5Pk=(IKkH)Pk
其中的 K k ∈ [ 0 , H − ] {K_k} \in \left[ {0,{H^ - }} \right] Kk[0,H]{K_k}是卡尔曼增益系数, I I I为单位矩阵,R表示测量噪声 v k {v_{k}} vk的协方差矩阵, x ^ k {{\hat x}_k} x^k表示最优估计值。

4、初值赋予

一般只要 P 0 {P_0} P0不等与零即可,不妨设 x 0 {x_0} x0= 0, P 0 {P_0} P0 = 1

5、总结

(4)公式也正是卡尔曼滤波的核心公式,由 { x ^ k = x ^ k − + G ( x ^ k m e a − x ^ k − ) K k = G H , G ∈ ( 0 , 1 ) } \left\{ \begin{array}{l} {{\hat x}_k} = {{\hat x}_k}^ - + G\left( {{{\hat x}_{kmea}} - {{\hat x}_k}^ - } \right)\\ {K_k} = GH,G \in \left( {0,1} \right) \end{array} \right\} {x^k=x^k+G(x^kmeax^k)Kk=GH,G(0,1)}变化而来。
在(4)中,当 K k {K_k} Kk = H − {H^ - } H时, x ^ k {{\hat x}_k} x^k = x ^ k − {{\hat x}_k}^ - x^k,表示完全相信计算值(即预估值)。同理,当 K k {K_k} Kk = 0 时, x ^ k {{\hat x}_k} x^k = H − z k H^-{z_k} Hzk = x ^ m e a {{\hat x}_{mea}} x^mea,表示完全相信测量值。而卡尔曼滤波的核心便是寻找合适的 K k {K_k} Kk使得最优估计值 x ^ k {{\hat x}_k} x^k,它可以在计算值和测量值之间”取长补短“,使 x ^ k {{\hat x}_k} x^k最接近于真实值。
至于 K k {K_k} Kk如何求,公式(3)已经给出了。而通过公式(2)、(3)也b不难知道由于A、H、 P k {P_k} Pk 是已知的,所以 K k {K_k} Kk取值最终是多少取决于与超参数Q和R。在上文Ⅰ章节,已经对Q和R做出过解释了。

另外:本小结唐突的给出了卡尔曼滤波的五个公式,其原因是这五个公式背后的推导过于复杂,而且如果不具备相关的数学知识以及控制理论的知识,理解起来也十分费劲,所以不妨先囫囵吞枣的接受,希望接下来的应用举例能有更加直观的理解。

Ⅳ、应用例子

1、前提条件:
条件一、小车在二维平面上以匀加速直线运动(系统满足线性)。
条件二、有一个卫星可以观测小车的位置,每 Δ t {\Delta t} Δt观测一次。
2、目的
每隔 Δ t {\Delta t} Δt时间,求一次小车的位置。
3、状态方程和测量方程的构建
在这里插入图片描述

其中p表示位置,v表示速度,a是加速度常数,然后下面的 p s a t e l l i t e _ k {p_{satellite\_k}} psatellite_k是卫星所测量得的数据。其他数据对照本文Ⅲ给出的公式。
以上这两个等式已经给出了A,B,H, u k 、 z k 、 x ^ k − {u_k}、{z_k}、{{\hat x}_k}^ - ukzkx^k等参数,接下来只需找到合适的Q和R,便可以带入本文Ⅲ的公式进行运算,完成卡尔曼滤波。

Ⅴ、代码实现

Ⅵ、公式理解

1、协方差矩阵的理解

1.1 协方差

协方差表示两个变量之间的关联程度,数学符号为cov()。在此不妨设有两个数a和b。当a增大时,b也增大。a减小时,b也减小。那么可以认为a和b正相关,其协方差cov(a,b)>0。反之a增大,b减小,那么a和b负相关,cov(a,b)<0。而若a的变化与b的变化毫无关系,则cov(a,b)=0。

协方差的相关性质:
1、cov(a,b)=E{(a-E(a))(b-E(b))}    //这是协方差的原始公式
2、cov(a,b)=E(ab)-E(a)E(b)
3、cov(a+C,b+D)=cov(a,b)   //其中C和D为常数,下同
4、cov(Ca,Db)=CDcov(a,b)
5、cov(a,b)=cov(b,a)

1.2 协方差矩阵

协方差矩阵用于描述多个变量之间的关程度,以及自身的方差。不妨设有三个变量a,b,c,其协方差矩阵为P。P的对角线分别是a,b,c三个变量的方差。其他则存放则三个变量之间的协方差。根据上文的协方差性质5可知,该矩阵为对称矩阵。
在这里插入图片描述
如果a,b,c三个变量没用任何关系,那么P矩阵便可以这样表达。
在这里插入图片描述
而再如果a,b,c的期望都为零,那么P矩阵可以进一步这样写。
在这里插入图片描述
值得注意的是,从宏观的角度来看,协方差矩阵只是在描述一个向量的内部各个变量自身的离散程度和各个变量之间的联系。

1.3、相关数学公式

1、方差公式: D ( a ) = E ( a 2 ) − E 2 ( a ) D\left( a \right) = E\left( {{a^2}} \right) - {E^2}\left( a \right) D(a)=E(a2)E2(a)
2、矩阵性质:
k ( a b c d e f g h y ) = ( k a k b k c k d k e k f k g k h k y ) k \left( \begin{matrix} a&b&c\\ d&e&f\\ g&h&y \end{matrix} \right)=\left( \begin{matrix} ka&kb&kc\\ kd&ke&kf\\ kg&kh&ky \end{matrix} \right) k adgbehcfy = kakdkgkbkekhkckfky
备注:之所以写这么一大堆,是因为卡尔曼滤波中的噪声通常是多个的,而这几个噪声一般被视为期望为零相互独立正态分布。所以以上的知识在推导卡尔曼滤波的数学公式中至关重要,但仅从应用的角度来说,其实不了解也罢

2、状态方程的理解

状态方程和输出方程是描述一个系统的两个极为重要的方程,下面以连续型系统为例,讲解一下这两个方程。
请添加图片描述
Y ( s ) = 1 s ( F ( s ) − 2 Y ( S ) ) ⇒ Y ( s ) / F ( s ) = H ( s ) = 1 s + 2 Y\left( s \right) = \frac{1}{s}\left( {F\left( s \right) - 2Y\left( S \right)} \right) \Rightarrow Y\left( s \right)/F\left( s \right) = H\left( s \right) = \frac{1}{{s + 2}} Y(s)=s1(F(s)2Y(S))Y(s)/F(s)=H(s)=s+21
由于现实生活中时间是向前推进的,所以节点1和节点2之间采用的是积分算子 1 s \frac{1}{s} s1,因此可以知道节点2的导数正是节点1,故可以设节点1为 x ′ {x'} x,节点2为 x {x} x
如果在节点1建立方程便得到: x ′ = − 2 x + f ( t ) {x'} = - 2x + f\left( t \right) x=2x+f(t),这个方程正式这个系统的状态方程。
而输出方程则是: y ( t ) = x + 0 f ( t ) y\left( t \right) = x + 0f\left( t \right) y(t)=x+0f(t)
由此可以引出连续系统状态方程和输出方程的通用表达式:

x ′ ( t ) = A x ( t ) + B f ( t ) y ( t ) = C x ( t ) + D f ( t ) \begin{array}{l} x'\left( t \right) = Ax\left( t \right) + Bf\left( t \right)\\ y\left( t \right) = Cx\left( t \right) + Df\left( t \right) \end{array} x(t)=Ax(t)+Bf(t)y(t)=Cx(t)+Df(t)
推广到离散系统:
x k + 1 = A x k + B f k y k = C x k + D f k \begin{array}{l} {x_{k + 1}} = A{x_k} + B{f_k}\\ {y_k} = C{x_k} + D{f_k} \end{array} xk+1=Axk+Bfkyk=Cxk+Dfk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android12之ABuffer数据处理(三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Ubuntu20.04安装软件报错:The following packages have unmet dependencies

Ubuntu20.04更换阿里云源后安装软件都会报错&#xff1a;The following packages have unmet dependencies 查看资料&#xff0c;大概是ubuntu本身的源比较版本较老&#xff0c;而阿里云的源比较新&#xff0c;因此版本不匹配造成依赖的库不匹配&#xff0c;所以只要将阿里云的…

【网络】HTTPS的加密

目录 第一组&#xff0c;非对称加密第二组&#xff0c;非对称加密第三组&#xff0c;对称加密证书签名 HTTPS使用的是非对称加密加对称加密的方案 &#xff08;非对称加密&#xff1a;公钥加/解密&#xff0c;私钥解/加密&#xff09; &#xff08;对称加密&#xff1a;一组对称…

什么是响应式设计(Responsive Design)?如何实现一个响应式网页?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式设计&#xff08;Responsive Design&#xff09;⭐ 如何实现一个响应式网页&#xff1f;1. 弹性网格布局2. 媒体查询3. 弹性图像和媒体4. 流式布局5. 优化导航6. 测试和调整7. 图片优化8. 字体优化9. 渐进增强10. 面向移动优先11. …

go、java、.net、C#、nodejs、vue、react、python程序问题进群咨询

1、面试辅导 2、程序辅导 3、一对一腾讯会议辅导 3、业务逻辑辅导 4、各种bug帮你解决。 5、培训小白 6、顺利拿到offer

【优选算法】—— 字符串匹配算法

在本期的字符串匹配算法中&#xff0c;我将给大家带来常见的两种经典的示例&#xff1a; 1、暴力匹配&#xff08;BF&#xff09;算法 2、KMP算法 目录 &#xff08;一&#xff09;暴力匹配&#xff08;BF&#xff09;算法 1、思想 2、演示 3、代码展示 &#xff08;二&…

基于Roop视频换脸

Roop 是一个强大的一键换脸工具&#xff0c;允许用户在视频中替换面部&#xff0c;只需要目标面部的一张图片&#xff0c;无需数据集&#xff0c;无需训练。 相对于之前的 Simswap 来说效果要好很多&#xff0c;不过需要注意的是没有授权不要商用。 文章目录 环境搭建使用方法…

Java之AbstractQueuedSynchronizer

要让你写一个java版的并发同步库&#xff0c;你会怎么思考设计&#xff1f;&#xff1f;&#xff1f;先思考三五分钟 请先拜读下老外的paperhttp://gee.cs.oswego.edu/dl/papers/aqs.pdf 1. 简介 AbstractQueuedSynchronizer&#xff0c;简称AQS&#xff0c;中文翻译为抽象队…

Git 原理与使用

1.版本控制器 所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统&#xff0c;同时也⽅便多⼈协同作业。 ⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑…

vue 简单实验 v-bind 变量与html属性绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"bind-attribute"><span v-bind:title"message">鼠标悬停几秒钟查看此处动态绑定的提示信息&#xff01;</sp…

【附安装包】CIMCO Edit 8安装教程|数控编程必备

软件下载 软件&#xff1a;CIMCO Edit版本&#xff1a;8语言&#xff1a;简体中文大小&#xff1a;249.18M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baid…

学习JAVA打卡第四十一天

字符串与字符数组、字节数组 ⑴字符串与字符数组 String类的构造方法String&#xff08;char a[]&#xff09;和String&#xff08;char a[]&#xff09;,int offset,int length,分别用数组a中的全部字符和部分字符创建string对象。 String类也提供将string对象的字符序列存…

Docker常见配置实验

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1、拉取mysql5.6与owncloud的镜像 docker pull mysql:5.6 docker pull mysql:5.6 2、生成容器实例&#xff0c;构建个人网盘 docker run -d --name mydb1 --env MYSQL_ROOT_PASSWORD123456 mysql:5.6 docker …

mac清理磁盘空间软件有哪些 mac清理磁盘空间怎么清理

随着时间的推移&#xff0c;Mac电脑上的文件会越来越多&#xff0c;很快就会占满磁盘空间。这时候&#xff0c;我们需要一个好的Mac清理磁盘空间软件来释放空间&#xff0c;保持电脑的良好性能。那么&#xff0c;mac清理磁盘空间软件有哪些呢&#xff1f;接下来&#xff0c;我将…

设计模式(单例模式,工厂模式),线程池

目录 什么是设计模式? 单例模式 饿汉模式 懒汉模式 工厂模式 线程池 线程池种类 ThreadPoolExcutor的构造方法: 手动实现一个线程池 什么是设计模式? 计算机行业程序员水平层次不齐,为了让所有人都能够写出规范的代码,于是就有了设计模式,针对一些典型的场景,给出一…

java+springboot+mysql村务档案管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的村务档案管理系统&#xff0c;系统包含超级管理员、工作人员角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;系统用户管理&#xff08;工作人员管理&#xff09;&#xff1b;公开资料&#xff1b;会议记录&…

.NET 最便捷的Log4Net日志记录器

最便捷的Log4Net使用方法 LOG4NET 配置日志记录器开始引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标。log4net是优秀的Apachelog4j™框架的移植 Microsoft.NET 运行时。我们保持了与原始log4j相似的框架 同时利…

Rust处理JSON

基本操作 Cargo.toml: [package]name "json"version "0.1.0"edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]serde { version "1", features …

前端(十四)——DOM节点操作手册:你需要了解的一切

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;DOM节点操作手册&#xff1a;你需要了解的一切 文章目录 前言DOM基础知识操作现有节点创建新节点遍历节点树修改节点属性和样式事件处理实践应用动态创建表格动态更新列表 前言 DOM&#xff08;文档…

计算机网络第3章(数据链路层)

计算机网络第3章&#xff08;数据链路层&#xff09; 3.1 数据链路层概述3.1.1 概述3.1.2 数据链路层使用的信道3.1.3 三个重要问题 3.2 封装成帧3.2.1 介绍3.2.2 透明传输3.2.3 总结 3.3 差错检测3.3.1 介绍3.3.2 奇偶校验3.3.3 循环冗余校验CRC(Cyclic Redundancy Check)3.3.…