摩托驾驶证科目一易错点

限速相关 无中心线,城市道路30公路40 有中心线,城市道路50公路70 划有两条以上车道的,城市道路70 封闭的机动车专用道,限速80 运载易燃易爆、剧毒、放射性等,在封闭的机动车专用道和公路上,限速60;在城市道路上限速50 限30 遇雾、雨、雪等能见度50m以内,限速30km/h 机动车进出非机动车道时,限速30 通过急弯路时,限速30 三轮、拖拉机、电瓶车等,限速30 距离相关 夜间会车,距离150m意外,将远光灯改为近光灯 车辆故障,车后50-100m设置警告标志 口5站3:交叉路口、隧道口50m内不能停车;公交站、消防栓、消防队门前30m内不能停车 距离掉头点50-100m驶入最左侧车道 扣分相关 骑摩托车不戴头盔,扣1分 3分6分9分12分 一般城市道路上逆行高速上违法占用应急车道高速上停车高速上逆行 不规避校车不按交通信号灯指示通行 驾驶证被暂扣期间驾车准驾不符 未取得校车驾驶资格驾驶校车伪造、变造机动车驾驶证 不悬挂车牌、遮挡号牌使用伪造、变造机动车号牌 饮酒后驾车 超速50%以上 驾驶证相关 多久不得申请驾驶证:假一吊二撤三醉五逃终身,撤、毒、代三年 虚假材料,一年内不得重新申请驾驶证 以欺骗、贿赂等手段取得驾驶证,被依法撤销的,三年内不得重新申请驾驶证 考试过程中有贿赂、舞弊行为的,一年内不得再次申领驾驶证 注射毒品的,三年内不得申请驾驶证 饮酒后驾车,暂扣6个月驾驶证,罚款1000-2000元 超速50%以上,吊销驾驶证,罚款200-2000元 罚款相关 转让不登记,罚200 隐瞒、欺骗手段补领机动车驾驶证,罚款200-500 提供虚假材料申请驾驶证,处500元罚款 代罚三倍不超五万,代审三倍不超两万 饮酒后驾车,暂扣6个月驾驶证,罚款1000-2000元 超速50%以上,吊销驾驶证,罚款200-2000元 交通事故,机动车已采取必要措施,赔偿金额,高架桥上5%不超过一万,普通道路10%不超过五万 违反倒车规定,未按交警指挥行驶,抛洒,罚100 改装助力,罚款50 拘役相关 交通事故致人重伤、死亡,三年以下 致人重伤、死亡并逃逸,3-7年 时限相关 驾驶证有效期超过一年以上未换证的,驾驶证会被注销 驾驶证有效期满之前,90日内申请换证 申请人信息变化的,要在30日内申请换证 摩托车注册登记之日起,10年以内,每2年检验1次;超过10年的,每1年检验1次 灯光相关 雾天:雾灯、危险报警闪光灯;不能开启远光灯,浓雾会反射灯光 路标相关 弯道:一急二反三连续 路面不平两个包 栅栏有人,火车头无人

2024/4/26
articleCard.readMore

三维旋转、欧拉角、四元数

