Cling Jupyter Notebook

Cling Jupyter Notebook 最近开始学习C++20相关的特性,需要经常性地写一些代码进行验证工作,试用了一下cling,感觉不错,记录一下。 之前也留意到xeus-cling项目,尝试了用conda拉取失败,遂放弃,自己动手编译吧。 编译 按照Readme来编译还是有点小坑的,主要有以下: cmake 指令问题,大小写有点坑,这个issue算是解决了。 OOM问题:需要编译cling和root-project的llvm工程,如果采用多线程编译的话,笔记本32G的内存还是会有内存不够用的情况。将线程数量调小就可以避免,问题不大。编译完成后,cling-build目录竟然有95GB。 Jupyter notebook 默认的安装目录为/usr/local,不过Jupyter相关的文件并没有安装到这个目录下,需要自己到工程目录下去找 cling/tools/Jupyter。 自行安装配置好Python3的venv后,按照ReadMe的说明配置一下就可以。 如果要尝试一下C++20的特性,可以参考#520为Jupyter notebook增加 C++20 的入口。不过需要留意一下编译时gcc的版本,笔者用的Debian 12自带的默认gcc版本为12.2,支持大部分C++20的语言特性。gcc对C++语言标准的支持可参考C++20 Support in GCC。……

Continue reading

Know how to access name in templated base classes

模板基类成员如何在继承类中访问 如题,最近在C++标准库的学习过程中,产生了这样的疑问。标准库中解决这个问题一共有3种方式: 用using来指明该成员为依赖名称(dependent name) 直接把带模板参数的基类作用于成员名称前 采用this指针来指明该名称依赖于实例化后的类 这3种方式实际上都是在告知编译器,该成员是一个依赖名称,需要在实例化后才能找到。 但是为什么呢?找寻了很久才发现了满意的答案。 Short answer: in order to make x a dependent name, so that lookup is deferred until the template parameter is known.……

Continue reading

Kalman Filter小结

卡尔曼滤波小结 最近复习了一下卡尔曼滤波,并在Coursera上完成了课程与练习1,做些简单的笔记备忘。 1. 线性卡尔曼滤波 简单来说,对于一个线性系统的状态,可以通过模型计算获取到一个基于模型的预测状态,再通过实际测量的值来纠正系统的状态。 通过模型来更新状态 系统的控制方程为: $$ \check{x}_k = F_{k-1} \hat{x}{k-1} + G{k-1}u_{k-1} $$ 更新状态协方差矩阵: $$ \check{P}_{k}= F_{k-1} \hat{P}{k-1} F{k-1}^{T} + L_{k-1} Q_{k-1} L_{k-1}^{T} $$……

Continue reading

台式机折腾记

配置 趁着618攒了一台主机,犹豫了很久还是决定上车AMD,配置如下: CPU: AMD Ryzen-9 5900x 主板:TUF Gaming X570-Plus WIFI 硬盘: 1TB SSD KC2500 4TB HDD 西部数据蓝盘 Fury 32GB DDR4 3600MHz 美商海盗船AIR540中塔机箱 美商海盗船HX1200,1200W电源 GTX 750Ti显卡(等矿难) 装机的过程略去不表。记录一些配置工作:……

Continue reading

Richardson-Lucy Deconvolution

RL反卷积都干了些啥 RL反卷积是通过迭代的方法来优化损失函数,利用噪声性质和成像系统的点分布函数(Point Spread Function)对图像进行去噪的一种方法。 损失函数是啥样的呢? $$ J(O) = \Sigma(O**PSF - I \cdot ln(O ** PSF)) $$ 且有: $J$,损失函数,为最小化的目标 $O(x,y)$,不受椒盐噪声和点分布函数模糊效应影响的理想原始图像 $PSF(x,y)$,Point Spread Function,点分布函数 $I(x,y)$,实际拍摄到的图像 $**$,二维卷积 $\cdot$,按元素相乘 既然要优化$J(O)$,那么就对O求导:……

Continue reading

树莓派实时内核编译与测试

1. 简介 本文档主要根据LeMaRiva的博客内容整理并基于最新的rt分支代码复现,简述以下2个方面: 如何为树莓派编译实时内核 测试实时内核的进程调度延时性能 实验所需硬件: 树莓派3B 8G TF卡 2. 编译 1.获取代码和工具: # From LeMaRiva mkdir rpi-rt cd rpi-rt mkdir rt-kernel # 用于存放编译产生的文件 cd rt-kernel mkdir boot cd .……

Continue reading

从伯德图说起

在当初学《自动控制原理》的时候,并没有去理解公式背后的意义,囫囵吞枣式地做题、计算、画图。现在想来,传递函数的计算、根轨迹的绘制甚至是伯德图的快速绘制方法都记不得了,但是在实践和仿真中,对于概念的理解更深入了些,所以写下。本文从伯德图说起,讲了以下3个方面: 伯德图表示什么 开环伯德图表示什么 伯德积分定理意味着什么 伯德图表示什么 伯德图是从频域的概念来描述系统的性质、表现的。如果我们考虑最简单的系统——比例环节: $$G_{p} = K_{p}$$ 当 $K_{p} = 1$ 时,其传递函数如下图所示: 那么这张图代表什么呢?代表着任意频率的正弦信号通过比例环节之后输出的信号的幅值依然不变——增益为0dB;同时输出信号和输入信号是同相位的,没有相位延迟。 那么如果我们考虑常见的一阶惯性环节呢: $$ G_{rc} = \frac{1}{T_{s}s + 1} $$……

Continue reading

Windows的MATLAB中用C语言写SFunction的一些坑

1.测试环境 操作系统:Windows 10, 64bit 编译器:MinGW64 32位系统请下载对应的32位版本 MATLAB2017a 2017a之后会略有不同 2. 配置环境与流程 下载编译器MinGW64,对于64位系统而言,需要下载个安装器,可以安装相应版本的gcc编译器,我选择的是gcc-4.9.4,在测试环境中可以正常运行 安装器是mingw-w64-install,安装时注意选择64位,同时安装完了还有一个坑:空格。 下载器默认的安装路径"C:Files-w64_64-4.9.4-win32-seh-rt_v5-rev0"是包含有空格的,MATLAB并不能识别该路径,所以可以把mingw64移动到不含空格的路径下,比如"C:"。 验证一下:……

Continue reading

Discretization method(离散化方法)

离散化方法的笔记 最近看论文中发现,分析系统的稳定性问题总免不了在s域先分析一下,然后再在z域上分析一下。可是很多论文对于离散化方法却略去不提,直接给出推导出的结果。所以笔者就寻找总结了一下各种离散化方法,总结一下。学通信或者测量的同学,专门学过数字信号处理的话,应该很熟悉的。 1. 后向差分 后向差分的映射关系为: $$ s \leftarrow \frac{z-1}{Tz} $$ 从s平面到z平面上来看的话,这实际上是将s平面的左半平面映射到z平面的以(0.5,0)为圆心,半径为0.5的圆中。所以原来稳定的系统,经过后向差分之后,一定是稳定的,因为该圆在单位圆内;而原来不稳定的系统,有可能被映射到单位圆中,即可能存在原来不稳定的系统经过后向差分离散化之后,是稳定的。 参考文献中有s平面映射到z平面的图,方便理解,有需要的同学可以查看。 2. 前向差分 前向差分的映射关系为: $$ s \leftarrow \frac{z-1}{T} $$ 从s平面到z平面上来看,其实是将左半平面映射到了z平面上直线 $z=1$ 的左边平面上。所以原来在s域上稳定的系统经过前向差分之后的离散系统可能是不稳定的。 3.……

Continue reading