关于三维旋转、欧拉角和四元数,以前只是简单的调用库函数做转换,并没有深入理解,最近在网上找资料发现还是良莠不齐,很多文章写得比较杂乱,这里根据自己学习后的理解整理出一篇文章以供参考。 1. 欧拉角 欧拉角描述了三维空间中的旋转,想象有一架飞机悬在空中朝着正东方向水平静止,现在要将其姿态原地变换到任意一个其他方向,从最接近人的直观来看,在机头原始位置\(A\)和旋转后位置\(A'\)连一条线即为最短路径,沿着该最短路径旋转飞机即可。如果用数学语言描述,那么就是假设飞机中心位置为\(O\),那么\(AOA'\)构成一个平面,以该平面法向量为轴旋转飞机,即可将飞机从原始姿态旋转到新的姿态。尽管这种方法很直观,但是一开始欧拉并没有采用这种表示方法,或许是觉得不够规整,旋转轴的确定和表示稍显麻烦。那么欧拉是如何做的呢?如下图所示[1],我们知道笛卡尔坐标系有\(xyz\)三个轴,那么绕着这三个轴分别做旋转不就可以了吗?这时只需要给出每次旋转的角度即可。 欧拉角旋转 更具体清晰的描述如下:首先假设世界坐标系为\(xyz\),飞机自身的局部坐标系为\(XYZ\)(刚体坐标系),世界坐标系始终保持固定不变,而飞机局部坐标系在飞机旋转过程中会发生变化。假设飞机初始坐标系为\(X_1Y_1Z_1(=xyz)\),想要旋转到一个新的姿态\(X_2Y_2Z_2\),那么欧拉给出的一个结论是:任意两个姿态之间,只需要绕\(x,y,z(X,Y,Z)\)轴做3次旋转即可完成。不过,具体到旋转过程中,绕哪几个轴旋转的先后顺序和角度都会对最终结果有影响<spanclass="hint--top hint--rounded" aria-label="欧拉角细节/旋转顺序/内旋外旋- 知乎(zhihu.com) ">[2]: 内旋还是外旋:可以注意到上面动图中首先绕z轴旋转,第一次旋转之后局部坐标系的\(XY\)轴与世界坐标系的\(xy\)轴已经不对齐了,因此第二步是以局部坐标系的轴进行旋转还是以世界坐标系为轴进行旋转?前者被称为内旋,后者为外旋。显然其他参数相同的情况下,两种方式得到的结果不同。 旋转轴的顺序:欧拉角实际上有两大类,一类是Proper Eulerangles,其旋转顺序包括 (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x,y-x-y),第二类是Tait–Bryan angles,包括 (x-y-z, y-z-x, z-x-y, x-z-y,z-y-x, y-x-z)。可以看到Proper Euler angles只涉及两个转轴.而Tait–Bryanangles涉及三个转轴。目前机器人以及SLAM领域中常用的是Tait–Bryanangles。后面的论述也都采用Tait–Bryan angles。 旋转的角度:指定绕 \(xyz(XYZ)\)轴三个的旋转角度分别为 \((\alpha,\beta,\gamma)\),需要注意的是如果旋转轴的顺序不同,即使每个轴对应的旋转角度不变,最终的姿态角也可能不同。 最后给一个小的总结,也就是说要想用欧拉角的方式描述一个三维旋转,实际上需要5个参数,即:1)内旋or外旋;2)旋转顺序;3)每次旋转的角度。 另外纠正一个重要的误解:欧拉角并不是描述一个静态的姿态角,而是描述一种过程!(相信很多人和我一样一直没意识到这点)姿态本身是唯一确定的,但是变换到这个姿态的过程是不唯一的,因此欧拉角与内旋/外旋、旋转顺序都密切相关! 2. 旋转矩阵 我们知道旋转可以用矩阵表示,如果考虑外旋的话,那么假设某个点在世界坐标系中的初始位置为\(\boldsymbol{p}_0\),如果跟随世界坐标系按照某个Tait–Bryanangles做外旋,不妨设为 \(x(\alpha)\toy(\beta)\toz(\gamma)\),其旋转后的坐标(在世界坐标系中)是可以表示为 \(\boldsymbol{p}'= \boldsymbol{R} *\boldsymbol{p}_0\),其中 \(\boldsymbol{R}\)为旋转矩阵,那么这个旋转矩阵可以写为 \(\boldsymbol{R}_{\rmextrinsic}=\boldsymbol{R}_z(\gamma)\boldsymbol{R}_y(\beta)\boldsymbol{R}_x(\alpha)\),其中\[\begin{align}\boldsymbol{R}_x(\alpha) &= \left[\begin{array}{ccc}1 & 0 & 0 \\0 & \cos (\alpha) & -\sin (\alpha) \\0 & \sin (\alpha) & \cos (\alpha)\end{array}\right] \\\boldsymbol{R}_y(\beta) &= \left[\begin{array}{ccc}\cos (\beta) & 0 & \sin (\beta) \\0 & 1 & 0 \\-\sin (\beta) & 0 & \cos (\beta)\end{array}\right] \\\boldsymbol{R}_z(\gamma) &= \left[\begin{array}{ccc}\cos (\gamma) & -\sin (\gamma) & 0 \\\sin (\gamma) & \cos (\gamma) & 0 \\0 & 0 & 1\end{array}\right]\end{align}\]外旋比较简单,但内旋的旋转矩阵就比较复杂,首先给出一个结论:如果内旋操作为\(Z(\gamma) \to Y'(\beta)\toX''(\alpha)\),那么其对应的旋转矩阵为 \[\boldsymbol{R}_{\rmintrinsic}=\boldsymbol{R}_{X''}(\alpha)\boldsymbol{R}_{Y'}(\beta)\boldsymbol{R}_{Z}(\gamma)=\boldsymbol{R}_z(\gamma)\boldsymbol{R}_y(\beta)\boldsymbol{R}_x(\alpha)\] 也就是和前面外旋 \(x(\alpha)\toy(\beta)\to z(\gamma)\) 的结果是完全一样的。也就是说: 每种特定顺序的外旋等价于其相反顺序的内旋,例如 \(x(\alpha)\to y(\beta)\to z(\gamma)\) 与\(Z(\gamma) \to Y'(\beta)\toX''(\alpha)\) 的旋转是等价的。 上面 \(\boldsymbol{R}_{\rmintrinsic}\) 的表达式中,第1次旋转绕 \(Z(=z)\) 轴旋转,因此 \(\boldsymbol{R}_{Z}(\gamma)=\boldsymbol{R}_z(\gamma)\),然而在做第2次旋转的时候,此时初始的\(Y\) 轴已经被旋转到了 \(Y'\) 处,因此绕 \(Y'\) 轴的旋转需要根据 \(Y'\) 的方向来确定,\(\boldsymbol{R}_{Y'}(\beta)\)表达式推导较为繁琐,而第3次旋转类似,其旋转轴变为了 \(Z''\),表达式则更为复杂。但是经过推导,会发现他们神奇地和\(\boldsymbol{R}_z(\gamma)\boldsymbol{R}_y(\beta)\boldsymbol{R}_x(\alpha)\)完全等价!实际上这并不是巧合,如何理解呢?下面我将参考博客<spanclass="hint--top hint--rounded" aria-label="Extrinsic& intrinsic rotation: Do I multiply from right or left? | by DominicPlein | Medium">[7]给出解释,稍微有点绕,不想深究细节的可以只记住上面的结论,跳过这段。 首先定义一些符号,有两个坐标系,即世界坐标系 \(W\) 和旋转后刚体坐标系 \(B\),我们一开始只考虑单步旋转,也即 \(W\)绕某个轴(外旋,同时也是内旋)旋转1次即为 \(B\),刚体上有一个点 \(A\) 跟着刚体坐标系做旋转,旋转后变为点\(A'\)。记旋转前后点 A在世界坐标系\(W\)中的坐标为 \({}^{\rm W}\boldsymbol{p}_{A}, {}^{\rmW}\boldsymbol{p}_{A'}\),在 \(B\) 中的坐标为 \({}^{\rmB}\boldsymbol{p}_{A'}\)。那么可以有下面两个等式: 记从 \(W\) 到 \(B\) 的旋转矩阵为 \({}^{\rm W}\boldsymbol{R}_{\rmB}\)(外旋矩阵的形式,例如如果\(W\)到\(B\)是绕着\(x\)轴旋转\(\alpha\),那么就有\({}^{\rm W}\boldsymbol{R}_{\rmB}=\boldsymbol{R}_{x}(\alpha)\)),那么我们有 \({}^{\rm W}\boldsymbol{p}_{A'} = {}^{\rmW}\boldsymbol{R}_{\rm B} {}^{\rm W}\boldsymbol{p}_{A}\); 另一方面,由于点 \(A\)跟着刚体坐标系做旋转,因此其在刚体坐标系中的坐标始终保持不变,也就是说我们有\({}^{\rm B}\boldsymbol{p}_{A'} = {}^{\rmW}\boldsymbol{p}_{A}\); 基于以上两个等式,可以得到 \({}^{\rmW}\boldsymbol{p}_{A'} = {}^{\rm W}\boldsymbol{R}_{\rm B} {}^{\rmB}\boldsymbol{p}_{A'}\),注意到此时发生了质的变化,我们把在同一个点两个不同坐标系中的坐标,通过旋转矩阵\({}^{\rm W}\boldsymbol{R}_{\rm B}\)联系在了一起!实际上,矩阵\({}^{\rmW}\boldsymbol{R}_{\rm B}\)有两种含义:1)从 \(W\) 到 \(B\)的旋转矩阵;2)空间中的同一个点,将其在\(B\)坐标系下的坐标映射到\(W\)坐标系下坐标的过渡矩阵。 那么再思考一下,所谓的外旋实际上同时也是关于坐标系 \(W\) 的内旋!如果把世界坐标系 \(W\) 直接替换成任意一个刚体坐标系 \(C\),那么我们就有 \({}^{\rm C}\boldsymbol{p}_{A'} = {}^{\rmC}\boldsymbol{R}_{\rm B} {}^{\rmB}\boldsymbol{p}_{A'}\)。还剩下一个问题就是,\({}^{\rm C}\boldsymbol{R}_{\rm B}\)的表达式是什么?实际上,假如 \(C\toB\) 是绕 \(x\) 轴内旋 \(\alpha\),那么就有 \({}^{\rm C}\boldsymbol{R}_{\rm B} =\boldsymbol{R}_{x}(\alpha)\)!(思考一下为什么~) 现在考虑多步旋转,内旋操作为 \(Z(\gamma)\to Y'(\beta)\toX''(\alpha)\),旋转过程中的坐标系分别为 \(W\to B\to C\to D\),某一个点 A经过多此旋转变为 \(A\to A' \to A''\to A'''\),旋转前 \(A\) 的坐标为 \({}^{\rm W}\boldsymbol{p}_{A}\),由于 \(A\)始终跟着刚体坐标系旋转,因此其在局部坐标系中的坐标始终不变,也就是 \({}^{\rmD}\boldsymbol{p}_{A'''}={}^{\rmC}\boldsymbol{p}_{A''}={}^{\rm B}\boldsymbol{p}_{A'}={}^{\rmW}\boldsymbol{p}_{A}\),那么可以有如下关系: 先在坐标系 \(C\)的视角下,考虑最后一次旋转操作,有 \({}^{\rmC}\boldsymbol{p}_{A'''} = {}^{\rm C}\boldsymbol{R}_{\rm D}{}^{\rm D}\boldsymbol{p}_{A'''} = \boldsymbol{R}_{x}(\alpha){}^{\rm D}\boldsymbol{p}_{A'''} = \boldsymbol{R}_{x}(\alpha){}^{\rm W}\boldsymbol{p}_{A}\); 然后在坐标系 \(B\)的视角下,考虑倒数第二次旋转操作,有 \({}^{\rmB}\boldsymbol{p}_{A'''} = {}^{\rm B}\boldsymbol{R}_{\rm C}{}^{\rm C}\boldsymbol{p}_{A'''} = \boldsymbol{R}_{y}(\beta){}^{\rm C}\boldsymbol{p}_{A'''} =\boldsymbol{R}_{y}(\beta)\boldsymbol{R}_{x}(\alpha) {}^{\rmW}\boldsymbol{p}_{A}\); 接着在坐标系 \(W\)的视角下,考虑倒数第三次旋转操作,类似的有 \({}^{\rm W}\boldsymbol{p}_{A'''} =\boldsymbol{R}_{z}(\gamma)\boldsymbol{R}_{y}(\beta)\boldsymbol{R}_{x}(\alpha){}^{\rm W}\boldsymbol{p}_{A}\)。 因此我们就得到了内旋操作 \(Z(\gamma) \toY'(\beta)\to X''(\alpha)\) 对应的旋转矩阵恰好就是\(\boldsymbol{R}_z(\gamma)\boldsymbol{R}_y(\beta)\boldsymbol{R}_x(\alpha)\),和外旋\(x(\alpha)\to y(\beta)\to z(\gamma)\)是完全一样的。 还有另一种解释方法,旋转矩阵为何左乘是相对固定坐标系,右乘是相对当前坐标系?- 知乎 (zhihu.com) 3. 万向锁 提到欧拉角旋转,很多文章会谈到万向锁问题,需要注意的是:欧拉角用来表示物体的旋转状态是没有问题的,万向锁是用欧拉角表示旋转过程中的一种状态,因此其影响到的是连续运动的问题<spanclass="hint--top hint--rounded" aria-label="欧拉角表示旋转会出现的问题——万向锁(GimbalLock)-CSDN博客">[3]。另外,万向锁发生在内旋过程中,外旋过程是不会发生的。万向锁现象:假设内旋\(Z\to Y\to X\),初始刚体坐标系为 \(X_0Y_0Z_0\),其与世界坐标系重合,第1次旋转的时候绕着\(Z_0/z\)轴旋转(任意角度)后得到新的刚体坐标系 \(X_1Y_1Z_1\),然后第2次旋转过程中绕 \(Y_1\)轴旋转了90°/-90°,此时第2次旋转过后的刚体坐标系 \(X_2Y_2Z_2\) 中的 \(X_2\) 轴与世界坐标系中的 \(z\)轴是同向/反向的,那么在做第3次旋转操作的时候,理应绕着此时的 \(X_2\)轴做旋转,但从世界坐标系来看,也就等价于绕着 \(z\)轴旋转,也就是说第1次和第3次旋转是完全可互相替代的,换言之失去了一个旋转的自由度。其他的内旋顺序也是类似的。简而言之,内旋过程中,当第二个旋转轴旋转90°/-90°时,第三个轴的转动效果可以被第一个旋转轴替代。 通常网上文章的另一种解释思路是用万向节,也就是陀螺仪的例子,个人认为这个例子不合适。首先陀螺仪中三轴万向锁中的三个轴并不总是保持互相垂直的,外圈的轴旋转并不会带动内圈轴旋转,因此它和我们直接理解刚体坐标系的旋转根本不是一回事。那么网上广为流传的那个粒子和万向锁有什么联系呢?还是结合刚才内旋\(Z\to Y\to X\)的例子,以及网上流传的众多图片,下面将给出一个解释。 首先对于陀螺仪而言,可以看到其结构如下,中间是一根竖轴穿过一个盘子,而盘子处于高速旋转状态,是陀螺的转子,根据陀螺的定轴性,竖轴也就是陀螺的自转轴在惯性空间内的方向保持不变。[4] 三轴陀螺仪 初始时刻陀螺仪的三轴对应于世界坐标系的三轴,绿色可以绕x轴旋转,红色可以绕y轴旋转,蓝色可以绕z轴旋转。 绿色绕x轴旋转红色绕y轴旋转蓝色绕z轴旋转 第一次旋转的时候,紫色绕 \(z/Z_0\)轴旋转,此时内圈带动外圈一起旋转,还没出什么问题;第2次旋转的时候,红色绕\(Y_1\) 旋转,带动外圈的 \(X_1\)也旋转,需要注意的是,经过第一次旋转之后陀螺仪的坐标轴变成了 \(X_2Y_1Z_0(=X_2Y_1z)\),\(Z\) 轴根本没动啊!还和世界坐标系中的 \(z\)轴保持一致;然后再第3次旋转,就只有最外层的绕 \(X_2\)轴旋转了。对于经典配图,也就是下面这张图当中的情况而言,要达到这种状况,就是在做第2次旋转的时候使得\(X_2\) 和 \(z\)轴同向了,这和我们前面解释死锁问题是一致的,这两个轴同向最终导致第3次旋转的时候实际上等价于在旋转\(z\) 轴。 三轴陀螺仪的万向锁现象 再品一下上面陀螺仪的例子,会发现刚体坐标系和世界坐标系混在一起,而且几个坐标轴还不是同等关系,很容易就把人绕进去了!害人不浅啊!因此要想理解欧拉角万向锁还是去理解前面的内旋\(Z\to Y\to X\) 例子吧。 另一种解释思路是从矩阵运算的角度<spanclass="hint--top hint--rounded" aria-label="关于欧拉角万向锁一直搞不明白万向锁为啥会形成?- 东方白的回答 - 知乎 ">[5],考虑前面提到的旋转矩阵\(\boldsymbol{R}=\boldsymbol{R}_x(\alpha)\boldsymbol{R}_y(\beta)\boldsymbol{R}_z(\gamma)\),当\(\beta=\pm\pi/2\) 的时候,会推导出\[\boldsymbol{R} = \left[\begin{array}{ccc}0 & 0 & 1 \\\sin (\alpha+\gamma) & \cos (\alpha+\gamma) & 0 \\-\cos (\alpha+\gamma) & \sin (\alpha+\gamma) & 0\end{array}\right]\]这里有一点不太合适的,因为万向锁发生在内旋过程中,而这样左乘的矩阵实际上是对应的外旋操作,因此这个解释是有一点小问题的。但也说得通,因为前面提到过内旋和外旋有对应关系,所以可以认为是另一种内旋等价转换为外旋。这里可以看到复合的旋转矩阵\(\boldsymbol{R}\)实际上只做了2个旋转操作,也就是所谓一个自由度被“锁”住了。 前提到内旋和外旋操作是有等价关系的,又提到万向锁只发生在内旋过程中,这是否矛盾呢?我的理解是不矛盾,因为我们说内旋和外旋等价的时候,关注的是结果,也就是两种操作不管过程如何,最终旋转后的坐标系是相同的;而在考虑万向锁问题的时候,我们关注的是旋转的过程。 关于万向锁带来的问题,例如3D动画中的插帧问题,以及云台追踪问题,可以参考博客<spanclass="hint--top hint--rounded" aria-label="欧拉角表示旋转会出现的问题——万向锁(GimbalLock)-CSDN博客 ">[3] 欧拉角表示旋转会出现的问题——万向锁(GimbalLock)-CSDN博客 4. 四元数 其实大家可以发现,欧拉角方式描述三维旋转的一个关键问题是不唯一性,也就是多种不同的旋转操作可以得到相同的结果,被称为Ambiguity。 关于四元数的部分参考大佬写的教程<spanclass="hint--top hint--rounded" aria-label="如何形象地理解四元数?- 知乎 ">[8],后面再写吧。。。 Reference Eulerangles - Wikipedia↩︎ 欧拉角细节/旋转顺序/内旋外旋- 知乎(zhihu.com)↩︎ 欧拉角表示旋转会出现的问题——万向锁(GimbalLock)-CSDN博客↩︎ 万向锁与欧拉角- 知乎(zhihu.com)↩︎ 关于欧拉角万向锁一直搞不明白万向锁为啥会形成?- 东方白的回答 - 知乎↩︎ 如何通俗地解释欧拉角?之后为何要引入四元数?- 大脸怪的回答 - 知乎↩︎ Extrinsic& intrinsic rotation: Do I multiply from right or left? | by DominicPlein | Medium↩︎ 如何形象地理解四元数?- 知乎 ↩︎

2024/4/16
articleCard.readMore

维生素每日摄入量

人体所需营养素包括 其中,需要补充的维生素包括维生素A、B族、C、D、E,可以分为脂溶性和水溶性两类<spanclass="hint--top hint--rounded" aria-label="脂溶性维生素与水溶性维生素:区别与比较(askanydifference.com) ">[1]: 脂溶性水溶性 例子维生素 A、D、E 和 KB 族维生素和维生素 C 特点储存在脂肪组织中,并且在膳食脂肪存在的情况下更容易被吸收可溶于水,除维生素B12外,其他水溶性维生素几乎不会在体内贮存大多会随着尿液排出体外 中毒过量的脂溶性维生素会产生严重的中毒症状过量基本不会中毒,会随尿液排出 食物鱼、肉、蛋、奶等全麦、坚果等 根据《中国居民膳食营养素参考摄入量》,我们居民维生素膳食参考摄入量(RNI)为以下标准: 维生素A 功效:维持视觉功能、保持皮肤黏膜完整性、促进免疫、维持生殖功能。 缺乏:夜盲症、干眼症、失明、骨质疏松、皮肤粗糙鱼鳞片,影响生育。 副作用:每天摄入3毫克维生素A,就有导致骨质疏松的危险。长期每天摄入33毫克以上的维生素A会使食欲不振、皮肤干燥、头发脱落、骨骼和关节疼痛,甚至引起流产。 摄入量:成年人800微克/天(约2400单位),可耐受最高摄入量3000微克/天。 食物:哈密瓜、杏子和芒果,胡萝卜(约300单位/100g)、南瓜、西兰花、红薯、菠菜,蛋黄、鸡肝、三文鱼等。 维生素C 功效:促进蛋白(尤其是胶原蛋白)生成,促进各种矿物质吸收,捕获自由基,因此能预防像癌症、动脉硬化、风湿病等疾病。此外,它还能增强免疫和,对皮肤、牙龈和神经也有好处。 缺乏:坏血病。 副作用:迄今,维生素C被认为没有害处,因为肾脏能够把多余的维生素C排泄掉。 摄入量:100毫克/天。(丁勇老师推荐200毫克/天,甚至500毫克/天) 食物:水果蔬菜。(做熟过程中会损失很多VC) B族维生素主要是肉类中包含较多。 B族从来不是孤军奋战的,它们之间亲密合作,一种B族维生素的缺乏,往往是连带着其他多种B族的缺乏,B族维生素同时补充效果才更好。 维生素B1 功效:被称为精神性的维生素,对神经组织和精神状态有良好调节作用。 缺乏:缺乏易导致脚气病。食欲不振、疲劳乏力、消化不良、头发干枯、记忆力减退、抽筋(肌肉痉挛)。 副作用:食用过多,可能会出现乏力、腹泻、食欲减退、头痛、精力下降等症状。 摄入量:成年男子1.4毫克/天,成年女子1.3毫克/天。 食物:全谷物(燕麦/小麦/小米)、豆类(黄豆/豌豆)、猪肉、动物内脏。 维生素B2(核黄素) 功效:促进发育和细胞的再生;促进生长发育,维护皮肤和细胞膜的完整性;预防和消除口腔生殖综合;促使皮肤、指甲、毛发的正常生长;促进机体对铁的吸收,可防贫血等。 缺乏:嘴唇干裂、易口腔溃疡、口角炎、皮炎、舌炎、结膜炎和角膜炎等。 副作用:主要是皮肤会出现瘙痒,还有麻木、刺痛、灼热等等感觉异常的情况,以及排尿会非常黄,长期大量口服维生素B2会导致肾脏功能有所损害,表现为肌酐升高,尿素氮升高。 摄入量:成年男子1.4毫克/天,成年女子1.2毫克/天。 食物:动物肝脏、蛋类、全谷物(荞麦/绿豆)、乳制品、巴旦木。 维生素B3(烟酰胺) 功效:合成性激素不可缺少的物质,促进血液循环,降低血压,降低胆固醇和甘油三酯。具有一定的美白作用。 缺乏:手脚冰凉,嘴唇乌青。 副作用:每天摄入量超过100毫克就会对身体造成危害。症状:发高热、头痛、恶心、肌肉痉挛。长期摄入超过100毫克的大剂量维生素B3会导致心律不齐,伤害肝脏。而且体内也能自动合成维生素B3。 摄入量:男性15毫克,女性12毫克。上限35毫克。 食物:坚果(花生/瓜子)、肉类(瘦肉/鱼肉)、豆类。 维生素B5(泛酸) 功效: 缺乏: 副作用: 摄入量: 食物: 维生素B6 功效:参与激素和红血球的合成,可以促进人体分泌胰岛素平衡,预防糖尿病。 缺乏:烦躁易怒、情绪波动、失眠、睡眠质量差、嘴唇干裂、口角炎、皮炎等。 副作用:日服100毫克左右就会对大脑和神经造成伤害。过量摄入还可能导致所谓的神经病,即一种感觉迟钝的神经性疾病。最坏的情况是导致皮肤失去知觉。 摄入量:成年人需要1.2毫克/天。 食物:坚果(花生/瓜子/芝麻)、鸡肉、牛肉、海鱼肉。 维生素B7 功效: 缺乏:皮炎、脱发、白发等。 副作用: 摄入量: 食物: 维生素B9(叶酸) 功效:被称为“造血维生素”,制造红血球和白血球,增强免疫能力。 缺乏:贫血、舌头红肿疼痛、精神萎靡、容易疲劳、健忘、失眠、儿童生长发育不良等,孕妇可表现为畸胎、习惯性流产等。 副作用: 摄入量: 食物:绿色蔬菜、新鲜水果(草莓)、肝脏、坚果豆类(瓜子/黄豆)。 维生素B12 功效:是身体正常生长和红血球生长所不可或缺的,有助于维持神经系统的健康。 缺乏:手脚容易麻木、记忆差、有胃病、 副作用: 摄入量: 食物:蛋类、牛奶、肉类、虾。 维生素D 功效:维生素D是形成骨骼和软骨的发动机,能使牙齿坚硬。对神经也很重要,并对炎症的抑制作用。 缺乏:骨质疏松。 副作用:研究人员估计,长期每天摄入0.025克维生素D对人体有害。可能造成的后果是:恶心、头痛、肾结石、肌肉萎缩、关节炎、动脉硬化、高血压。 摄入量:800单位。0.0005至0.01毫克。只有休息少的人,才需要额吃些含维生素D的食品或制剂。 食物: 维生素E 功效:维生素E能抵抗自由基的侵害,预防癌症的心肌梗死。此外,它还参与抗体的形成,是真正的“后代支持者”。它促进男性产生有活力的精子。 缺乏:黄褐斑、老年斑、不孕不育。 副作用:每天摄入200毫克的维生素E就会出现恶心,肌肉萎缩,头痛和乏力等症状。每天摄入的维生素E超过300毫克会导致高血压,伤口愈合延缓,甲状腺功能受到限制。 摄入量:成年人需要14毫克。 食物: 总结 维生素A:按照正常推荐剂量服用即可,即使略微过量也没关系,不会导致中毒。 维生素B:主要来自于肉类,由于是水溶性,因此不用太担心服用过量的问题。需要注意B族各类维生素要一起补充,相辅相成。因此可以服用复合维生素B片。 维生素C:主要来自蔬菜水果,尽可能多的多补充,同样是水溶性,不用担心过量的问题。 维生素D: 维生素E: 锌:不缺就不要补,会影响铁、铜的吸收。 1IU=0.3\(\mu {\rm g}\) 维生素摄入量推荐 维生素A800微克/天维生素A软胶囊,每片含5000单位。 每天1次,每次1粒。 维生素C200毫克/天维生素C片,每片包含100mg。 每天3次,每次1片。 维生素B1恒健复合维生素片,每片包含\(B_1\)3mg,\(B_2\) 1.5mg,\(B_3\) 10mg,\(B_5\) 1mg,\(B_6\) 0.2mg。 每天3次,每次1片。 维生素B2 维生素B6 维生素B9(叶酸)叶酸片,每片含\(B_9\)0.4mg。 每天1次,每次1片。 维生素B12 葡萄糖酸锌片南岛葡萄糖酸锌片,每片包含Zn10mg。 每天3次,每次1片。(不缺就不要补) 脂溶性维生素与水溶性维生素:区别与比较(askanydifference.com)↩︎

2024/4/13
articleCard.readMore

高斯分布常用公式

后面推导中反复用到Woodbury恒等式 \[(A+UCV)^{-1} = A^{-1} - A^{-1}U(C^{-1}+VA^{-1}U)^{-1}VA^{-1}\] 1. 边缘分布 假设 \(\boldsymbol{x}\sim {\mathcalN}(\boldsymbol{\mu}, \boldsymbol\Sigma_1),\boldsymbol{y}|\boldsymbol{x}\sim\mathcal{N}(\boldsymbol{A}\boldsymbol{x},\boldsymbol\Sigma_2)\),那么 \(\boldsymbol{y}\) 的边缘分布也是高斯分布\[\boldsymbol{y} \sim \mathcal{N}(\boldsymbol{\mu}_3, \boldsymbol\Sigma_3)\\\boldsymbol\Sigma_3 = (\boldsymbol\Sigma_2^{-1} -\boldsymbol\Sigma_2^{-1}\boldsymbol{A}(\boldsymbol\Sigma_1^{-1}+\boldsymbol{A}^{\rm T}\boldsymbol\Sigma_2^{-1} \boldsymbol{A})^{-1} \boldsymbol{A}^{\rm T}\boldsymbol\Sigma_2^{-1})^{-1} = \boldsymbol\Sigma_2 +\boldsymbol{A}\boldsymbol\Sigma_1 \boldsymbol{A}^{\rm T} \\\boldsymbol{\mu}_3 = \boldsymbol\Sigma_3 \boldsymbol\Sigma_2^{-\rm T}\boldsymbol{A} (\boldsymbol\Sigma_1^{-1}+\boldsymbol{A}^{\rm T}\boldsymbol\Sigma_2^{-1} \boldsymbol{A})^{-1} \boldsymbol\Sigma_1^{-1}\boldsymbol{\mu} = \boldsymbol{A\mu}\\\] 2. 后验分布 假设有先验 \(\boldsymbol{x}\sim {\mathcalN}(\boldsymbol{\mu}, \boldsymbol\Sigma_1)\),似然 \(\boldsymbol{y}|\boldsymbol{x}\sim\mathcal{N}(\boldsymbol{A}\boldsymbol{x},\boldsymbol\Sigma_2)\),那么关于 \(\boldsymbol{x}\) 的后验分布也是高斯分布\[p(\boldsymbol{x}| \hat{\boldsymbol{y}}) \proptop(\boldsymbol{x},\hat{\boldsymbol{y}}) = p(\boldsymbol{x})p(\hat{\boldsymbol{y}} | \boldsymbol{x}) \sim {\mathcalN}(\boldsymbol{\mu}_4, \boldsymbol\Sigma_4) \\\boldsymbol{\Sigma}_4 = (\boldsymbol\Sigma_1^{-1} + \boldsymbol{A}^{\rmT}\boldsymbol{\Sigma}_2^{-1}\boldsymbol{A})^{-1} \\\boldsymbol{\mu}_4 = \boldsymbol{\Sigma}_4(\boldsymbol{\Sigma}_1^{-1}\boldsymbol{\mu} + \boldsymbol{A}^{\rmT}\boldsymbol{\Sigma}_2^{-1}\hat{\boldsymbol{y}})\] 特殊情况下,假如 \(\boldsymbol{A}=\boldsymbol{I},\boldsymbol{\Sigma}_2=\sigma^2\boldsymbol{I},\boldsymbol{\mu}=\boldsymbol{0}\),此时将有\[\boldsymbol{\Sigma}_4 = \sigma^2 \boldsymbol{\Sigma}_1(\boldsymbol{\Sigma}_1 + \sigma^2\boldsymbol{I})^{-1} \\\boldsymbol\mu_4 =\boldsymbol{\Sigma}_1(\boldsymbol{\Sigma}_1+\sigma^2\boldsymbol{I})^{-1}\hat{\boldsymbol{y}}\] 3. 条件分布 假设 \(\boldsymbol{x}_1,\boldsymbol{x}_2\)服从联合高斯分布 \[\begin{bmatrix} \boldsymbol{x}_1 \\ \boldsymbol{x}_2 \end{bmatrix} \sim{\mathcal N} \left( \begin{bmatrix} \boldsymbol{\mu}_1 \\\boldsymbol{\mu}_2 \end{bmatrix}, \begin{bmatrix}\boldsymbol{\Sigma}_{11} & \boldsymbol{\Sigma}_{12} \\\boldsymbol{\Sigma}_{21} & \boldsymbol{\Sigma}_{22}\end{bmatrix} \right)\] 那么 \(\boldsymbol{x}_2 |\boldsymbol{x}_1\) 也服从高斯分布 \[\boldsymbol{x}_2 | \boldsymbol{x}_1 \sim {\mathcalN}(\boldsymbol{\mu}_5, \boldsymbol{\Sigma}_5) \\\boldsymbol{\Sigma}_5 = \boldsymbol{\Sigma}_{22}- \boldsymbol{\Sigma}_{21} \boldsymbol{\Sigma}_{11}^{-1}\boldsymbol{\Sigma}_{12} \\\boldsymbol{\mu}_5 = \boldsymbol{\mu}_2 + \boldsymbol{\Sigma}_{21}\boldsymbol{\Sigma}_{11}^{-1} (\hat{\boldsymbol{x}}_1 -\boldsymbol{\mu}_1)\]

2023/12/18
articleCard.readMore

爱得太迟

当时只道是寻常 我们总是爱得太迟,等到那人真的失去,才追悔莫及。最可怕是,爱得太迟,只差一秒,心声都已变历史。 我过去 那死党 早晚共对 各也扎职以后 没法 畅聚 而终於 相约到 但无言共对 疏淡如水 日夜做 见爸爸 刚好想呻 却霎眼 看出他 多了皱纹 而他的苍老感 是从来未觉 太内疚担心 · 最心痛是 爱得太迟 有些心意 不可等某个日子 盲目地发奋 忙忙忙其实自私 梦中也习惯 有压力要我得志 最可怕是 爱需要及时 只差一秒 心声都已变历史 忙极亦放肆 见我爱见的相知 要抱要吻要怎么也好 偏要推说等下一次 · 我也觉 我体质 彷似下降 看了症得到是 别要太忙 而影碟 都扫光 但从来未看 因有事赶 日夜做 储的钱 都应该够 到圣诞 正好讲 跟我白头 谁知她开了口 未能挨下去 已恨我很久 · 错失太易 爱得太迟 我怎想到 她忍不到那日子 盲目地发奋 忙忙忙从来未知 幸福会掠过 再也没法说钟意 爱一个字 也需要及时 只差一秒 心声都已变历史 为何未放肆 见我爱见的相知 要抱要吻要怎么也好 不要相信一切有下次 · 相拥我所爱又花几多秒 这几秒 能够做到又有多少 未算少 足够遗憾忘掉 多少抱憾 多少过路人 太懂估计 却不懂爱惜自身 人人在发奋 想起他朝都兴奋 但今晚未过 你要过也很吸引 纵不信运 你不过是人 理想很远 爱於咫尺却在等 来日别操心 趁你有能力开心 世界有太多东西发生 不要等到天上俯瞰

2023/2/10
articleCard.readMore

《娱乐至死》读后感

人们表达、传递信息的工具/广义的语言包括:语言文字、图片/绘画、声音、视频,相应的信息传播的媒介包括:口口相传、印刷术、摄影技术、电视、互联网。 不同形式的语言的表达能力是不同的。例如语言文字可以表达更为抽象的概念,并且表意更为准确清晰;而图片则大多数时候只能表示具象的事物,有时候也可以表达抽象的想法,但通常是不清晰不明确的,是一种朦胧的感受,对读者来说会有“一千个哈姆雷特”;声音则更为朦胧一些,例如音乐带给我们的大体是某一种情绪,至于它如何引导我们产生怎样的反应与思考,更是因人而异;视频在将图像和声音结合在一起之后,除了拥有他们二者的特点,通过将多个画面、画面与声音的链接,能够产生相比之下更为准确同时也更具有冲击力的表达。 在前面提到的几种“语言”当中,文字与其他几种的区别格外的大。根本上来说,后面三种均来自于大自然,来自于外部世界,来自于人的直观感受;而语言文字是人类的独立创造,是人类建立的符号库,是对人类活动高度总结与概括,并进行一定程度的凝练与抽象,其具备的抽象表达能力正是人类思考后结出的精妙果实,并且在相互交流融合过程中,所有人达成高度共识,语言文字得以成为人类群体中极度凝练高效的信息表达与传递工具。再看音画视频这几种语言,他们也具备一定的情感信息表达功能,随着文明的进步,人类发掘了艺术创作能力,随着技术的进步,人类具备了记录、以及自己凭空创造图像、声音、视频的能力,我们总结出了一定的规律和原则,例如冷暖色调表达不同的感情,舒缓与快速的音乐节奏渲染不同的氛围,然而我们始终没有统一的生成与解读规则,我们没有规定红色一定代表热情,没有规定什么样的节奏一定代表着紧张,我们没有这么做,也没有必要,否则那就是另一种形式的“语言文字”,这几种语言生来自由,我们已经习惯了见仁见智,甚至正是因为这样的特点他们才不可或缺。在人与人的信息交流方面,可以说音画视频只是作为语言文字的补充手段,也可以说这都是注定的,或者本就如此,从诞生起就如此。 说完了几种语言,再来聊聊信息传播媒介。《娱乐至死》这本书主要是对比了印刷术时代走向娱乐时代,美国文化所发生的变化。作者指出媒介本身或许可以传播各种各样的语言,各种类型的信息,但是其认为技术绝对不是中立的,不可否认一种媒介技术本身对某一种形式的语言和信息具有偏好,这就导致了不同的媒介产生的是完全不同的文化特点。作者在上下两部分分别指出了两者的特点,对于印刷术: 印刷机统治下的人们更热衷于思辨,公众对话也像论文论述那样条分缕析、逻辑严密,严肃而理性,举的例子便是林肯与道格拉斯的辩论,他们一场辩论能够持续7个小时,每个人发言句法复杂,措辞精准,将辩词直接打印出来作为作为印刷本也丝毫不违和,而台下的观众也有足够的耐心和兴趣持续听完这样的辩论。 对于电视: 电视上的一切都是为了娱乐,电视需要的是表演艺术,只有能够吸引观众的眼球内容才能在电视产业中存活下来; 电视使得一切变得琐碎,遥控器上的一个小小按钮,就能让我们瞬间从火灾新闻报道切换到脱口秀表演,一切变得支离破碎,包括人投入的情绪;同时语境消失了,我们的判断失去了上下文,逻辑不再那么重要,或者说难以根据逻辑判断; 同第一点相同,电视本身的特点,使得很多话语形式在电视传播过程中,其内涵被改变了,本书举了宗教、政治、教育的例子;这些领域原本都是非常严肃庄重的,在电视文化里,他们也都逐渐以娱乐性作为卖点,不再进行深度思考,宗教可以不再虔诚,政客的政治主张与执政能力不再成为是否获选的主要因素,教学从教室走向了电视。 有意思的是,作者非常详细地反驳了“教学和娱乐不可分”的观点,首先学习需要兴趣,好的学习过程会让人感到快乐,这不可否认,但是当学习变成一种娱乐活动(而这正是电视所做的事情),其未必是有效、持久的。仔细想想,曾经有人告诉我们互联网是知识的海洋,如今我们浏览者网页,刷着短视频,看着各种各样图文并茂的科普,看似无时无刻不在快乐的学习,但是当按下电源键,刚刚看过的东西还记得多少?用娱乐的方式进行教学只能是一种美好的畅想,因为二者从本质上是完全相悖的,作者指出三条戒律:1)娱乐(电视)总是不假设你了解什么前提条件,即看即懂;2)不能令你困惑;3)避免枯燥无味的阐述,总是图文并茂,并配以优美的音乐。而教育,恰恰与这三点完全相违背,学习需要连续的长时间的深度思考,获得新知识与思辨能力是痛苦的过程。 实际上,说与写是完全不同的两件事情,相信每个人都有这种体会,书写过程中我们会反复斟酌行文逻辑、语言措辞,努力使读者清晰准确的理解这段文字所表述的内容,而说则不一样,我们通常没有足够时间梳理逻辑,话语往往跟随潜意识喷薄而出。表达的方式会影响表达的内容,从口语文化,印刷文化,到电视文化,再到互联网时代,每一次技术变革都会带来巨大的文化变革。

2022/9/3
articleCard.readMore

科目三

记录下科目三的主要操作流程与关键点。 0. 细节 从左至右,离合,刹车,油门; 前方右侧车道有停止车辆时,需要按两下喇叭,防止他突然开车门; 直行的时候,驾驶座正前方大约在车道1/3处; 停车时,离合和刹车要一起踩,若只踩刹车不踩离合容易发动机熄火; 1挡不能连续行驶超过50m,2挡不能连续行驶超过150m,两者加起来不能超过200m; 换挡不要求快,慢一点,不要换错; 1. 考试流程 上车调整座椅,不系安全带,检查灯光回正,观察后视镜、雨刮器的点; 听到考试指令开始,下车逆时针绕车一周,点一下车身的黑色按钮; 上车坐好,系安全带; 灯光考试; 起步,道路考试; 2. 灯光考试 近光灯: 夜间在照明良好的条件下行驶。 夜间在同方向近距离跟车行驶。 夜间直行通过路口。 夜间通过有交通信号灯控制的路口。 夜间与机动车、非机动车会车。 远近光灯交替使用两下: 夜间超越前方车辆 夜间通过急弯、坡路、拱桥,人行横道。 夜间通过没有交通信号灯控制的路口。 大灯关一半开双闪: 夜间路边临时停车(大灯关一半 示廓灯)双闪 危险警报灯 夜间在道路上发生交通事故,妨碍交通又难以移动 。 远光灯: ❗夜间在没有路灯、照明不良条件下行驶。 3. 起步 打转向,按喇叭,挂1挡,松手刹; 松手刹后的10s内要完成起步; 观察左后视镜,看后方有没有来车,有的话先慢慢直行,没有的话左转向,慢松离合起步,不要闯动; 方向盘角度不要太大,到车道一半的时候就可以回正方向盘; 转向灯恢复正常; 4. 换挡 踩油门一口气加速到目标速度,然后快速松开; 离合踩到底; 换挡; 松离合,可以稍快一点,不用像科目二那么慢;1、2挡还是要稍微慢一些,3、4挡可以直接松开; 5. 加减挡 需要逐级加挡到4挡,并保持大于40km/h的速度5s以上; 然后离合和刹车一起踩到底,当车速降到35时稍微松一点刹车,当车速降到28左右时松开刹车,仍然保持踩着离合,换到3挡; 考试路线上会出现斑马线,因此要在到达斑马线前将车速降到30km/h以下,整体时间还是很紧的,稍微慢一点很可能就不能及时完成。 6. 变更车道 响起指令以后就打转向灯; 观察后方有没有车辆,扭头幅度大一些; 等待3秒,没有车辆就可以换车道; 结束后记得转向灯回正; 变更车道过程中注意扶好转向灯,不要让他中途掉了。 7. 超车 先向左变更车道,再向右变更车道; 需要注意的是要在一定距离范围内完成超车,因此要卡好时间,不要拖延。如果后方有来车,可以挂2挡把速度降下来,防止不能在规定时间和距离内完成超车。 8. 路口直行 距离路口30m内需要减速慢行,如果可以直接通过红绿灯,则距离斑马线20m左右轻踩一下刹车,如果需要等待红灯,则停车挂空挡,然后再起步; 起步先挂一档,然后踩一下油门提上速度,换二挡; 有时候红绿灯在坡道上,再次起步可能需要半坡起步。 9. 路口转弯 首先记得打转向灯; 距离路口30m左右减速到2挡; 距离路口20m左右踩一下刹车; 转弯前扭头看一下侧后方有没有车或者行人; 后面操作跟直行过马路基本相同,但是转弯时必须要在2挡; 考试路线中右转弯基本不需要等红路灯,可以直接转。但是如果刚好遇到左边道路车辆直行过路口,可以等他们过完再右转。 10. 调头 首先记得打左转向灯; 首先换到2挡; 掉头前需要踩一下刹车; 观察对方有无来车,能调头就直接调,不能的话可以先停车等待,然后再1挡起步调头; 看到肩膀超过调头的牌子以后打死方向盘就能正常调过去; 11. 会车 轻踩一下刹车; 向右打一下方向盘; 回正; 由于需要在道路中向右打一下方向盘,为防止压实线,可以提前靠左一点行驶。 12. 直线行驶 就是要保持100m直线行驶,横向偏离幅度不超过30cm,目视前方微调方向盘; 13. 靠边停车 先打右转向灯; 观察后方有没有来车,扭头幅度大一些; 调整到2挡,踩下离合和刹车慢慢走; 进入最右侧车道,先将车后回正,再慢慢调方向盘使车身不断靠近路边实线;切忌向右摆动幅度过大,一方面不容调整车身回正,另一方面容易压实线; 观察雨刮器,对齐路边沿白线右侧边缘,使车距离车道线控制在30cm以内;或者观察右侧后视镜,后边车门把手距离白线左侧边缘两指左右; 停车,挂空档,拉手刹,关闭发动机,松开安全带,观察后方有无来车,3s后打开车门,打开车门后10s内人下车并关闭车门; 14. 整体理解 科目三实际上就是要在实际道路上跑一圈,在路途中完成前面提到的各种操作,不同操作之间基本是相互独立,所以到每个地方只需要考虑对应的操作就可以了,不要觉得东西又多又杂,其实并不杂乱。 贯穿全程的一个关键是速度和挡位的选择,因为1挡和2挡连续行驶距离有最大限制,所以基本上都要保持3挡大约22km/h的速度行驶,采用其他挡位的地方只有:起步(包括中途停车后起步)、路口转弯、调头、靠边停车,以及加到4挡行驶。因此速度和挡位的选择也是很清晰的,主要是注意换挡的时候速度匹配、不要换错挡。 另外最容易错的地方还有:1)忘记打转向灯;2)斑马线/路口前忘记踩刹车;3)换到1、2挡松离合过快造成闯动。 靠边停车要找好点,速度要慢。 因为有的操作并不会有提示(例如转弯前要提前变更车道),因此提前熟悉考试路线很有必要。

2022/8/4
articleCard.readMore

无线通信标准杂谈

4G LTE 采用OFDM调制,支持的带宽有(大带宽)10MHz、15MHz、20MHz,(窄带)1.4MHz、3MHz、5MHz。正常情况下子载波间隔15KHz,符号周期66.7us,加上循环前缀长度为71.35us。LTE在时域上的最小单位为时隙,以0.5ms为周期,在15KHz下,0.5ms*15KHz=7.5个正弦波,因此一个时隙内可以容纳7个symbol,多余出来的时间分配给各个符号的循环前缀[3]。 各个子载波可以根据信道状况采用不同的调制方式,如BPSK,QPSK,8PSK,16QAM,64QAM等;当信道条件好时采用高阶调制方式,而当信道条件差时采用抗干扰能力强的低阶调制方式[2]。 5G NR 在5GNR中,定义了两种频段范围,FR1和FR2,FR1表示低频频段,FR2表示毫米波高频频段。具体FR1和FR2表示的频段范围如下表所示: Frequency rangeFrequency range FR1 (Sub-6GHz)410MHz - 7125MHz FR2 (mmWave)24250MHz - 52600MHz 其中Sub6G频段以3.5GHz为主(3.2GHz-4.2GHz),最大带宽为100MHz。mmWave频段以28/39/60/73GHz为主,带宽50MHz-400MHz[6]。 5G仍旧采用OFDM调制,但是不同于4GLTE在于设置了多个不同的子载波间隔,也即\(\Delta f=2^\mu \cdot 15\)[kHz],其中\(\mu=0,1,2,3,4\),也就是子载波间隔\(\Delta f\)取值为15/30/60/120/240kHz。 在5G和4G中,帧的长度都是10ms,子帧长度都是1ms。在LTE中,一个子帧包含了14个符号。5G中,当调制符号时间变短时,一个子帧长度1ms内也就有了更多的符号[4]。与4G不同,5G中的时隙长度不是固定的,每个时隙内都有14个符号,但是随着子载波间隔的不同,对应的时隙不再是固定的0.5ms[5]。 这些参数看起来很多很复杂,实际上只需要关注两件事。第一个是符号周期,这是由子载波间隔决定的;第二个是帧长度,这个是由5GNR标准规定的固定长度10ms。前者是最小单位,后者是最大单位。至于中间的时隙长度、符号个数等参数,就是在一个帧内对这么多个符号进行组合,至于怎么组合全看协议规定。 在OFDM接收端需要进行时域采样并FFT,这里涉及到两个参数:采样频率和FFT点数。采样频率\(f_s\)由带宽\(B\)决定,FFT点数\(N=2B\ast T_{\text{symbol}}=2B/\Deltaf\),因此FFT点数大约是子载波个数的2倍,和子载波间隔大小无直接关系。尽管如此,子载波间隔越大,符号周期越短,这就要求FFT在更短的时间内完成,并且同等子载波个数情况下信号带宽越大,采样频率越高,对处理器的速度要求越高。 4G以子帧为单位进行调度,而5G则以时隙为单位进行调度。 资源块(RB, Resource block) 还没太搞懂多用户的时频资源是怎么分配的,网上大多语焉不详。 5G 毫米波通信 看到一篇博客(2019)[1],讲的是5G mmWave的物理层信号PHYs(physicallayers)设计。主要观点是现有的物理层信号基本都是基于OFDM,但是当载频高于某个点之后,OFDM就不适合了,需要研究新的物理层信号。3GPP组织目前推出了Release15和16,频点都低于52.6GHz,在此频段下仍旧采用OFDM波形,但是超过某个频点(也许52.6GHz并不是确切的阈值点)之后,由于实际的物理器件难以实现OFDM信号所需的峰均比、增益平坦度和效率等,在更高频点上不得不设计新的物理信号波形。Nokia、NI等公司在73GHz频点上研究了2GHz带宽的单载波信号波形,在2信道MIMO系统中演示了14.6Gbps的吞吐量。另外802.11ad就是一个单载波调制的毫米波通信协议。 Reference https://www.edn.com/mmwave-and-ofdm-is-phy-research-dead/↩︎ https://blog.csdn.net/jyqxerxes/article/details/78981109↩︎ https://blog.csdn.net/Angel_YJ/article/details/89001077↩︎ https://blog.csdn.net/u010202588/article/details/94360185↩︎ https://blog.csdn.net/weixin_39702335/article/details/110309294↩︎ 5G- Wikipedia↩︎

2022/6/14
articleCard.readMore

信号调制与解调

写这篇文章的起因是我一直对数字调制和模拟调制这两个概念比较模糊,对于相应的通信系统结构也觉得比较混乱,所以在网上查了很多资料来理清楚这件事情。本文引用了诸多网络上的博客、文章中的文字和图片,引用之处都标注了参考出处,若有侵权请告知我,我会删除侵权部分。 信号的调制简单来说,就是用基带信号去控制(调制)单频载波信号的某个或某几个参数,从而使得调制后的信号中嵌入了希望传递的信息[1]。这个载波往往是一个高频信号,便于传输。解调则是调制的逆过程。之所以要这么做是因为:1)高频信号更容易收发传输,天线尺寸需要是波长的1/4,使用高频信号可以减小天线尺寸;2)通过调制不同频率的载波信号,可以将基带信号搬移到不同频段的载波上,便于同时传输多路不同的基带信号[2]。 1. 移动通信发展历史 我们主要关注无线通信。移动通信最开始的目的是打电话,上世纪80年代出现了第一代(1G)移动通信网络,传输的是人的语音信号,1G使用模拟调制,多址技术为FDMA。当时使用的都是大哥大,采用模拟电路,因此手机都比较大,使用的频段在800MHz,所以天线长度大概要10cm,所以也能看到大哥大外面露出来的很长的天线,这个阶段摩托罗拉风光无限。传输速率只有2.4Kbps,要知道人的语音要想保证比较好的质量需要的速率是64Kbps,因此1G的语音通话质量也不太行[22]。 上世纪90年代,形成2G移动通信,大致可以分为两类,一类是基于TDMA的GSM标准,主要使用地区是我国和欧洲;另一类是基于CDMA的IS-95标准(也被称为cdmaOne),主要使用地区是美国。欧洲(芬兰)提出的通信标准GSM中采用了GMSK调制,而IS-95则采用QPSK和OQPSK调制,这三种都是数字调制,因此2G也将移动通信带入了数字时代。由于处理和传输的是数字信号,数字电路取代了模拟电路,能够集成在一个小小的芯片上,因此手机体积大大的减小了,诺基亚在这个阶段大杀四方。并且除了语音信号,其他的多媒体数据例如文字、图片也能传输了。GSM,工作在900MHz和1800MHz频点附近;CDMA工作在800MHz频点附近。2G移动通信,带宽有25MHz,峰值数据速率能达到14.4Kbps[20][21]。 在2G和3G中间经过了2.5G,是二者的衔接,2.5G相比于2G提供了更高的速率和更多的功能。蓝牙等技术都是2.5G技术[23]。 到3G时代,CDMA技术大行其道,作为CDMA技术的提出者,高通握着大量专利,简直是躺着赚钱。为了绕开高通的专利,欧洲日本联合起来成立了3GPP组织,提出了W-CDMA;中国搞了一个TD-SCDMA;高通与韩国组成3GPP2组织,推出了CDMA2000[24]。前两个可以看作是从GSM演化而来;CDMA2000则是从IS-95继承而来。3G的工作频段在2100MHz附近,带宽有25MHz,上行链路采用BPSK调制,下行链路采用QPSK,数据速率能达到3.1Mbps[19][20]。苹果2007年发布的iPhone也带动了3G的推广和发展。 在进入4G时代之前,插入一段关于WiFi和WiMax的历史。1999年,IEEE分别推出了802.11b与802.11a两种WiFi标准,分别使用2.4GHz和5GHz频段,彼此标准不相容。2003 年,IEEE引入正交频分复用技术(OFDM),推出802.11b的改进版802.11g使传输速度从原先的11Mbps提升至54Mbps。现在我们使用的WiFi主要为802.11n,与802.11a、802.11b、802.11g皆兼容,并采用MIMO技术,使传输速度及距离都有所提升,速度甚至可达600Mbps[24]。 随着版图不断扩大,IT业巨头们开始觊觎起蜂窝移动通信市场大饼——4G。OFDM说起来也不是新技术,早在1960年代贝尔实验室发明OFDM后,技术框架约在1980年代便已建立完成。然而当时能支持OFDM的硬件不成熟,CDMA又由高通领军一时红火,便淘汰在3G标准之外。简单来说就是CDMA太红,如果Intel和IT大厂没有在WiFi上将OFDM技术发扬光大,电信业没有一家注意到早期不被重视的OFDM。由于WiMax的关系,OFDM才又重新进入电信业和学术界的视野中[24]。 2008年时,3GPP提出了长期演进技术 (Long Term Evolution, LTE)作为3.9G技术标准。又在2011年提出了长期演进技术升级版 (LTE-Advanced)作为4G技术标准,准备把W-CDMA汰换掉,转而采用OFDM。全球覆盖率最高的基站正是W-CDMA,因此,各大运营商无不纷纷决定采用LTE-Advanced当作第四代通信技术标准。如同高通败在W-CDMA基站的广覆盖上,LTE可兼容WCDMA,且利用现有基站配套设备,而WiMax基站却要从头建起,Intel也在2010年宣布放弃WiMax,加入LTE阵营[24]。 到4G时代,高通摆烂了,CDMA2000也没有后续向4G的演化,所以4G主要有两支,一个是从W-CDMA演化来的LTE-FDD/LTE-FDD-Advanced,另一个是从TD-SCDMA演化来的TD-LTE/TD-LTE-Advanced。4G采用的OFDM技术可以看成是多址技术,也可以看成是调制技术,实际上就是用多个相互正交的子载波同时传递多路数据,大大提高了频谱效率。FDD-LTE的工作频点在1800MHz附近,TD-LTE的工作频点在1890MHz、2350MHz、2600MHz附近,带宽有100MHz,数据速率可达100Mbps[20][26]。 Mobile communicationstandards 2. 调制的分类 调制信号的大致分类如下图所示[3]: Modulation_categorization 按照载波信号(也被称为被调信号)可以分为三类:正弦波调制、脉冲调制与强度调制。调制的载波分别是正弦波,脉冲和光波。 无线通信中一般使用的载波信号都是高频正弦波,而调制过程中改变的就是正弦波的3个参数:幅度、相位、频率[1]。也就是3种基本的调制方式:调幅(AM)、调相(PM)、调频(FM)。除此之外还有一些变异的调制方法,比如正交幅度调制(QAM),单边带调幅(SM)、残留边带调幅(SSB)等[3]。 \[{\color{red}A_c} \cos(2\pi {\color{orange}f_c} t +{\color{blue}\varphi_c})\]按照基带信号(也被称为调制信号)可以分为两类:模拟调制与数字调制。顾名思义,模拟调制中基带信号是模拟信号,数字调制中基带信号是数字信号。 模拟调制的中所控制的幅度、频率、相位参数是连续变化的,在解调的过程中也需要估计这个连续变化的波形;而数字调制中这些被改变的参数只是一些离散的值。模拟调制与数字调制各自的优缺点为[2]: 优点缺点 数字调制抗干扰能力强; 易于加密,保密性强; 便于计算机对数字信息进行处理; 便于集成化。需要较宽的频带; 进行数/摸转换时会带来量化误差; 要求的技术和设备复杂。 模拟调制直观且容易实现;保密性差,抗干扰能力差。 调制的另一种分类方法是角度调制和幅度调制,其中角度调制包括调频和调相,幅度调制包括调幅AM、双边带调制DSB、单边带调制SSB、残留边带调制VSB和正交幅度调制QAM[3]。 根据已调信号的频谱结构是否保留了原来消息信号的频谱模样,可以分为线性调制与非线性调制[5]。幅度调制一般都是线性调制,角度调制都是非线性调制。 3. 解调的分类 相干解调与非相干解调。相干解调(也被称为同步检波)适用于所有线性调制信号的解调[4]。 4. 模拟调制与解调 我们都假设基带信号是 \(m(t)\),载波频率是 \(f_c\),调制后的信号是 \(s(t)\)。本部分主要参考了博客[5]。 4.1 常规调幅AM 先将基带信号加上一个直流分量,然后乘以载波得到已调信号 \[s(t) = (A_0 + m(t))\cos(2\pi f_c t)\] 对应的波形和频谱如下图所示: AM 解调阶段只需要通过一个低通滤波器即可检出信号包络: AM-demodulation 4.2 抑制载波的双边带调制DSB-SC 上面的调幅方法由于直流的存在,会导致输出的已调信号中含有载波分量\(\cos(2\pi f_ct)\),抑制载波的双边带调制方法就是去除这个直流分量,也简称为双边带调制。\[s(t) = m(t) \cos(2\pi f_c t)\] 由于DSB已调信号的包络不再与基带信号\(m(t)\)成正比,因此不能使用包络检测器进行解调。通常采用的是相干解调。也就是在接收端生成一个与发送端同频同相的相关载波信号,与接收信号相乘,即可将接收信号频谱再搬到基带,通过低通滤波器后即可解调出基带信号。 调制解调 系统框图 频谱 4.3 单边带调制SSB 前面的双边带调制基带信号是对称的,搬移到载波之后实际上有一半的频谱资源是浪费掉的,没有携带有效的信息,因此单边带调制就是在DSB的基础上,要去掉一半没用的频谱,节省频谱资源。 SSB 上面通过低通滤波法获得单边带已调信号对滤波器有较高的要求,需要其在载频处具有陡峭的截止特性。这难以实现,因此实际中往往是通过项移法产生SSB信号,如下图所示,推导过程可以参考博客[5]。 SSB-modulation 4.4 残留边带调制VSB 单边带调制需要陡峭的低通滤波器,为了解决这个问题,残留边带调制的想法虽然理想的陡峭滤波器不可实现,但是圆滑滚降的滤波器还是可以的,那就用这样的滤波器。不过这样不能将其中一半的频谱去除干净,那么是否还能够解调出基带信号呢?也是可以的,不过这个滚降滤波器的频谱需要满足一定性质,也就是在载频处具有对称性[5]。 VSBVSB-modulation-1VSB-modulation-2 4.5 调相PM与调频FM 可以参考博客[6]。调频信号的包络恒定,而噪声往往是作用在信号幅度上,因此FM信号抗噪声能力强;但是FM信号需要占用较大的信号带宽,频谱利用率低。 5. 数字调制 在开始本节之前,需要明晰的一点是,相比于模拟调制,数字调制当中“调制”的概念已经被扩展了。具体而言,在模拟调制当中,基带模拟信号与高频载波通过前面介绍的几种调制方式混合之后,得到的就直接是待发送的射频信号。而在数字调制中通常包含三个阶段: 第一个阶段将二进制比特流映射为某种效率更高的数字信号(通常被称为码流),这个过程被称为基带调制; 第二个阶段将码流通过脉冲成型滤波器,将会突变的数字信号变成连续光滑的模拟信号,得到的就是基带信号; 第三个阶段将基带信号搬移到高频载波上,这个过程被称为载波调制/带通调制/射频调制。 digital-communication-system-diagram 在本节的几个子小节中,5.3IQ调制属于第三阶段载波调制,5.7脉冲成型滤波器属于第二阶段,其余的部分则属于第一阶段基带调制。为了讲述的方便以及前后逻辑的顺畅,这里将他们穿插起来,但是希望读者在脑海里能够明确他们在系统中的位置以及各自的作用。 实际上,笔者在写本文之前对模拟和数字调制感到困惑、不理解也是源于此。 5.1 二进制数字调制 最简单的数字调制系统中,基带信号是0-1二进制数字波形,通过控制开关实现对载波的调制,因此这里面的调幅AM、调相PM、调频FM也分别被称为幅度键控ASK/通-断键控OOK、相位键控PSK、频移键控FSK。他们各自图示如下[8]: 2ASK2PSK2FSK 5.2 多进制数字调制 二进制数字调制中,每一个符号只能表示0-1两个数值,为了提高数据传输效率,可以在一个符号内传输更多的比特,从而提高频带利用率。简单来说就是把原来的0-1比特流进行分组,例如两个bit为一组映射到一个符号(symbol、码元)上,那么一个符号就有00,01, 11, 10这4种取值,再去调制: 幅度:0,1,2,3这4个振幅; 相位:0,\(\pi/2\),\(\pi\),\(3\pi/2\)这4个相位; 频率:4个不同的载波频率。 想要传输的信号从bit流映射为了symbol流,symbol同样是只有有限个离散的取值,这个时候引入星座图会更直观更方便。什么是星座图呢?首先我们传输的正弦信号可以表示为一个复信号的实部,也就是\[{A_c} \cos(2\pi {f_c} t + {\varphi_c}) = \operatorname{Re}\{{\color{blue}A_c \exp(\varphi_c)}\exp (2\pi {f_c} t)\}\] 可以看到无论是调制信号幅度还是相位,都是在单频载波\(\exp(2\pi f_c t)\)上乘以了一个复幅度\(A_c\exp(\varphi_c)\)。因此如果是幅度或者相位调制,那么我们只需要看这个复幅度就得到了想要传输的信息(symbol流)。一个复数可以映射为一个x-y二维平面上的点,那么如果我们把所有的symbol取值画出来,那么就是多个离散的点,就像是星座一样,故名星座图。BPSK(也就是2PSK)、QPSK(也就是4PSK)和8PSK示意图如下[9][16]: constellation-MPSKQPSK-BPSK 其实QPSK还有另外一种方式,就是星座图旋转45°[7]: constellation-QPSK2 除了MPSK,幅度也是可以控制的,例如下面这个16APSK[10]: constellation-16APSK 不过这里有一个问题就是:我们实际系统中只能产生实信号,而这里转换到复数域虽然看起来很简洁,但是实际系统如何实现呢?答案就是用两路信号,分别表示复信号的实部和虚部,也就是I路(In-phase)和Q路(Quadrature)。这就引出了下面的正交幅度调制QAM。 5.3 IQ调制 说白了IQ调制就是把复的基带信号搬移到高频载波上,仅此而已。前面我们已经提到了symbol可以用复数表示,那么我们要传输的码流就是一个复基带信号,记为\(s_0(t) = a(t) + j b(t)\),其中 \(a(t)\) 和 \(b(t)\)分别是实部和虚部,那么调制信号可以表示为 \[s(t) = \operatorname{Re}\{s_0(t) \exp(2\pi f_c t)\} = a(t)\cos(2\pi f_ct) - b(t) \sin(2\pi f_c t)\] 在信号发射阶段,I路的基带信号就是\(a(t)\),将其乘以\(\cos(2\pi f_ct)\),Q路的基带信号是\(b(t)\),将其乘以\(\sin(2\pi f_ct)\),再将二者求和即可得到要发送的已调信号。可以参考我之前的一篇博客[11],系统框图如下[12][13]: IQ调制IQ解调 IQ调制在数学上是如此的漂亮,实际系统中又是如此的方便好用,因此在现代无线通信系统中几乎是必备的。后面介绍的各种基带调制方式也基本都会配合IQ调制来使用。 5.4 正交幅度调制QAM 有了IQ调制,我们只需要分别控制I、Q两路基带信号的幅度,就能得到星座图上任意一个点,所以各种MPSK、MASK以及MAPSK等都能通过这种方式获得,这种调制方式也被称为正交幅度调制QAM。 其实也不难发现QPSK实际上就是两路(载波)相互正交的BPSK,实际上也是4QAM。 5.5 偏移四相位键控Offset-QPSK 在一般的QPSK基础上有一些变种,比如OQPSK,与QPSK的区别就在于I、Q两路的码流在时间上错开了半个码元周期,这样可以避免出现两个支路同时出现极性翻转的情况,好处是:1)避免180°的相位跳变,这种情况下最多只有90°相位跳变;2)避免I、Q两路信号同时过零点,降低信号峰均比PAR[7]。 QPSK-drawbackOQPSK 除此之外,还有其他的变种,例如\(\pi/4\)-QPSK等,不再赘述。 5.6 最小频移键控MSK 前面介绍的不管是二进制还是多进制,码流信号都认为是矩形波,实际上这种矩形波性能并不好。因为矩形波从时域来看会导致相位跳变,波形不光滑、不连续,从频域来看就是矩形波旁瓣幅度较大,会出现频谱扩展,对相邻信道产生干扰。为了解决这个问题,那就把矩形波换掉!换成边缘光滑的波形! 最小频移键控MSK(Minimum-shiftkeying)可以看成是一种特殊的OQPSK,把原来的矩形方波换成半正弦波。如果从另一个角度来看,也可以认为是频率分离为比特率二分之一的连续相位频移键控CP-BFSK(一般通过开关实现的FSK信号在边沿处也会出现波形不连续,而MSK中波形/相位总是连续的)。如下图所示[15]。 MSK-class 那么他的数学原理是什么样的呢?首先从时域来看,实际上就是将OQPSK中的矩形方波换成半正弦波,这样相邻码元的相位变化就为0。如下图所示[16][17],一个脉冲的宽度为\(2T\),正弦波的周期为\(4T\)。 MSK对比O-QPSKMSK的波形是连续的 用三角函数表示出来就是[14] \[s(t) = a_I(t)\cos(\frac{\pi t}{2T}) \cos(2\pi f_c t) -a_Q(t)\sin(\frac{\pi t}{2T})\sin(2\pi f_c t)\] 其中\(a_I(t),a_Q(t)\)还是矩形方波,\(\cos(\pi t/2T),\sin(\pi t/ 2T)\)就是周期为\(4T\)的正弦波,一个码元周期内半个正弦波。对这个式子应用三角恒等式,就能得到\[\begin{aligned}s(t) &= \cos\left( 2\pi f_c t + b_k(t)\frac{\pi t}{2T} + \phi_k\right) \\b_k(t) &= \begin{cases} 1, & a_I(t)=a_Q(t) \\ -1, &\text{others} \end{cases} \\\phi_k &= \begin{cases} 0, & a_I(t)=1 \\ \pi, &\text{others} \end{cases}\end{aligned}\]从频域来看,MSK是频率分离为比特率二分之一的连续相位频移键控CPFSK,也就是在一般的BFSK基础上,MSK的两个载波频率间隔恰好是码元波特率的二分之一。假设FSK的两个载波频率为\(f_1,f_2\),码元周期为\(2T\),由于一个码元可以传输2个比特,因此波特率为\(1/T\),那么就有\(|f_1-f_2| = 1/2T\)。 从频谱来看,MSK的旁瓣幅度相比于BPSK和QPSK也更低,因此, MSK情况下的信道间干扰较低[14]。 MSK-spectrum 发射接收机如下图所示[16],解调也需要相干载波。 发射机接收机 5.7 脉冲成型滤波器 MSK当中将矩形波换成了半正弦波,在实现的时候直接用一个正弦波发生器加上开关就可以了,但如果我们想换成其他形状的光滑波形呢?就没有这么简单了,这里就引出了数字传输中的脉冲成型滤波器。 数字调制之后得到的码流是矩形波,从时域来看存在跳变,从频域来看频谱宽度无穷大,这在实际系统当中是不可能实现的,原因是我们无法生成跳变的信号,并且信道和收发机的通带也不是无穷带宽的。因此我们需要将码流脉冲转化为模拟信号,这个模拟信号从时域来看是连续光滑的,从频域来看是带限的,如下图所示[29]。思路很简单,将码流脉冲通过一个脉冲成型滤波器,输出信号就是滤波器冲激响应的叠加。不过关键的问题在于这个脉冲成型滤波器要怎么设计? rectangular-sa 设计的关键在于不能有符号间串扰(Inter Symbol Interference,ISI)。什么意思呢?频域带限会导致时域扩展,要想当前码元对相邻的码元没有干扰,如下图所示[30],需要其时域波形在相邻码元的采样时刻幅值为0,这就是Nyquist准则。 zero-ISI 记经过基带调制的复码流为 \(\{a_k\}\),码元间隔(采样周期)为 \(T_s\),脉冲成型滤波器的冲激响应为 \(g(t)\),那么脉冲成型之后的模拟基带信号为\[s_0(t) = \sum_{k=-\infty}^{\infty} a_k g(t-kT_s)\] 对应的Nyquist无码间串扰条件即为: \[g(kT_s) = \begin{cases}1, & k=0 \\ 0, & k\ne 0 \end{cases}\] 等价的频域条件为(\(G(f)\)为\(g(t)\)的傅里叶变换)[31]: \[\frac{1}{T_s} \sum_{k=-\infty}^{\infty} G\left(f-\frac{k}{T_S}\right) =1, \forall f\] 实际系统中常用的就是升余弦滤波器(Raised CosineFilter),不同滚降系数的RC滤波器频谱如下图所示[31],他两侧的边沿是余弦曲线。 raised-cosine-filter 除此之外还有Sinc filter(频谱是理想矩形),Gaussianfilter(时域冲激响应是高斯的PDF)。第二代移动通信标准GSM中就采用高斯滤波器。 5.8 高斯最小频移键控GMSK 终于到了GMSK,其被应用于GSM通信标准、蓝牙、卫星通信当中。GMSK是在MSK的基础上,为了改善信号的旁瓣衰减性能,增加了一个高斯滤波器进行整形[14]。其实现方式可以是首先将基带码流通过高斯滤波器得到高斯脉冲,然后再通过MSK调制器。 GMSK-spectrum 系统框图如下所示<spanclass="hint--top hint--rounded" aria-label="Turletti, Thierry. "GMSK ina nutshell." Telemedia Networks and Systems Group LCS, MIT-TR(1996).">[18]: GMSK-diagram 下面的图片当中<spanclass="hint--top hint--rounded" aria-label="Turletti, Thierry. "GMSK ina nutshell." Telemedia Networks and Systems Group LCS, MIT-TR(1996).">[18],第一行是已调信号相位轨迹随着非归零码序列(-1,-1,-1,+1,+1,-1,+1,+1,+1,+1,-1,+1,-1,+1,-1,-1)的变化,可以看到GMSK输出的信号相位变化更加平缓。 GMSK-phase 5.9 正交频分复用OFDM OFDM本身又是一个非常精妙的调制技术。简单来理解,就是同时传输多路IQ调制的信号,不同路的载波频率不同,在一个符号周期内他们相互正交,互不干扰。 再详细一点的解释。首先对于IQ调制来说,I、Q两路本身是相互正交的,但是他们的载波还是位于同一个频点上,把两路放在一起看就是把基带信号的复频谱搬移到单一载波频点上[11]。而OFDM可以理解为在N个不同的载波频点上,并行传输了N个这样的IQ调制信号。需要注意这些子载波也不是随意选取的,需要满足在一个符号周期内的正交性,子载波之间不能有干扰。示意图如下[27]: OFDM-parallel 但是实际系统中直接这样实现会有很多麻烦,所以人们想出了一种非常巧妙的办法。要传输的串行二进制比特流首先转化为N路并行的比特流,每一路比特流在经过QAM映射为码流,这些码流控制了不同频点载波的复幅度,所以同一时刻不同支路的码元,实际上就是要发送信号的频谱,那么对这些系数进行IFFT,我们就把他们从频域变换到了时域,N路并行的码元映射为了1路串行的N个时刻的(复)信号,然后再将得到时域波形实部和虚部送入一个IQ调制,即可得到要发送的射频信号。示意图如下[27]: OFDM-FFT OFDM的系统框图如下所示[28]: OFDM 除此之外,OFDM中还包括了循环前缀以及其他细节的设计,在这里不再详细展开了,可以参考网上相关资料。LTE中OFDM采用的调制方式最高能达到256QAM,NR中能达到1024QAM[25]。 6. 数字解调 解调是调制的逆过程,所以数字解调也包括三个阶段: 第一阶段将信号从载波频段搬回到基带,如果调制的时候采用的是IQ调制,那么解调就采用IQ解调就好了; 第二阶段从模拟的基带波形中恢复出数字信号,最佳接收方案为匹配滤波并以\(1/T_s\)的频率进行采样; 第三阶段从数字信号中解调出原本想传输的比特流,需要根据星座图对得到的采样进行判决。 7. 总结 QAM和IQ调制yyds!OFDM yyds! Reference https://www.ni.com/zh-cn/innovations/white-papers/06/analog-and-digital-modulation.html↩︎ https://blog.csdn.net/SilenceBurster/article/details/53126468↩︎ Modulation- Wikipedia↩︎ https://blog.csdn.net/m0_51288996/article/details/121340840↩︎ https://blog.csdn.net/weixin_50912862/article/details/114679288↩︎ https://blog.csdn.net/weixin_50912862/article/details/114694510↩︎ https://blog.csdn.net/weixin_50912862/article/details/114735043↩︎ https://www.eecs.yorku.ca/course_archive/2010-11/F/3213/CSE3213_07_ShiftKeying_F2010.pdf↩︎ https://zhuanlan.zhihu.com/p/58119209↩︎ https://en.wikipedia.org/wiki/Amplitude_and_phase-shift_keying↩︎ https://glooow1024.github.io/2021/08/29/communication/IQ-modulation/↩︎ https://www.allaboutcircuits.com/textbook/radio-frequency-analysis-design/radio-frequency-demodulation/understanding-i-q-signals-and-quadrature-modulation/↩︎ https://www.allaboutcircuits.com/textbook/radio-frequency-analysis-design/radio-frequency-demodulation/understanding-quadrature-demodulation/↩︎ https://en.wikipedia.org/wiki/Minimum-shift_keying↩︎ MinimumShift Keying (MSK) - A Tutorial - Qasim Chaudhari↩︎ http://www.dsplog.com/2009/06/16/msk-transmitter-receiver/↩︎ https://ppt-online.org/1039280↩︎ Turletti, Thierry. "GMSK ina nutshell." Telemedia Networks and Systems Group LCS, MIT-TR(1996).↩︎ https://en.wikipedia.org/wiki/Code-division_multiple_access↩︎ https://www.zseries.in/telecom%20lab/telecom%20generations/↩︎ https://baike.baidu.com/item/CDMAOne/7525860↩︎ https://blog.csdn.net/ziv669/article/details/122453973↩︎ 2.5G_百度百科(baidu.com)↩︎ https://blog.csdn.net/zuochao_2013/article/details/78337600↩︎ https://blog.csdn.net/m0_52840978/article/details/123674928↩︎ https://norstc.blog.csdn.net/article/details/80504263↩︎ https://blog.csdn.net/madongchunqiu/article/details/18614233↩︎ https://ecse.monash.edu/staff/eviterbo/OTFS-VTC18/Tutorial_ICC2019___OTFS_modulation.pdf↩︎ https://wirelesspi.com/pulse-shaping-filter/↩︎ https://dsp.stackexchange.com/questions/36340/nyquist-criterion-for-zero-isi↩︎ https://en.wikipedia.org/wiki/Nyquist_ISI_criterion↩︎

2022/5/21
articleCard.readMore

IEEE论文爬虫及数据统计

1. IEEE论文爬虫 爬虫代码网上有很多了,这部分是直接用的网上可以跑通的[1]。使用的时候直接调用get_article_info(),其中参数 conferenceID需要手动在 IEEE 上查询会议的 ID 号,参数 saceFileName为希望保存的 csv 文件名。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 # 获取issueNumber def get_issueNumber(conferenceID): """ Get the issueNumber from the website. """ conferenceID = str(conferenceID) gheaders = { 'Referer': 'https://ieeexplore.ieee.org/xpl/conhome/'+conferenceID+'/proceeding', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36' } md_url = 'https://ieeexplore.ieee.org/rest/publication/home/metadata?pubid='+conferenceID md_res = requests.get(md_url, headers = gheaders) md_dic = json.loads(md_res.text) issueNumber = str(md_dic['currentIssue']['issueNumber']) return issueNumber # 爬取论文及其下载链接 def get_article_info(conferenceID, saveFileName): """ Collect the published paper data, and save into the csv file "saveFileName". """ # 获取issueNumber issueNumber = str(get_issueNumber(conferenceID)) conferenceID = str(conferenceID) # 记录论文数据 dataframe = pd.DataFrame({}) paper_title = [] paper_author = [] paper_year = [] paper_citation = [] paper_abstract = [] paper_ieee_kwd = [] # 从第一页开始下载 pageNumber = 1 count = 0 while(True): # 获取会议文章目录 toc_url = 'https://ieeexplore.ieee.org/rest/search/pub/'+conferenceID+'/issue/'+issueNumber+'/toc' payload = '{"pageNumber":'+str(pageNumber)+',"punumber":"'+conferenceID+'","isnumber":'+issueNumber+'}' headers = { 'Host': 'ieeexplore.ieee.org', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36', 'Referer': 'https://ieeexplore.ieee.org/xpl/conhome/'+conferenceID+'/proceeding?pageNumber='+str(pageNumber), } toc_res = requests.post(toc_url, headers = headers, data=payload) toc_dic = json.loads(toc_res.text) try: articles = toc_dic['records'] except KeyError: break else: for article in articles: title = article['highlightedTitle'] paper_link = IEEE_root_url + article['htmlLink'] paper_info = requests.get(url=paper_link, headers=headers, timeout=10) soup = BeautifulSoup(paper_info.text, 'lxml') # 解析 # 正则表达式 创建模式对象 pattern = re.compile(r'xplGlobal.document.metadata=(.*?)"};', re.MULTILINE | re.DOTALL) script = soup.find("script", text=pattern) # 根据模式对象进行搜索 try: res_dic = pattern.search(script.string).group(1)+'"}' # 配合search找到字典,匹配结尾字符串,降低文章摘要中也出现这种字符串的概率 # 解析异常,一般是因为文章 abstract 中出现了字符串 '"};' json_data = json.loads(res_dic) # 将json格式数据转换为字典 except Exception as e: print(pattern.search(script.string).group(0)) print(res_dic) # 保存文章信息 paper_title.append(title) paper_year.append(json_data['publicationYear']) print(json_data.keys()) #a = input('input anything...') if 'author' in json_data.keys(): paper_author.append(json_data['author']) else: paper_author.append(None) if 'abstract' in json_data.keys(): paper_abstract.append(json_data['abstract']) else: paper_abstract.append(None) if 'keywords' in json_data.keys(): paper_ieee_kwd.append(json_data['keywords'][0]['kwd']) # ieee有三种 key words else: paper_ieee_kwd.append(None) count=count+1 #link = 'https://ieeexplore.ieee.org/stampPDF/getPDF.jsp?tp=&arnumber='+article['articleNumber']+'&ref=' #alf.write(title.replace('\n','')+'>_<'+link+'\n') # 写入csv文件 dataframe = pd.DataFrame({'title':paper_title, 'year':paper_year, 'abstract':paper_abstract, 'key words':paper_ieee_kwd}) dataframe.to_csv(saveFileName, index=True, sep=',') print('Page ', pageNumber, ', total ', count, 'papers.') pageNumber = pageNumber+1 # 停一下防禁ip import time time.sleep(3) # 写入csv文件 dataframe = pd.DataFrame({'title':paper_title, 'year':paper_year, 'abstract':paper_abstract, 'key words':paper_ieee_kwd}) dataframe.to_csv(saveFileName, index=True, sep=',') return 2. IEEE论文数据统计 3. 写一个图形界面 3.1 弹出提示窗口 在写代码过程中有时候需要测试功能是否成功实现,于是想要加一个弹出窗口的函数可以显示调试信息,用以验证想要的功能是否正常实现。主要难点在于根据内容自动调整窗口大小,以获得较好的显示效果。 采用的方法是利用 QLabel.adjust()函数获取文本显示的宽度,并据此调整窗口的大小[2]。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 from PyQt6.QtWidgets import (QWidget, QDialog, QLabel, QPushButton) from PyQt6.QtCore import (QSize, QRect) class PaperCollector(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.dialog_btn = QPushButton('Click') self.dialog_btn.clicked.connect(self.click_callback) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('IEEE paper collector (by Glooow)') self.show() def click_callback(self): self.show_dialog('You clicked me!') def show_dialog(self, info): """ Pop up dialogs for debug. """ hint_dialog = QDialog() hint_dialog.setWindowTitle('Hint info') #hint_dialog.setWindowModality(PyQt6.QtCore.Qt.NonModal) hint_info = QLabel(info, hint_dialog) hint_info.adjustSize() padding = 20 max_width = 360 # set the maximum width if hint_info.size().width() > max_width: hint_info.setGeometry(QRect(0, 0, max_width, 80)) hint_info.setWordWrap(True) hint_info.move(padding, padding) hint_dialog.resize(hint_info.size() + QSize(padding*2, padding*2)) hint_dialog.exec() 3.2 文本框显示爬取日志 我希望在窗口中增加一个文本框,将爬取过程中的日志信息打印出来,便于用户实时监测。 采用的思路是定义一个logging.Logger,将其日志信息同时输出到窗口的文本框和控制台中打印,通过自定义logging.Handler可以实现这一功能[3][5][6]。实现方式为: 继承 logging.Handler类,并初始化阶段将整个窗口(QWidget类)作为参数传入,便于后续修改窗口的信息; 自定义实现 emit 函数,在 emit 函数中将log 信息同时输出到窗口文本框、打印到控制台; 创建 logger 的时候设置Handler[4] 1 2 3 4 ex = PaperCollector() logger = logging.getLogger("logger") handler = LogHandler(ex) logger.addHandler(handler) 下面是这部分功能相关的代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 import logging class LogHandler(logging.Handler): def __init__(self, parent): super().__init__() self.parent = parent def emit(self, record): try: print(self.format(record)) self.parent.print_log(self.format(record)) QApplication.processEvents() except Exception: self.handleError(record) class PaperCollector(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): """ Define the UI playout. """ # button to start crawing self.startCrawling_button = QPushButton('Start') self.startCrawling_button.setToolTip('Click and wait for collecting published paper data.') self.startCrawling_button.clicked.connect(self.start_collect_paper) # print log self.process = QTextEdit(readOnly=True) self.process.setFont(QFont("Source Code Pro",9)) grid = QGridLayout() grid.setSpacing(10) grid.addWidget(self.startCrawling_button, 1, 0) grid.addWidget(self.process, 2, 0, 3, 3) self.setLayout(grid) self.setGeometry(300, 300, 700, 300) self.setWindowTitle('IEEE paper collector (by Glooow)') self.show() def start_collect_paper(self): global logger #self.show_dialog('start!') get_article_info(self.conferenceID_edit.text(), self.saveFile_edit.text(), logger) def print_log(self, s): self.process.append(s) logger = None def main(): app = QApplication(sys.argv) ex = PaperCollector() global logger logger = logging.getLogger("logger") logger.setLevel(logging.INFO) formater = logging.Formatter(fmt="%(asctime)s [%(levelname)s] : %(message)s" ,datefmt="%Y/%m/%d %H:%M:%S") handler = LogHandler(ex) handler.setFormatter(formater) logger.addHandler(handler) sys.exit(app.exec()) if __name__ == '__main__': main() 爬取论文的主函数如下,其中一个参数为logger,在函数内部需要打印日志信息的地方添加logger.info(...) 即可。 1 2 def get_article_info(conferenceID, saveFileName, logger): logger.info('collecting paper......') 3.3 多线程避免卡顿 上述打印日志的方法不能做到实时输出信息到窗口文本框,而是会等到所有论文爬取完毕之后再一股脑的更新,这是因为PyQt的界面线程是主线程,当爬虫开始工作时,也是运行在主线程中,这时主界面就无法更新,看起来就像是卡死了。解决方法就是开一个子线程运行爬虫工作<spanclass="hint--top hint--rounded" aria-label="PyQt- 使用多线程避免界面卡顿 - bailang zhizun的博客 - CSDN博客">[7]。 具体实现细节为: 新建类 SpiderThread 继承 QObject,自定义run 函数,在其中运行爬虫程序; 在 SpiderThread 类中定义一个_spider_finish = pyqtSignal(),该信号用于告知主线程爬虫子线程已完成工作 在 PaperCollector 类中定义一个_start_spider = pyqtSignal(str, str, logging.Logger),该信号用于启动爬虫子线程[8][9]; 通过 pyqtSignal.connect分别将各个信号连接到对应的槽(处理函数)上; 下面是这部分功能相关的代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 from PyQt6.QtCore import (QObject, pyqtSignal, QThread) class SpiderThread(QObject): _spider_finish = pyqtSignal() def __init__(self): super().__init__() self.flag_running = False def __del__(self): print('>>> __del__') def run(self, conference_ID, save_filename, logger): get_article_info(conference_ID, save_filename, logger) self._spider_finish.emit() class PaperCollector(QWidget): _start_spider = pyqtSignal(str, str, logging.Logger) def __init__(self): super().__init__() self.initUI() #sys.stdout = LogStream(newText=self.onUpdateText) self.spiderT = SpiderThread() self.thread = QThread(self) self.spiderT.moveToThread(self.thread) self._start_spider.connect(self.spiderT.run) # 只能通过信号槽启动线程处理函数 self.spiderT._spider_finish.connect(self.finish_collect_paper) def start_collect_paper(self): if self.thread.isRunning(): return self.startCrawling_button.setEnabled(False) self.startCrawling_button.setToolTip('I\'m trying very hard to collect papers >_<') # 先启动QThread子线程 self.thread.start() # 发送信号,启动线程处理函数 # 不能直接调用,否则会导致线程处理函数和主线程是在同一个线程,同样操作不了主界面 global logger self._start_spider.emit(self.conferenceID_edit.text(), self.saveFile_edit.text(), logger) def finish_collect_paper(self): self.startCrawling_button.setEnabled(True) self.startCrawling_button.setToolTip('Click and wait for collecting published paper data ^o^') self.thread.quit() def stop_collect_paper(self): if not self.thread.isRunning(): return self.thread.quit() # 退出 self.thread.wait() # 回收资源 self.show_dialog('stop!') 3.4 流畅中止子线程 有时候我们需要中途停止爬虫工作,比如发现会议ID设置错误、希望先对已经爬取的部分数据进行统计分析等。在上面的实现中,尽管线程正常运行很流畅,但是如果在爬虫运行中途点击停止按钮,程序就会卡死。 在原本的爬虫脚本中,get_article_info()函数内部的爬虫采用了 while(True) 死循环,主线程中直接用self.thread.quit()强制退出,从控制台来看这样确实可以停掉,但是Qt窗口却总是会卡死。原因我也不太清楚,采用的解决方法是: 定义一个爬虫类 IEEESpider,设置成员变量flag_running,将函数 get_article_info也设置为类成员函数; 将 get_article_info 中的循环改为while(self.flag_running); 在主线程中想要停止爬虫子线程的时候,只需要首先设置flag_running=False,那么爬虫子线程在当前一次循环结束后就自动结束,这个时候主线程调用self.thread.quit() 就不会导致界面卡死。需要注意的是设置flag_running=False 一定要 sleep一段时间,以保证爬虫子线程能够结束当前循环,否则还是容易卡死。 下面是这部分功能的代码。 1 2 3 4 5 6 7 class IEEESpider: def __init__(self): self.flag_running = False def get_article_info(self, conferenceID, saveFileName, logger): while(self.flag_running): pass 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class SpiderThread(QObject): def __init__(self): super().__init__() #self.flag_running = False self.ieee_spider = IEEESpider() def run(self, conference_ID, save_filename, logger): self.ieee_spider.flag_running = True self.ieee_spider.get_article_info(conference_ID, save_filename, logger) self._spider_finish.emit() class PaperCollector(QWidget): def stop_collect_paper(self): if not self.thread.isRunning(): return self.spiderT.ieee_spider.flag_running = False time.sleep(15) self.thread.quit() # 退出 #self.thread.wait() # 回收资源 self.show_dialog('stop!') 3.5 增加侧边导航栏 前面只有爬取论文的页面,现在我想加上数据分析的页面,那么就需要设置一个侧边导航栏,以切换两种不同的任务。 实现方式为左侧设置多个按钮,右侧添加一个QTabWidget(),将不同的页面设置为子标签页,通过按钮的点击回调函数切换不同的标签页[10]。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 class PaperCollector(QWidget): def sidebarUI(self): """ Define the UI playout of sidebar. """ self.sidebar_btn_1 = QPushButton('Collector', self) self.sidebar_btn_1.clicked.connect(self.sidebar_button_1) self.sidebar_btn_2 = QPushButton('Analyzer', self) self.sidebar_btn_2.clicked.connect(self.sidebar_button_2) self.sidebar_btn_3 = QPushButton('Reserved', self) self.sidebar_btn_3.clicked.connect(self.sidebar_button_3) sidebar_layout = QVBoxLayout() sidebar_layout.addWidget(self.sidebar_btn_1) sidebar_layout.addWidget(self.sidebar_btn_2) sidebar_layout.addWidget(self.sidebar_btn_3) sidebar_layout.addStretch(5) sidebar_layout.setSpacing(20) self.sidebar_widget = QWidget() self.sidebar_widget.setLayout(sidebar_layout) def sidebar_button_1(self): self.right_widget.setCurrentIndex(0) def sidebar_button_2(self): self.right_widget.setCurrentIndex(1) def sidebar_button_3(self): self.right_widget.setCurrentIndex(2) def initUI(self): """ Define the overall UI playout. """ self.sidebarUI() self.spiderUI() self.analyzerUI() self.reservedUI() # 多个标签页 self.right_widget = QTabWidget() self.right_widget.tabBar().setObjectName("mainTab") self.right_widget.addTab(self.spider_widget, '') self.right_widget.addTab(self.analyzer_widget, '') self.right_widget.addTab(self.reserved_widget, '') # 隐藏标签部件的标签并初始化显示页面 self.right_widget.setCurrentIndex(0) self.right_widget.setStyleSheet('''QTabBar::tab{width: 0; height: 0; margin: 0; padding: 0; border: none;}''') # overall layout main_layout = QHBoxLayout() main_layout.addWidget(self.sidebar_widget) main_layout.addWidget(self.right_widget) main_layout.setStretch(0, 40) main_layout.setStretch(1, 200) self.setLayout(main_layout) self.setGeometry(300, 300, 850, 300) self.setWindowTitle('IEEE paper collector (by Glooow)') self.show() 3.6 next ... 接下来考虑:写数据分析页面 ...... Referencce 这里关于参考文献的部分,本来我想按照下面格式来写,希望实现的效果是都像[2][10]一样,每一条引用列出来的是超链接,而不是直接写出来链接地址,但是我发现除了第[2][10]条,其他条这么写话都会像现在的第<spanclass="hint--top hint--rounded" aria-label="PyQt- 使用多线程避免界面卡顿 - bailang zhizun的博客 - CSDN博客">[7]条一样,格式会乱,也不知道为什么。有人知道的话可以告诉我嘛>_< 1 2 3 4 5 6 7 8 9 10 [^1]:[Python爬虫——爬取IEEE论文 - 乐 ShareLe的博客 - CSDN博客](https://blog.csdn.net/wp7xtj98/article/details/112711465) [^2]:[PyQt 中文教程 (gitbook.io)](https://maicss.gitbook.io/pyqt-chinese-tutoral/) [^3]:[python日志:logging模块使用 - 知乎](https://zhuanlan.zhihu.com/p/360306588) [^4]:[python3 自定义logging.Handler, Formatter, Filter模块 - 太阳花的小绿豆的博客 - CSDN博客](https://blog.csdn.net/qq_37541097/article/details/108317762) [^5]:[python logging output on both GUI and console - stackoverflow](https://stackoverflow.com/questions/41176319/python-logging-output-on-both-gui-and-console) [^6]:[How to dynamically update QTextEdit - stackoverflow](https://stackoverflow.com/questions/24371274/how-to-dynamically-update-qtextedit) [^7]:[PyQt - 使用多线程避免界面卡顿 - bailang zhizun的博客 - CSDN博客](https://blog.csdn.net/bailang_zhizun/article/details/109240670) [^8]:[pyqt 带单个参数/多个参数信号&槽总结 - gong xufei的博客 - CSDN博客](https://blog.csdn.net/gong_xufei/article/details/89786272) [^9]:[PyQt5 pyqtSignal: 自定义信号传入的参数方法 - Mic28的博客 - CSDN博客](https://blog.csdn.net/qq_39560620/article/details/105711799) [^10]:[PyQt5 侧边栏布局 • Chang Luo (luochang.ink)](https://www.luochang.ink/posts/pyqt5_layout_sidebar/) https://blog.csdn.net/wp7xtj98/article/details/112711465↩︎ PyQt中文教程 (gitbook.io)↩︎ https://zhuanlan.gitbook.io/p/360306588↩︎ https://blog.csdn.net/qq_37541097/article/details/108317762↩︎ https://stackoverflow.com/questions/41176319/python-logging-output-on-both-gui-and-console↩︎ https://stackoverflow.com/questions/24371274/how-to-dynamically-update-qtextedit↩︎ PyQt- 使用多线程避免界面卡顿 - bailang zhizun的博客 - CSDN博客↩︎ https://blog.csdn.net/gong_xufei/article/details/89786272↩︎ https://blog.csdn.net/qq_39560620/article/details/105711799↩︎ PyQt5侧边栏布局 • Chang Luo (luochang.ink)↩︎

2022/3/19
articleCard.readMore

SLAM综述

关于SLAM(simultaneous localization andmapping)问题一个很粗糙的总结。 对于SLAM的发展历程,Leonard和Reid大佬将SLAM到目前为止的发展过程总结为三个阶段: classicalage(1986-2004):早期阶段,SLAM问题的定义、基于概率框架的建模和求解方法; algorithm-analysisage(2004-2015):深入研究SLAM问题的一些性质,比如稀疏性、收敛性、一致性等,更多样、更高效的算法也被相继提出; robust-perceptionage(2015-):开始考虑算法的鲁棒性、可扩展性、资源约束下的高效算法、高层语义认知任务导向等; SALM系统主要包括前端和后端两部分,前端负责从传感器数据中提取特征、dataassociation(如特征提取、回环检测)等,后端负责最大后验估计、滤波等; SLAM 根据感知手段可以分为几类: 测距测角:传感器比如毫米波雷达、声纳等; 视觉相机:各种相机,比如RGB-D相机等;需要从图像中提取特征点,例如SIFT等;纯视觉导航有专门的研究方向,即VO(VisualOdometry),VO+全局地图优化(例如回环检测)=visual SLAM; 激光雷达; 惯性导航:IMU,配合视觉传感器可以实现VIO; 根据地图结构可以分为几类(地图结构与感知手段紧密相关): 基于landmarkd的,传感器通常是测距测角的,或者视觉中提取特征点; 栅格地图(2D)、点云地图(3D),主要是激光雷达; 基于边/表面的几何地图; 根据求解方法可以分为几类: 基于贝叶斯框架递归滤波的:如EKF、PF、Information Filter等; 基于优化的:一种是光束平差法(用于视觉,实际上是最小二乘);另一种是图优化(graphSLAM,实际上就是概率图模型,似乎是现在的主流); Set Membership 类的方法、以及定性方法等; 要考虑的科学问题包括: 地图构建和机器人位姿估计,因此实际上是参数估计/求解问题; 多传感器数据融合,以及与已有地图信息的融合; 回环检测,纠正累积误差; 降低复杂度,比如每次只更新相关的部分地图和状态,而不是所有参数一起更新; 数据关联; SLAM 除了基本的SLAM问题,还有一些发展方向: ActiveSLAM:同时考虑机器人的运动控制,与exploration-exploitation问题相关; 多机SLAM,相比于单机需要考虑的问题: 多机协作的架构:集中式(online or offline?)、分布式; 相邻机器之间的数据交互,防止数据伦理问题,即一个数据在多个机器上重复使用多次; 每个机器的地图更新方法; 数据关联问题; 通信负载、数据压缩、地图结构优化等; Reference Dissanayake, MWM Gamini, et al. "A solution to the simultaneouslocalization and map building (SLAM) problem." IEEE Transactions onrobotics and automation 17.3 (2001): 229-241. Durrant-Whyte, Hugh, and Tim Bailey. "Simultaneous localization andmapping: part I." IEEE robotics & automation magazine 13.2(2006): 99-110. Bailey, Tim, and Hugh Durrant-Whyte. "Simultaneous localization andmapping (SLAM): Part II." IEEE robotics & automationmagazine 13.3 (2006): 108-117. Bresson, Guillaume, et al. "Simultaneous localization and mapping: Asurvey of current trends in autonomous driving." IEEE Transactionson Intelligent Vehicles 2.3 (2017): 194-220. Taketomi, Takafumi, Hideaki Uchiyama, and Sei Ikeda. "Visual SLAMalgorithms: A survey from 2010 to 2016." IPSJ Transactions onComputer Vision and Applications 9.1 (2017): 1-11. Cadena, Cesar, et al. "Past, present, and future of simultaneouslocalization and mapping: Toward the robust-perception age." IEEETransactions on robotics 32.6 (2016): 1309-1332.

2022/3/2
articleCard.readMore

我的电脑(不时更新)

最近换了电脑,很多软件都要重装,遂记录一下自己电脑常用的软件。 1. 日常必备 通讯类:微信、TIM、Foxmail; 办公类:Office、Onenote、Foxit、腾讯会议; 浏览器:Edge、Chrome; 影音娱乐:网易云音乐、PotPlayer、Irfan View; 其他:WinRAR、KeePass2; 2. 学习科研 编程:VSCode、Matlab、Python、Emeditor、Git; 阅读器:知云文献翻译、Pdf Xodo、CAJ Viewer; 写作:Typora、Texlive + Summatra、Mathpix SnippingTool、IguanaTex(ppt插件)、Aurora(word插件); 云盘:百度云盘、Seafile、坚果云; 3. 效率工具 MobaXterm:远程连接工具; 向日葵:远程桌面; Everything:文件搜索; Calibre:电子书阅读器; Beyond Compare:文本文件对比; Space Sniffer:磁盘空间统计; Captura:录屏; Hexo:个人静态博客(需要nodejs,最好装个nvm); Pic Go:图床管理工具; Gitbook:个人书籍;

2022/1/24
articleCard.readMore

【高等数值分析】Krylov子空间方法

1. 预备理论 现在需要求解一个大规模稀疏方程组 \(Ax=b\),可以用迭代法比如 Jacobi迭代法、Gauss-Seidel 迭代法等,不过这一节要讨论的是 Krylov子空间方法,核心部分是 Arnoldi 迭代。 1.1 Krylov 子空间 定理(Cayley-Hamilton):设 \(A\in{\mathbb C}^{n\times n}\),则 \(A\) 的特征多项式 \(\chi(z)\) 是 \(A\) 的零化多项式,也即 \(\chi(A)=0\)。 假设特征多项式 \(\chi(z)=z^n +c_{n-1}z^{n-1} + \cdots + c_1 z+ c_0=(-1)^n\operatorname{det}(A)\),那么根据 \(\chi(A)=0\) 可以得到 \[A^{-1} = -\frac{1}{c_0} A^{n-1} - \frac{c_{n-1}}{c_0} A^{n-2} + \cdots-\frac{c_1}{c_0} I = q_{n-1}(A)\] 利用这个等式,在求解线性方程组的时候,给定任意初值 \(x_0\),都有 \(Ax^{\ast}-Ax_0=b-Ax_0 \equiv r_0\),于是\(x^{\ast} = x_0 +q_{n-1}(A)r_0\),因此理论上可以在空间 \[\mathcal{K}=\left\{\boldsymbol{r}_{0}, A \boldsymbol{r}_{0}, \cdots,A^{m} \boldsymbol{r}_{0}, \cdots, A^{n-1} \boldsymbol{r}_{0}\right\}\] 中找到方程组的准确解,但是科学与工程计算问题中 \(n\) 可以达到 \(10^6\)量级,直接求解代价太高。因此希望在其一个低维子空间中搜索近似解。 定义 \(m\) 维 Krylov子空间为 \[\mathcal{K}_{m}=\operatorname{span}\left(\boldsymbol{r}_{0}, A\boldsymbol{r}_{0}, A^{2} \boldsymbol{r}_{0}, \cdots, A^{m-1}\boldsymbol{r}_{0}\right)\] 方程组求解问题转化为 \[\min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} - x\Vert.\] 1.2 最佳逼近 现在的问题就是在何种范数意义下求解问题 \(\min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} -x\Vert\)。假设 \({\mathcalK}_m\) 的一组基作为列向量构成矩阵 \(V_m\),最优解为 \(x_m = x_0 + V_m y^{\ast} \in x_0 + {\mathcal K}_m,~ y^{\ast}\in{\mathbb R}^{m}\)。 1.2.1 方法一:最佳平方逼近 取 \(2\) 范数 \(\min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} -x\Vert_2\),那么根据最佳平方逼近条件(对\(x\)求导,取零点),或者 Galerkin正交条件,可以推出法方程为 \[\begin{align}&\langle x^{\ast} - x_m, y \rangle = 0, ~ \forall y\in {\mathcalK}_m \\\iff & V_m^{\rm T}(x^{\ast}-x_m) = 0\end{align}\] 但是这个方法不可行!因为要求 \(x_m\) 就需要知道 \(x^{\ast}\)。 1.2.2 方法二:假设 \(A\) 对称正定 若 \(A\)对称正定,那么可以改求解问题 \(\min_{x\inx_0+{\mathcal K}_m} \langle A(x-x^{\ast}),x-x^{\ast}\rangle\),根据Galerkin正交条件有法方程 \[\begin{align}&\langle A(x^{\ast} - x_m), y \rangle = 0, ~ \forall y\in {\mathcalK}_m \\\iff & r_m = A(x^{\ast}-x_m) \perp {\mathcal K}_m \\\iff & V_m^{\rm T}(r_0 - Ax_m) = 0\end{align}\]这个方法可行!后面需要做两件事情:1)求出一组基 \(V_m\);2)解法方程。 Note:这里为了得到法方程,需要假设 \(A\) 对称正定。但是在后面的 FOM 方法中,不论\(A\) 是否正定,都基于 Galerkin条件直接采用了这一法方程来求解线性方程组。至于这么做是否有理论支持我也不太清楚,就姑且相信它是合理的。 1.2.3 方法三:残差2范数 当 \(A\) 非奇异,不去求解 \(\min \Vert x^{\ast} - x\Vert\),而是求解\(\min_{x\in x_0+{\mathcal K}_m} \VertA(x^{\ast} - x)\Vert_2\),那么再次根据 Galerkin条件,可以导出法方程 \[\begin{align}&\langle A(x^{\ast} - x_m), Ay \rangle = 0, ~ \forall y\in {\mathcalK}_m \\\iff & r_m = A(x^{\ast}-x_m) \perp A{\mathcal K}_m \\\iff & V_m^{\rm T}A^{\rm T}(r_0 - Ax_m) = 0\end{align}\] 这个方法也是可行的。 不论如何,上面几种方法最后都归结为两个问题: 获得 \({\mathcal K}_m\) 的基底\(V_m\):Gram-Schmidt 正交化方法; 求解法方程,并且计算残差:低维线性方程组求解。 2. 基底正交化 获得正交基底的方法主要有 Arnoldi 过程(CGS)、改进 Arnoldi过程(MGS)、以及 Lanczos 过程。名字起的很fancy,别被吓到,其实他们都只是 Gram-Schmidt 正交化方法。 2.1 Arnoldi 过程(CGS) 迭代过程可以归结为 \[\begin{aligned}\boldsymbol{v}_{1} &= \boldsymbol{r}_{0} / \Vert \boldsymbol{r}_{0}\Vert \\\boldsymbol{w}_{j} &=A \boldsymbol{v}_{j}-\langle A\boldsymbol{v}_{j}, \boldsymbol{v}_{1}\rangle \boldsymbol{v}_{1}-\langleA \boldsymbol{v}_{j},\boldsymbol{v}_{2}\rangle \boldsymbol{v}_{2}-\cdots-\langle A\boldsymbol{v}_{j}, \boldsymbol{v}_{j}\rangle \boldsymbol{v}_{j} \\\boldsymbol{v}_{j+1}&=\frac{\boldsymbol{w}_{j}}{\left\|\boldsymbol{w}_{j}\right\|_{2}},j=1,2, \cdots \\h_{i,j} &= \langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{i}\rangle\end{aligned}\] 得到的 \(\{ v_1, v_2, ..., v_m,...,v_n \}\) 是单位正交基。由 \(h_{i,j}\) 作为元素构成矩阵 \(H_m \in {\mathbb R}^{m\times m}\),可以验证\(H_m\) 为 Hessenberg 阵,并且 \(h_{i+1,i}=\Vert \boldsymbol{w}_{i}\Vert_2\)。在 \(H_m\)的基础上可以定义 \(\bar{H}_m \in {\mathbbR}^{(m+1)\times m}\),也就是在最后一行下面再加一行 \([0,...,0,h_{m+1,m}]\)。 CGS-psudocode 可以验证他们满足如下等式,这三个式子在后面会频繁用到,极其重要!\[\begin{align}AV_m &= V_m H_m + \boldsymbol{w}_{m} \boldsymbol{e}_{m}^{\rm T} \\&= V_{m+1} \bar{H}_m \\V_m^{\rm T} A V_m &= H_m\end{align}\] 2.2 改进 Arnoldi 过程(MGS) 前面的 Arnoldi 过程在计算 \(\boldsymbol{w}_{j}\) 的时候,相当于把 \(A \boldsymbol{v}_{j}\) 分别计算了 \(j\) 次投影,每次都是向一个一维的子空间\(\operatorname{span}\{ \boldsymbol{v}_{i}\}\)投影,可能会有计算不稳定的问题。对其进行改进的方法如下,交换顺序之后,每次都是向一个\(n-1\) 维子空间投影。 MGS-psudocode 2.3 Lanczos过程 是 Arnoldi 过程的特殊情况,当 \(A=A^{\rmT}\),那么 \(H_m\)为三对角矩阵,那么 \(\boldsymbol{w}_{j}\) 的计算简化为 \[\boldsymbol{w}_{j} = A \boldsymbol{v}_{j}-\langle A \boldsymbol{v}_{j},\boldsymbol{v}_{j-1}\rangle \boldsymbol{v}_{j-1}-\langle A\boldsymbol{v}_{j}, \boldsymbol{v}_{j}\rangle \boldsymbol{v}_{j}\] 3. 方程组求解 针对上面几种不同的迭代过程,可以有不同的求解方法。 3.1 全正交方法 (FOM) FOM (Full orthogonalization method) 根据 Galerkin 条件,\(r_m\perp {\mathcal K}_m\),根据法方程 \(V_m^{\rm T}(r_0 - AV_my)=0\),因此有 \[\begin{align}& r_m\perp {\mathcal K}_m \iff V_m^{\rm T}(r_0 - AV_my)=0\Longrightarrow H_m y = \Vert r_0\Vert \boldsymbol{e}_1\end{align}\] 伪代码为 FOM 根据 \(x_m = x_0 + V_m y\),残差有\(r_m = r_0-AV_my=r_0-(V_m H_m +\boldsymbol{w}_{m} \boldsymbol{e}_{m}^{\rm T})y = -\boldsymbol{w}_{m}\boldsymbol{e}_{m}^{\rm T} y\)。 3.2 D-Lanczos方法 若 \(A\) 对称,那么 \(H_m\) 为三对角阵,特别地记为 \(T_m\) \[T_{m}=\left(\begin{array}{ccccc}\alpha_{1} & \beta_{2} & & & \\\beta_{2} & \alpha_{2} & \beta_{3} & & \\& \ddots & \ddots & \ddots & \\& & \beta_{m-1} & \alpha_{m-1} & \beta_{m} \\& & & \beta_{m} & \alpha_{m}\end{array}\right) \in \mathbb{R}^{m \times m}\] 记 \(T_m\) 的 LU 分解为 \[T_{m}=L_{m} U_{m}=\left(\begin{array}{ccccc}1 & & & & \\\lambda_{2} & 1 & & & \\& \ddots & \ddots & & \\& & \lambda_{m-1} & 1 & \\& & & \lambda_{m} & 1\end{array}\right)\left(\begin{array}{ccccc}\eta_{1} & \omega_{2} & & & \\& \eta_{2} & \omega_{3} & & \\& & \ddots & \ddots & \\& & & \eta_{m-1} & \omega_{m} \\& & & & \eta_{m}\end{array}\right)\] 其中 \(\omega_{m}=\beta_{m}\), \(\quad\lambda_{m}=\frac{\beta_{m}}{\eta_{m-1}}\), \(\quad \eta_{m}=\alpha_{m}-\lambda_{m}\omega_{m}\)。那么根据下面这一性质,Lanczos过程可以迭代进行 \[\begin{align}L_{m}=\left(\begin{array}{c|c}L_{m-1} & \mathbf{0} \\\hline \boldsymbol{l}_{m-1}^{T} & 1\end{array}\right), \quad&U_{m}=\left(\begin{array}{c|c}U_{m-1} & \boldsymbol{y}_{m-1} \\\hline \mathbf{0}^{T} & \eta_{m}\end{array}\right) \\L_{m}^{-1} = \left(\begin{array}{c|c}L_{m-1}^{-1} & \mathbf{0} \\\hline -\boldsymbol{l}_{m-1}^{T}L_{m-1}^{-1} & 1\end{array}\right), \quad& U_{m}^{-1}=\left(\begin{array}{c|c}U_{m-1}^{-1} & -\frac{1}{\eta_m} U_{m-1}^{-1} \boldsymbol{y}_{m-1}\\\hline \mathbf{0}^{T} & 1/\eta_{m}\end{array}\right)\end{align}\]根据这个方法,还可以到处CG(共轭梯度)法的形式。 3.3 广义极小残量法(GMRES) Generalized minimal residual method (GMRES)实际上就是最小化参量的二范数,即 \(\min \Vertr_m \Vert_2 = \min_{x\in x_0+{\mathcal K}_m} \Vert A(x^{\ast} -x)\Vert_2\),根据 Galerkin 条件,应有 \(r_m\perp A{\mathcal K}_m \iff V_m^{\rm T}A^{\rmT}AV_my = V_m^{\rm T}A^{\rm T}r_0, ~ y\in{\mathbb R}^m\)。 另个一思路是 \(\min\Vert r_0-AV_my\Vert =\min \Vert V_{m+1} (\Vert r_0\Vert e_1 - \bar{H}_my)\Vert = \min \Vert\Vert r_0\Vert e_1 - \bar{H}_my\Vert\),最小二乘解 \(\bar{H}_m^{\rm T}(\bar{H}_my - \Vert r_0\Verte_1)=0\)。 3.4 MINRES 方法 是 GMRES 的特殊情况,当 \(A=A^{\rmT}\) 的时候,\(H_m\) 为三对角阵\(T_m\),\(\min \Vert r_m\Vert_2 = \min \Vert \Vert r_0\Verte_1 - T_m y \Vert\)。

2022/1/24
articleCard.readMore

【随机过程2】连续参数马尔可夫链

7.1 定义与基本概念 定义:设随机过程 \(X=\{X(t),t\ge0\}\),状态空间 \(S\),对任意 \(0\le t_0 < t_1 < \cdots < t_n <t_{n+1}\),\(i_k\in S\),若\(P(X(T_k)=i_k,0\le k\le n) > 0\) 有\[P(X(t_{n+1})=i_{n+1} | X(t_k)=i_k,0\le k\le n) = P(X(t_{n+1})=i_{n+1} |X(t_n)=i_n)\] 则称 \(X\)为连续参数的马氏链。若对任意的 \(s,t\ge0\),\(i,j\in S\) 有 \[P(X(s+t)=j | X(s)=i) = P(X(t)=j|X(0)=i) = P_{ij}(t)\] 称 \(X\)为齐次马氏链。 对于连续参数马氏链,在原点处有 \(P_{ij}(0)=\delta_{ij}\),因此 \(P(0)=I\)。除此之外假设其在原点处连续,即\(\lim_{t\to 0}P_{ij}(t)=\delta_{ij},\lim_{t\to0}P(t)=I\)。类比离散参数的马氏链,可以得到类似的C-K 方程 \(P(s+t)=P(s)P(t)\)。 7.2 转移概率矩阵 根据 C-K 方程可以猜测 \(P(t)=e^{tQ}\),泰勒展开表示为 \(P(t)=I + \sum_{n=1}^{\infty}\frac{t^n}{n!}Q^n\),\(P(t)\)完全由 \(Q\) 确定,并且有 \(P'(0)=\lim_{t\to0}\frac{P(t)-I}{t}=Q\)。 上面只是猜测,那么是否真的存在这样一个 \(Q\) 呢?下面两个定理给出结论。 定理 7.1:对 \(i\inS\),极限 \(-q_{ii}=\lim_{t\to0}\frac{1-P_{ii}(t)}{t}\)存在,但可能是无穷。 定理 7.2:对 \(i\inS\),极限 \(q_{ij}=\lim_{t\to0}\frac{P_{ij}(t)}{t}\)存在且有限。 证明:略。 Remark:实际应用中,\(P(t)\) 很难获得,一般可以求得 \(Q\),此时 \(e^{tQ} = \lim_{n\to\infty}(I +Qt/n)^n\)。如果取 \(n=2^k\)的形式,只需要 \(k\)次矩阵乘法即可。 推论 7.1:对任意 \(i\inS\),\(0\le \sum_{i\ne j}q_{ij}\leq_{ii}\)。 证明: \[q_{ii}=\varliminf_{t\to0} \frac{1-P_{ii}(t)}{t} = \varliminf_{t\to0}\sum_{j\ne i}\frac{P_{ij}(t)}{t} \ge \sum_{j\nei}\varliminf_{t\to0}\frac{P_{ij}(t)}{t} = \sum_{j\ne i}q_{ij}\] 推论 7.2:当 \(S\) 为有限状态空间时,\(\sum_{i\ne j}q_{ij}= q_{ii} <\infty\)。 7.3 Kolmogorov前向后向微分方程 定义:如果 \(Q\)满足 \(\forall i\in S\),\(\sum_{j\ne i}q_{ij} = q_{ii} <\infty\),则称 \(Q\)为保守矩阵。 定理 7.3:设马氏链 \(X=\{X(t),t\ge0\}\),\(Q=P'(0)\),当 \(S\) 为有限集时,\(P'(t)=P(t)Q=QP(t)\)。 Remark:当 \(S\)为可数状态时,前向方程与后向方程不一定成立,根据 Fatu 引理有 \(P'(t)\ge P(t)Q,P'(t)\ge QP(t)\) 定理 7.4:当 \(S\)为可列个状态,\(Q\)为保守矩阵时,后向方程 \(P'(t)=QP(t)\) 成立。 7.4平稳分布与极限分布及其矩阵计算 类似离散马氏链,可以定义状态的连通关系。 定义:若 \(\int_0^\inftyP_{ii}(t)dt = +\infty\),则称状态 \(i\)为常返态,否则称为非常返态。 定义:设 \(i\)为常返态,若 \(\lim_{t\to\infty}P_{ii}(t) >0\),则称为正常返态,若 \(\lim_{t\to\infty}P_{ii}(t) =0\),称为零常返态。 定义:若概率分布 \(\pi=\{\pi_i,i\in S\}\) 满足 \(\pi=\pi P(t)\),称 \(\pi\) 为 \(X\) 的平稳分布。 定理 7.5:设 \(X\)是有限不可约连续马氏链,对任意 \(i,j\inS\),有 \(\lim_{t\to\infty}P_{ij}(t)=p_j\)存在,且与状态 \(i\) 无关。 证明:略。

2022/1/24
articleCard.readMore

【随机过程2】马尔可夫过程2 | 状态空间

6.4 状态空间的分解 定义:设 \(A\subsetS\),若对任意 \(i\in A\) 及\(j\notin A\),都有 \(p_{ij}=0\),称 \(A\) 为闭集。若 \(A\) 的状态是相通的,则 \(A\) 为不可约的。 引理 6.1:\(A\)为闭集的充要条件为:任意 \(i\in A\) 及\(j\notin A\) 都有 \(p_{ij}^{(n)}=0,n\ge1\)。 推论:若 \(A\)是闭集,对任意状态 \(i\in A\) 恒有\(\sum_{j\in A}p_{ij}^{(n)}=1\)。 定理 6.5:所有常返态构成一个闭集。 推论:不可约马尔科夫链,所有状态都是常返的,或者所有状态都是非常返的。 定理 6.6:状态空间 \(S\) 可以分解为 \(S = T\cup C = T\cup C_1 \cdots \cup C_h\cdots\),其中 \(T\)表示非常返状态的集合,\(C_i\)为基本的常返闭集,且有 对任一确定的 \(k,C_k\)中任意两个状态互通; \(C_k\cap C_l = \varnothing,\forall h\nel\)。 定理 6.7:有限状态马尔科夫链具有如下性质: 状态空间 \(S\) 可分解为 \(S = T\cup C = T\cup C_1 \cdots \cupC_h\),其中 \(T\)表示非常返状态的集合,\(C_i\)为基本的常返闭集; 非常返状态集合 \(T\)一定不是闭集; 没有零常返状态; 必有正常返状态; 不可约马氏链的的状态都是正常返态; 任意闭集 \(C_i\) 上的 \(n\) 步转移矩阵为随机矩阵。 6.5 极限特性与平稳分布 6.5.1 极限特性 定理 6.7:若状态 \(j\) 为非常返态或零常返态,则对任意 \(i \in S\),有 \(\lim_{n\to\infty}p_{ij}^{(n)}=0\)。 推论6.7.1:若马尔科夫链有一个零常返态,则必有无穷多个零常返态。 6.5.2 平稳分布 定义:一个定义在 \(S\) 上的概率分布 \(\pi=(\pi_1,\pi_2,...,\pi_i,...)\)称为马尔科夫链的平稳分布,如果有 \(\pi=\piP\)。 定理 6.9:若马尔科夫链是不可约的遍历链,则 \(\{\pi_i = 1 / \mu_i\}\) 是 \(\pi=\pi P(\pi_i\ge0,\sum_{i\in S}\pi_i=1)\)的唯一解。 推论 6.9.1:不可约遍历链恒有唯一的平稳分布,且 \(\pi_j=\lim_{n\to\infty}p_{ij}^{(n)}\)。 定理 6.10:令 \(C_+\)为马尔科夫链中全体正常返状态构成的集合,则有 平稳分布不存在的充要条件为 \(C_+=\varnothing\); 平稳分布唯一存在的充要条件为只有一个基本正常返闭集; 若马尔科夫链有多于一个基本正常返闭集,则其平稳分布有无穷多个。 定理 6.11:关于有限状态的马尔科夫链 有限状态马尔科夫链的平稳分布总存在; 有限不可约非周期的马尔科夫链存在唯一的平稳分布; 若有多于一个基本正常返闭集,则其平稳分布有无穷多个; 栗子(平衡方程及其应用):对非周期正常返的离散马氏链,平稳分布存在且满足\(\pi P=\pi\),可以写成 \(\pi_j(1-P_{jj}) = \sum_{i\ne j,i\in S} \pi_iP_{ij}\),这被称为离散马氏链的平衡方程。左边表示从状态 \(j\) 流出的量,右边表示从其他状态流入状态\(j\)的量,在讨论一些实际工程问题时,可以借助平衡方程求解系统平稳分布。 6.6 转移矩阵的平均极限 一般情况下,\(n\to\infty\) 时 \(P^n\) 的极限未必存在,主要是因为 \(P^n\)可能有周期性。为了消除周期性,最直接的方法就是取平均。 定理 6.12:设 \(P\)为有限马氏链的转移矩阵,则 \(L:=\lim_{n\to\infty}\frac{1}{n}(I+P+\cdots+P^{n-1})\) 存在,且满足 \(LP = PL = L = L^2\)。 推论:设有限不可约马氏链的转移矩阵为 \(P\),平稳分布为 \(\pi\),\(L=(l_{ij})=\lim_{n\to\infty}\frac{1}{n}(I+P+\cdots+P^{n-1})\),则 \(\pi L=\pi\),且 \(\pi_j=l_{ij} / \sum_{k=1}^N l_{ik}\)。 定理 6.13:设 \(P\)是有 \(m\)个状态的不可约马氏链的转移矩阵,则平稳分布概率为 \(\pi = (1,...,1)(I-P+{\mathbb1})^{-1}\),其中 \({\mathbb 1}\)为全 1 的 \(m\times m\) 矩阵。 证明:关键是要证明矩阵 \((I-P+{\mathbb1})\) 可逆。 Note:马尔科夫链在随机过程里面是比较简单的部分,大部分结论都很直观,凭直观感觉就能得到。 实际上这章马尔科夫链的主要内容就是在讨论几种状态:非常返态、正常返态、零常返态。归结起来,现在想象一个马尔可夫链的状态转移图,有很多节点(状态)和有向边(转移概率)。 首先对于几种状态的区别: 正常返态就是说从一个状态开始,经过有限步总能再次回到当前状态,并且这个平均回转时间是有限的(中华好男人,常回家看看); 零常返态就是说从一个状态开始,经过有限步总能再次回到当前状态,但这个平均回转时间是无穷的(渣男海王,开空头支票); 非常返态就是说从一个状态开始,经过有限步之后就再也不能返回当前状态了(恩断义绝); 如何判断每个节点的状态类型,基本只需要下面两条原则: 如果两个状态相通,那么他们同为常返态或非常返态。 那么如果两个节点之间有双向边,他们一定是同一类型态;要出现常返态和非常返态的区别一定是由于单向边的存在; 进一步的,一个连通子图里面的所有状态一定是同一类型;要出现常返态和非常返态的区别,一定是两个连通子图\(A,B\) 之间只有单向边; 假如只有 \(A\) 到 \(B\) 的单向边,那么连通子图 \(B\) 中的节点一定都是非常返态。 零常返态只可能出现在状态个数为无穷的时候。 极限分布/平稳分布是怎样: 极限分布与初始分布有关,平稳分布只与状态转移链本身的性质有关; 由于最终一定会收敛到常返态,平稳分布一定是只对常返态非零; 只考虑常返态的集合,平稳分布就是转移概率矩阵 \(P\) 的左特征向量; 下面讲个故事。 把概率想象成手里的money,初始分布概率就是每个节点手里的本钱;一个(不可约的)连通子图就是一个家族,家族里的每个人之间可以相互借钱来回周转;不同连通子图就是不同的家族。 (不可约的)连通子图内部,一个家族里面的钱再怎么周转也都是内部消化,每个人借出去的总能还回来,所以钱不会消失,总会有一个平衡。 如果有两个连通子图,并且它们之间只有单向边,相当于 \(A\) 总是把一部分 money 白送给 \(B\),再厚的家底也得被掏空了。最后 \(A\)家族就破产了(非常返态,不是闭集)。 如果 \(B\)家族的钱只进不出,也就是没有向外的有向边(闭集),那么他们就会完成资本的积累,最终钱总会聚集到他们那里(常返态)。 如果有两个连通子图,他们相互之间没有任何边相联系,那就是他们互不打扰,两不相欠(各自有一个平稳分布)。100年之后各自有多少钱取决于现在各自有多少钱,不多不少(联合组成无穷个平稳分布,因为初始分布有无穷种情况)。

2022/1/24
articleCard.readMore

【随机过程2】马尔可夫过程1 | 基本概念

6.1 基本概念 马尔科夫链的定义很常见了,在此不再赘述。简单而言就是 \[P(X_{n+1}=s_{n+1}|X_0=s_0,...,X_{n}=s_n) = P(X_{n+1}=s_{n+1}|X_{n}=s_n)\]还可以定义一步转移概率、转移概率矩。如果转移概率不随时间变化,就是时间齐次马尔科夫链。 定理 6.1:设随机过程 \(\{X_n,n\ge0\}\) 满足 \(X_n =f(X_{n-1},\xi_n)(n\ge1)\),其中 \(f:S\times S\to S\); \(\{\xi_n,n\ge1 \}\)为独立同分布随机序列,且 \(X_0\) 与\(\{\xi_n,n\ge1\}\) 也相互独立; 则 \(\{X_n,n\ge0\}\)是马尔科夫链,并且一步转移概率为 \(p_{ij}=P(f(i,\xi_n)=j)\). 证明:根据条件 1 可知 \(\xi_{n+1}\)与 \(X_0,...,X_n\) 独立,从而有 \[\begin{aligned}&P(X_{n+1}=s_{n+1} | X_0=s_0,...,X_n=s_n) \\=& P(f(X_n,\xi_{n+1})=s_{n+1} | X_0=s_0,...,X_n=s_n) \\=& P(f(s_n,\xi_{n+1})=s_{n+1}) = P(X_{n+1}=s_{n+1} | X_n = s_n)\end{aligned}\] 证毕。 Note:这个定理实际上是在说 \(X_n\) 只由 \(X_{n-1}\) 和一个与之完全独立的随机变量\(\xi_n\)决定,这与马尔可夫性质异曲同工。并且如果 \(\xi_n,n\ge1\)同分布,那么这个马尔可夫过程是时间齐次的,否则是非齐次的。 如果把随机变量看作是信息的话,\(\xi_n\) 就可以看成是从 \(X_{n-1}\) 到 \(X_n\) 变化的信息量。 栗子 1:设 \(\{\xi_n,n\ge0\}\)独立同分布,取值为非负整数,\(P(\xi_n=i)=a_i\)。令 \(X_0=0,X_n=\sum_{k=1}^n \xi_k\),则易证\(\{X_n,n\ge0\}\)是一个马尔科夫链,因为有 \(f(X_n,\xi_{n+1}) =X_n+\xi_{n+1}\)。还可以得到转移概率为 \(p_{ij} = \begin{cases}a_{j-i}, & i\ge i \\ 0,& i < i \end{cases}.\) 栗子2(带吸收壁的随机游动):对称随机游动,每次只能向左或向右移动一个单位,或者原地不动,随机移动限制在\(S=\{0,1,...,b\}\) 内。用 \(\xi_n\) 表示第 \(n\) 次移动的距离,\(X_n\) 为 \(n\) 次移动后的位置,则 \(X_{n+1} = f(X_n,\xi_{n+1}) = X_n +(1-\delta(X_n-b)-\delta(X_n))\xi_{n+1}\)。 栗子3(G/M/1排队模型):G表示顾客到达服务台的时间间隔,一般假设为独立同分布,分布函数为\(G(x)\);M表示服务时间,假设为独立同指数分布,且与顾客到达过程独立;1表示单个服务员。 记 \(X_n\) 表示第 \(n\) 个顾客到达服务台时系统内的顾客数,\(T_n\) 表示第 \(n\) 个顾客到达时刻。易证 \(X_n\) 为一个马尔科夫链。 各顾客服务时间独立,且服从参数为 \(\mu\) 的指数分布,\((0,t)\) 时间内服务完的顾客服从参数为 \(\mu\) 的泊松分布,因此 \[P(X_{n+1}=i+1-j | X_n=i) = \int_0^\infty e^{-\mu t}\frac{(\mu t)^j}{j!}dG(t)\] 6.2 转移概率矩阵 定义:若 \(a_{ij}\ge0, ~i,j\in S\) 且满足 \(\sum_{j\in S}a_{ij} = 1\),则称矩阵 \(A=(a_{ij})\) 为随机矩阵。 记 \(\pi_i(n)=P(X_n=i)\),向量 \(\pi(n)=(\pi_1(n),\pi_2(n),...)\) 表示 \(n\)时刻的概率分布向量。一个马尔科夫链的性质完全由初始分布向量和一步转移概率矩阵决定。 定理 6.2(C-K方程):\(P^{(m+n)} = P^{(m)} P^{(n)}\). Remark:上面的C-K方程可以联想到卷积形式,即 \(P_{ij}^{(n)}=\sum_{k}P_{ik}^{(l)}P_{kj}^{(n-l)}\),于是又可以联想到用傅里叶变换/ z变换进行处理,以避免卷积。 6.3 Markov链状态的分类 6.3.1 状态分类 定义:对于 \(i,j\inS\),若存在自然数 \(n\) 使得\(p_{ij}^{(n)} > 0\),则称自状态\(i\) 出发可达状态 \(j\),记为 \(i\toj\)。若 \(i\to j\) 且 \(j\to i\),则称 \(i,j\) 相通,记为 \(i\leftrightarrow j\)。如果 Markov链的任意两个状态都相通,则称为不可约链。 定义:首达时间 \[\tau_{ij}=\min \{n:n\ge1,X_n=j,X_0=i \}\] 若右边为空集,则令 \(\tau_{ij}=\infty\)。 定义:首达概率 \[f_{ij}^{(n)}=P(\tau_{ij}=n | X_0=i)=P(X_n=j,X_k\ne j,1\le k\le n-1 |X_0=i)\] \(f_{ij}=\sum_{n=1}^\inftyf_{ij}^{(n)}\) 表示从 \(i\)出发,经有限步首次到达 \(j\)的概率。 定义:若 \(f_{ii}=1\),则称 \(i\) 为常返态;若 \(f_{ii} < 1\),称状态 \(i\) 为非常返态。 定义:若 \(f_{ii}=1\),此时定义 \(\mu_i=\sum_{n=1}^\infty nf_{ii}^{(n)}\),则\(\mu_i\) 表示从状态 \(i\) 出发再回到状态 \(i\) 的平均回转时间。若\(\mu_i < \infty\) 称 \(i\) 为正常返态;若 \(\mu_i=\infty\)称为零常返态。 定义:若集合 \(\{n:n\ge1,p_{ii}^{(n)} >0\}\ne\varnothing\),称该数集的最大公约数 \(d(i)\) 为状态 \(i\) 的周期。若 \(d(i) > 1\) 称状态 \(i\) 为周期的;若 \(d(i)=1\)称为非周期的。 定义:若状态 \(i\)为正常返态且为非周期的,则称状态 \(i\)为遍历状态(ergodic state)。 6.3.2 一些基本关系式 定理 6.3:对 \(\foralli,j\in S,n\ge1\) 有 \(p_{ij}^{(n)} = \sum_{l=1}^nf_{ij}^{(l)}p_{jj}^{(n-l)}\) \(f_{ij}^{(n)} = \sum_{k\nej}p_{ik}f_{kj}^{(n-1)}I_{\{n > 1\}} + p_{ij}I_{\{n=1\}}\). 下面给出一些关于该定理的讨论。 Discussion(常返性判定准则):对于特殊情况 \(i=j\) 时,上面的第 1 条变成 \(p_{ii}^{(n)} = \sum_{l=1}^nf_{ii}^{(l)}p_{ii}^{(n-l)}\),这是卷积的形式,取 z 变换 \(P_i(z)=\sum_{n=1}^{\infty}p_{ii}^{(n)}z^{-n}\),\(F_i(z)=\sum_{n=1}^{\infty}f_{ii}^{(n)}z^{-n}\),那么根据上式有\(P_i(z)=1+F_i(z)P_i(z)\),从而 \(P_i(z)=\frac{1}{1-F_i(z)}\)。当 \(z\to1\)时,有 \(P_i(z)\to\sum_{n=1}^{\infty}p_{ii}^{(n)}\),\(F_i(z)\to \sum_{n=1}^{\infty}f_{ii}^{(n)} =f_{ii}\)。 推论 6.3.1:状态 \(i\) 为常返的充要条件为 \(\sum_{n=1}^{\infty}p_{ii}^{(n)}=+\infty\);状态\(i\) 非常返的充要条件为 \(\sum_{n=1}^{\infty}p_{ii}^{(n)} <\infty\)。 如果记 \(I_n(i)=\begin{cases}0,&X_n\nei \\ 1,& X_n=i \end{cases}\),\(S(i)=\sum_{n=1}^\infty I_n(i)\) 为到达状态\(i\) 的次数,那么 \({\mathbb E}[S(i) |X_0=i]=\sum_{n=1}^{\infty}p_{ii}^{(n)}\) 即表示从状态 \(i\) 出发返回 \(i\) 的平均次数。当 \(i\) 为常返态,直观上即平均返回 \(i\)的次数为无穷,与上面的推论是一致的。对于非常返态,平均返回次数有限。 Discussion(\(p_{ii}^{(n)}\)与正常返、零常返的关系): (1)当状态是非周期的,定义 \(v_n=p_{ii}^{(n)} - p_{ii}^{(n-1)},n >1\),\(v_0=p_{ii}^{(0)}\),于是有 \(V(z)=\sum_{n=0}^{\infty} v_nz^{-n} =\frac{1-z^{-1} }{1-F_i(z)}\),利用洛必达法则有 \(\lim_{z\to 1}V(z) = -1/F_i'(1) =1/\mu_i\)。另一方面 \(\lim_{z\to1}V(z)=\lim_{n\to\infty}\sum_{k=0}^\inftyv_k=\lim_{n\to\infty} p_{ii}^{(n)}\),因此有 \[\lim_{n\to\infty} p_{ii}^{(n)}=1/\mu_i\] 根据正常返和零常返的定义知道: 当 \(i\) 是正常返时,\(\lim_{n\to\infty}p_{ii}^{(n)}=1/\mu_i\ne0\); 当 \(i\) 是零常返时,\(\lim_{n\to\infty}p_{ii}^{(n)}=1/\mu_i=0\)。 (2)当状态是周期的,记状态 \(i\)的周期为 \(T\),当 \(n\) 不是 \(T\) 的整数倍时有 \(f_{ii}^{(n)}=0\),\(F_i(z)=\sum_{k=0}^\inftyf_{ii}^{(kT)}z^{-kT}=\psi(z^T)\),相应的 \(P_i(z)=\frac{1}{1-\psi(z^T)}\)。类似非周期情况的讨论可以得到\[p_{ii}^{(nT)}\to T/\mu_i\] 当 \(i\) 是正常返时,\(\lim_{n\to\infty}p_{ii}^{(nT)}=T/\mu_i\ne0\),\(\lim_{n\to\infty} p_{ii}^{(nT+k)}=0,0 < k <T\); 当 \(i\) 是零常返时,\(\lim_{n\to\infty}p_{ii}^{(n)}=1/\mu_i=0\)。 Discussion(\(p_{ij}^{(n)}\)与正常返、零常返的关系):由于\(p_{ij}^{(n)} = \sum_{l=1}^nf_{ij}^{(l)}p_{jj}^{(n-l)}\),定义相应的 z 变换可以得到 \(P_{ij}(z)=F_{ij}(z)P_j(z) =\frac{F_{ij}(z)}{1-F_j(z)}\)。当 \(j\) 为常返态时,利用洛必达法则有 \(\lim_{z\to1+}(1-z^{-1})P_{ij}(z) =\lim_{z\to1+}\frac{1}{F_j'(z)}\lim_{z\to1+}F_{ij}(z) =f_{ij}/\mu_j\),而左端等于(利用Hardy-Littlewood引理) \(\lim_{z\to1+}(1-z^{-1})P_{ij}(z) =\lim_{n\to\infty} \frac{1}{n+1}\sum_{k=0}^\inftyp_{ij}^{(k)}\),因此有 \[\lim_{n\to\infty} \frac{1}{n+1}\sum_{k=0}^\infty p_{ij}^{(k)} =\frac{f_{ij} }{\mu_j}\] 当 \(j\) 是正常返时,\(\lim_{n\to\infty} \frac{1}{n+1}\sum_{k=0}^\inftyp_{ij}^{(k)} = {f_{ij} }/{\mu_j}\) 为有限值; 当 \(j\) 是零常返时,\(\lim_{n\to\infty} \frac{1}{n+1}\sum_{k=0}^\inftyp_{ij}^{(k)}=0\)。 6.3.3 状态间的等价关系 对马尔科夫链而言,状态互通是一种等价关系,对于状态进行归类有助于简化后续分析过程。 定理 6.4: 若状态 \(i\) 常返,并且 \(i\to j\),则状态 \(j\) 也是常返的,并且 \(f_{ji}=1\); 如果 \(i\leftrightarrow j\),则状态\(i,j\)同为常返或非常返态;若为常返态,则他们同为正常返或零常返; 如果 \(i\leftrightarrow j\),则状态\(i,j\) 有相同的周期。 证明:(1)存在 \(N\) 使得 \(p_{ij}^{(N)} > 0\),从 \(i\) 出发到 \(j\) 不返回 \(i\) 的概率为 \(p_{ij}^{(N)}(1-f_{ji})=0\),因此 \(f_{ji}=1\)。由于 \(i\leftrightarrow j\),存在 \(N_1,N_2\) 有 \(p_{ij}^{(N_1)} > 0,p_{ji}^{(N_2)} >0\),那么 \(p_{jj}^{(N_1+n+N_2)} \gep_{ij}^{(N_1)}p_{ii}^{(n)}p_{ji}^{(N_2)}=abp_{ii}^{(n)}\),因此有\(\sum_{n=0}^{\infty} p_{jj}^{(n)} =\infty\),因此状态 \(j\)是常返的。 (2,3)略。

2022/1/24
articleCard.readMore

【随机过程2】布朗运动2 | 推广

5.4 最大值与首中时的分布特性 设 \(\{B(t),t\ge0\}\)是标准布朗运动,不妨设 \(B(0)=0\)。 定义:首次击中 \(a\) 的时间 \(\tau_a=\inf\{t:t\ge0,B(t)=a\}\) 定义:对 \(\forall t >0, M(t)=\max_{0\le u\le t}B(u)\) 表示 \([0,t]\) 上的最大值。 当 \(a > 0\) 时,显然存在等价关系\(\{\tau_a \le t\} = \{M(t) \gea\}\),因此有 \(P(\tau_a \le t) =P(M(t) \ge a)\)。 Remark:事实上,这与泊松过程中定义的 \(\{S_n\le t\} = \{N(t)\ge n\}\)类似。主要差别在于泊松过程中讨论离散点情况,这里讨论连续情况。 定理 5.6:对任意 \(a>0\),\(M(t)\) 和 \(\tau_a\) 的分布密度函数分别为 \[\begin{aligned}f_{M(t)}(a) &= \sqrt{\frac{2}{\pi t} } e^{-a^2/ 2t}I_{[0,\infty)}(a) \\f_{\tau_a}(t) &= \frac{a}{\sqrt{2\pi} } e^{-a^2/2t} t^{-3/2}, \quadt > 0\end{aligned}\] \(\tau_a\) 的 Laplace 变换为\({\mathbb E}[\exp(-s\tau_a)] =e^{-\sqrt{2s}a}, ~ s>0\)。 证明:\(P(B(t)\ge a) = P(B(t\ge a | \tau_a\le t))P(\tau_a \le t)\),由于 \(P(B(t)\ge a) | \tau_a\le t) = P(B(t)< a) |\tau_a\le t)=1/2\),因此可以得到 \(P(M(t)\ge a) = P(\tau_a \le t) = 2P(B(t)\gea)=\frac{2}{\sqrt{2\pi t} }\int_a^{\infty} e^{-x^2 /2t}dx\)。于是 \(f_{M(t)}(a)={d(1-P(M(t)\ge a))} /{da}\),\(f_{\tau_a}(t) = d(P(\tau_a\le t)) / da\),证毕。 利用上述定理可以到如下结果: \(\tau_a\) 几乎处处有限,即 \(P(\tau_a < \infty)=1\); \({\mathbb E}\tau_a =\infty\)。 证明:1)\(P(\tau_a<\infty) =\lim_{t\to\infty}=P(\tau_a \le t) = \lim_{t\to\infty}\frac{2}{\sqrt{2\pi} }\int_{a/\sqrt{t} }^{\infty} e^{-u^2/2}du =1\);2)\({\mathbbE}[\exp(-s\tau_a)]=e^{-\sqrt{2s}a}\),两边对 \(s\) 求导得到 \({\mathbb E}[\tau_a \exp(-s\tau_a)] =\frac{\sqrt{2} }{2} a s^{-1/2} e^{-\sqrt{2s}a}\),令 \(s\to 0\) 即可得到 \({\mathbb E}\tau_a = \infty\),证毕。 栗子 5.1: 定理 5.7:设 \(\{B(t)\}\) 为标准布朗运动,\(\forall a > 0, y\ge0\) 有 \(P(B(t)\le a-y, M(t)\ge a) = P(B(t) \gea+y)\) 证明:根据反射性定义 \(B^{\ast}(t) =2a-B(t)\),则有 \(\tau_a =\tau^{\ast}_a = \inf\{B^{\ast}(t)=a\}\),又由于 \(\{M(t)\ge a\} = \{\tau_a \le t\}\),于是有\[\begin{aligned}P(B(t)\le a-y, M(t)\ge a) &= P(B(t)\le a-y, \tau_a\le t) \\&= P(B^{\ast}(t) \le a-y, \tau_a \le t) \\&= P(B(t) \ge a+y, \tau_a\le t) \\&= P(B(t)\ge a+y)\end{aligned}\] 推论 5.7.1:设 \(\{B(t)\}\) 为标准布朗运动,\(\forall a > 0\) 有 \(P(M(t)\ge a) = 2P(B(t)\ge a) = P(|B(t)|\gea)\). 推论 5.7.2:\(\forall \xi> 0, x\le\xi\),\(M(t)\) 和\(B(t)\) 的联合分布密度函数为 \(f_{M,B}(\xi,x) = \sqrt{\frac{2}{\pi}}(\frac{2\xi-x}{t^{3/2} }) \exp(-(2\xi-x)^2/2t)I_{[0,\infty)}(\xi)I_{(-\infty,\xi]}(x)\). 5.5 过零点的反正弦定理 \(\forall t_1 < t_2\),记事件\(o(t_1,t_2)=\{\exists t\in(t_1,t_2),B(t)=0\}\),利用全概率公式有 \[P(o(t_1,t_2)) = \int_{-\infty}^{\infty} P(o(t_1,t_2) | B(t_1)=x)\frac{1}{\sqrt{2\pi t_1} }e^{-x^2/2t_1} dx\] 利用布朗运动的连续性和对称性有 \[P(o(t_1,t_2)|B(t_1)=x) = P(\tau_x\le t_2-t_1) =\frac{2}{\sqrt{2\pi(t_2-t_1)} }\int_x^{\infty} e^{-u^2/2(t_2-t_1)} du\] 于是有 \[P(o(t_1,t_2)) = \frac{1}{\pi\sqrt{t_1(t_2-t_1)}}\int_0^{\infty}\int_x^{\infty} e^{-\frac{y^2}{2(t_2-t_1)} }dy \cdote^{-\frac{x^2}{2t_1} }dx\]这个积分的直接求解非常困难,为求此积分,采用另外的方法,也即反正弦定理。 定理 5.8(反正弦定理):设 \(B(t)\) 是标准布朗运动,记 \(\bar{o}(t_1,t_2)=\{B(t)\ne 0,\forallt\in(t_1,t_2)\}\),则 \(P(\bar{o}(t_1,t_2))=\frac{2}{\pi}\arcsin\sqrt{\frac{t_1}{t_2} }\),且当 \(t_1=xt, t_2=t, 0 < x < 1\) 时,有\(P(\bar{o}(xt,t))=\frac{2}{\pi} \arcsin\sqrt{x}\). Remark:这说明布朗运动处处连续但处处不可导。 5.6 布朗运动的推广 5.6.1 带吸收点的布朗运动 设 \(Z(t)=\begin{cases}B(t), & t <\tau_x \\ x, & t\ge \tau_x \end{cases}\),为求 \(Z(t)\) 的分布,不妨设 \(x > 0\) (1)当 \(y > x\) 时,\(P(Z(t) \le y)=1\); (2)当 \(y=x\) 时,\(P(Z(t)=x) = P(\tau_x\le t) = \frac{2}{\sqrt{2\pit} }\int_x^\infty e^{-u^2/2t} du\); (3)当 \(y < x\) 时, 5.6.2 原点反射的布朗运动 5.6.3 几何布朗运动 令 \(W(t)=e^{B(t)}\),称它为几何布朗运动,取\(B(t)\) 的矩母函数 \(\phi(s)={\mathbb E}[e^{sB(t)}]\),则 \(\phi(s)=e^{ts^2/2}\),因此 \({\mathbb E}[W(t)]=\phi(1)=e^{t/2}\),\(D[W(t)] = {\mathbb E}[W^2(t)]-({\mathbbE}[W(t)])^2=\phi(2)-e^t = e^{2t}-e^t\). 栗子 5.2:考虑股票市场收益率,\(S_0,S_n\) 分别表示最初价位和最终价位,\(S_n=S_0 e^{B(t_1)-B(t_0)}\cdotse^{B(t_n)-B(t_{n-1})}\). 5.6.4 布朗运动的积分 令 \(S(t)=\int_0^tB(u)du\),根据正态分布的性质知道他是正态过程,\({\mathbb E}S(t)=0\),\(\forall 0\le \delta \le t\),有 \[\operatorname{cov}[S(\delta),S(t)] = {\mathbb E}[\int_0^\delta\int_0^tB(u)B(v)dudv] = \int_0^\delta\int_0^t(u\wedgev)dudv=\frac{\delta^2}{2}(t-\frac{\delta}{3})\] 5.6.5 布朗运动的形式导数 考虑增量比,固定 \(\Delta t >0\),令 \(\frac{B(t+\Deltat)-B(t)}{\Delta t} = \frac{\Delta B(t)}{\Delta t}\), 5.7 布朗桥与经验分布 5.7.1 布朗桥的基本概念与性质 定义:\(\{B(t),t\ge0\}\) 为标准布朗运动,不妨设\(B(0)=0\),令 \(B_{00}(t)=B(t)-tB(1)\),则称 \(\{B_{00}(t), 0\le t\le 1\}\)为布朗桥。 根据其定义,可以得到基本性质如下: \(B_{00}(0)=B_{00}(1)=0\);(??) \({\mathbb E}[B_{00}(t)]={\mathbbE}[B(t)-tB(1)]=0\); \(D[B_{00}(t)]={\mathbbE}[B_{00}^2(t)]=t(1-t)\); 设 \(s\le t\),\(\operatorname{cov}[B_{00}(s),B_{00}(t)]=s(1-t)\); \(\{B_{00}(t),0\le t\le1 \}\)的分布与 \(\{B(t), t\ge0 \}\) 在 \(B(1)=0\) 下的条件分布相同。 5.7.2 经验分布与布朗桥的关系 工程统计中,经常独立抽取多个样本 \(X_1,...,X_n\)来统计某参量的统计特性,定义经验分布 \(\hat{F}_n(x) = \frac{1}{n}\sum_{i=1}^n I_{\{X_i\lex\} }\)。假设 \(X_1,...,X_n\)独立同分布,且 \(X_n\simF(x)\),则有: \({\mathbb E}[\hat{F}_n(x)] =F(x)\) \(\operatorname{Var}[\hat{F}_n(x)]=\frac{1}{n}F(x)(1-F(x))\) 任意给定 \(x\),利用强大数定理得到任意给定 \(x\),利用强大数定理得到\(P(\lim_{n\to\infty}\hat{F}_n(x)=F(x))=1\) 任意给定 \(x\),利用中心极限定理得到 \(n\to\infty\) 时有(依分布收敛) \[\frac{\sum_{i=1}^n (I_{\{X_i\le x\} }-F(x)) }{\sqrt{nF(x)(1-F(x))} }\overset{d}{=} {\mathcal N}(0,1)\] 证明:(2)\(\operatorname{Var}[\hat{F}_n(x)]={\mathbbE}[\hat{F}_n(x)^2] - F(x)^2 = \frac{1}{n^2}{\mathbb E}[\sum_{i=1}^nI_{\{X_i\le x\} } \sum_{j=1}^n I_{\{X_j\le x\} }]\),展开化简就可以得到性质 2. (4)记 \(G_n(x)=\sqrt{n}(\hat{F}_n(x)-F(x))\),容易证明\({\mathbbE}G_n(x)=0,\operatorname{Var}G_n(x)=F(x)(1-F(x))\),特别的,根据中心极限定理,当\(n\to\infty\) 时有 \(G_n(x)\overset{d}{=}G(x)\),其中 \(G(x)\sim {\mathcalN}(0,F(x)(1-F(x)))\)。 引理 5.1:如果 \(x_1 <x_2\),则 \({\mathbbE}[G_n(x_1)G_n(x_2)] = F(x_1)(1-F(x_2))\)。 证明:代入展开化简即可得到。 Remark:根据上述引理和 \(G_n(x)\) 的性质可知,当 \(F_n(x)=x\) 时,即 \(X_1,...,X_n\) 服从 \([0,1]\) 上的均匀分布时,\(G_n(x)\) 的极限分别 \(G(x)\) 是布朗桥。 事实上,对于一般的连续分布函数 \(F(x)\),\(G_n(x)\) 的极限分布 \(G(x)\)也可以用布朗桥表示。为此,首先给出如下引理。 引理 5.2:随机变量 \(X\) 的分布函数 \(F(x)\) 连续,则 \(Y=F(X)\) 是一个 \([0,1]\) 均匀分布的随机变量。 证明:\(\forall y\in[0,1]\),定义\(x=\inf\{u:F(u)\ge y\}\),因此有 \(P(F(X)\ge y)) = P(Y\gey)=1-F(x)=1-y\),从而有 \(P(Y < y) =y\),证毕。 基于引理 5.2,可以定义 \(G^{ \#}(x)=B_{00}(F(x))\),利用布朗桥性质有 \(G^{ \# }(x)\) 与 \(G(x)\) 有相同的分布特性,从而可以推得 \(G_n(x)\) 的极限分布为以 \(F(x)\) 为参变量的布朗桥。 5.7.3 经验分布的误差估计 略。 5.8 带漂移的布朗运动 定义:设 \(\{B(t),t\ge0\}\) 为标准布朗运动,记 \(X(t)=B(t)+\eta t\),其中 \(\eta\) 为常数,称 \(\{X(t),t\ge0\}\) 为带漂移的布朗运动。 5.8.1 移出区间的概率计算 定理 5.9:对任意 \(A >0, B > 0\),定义停时 \(\tau=\inf\{t:X(t)=A ~ or ~ X(t)=-B \}\),则\(P_{A}=P(X(\tau)=A) = \frac{e^{2\etaB}-1}{e^{2\eta B}-e^{2\eta a} }\). 5.8.2 首中时问题 5.9 布朗运动的轨道性质 轨道处处连续,几乎处处不可导。 定理:标准布朗运动 \(B(t)\),对任意的 \(t\ge0\),有 \[P(\lim_{h\to 0}\sup\left|\frac{B(t+h)-B(t)}{h}\right|=+\infty) = 1\] 证明:略。

2022/1/24
articleCard.readMore

Hello World

Welcome to Hexo! This is your veryfirst post. Check documentation formore info. If you get any problems when using Hexo, you can find theanswer in troubleshooting oryou can ask me on GitHub. Quick Start Create a new post 1 $ hexo new "My New Post" More info: Writing Run server 1 $ hexo server More info: Server Generate static files 1 $ hexo generate More info: Generating Deploy to remote sites 1 $ hexo deploy More info: Deployment

2022/1/23
articleCard.readMore

【高等数值分析】常微分方程数值解

1. 预备理论 求解常微分方程初值问题数值解 \[\begin{align}&\frac{dy}{dx} = f(x,y), \quad a < x < b, |y| < \infty \\&y(a) = y_0\end{align}\] 存在唯一性定理:若 \(f(x,y)\)连续,对 \(y\) 满足 Lipschitz条件,那么初值问题有唯一解。 对上面的常微分方程积分就有 \(y(t_{n+k}) -y(t_{n-j}) = \int_{t_{n-j}}^{t_{n+k}} f(t,y(t))dt\),所以实际上可以转化为数值积分的问题,所以这一节的方法和数值积分很类似。但是这里的问题在于被积函数值是不知道的。 2. 线性多步法 在数值积分里面 \(f(t_k,y(t_k))\)是已知的,主要是在设计求积节点对应的系数。在这里还需要首先估计每个节点的函数值。对前面的式子采样求积就得到\(y(t_{n+k}) - y(t_{n-j}) = h\sum_i \beta_if_{n-i}\),就引出了下面要介绍的线性多步法。 2.1 线性多步法 记 \(f_n=f(t_n,y_n),y_n=y(t_n)\),线性多步法(线性 \(k\) 步法)的一般表达式为 \[\sum_{i=0}^k \alpha_i y_{n+i} = h\sum_{i=0}^{k} \beta_i f_{n+i}\] 其中 \(\alpha_k=1,\alpha_0^2+\beta_0^2\ne0\)。给一些特例: \(\alpha_0=-1,\beta_0=1,\beta_1=0\)时为显式Euler法 \(y_{n+1}=y_n +hf_n\); \(\alpha_0=-1,\beta_0=0,\beta_1=1\)时为隐式Euler法 \(y_{n+1}=y_n +hf_{n+1}\); \(\alpha_0=-1,\beta_0=\beta_1=1/2\)时为梯形法 \(y_{n+1} = y_n +h/2(f_n+f_{n+1})\)。 可以定义“特征多项式”,在后面分析稳定性和收敛性的时候会很有用\[\rho(\xi) = \sum_{i=0}^k \alpha_i \xi^i, \quad \sigma(\xi)=\sum_{i=0}^k\beta_i\xi^i\]如何衡量数值求解方法的精度呢?定义局部截断误差为 \[T_{n+k} = \sum_{i=0}^k [\alpha_i y(t_{n+i}) - h\beta_i y'(t_{n+i})]\] 对上面的式子做Taylor展开,可以得到形如 \(T_{n+1} = -1/90 h^5y^{(5)}(x_n)+O(h^6)\)(这是Simpson公式的局部截断误差),这个式子表明Simpson公式是4阶的。 对于线性 \(k\)步法,要想设计一种迭代方法使得数值精度是 \(p\)阶的,可以采用待定系数法,保证局部截断误差中 \(y^{(1)}(x),...,y^{(q)}(x)\)前面的系数都是0。 2.2 稳定性与收敛性 2.2.1 相容性 首先引入相容性的概念。若某个多步法的截断误差满足 \(T(t,y(t),h)=o(h)\)那么称其为相容的。若 \(T(t,y(t),h)=O(h^{q+1})\),则称其为 \(q\) 阶的。 实际上,相容性就是说该方法至少是1阶的,也就是当 \(y\)为一次线性函数时,该方法要能够得到准确解。 定理:相容的多步法充要条件是 \(\rho(1)=0,\rho'(1)=\sigma(1)\)。 2.2.2 零稳定性 根条件:若多项式 \(\rho(\xi)\) 的 \(k\) 个根的模长都不大于1,并且模值等于 1 的根都是单根,则称其满足根条件。 Note:根条件考虑的是齐次差分方程的解。当 \(f\equiv 0\)的时候,齐次差分方程的解具有指数形式 \(y(n)=\sum_i P(n) \xi_i^n\),其中 \(P(n)\) 是一个多项式, \(\xi_i\) 就是 \(\rho(\xi)\)的根(这里没考虑重根的情况,不过是类似的),如果 \(|\xi_i|<1\) 就意味着 \(\lim_{n\to\infty}y(n) =0\),那么这跟稳定性有什么关系呢? 定理:线性多步法关于初值稳定的充要条件是 \(\rho(\xi)\) 满足根条件。 Note:这个定理说明了根条件和(零)稳定性二者的等价关系。为什么呢?假设真实的初值为\(y_0=y(t_0)\),真实的解为 \(y(n)=y_0\xi_0^{(n-t_0)}\)。而我们计算的时候由于各种原因拿到的初值是有误差的,也就是\(\hat{y}_0\),那么最后求得的误差就是\(\hat{y}(n)-y(n)=(\hat{y}_0-y_0)\xi_0^{(n-t_0)}\),如果不满足根条件,当\(n\to\infty\) 的时候,\(\hat{y}(n)-y(n) \to\infty\),解就是不稳定的。 2.2.3 收敛性 定义:假设在区间 \([a,b]\) 上等距划分 \(N\) 个区间,\(x_n= a+nh,n=0,1,...,N\),求解初值问题得到的解为 \(y_n,n=0,1,...,N\),最大整体误差为 \(E(h) = \max_{n} |y(x_n) - y_n|\),如果满足\(\lim_{h\to0}E(h)=0\),则称方法是收敛的。如果 \(E(h) \le Ch^p\),则称方法是 \(p\) 阶收敛的。 定理:相容性 + 零稳定性 \(\iff\) 收敛性。 2.2.4 绝对稳定性 前面的零稳定性是跟所选择的方法有关的。而这里的绝对稳定性研究的是微分方程本身的属性。如果方程本身性质很不好,那么可能无论选择什么方法都是不稳定的。 取 \(f(x,y)=\lambday\),再研究方法的稳定性。以试验方程为例 \[\begin{cases}y' = \lambda y, t\in[a,b] \\y(a) = \tilde{y}_0\end{cases}\] 用Euler法得到 \(y_n =(1+h\lambda)y_{n-1}\),于是两个解的误差满足 \(y_n-z_n = (1+h\lambda)^n (y_0-z_0)\),若\(|1+h\lambda|>1\),则误差总会放大,这是我们不希望的。 要保证稳定性,既与方程本身的性质(也即 \(\lambda\)) 有关,也与所选择的步长 \(h\)有关。从另一个角度而言,方程本身的性质(\(\lambda\))会影响可选择的 \(h\) 的范围。由此引出绝对稳定性的概念。 对前面提到的线性多步法,把 \(f(x,y)=\lambday\) 代回去就有 \[\sum_{i=0}^k (\alpha_i - h\lambda \beta_i) y_{n+i} = 0\] 称 \(\Pi(\xi;z) = \rho(\xi) -z\sigma(\xi)\) 为稳定多项式。 定理:对给定的 \(z\),若 \(\Pi(\xi;z)\) 的 \(k\) 个根的模都小于1,则其是绝对稳定的。(满足这样条件的 \(z\)的集合构成绝对稳定区域。) 3. Runge-Kutta方法 Runge-Kutta方法和线性多步法的主要区别在于,其在 \(x_n,x_{n+1}\)中间又进行了采样、插值。这种方法大概可以表示为 \[\begin{align}& y_{n+1} = y_n + h\sum_{i=1}^{s} b_i k_i \\& k_i = y_n + f(t_n + c_i h, y_n + \sum_{i=1}^s a_{ij} k_j)\end{align}\] 其中 \(0\le c_i\le1\)。实际上\(k_i \approx y(t_n+c_i h)\),就是在\([y_n,y_{n+1}]\)中间又进行了采样插值。 这样提高了精度,同时也会增加计算复杂度。 除此之外,提高精度的方法还有 Richardson 外推方法。 4. 刚性问题 刚性问题也是方程本身的属性,主要是指某些情况下两个特解的尺度相差很大,比如两个指数衰减的过程混合在一起,但是其中一个衰减特别快(\(\exp(-\lambda t)\) 的 \(\lambda\)特别大),另一个则衰减特别慢,那么数值求解的时候很可能只能看到衰减慢的那个过程,另一个则被忽略。这在化学反应中是经常遇到的。

2022/1/14
articleCard.readMore

【高等数值分析】数值积分和数值微分

1. 预备理论 根据Newton-Leibniz公式有 \(\int_a^x f(t)dt=F(x)-F(a)\),但是绝大部分情况很难解析求解,需要数值积分。例如中点公式\[\int_a^b f(x)dx \approx f(\frac{a+b}{2})(b-a)\] 若 \(f(x)\inC^2[a,b]\),则中点公式截断误差为 \[\int_a^b f(x)dx - f(\frac{a+b}{2})(b-a) = \frac{(b-a)^2}{24}f''(\xi), \quad \xi\in(a,b)\] 2. 插值型求积公式 顾名思义,就是先插值再求积分。方法为给定求积节点 \(x_k,k=0,1,...,n\) 和求积系数 \(A_k,k=0,1,...,n\),插值型求积公式表示为\[\int_a^b f(x)dx \approx \sum_{k=0}^n A_k f(x_k)\] 根据多项式插值中的理论,余项可表示为 \[E_n(f) = \frac{1}{(n+1)!}\int_a^b f^{(n+1)}(\xi(x)) w_{n+1}(x) dx\] 当 \(f(x)\in{\mathcal P}_n\)时都有 \(E_n(f)=0\)。由此可以定义代数精度,如果对所有\(p\in{\mathcal P}_m\) 有 \(E_n(p)=0\),而对某个 \(q\in{\mathcal P}_{m+1}\) 有 \(E_n(q)\ne 0\),称求积公式具有 \(m\) 次代数精度。 插值型求积公式主要分为两类:Newton-Cotes求积公式和Gauss型求积公式。前者等距选取插值节点,后者则未必。 2.1 Newton-Cotes求积公式 方法是将区间 \([a,b]\) \(n\) 等分,得到 \(h =\frac{b-a}{n},x_k=a+kh,k=0,...,n\),再利用Lagrange插值公式 \(l_k(x)\),得到 \[\int_a^b f(x)dx = (b-a)\sum_{k} \frac{f(x_k)}{b-a}\int_a^b l_k(x)dx =(b-a)\sum_k C_k^{(n)} f(x_k)\] 其中 \(C_k^{(n)}=\frac{1}{b-a}\int_a^b \prod_{j\nek}\frac{x-x_j}{x_k-x_j}dx = \frac{1}{n}\int_a^b \prod_{j\nek}\frac{t-j}{k-j}dx\) 称为 Cotes求积系数,不仅与被积函数无关,与求积区间也无关。 该方法有如下性质: \(\sum_{k=0}^n C_k^{(n)} = 1\)(取\(f\equiv1\) 即可得证); \(E_n(f) = \frac{1}{(n+1)!}\int_a^bf^{(n+1)}(\xi(x)) w_{n+1}(x) dx\); 当 \(n\) 为偶数时,代数精度为 \(n+1\);当 \(n\) 为奇数时,代数精度为 \(n\)。(直观理解是因为奇次多项式的奇对称性积分后恰好为0) 下面是 \(n\) 取不同数值的特例。 \(n=1\) 时为梯形公式,代数精度为\(1\): \[\begin{align}&\int_a^b f(x)dx \approx \frac{b-a}{2}[f(a)+f(b)] \\&E_1(f) = -\frac{(b-a)^3}{12} f''(\xi), \xi\in[a,b]\end{align}\] \(n = 2\) 时为 Simpson公式,代数精度为 \(3\): \[\begin{align}&\int_a^b f(x)dx \approx \frac{b-a}{6}[f(a)+4f(\frac{a+b}{2})+f(b)]\\&E_1(f) = -\frac{(b-a)^5}{2880} f^{(4)}(\xi), \xi\in[a,b]\end{align}\] 2.2 Gauss型求积公式 求积公式也表示为 \[\int_a^b f(x)dx \approx \sum_{k=0}^n A_k f(x_k)\]但与Newton-Cotes方法不同的是求积节点并非等距选取,而是将参数待定,解出使代数精度最高的参数\(A_k\) 和 \(x_k\)。共有 \(2n+2\) 个参数待定,分别取 \(f(x)=1,x,x^2,...,x^{2n+1}\)列方程组,因此代数精度最高可以达到 \(2n+1\)。 从理论上也可以证明代数精度至多为 \(2n+1\)。 证明:取 \(f(x)=\prod_{k=0}^n(x-x_k)^2\),那么上面等式左边一定有\(\int_a^b f(x)dx >0\),但是等式右边有 \(\sum_{k} A_kf(x_k)=0\),显然不相等。证毕。 除此之外,Gauss型求积公式还可以拓展到带权积分的情况,也即 \[\int_a^b \rho(x)f(x)dx = \sum_{k=0}^n A_k f(x_k) +\frac{1}{(n+1)!}\int_a^b f^{(n+1)}(\xi(x)) w_{n+1}(x) dx\] 关键问题是如何求解 \(A_k,x_k\) 呢? 由于代数精度为 \(2n+1\),对 \(\forall f\in{\mathcalP}_{2n+1}\),截断误差应满足 \(\frac{1}{(n+1)!}\int_a^b f^{(n+1)}(\xi(x))w_{n+1}(x) dx=0\)。又由于 \(f^{(n+1)}\in{\mathcal P}_n\),那么只需要取\(w_{n+1}(x)\) 为 \(n+1\) 阶正交多项式(权函数为 \(\rho\))即可满足该条件。因此Gauss型求积公式的求解方法为: 权函数为 \(\rho\),求 \(n+1\) 阶正交多项式; 求 \(n+1\) 个根 \(x_k\)(在逼近一章中已经证明了一定存在 \(n+1\) 个不同的根); 取 \(f(x)=1,x,...,x^n\)列线性方程组求 \(A_k\)。 Gauss型求积公式有如下性质: \(A_k > 0,k=0,1,...,n\)(取\(f(x)=l_i(x)\) 即可证明); \(\sum_{k=0}^n A_k = \int_a^b\rho(x)dx\)(取 \(f\equiv\)即可证明); 余项 \(E_n(f) =\frac{1}{(2n+2)!}f^{(2n+2)}(\eta)\int_a^b \rho(x) [w_{n+1}(x)]^2dx\)。 3. 数值微分 数值微分和数值积分类似,也有插值型微分公式,即先进性多项式插值,再求导数值。 还可以利用Richardson外推公式提高精度。

2022/1/9
articleCard.readMore