Tips
智能系统设计-Part2.1-Introduction
人类视觉系统
在自然界中,可见光只在全谱段中的非常小一段。但是图像处理是针对于全光谱而言的。
人眼系统感光细胞
人眼系统如上图所示,眼中视网膜上有视椎细胞(Cones)和视杆细胞(Rods)两种。视椎细胞对颜色和黑暗(Dark)敏感;视杆细胞对明光(Brightnes)敏感。
从上图可以看到,视椎细胞在中心分布较多,这就是为什么人眼在看东西时希望把东西放在眼中心,因为该处视椎细胞更多,可以更好地感知物体。视杆细胞在整个视网膜上都有分布,这就是为什么余光可以感知到周围的东西。
这张图是Weber ratio,它说明人眼在低亮度条件下,需要更大的光强差异才能感知到差异(也就是上图左边的$\Delta I$);但在亮光环境下,只需要很小的亮度差异就可以感知到(右侧的$\Delta I$)
马赫带效应(Mach band effect)
人眼在观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显。如上图所示,当你观察上图时,会感觉每一个灰度小格子的左侧都比右侧亮。
相机成像
相机成像可以被看成两个过程:sampling 和 quantization。sampling过程发生在连 ...
智能系统设计-Part2.2-图像压缩
引入图像的冗余信息编码冗余(encoding redundancy):下图这个图像中,只有4种颜色,如果采用8bit色深编码,则会有252种值从未被使用。
空间冗余(spatial redundancy):下图每一行都是一样的像素点,如果每一个像素都独立记录值,则会浪费很多空间。如果能记录256个像素的一条线,再记录这条线重复256次,那么将会剩下很多的空间。
无关信息(irrelevant information):下图的灰度值差异很小很小,肉眼不可查(下图左)。除非使用直方图均衡等算法(下图右),否则图像信息不可见。因此其为可压缩信息。
主流音视频压缩格式
图像编码的总体流程图像存储在设备上,可以总地分为如下几个步骤:
映射器(Mapper):将原图像的$f(x,…)$变换为减少空间和时间冗余的格式,这一操作是可逆的,但并不会减少数据量。在后续介绍JPEG压缩时会介绍DCT变换。
量化器(Quantizer):上一步中,mapper将图像转化到变换域,量化就是将变换域中的数根据存储的比特要求量化成特定值。这一过程会损失信息,如果是无损压缩,则需要舍弃这一步。
符号编码 ...
智能系统设计-罐装知识
ANNANN停止的标准
特定次数的迭代(iteration)之后
输出的误差低于阈值(threshold)
独立验证集(separate validation set)上的错误小于某些标准(criteria)。
ANN各项参数的影响学习率:过小,迭代(iteration)过多;过大,可能错过最优解,在损失函数(lossfunction)最低点震荡(oscillate)
动量(momentum):过小,陷入局部最优解(local minima);过大,造成下降方向与梯度方向差异较大,产生震荡。
*附:动量的作用: 1.使得训练时穿过(rolling through)局部最优(local minima)*
2.加大梯度不变时的步长(step size),提升收敛速率
迭代次数(learning iterations):过小,欠拟合,无法捕捉数据集的通用特征(characteristic)。过多,浪费计算资源,导致过拟合(overfitting)。
*附:防止过拟合的方法:1. 使用验证数据集(validation data set),当误差增加时,则 ...
智能系统设计-Part2.3-图像增强和滤波
灰度变换-像素处理像素处理是最简单、理解最直观的。是对每个像素点的值直接进行变换。像素处理可以只对图像的一部分执行。
在像素处理中,变换函数被记为T,某个像素点变换前的值为r,后的值为S,$S=T(r)$。
熟悉PS的小伙伴会知道PS里面有个曲线,这个曲线其实就是变换函数的函数图像。当曲线是下图这样时,会增强对比度。
如果拖着曲线的中点朝左上或者右下移动(变成指数函数),则可以调整整体的曝光值($s=r^\gamma$)。这里的指数参数$\gamma$就是曝光值。
如果将曲线两头反向,则图片就会反相。
当然,你也可以只对一部分亮度的图像进行增强,其变换函数图像如下
灰度变换-直方图处理直方图用于统计一张图片中各值的像素点数量。其横轴为值,纵轴为数量。可以通过直方图看出来图像的整体亮度,直方图偏高代表图像中高亮度像素较多,偏低代表低亮度像素较多。
直方图均衡从上面可以知道,直方图偏高或者偏低都有问题,能让它均匀分布才能创造不死黑,不过曝,对比度正常的图像,如下图。因此需要进行直方图均衡。
归一化的直方图对于一个分辨率 ...
从C到CPP的迁移
引入为什么会有这篇笔记面向过程和面向对象作用域
基本语法内的新特性引用在C语言中仅有值传递和地址传递,而C++除此之外还可以进行引用传递。
默认参数C语言中若要使用默认参数,仅能通过宏实现。
函数重载函数重载基本用法函数重载是为了提高函数名复用性或是使得函数兼容更多数据类型诞生的。它允许两个函数使用同样的名称,通过传入的参数不同来进行区分。C++编程中支持函数重载,而C不支持。
所谓传入的参数不同,可以是参数的类型不同,例如func(int a)和func(double a);也可以是参数的个数不同,例如func(int a)和func(int a, int b);还可以是顺序不同,例如func(int a, double b)和func(double b, int a)。
例如如下示例。下面两个函数,虽说它们的名字相同,但是由于一个参数类型是int,一个参数类型是double。在调用func函数时,若传入func(1),则调用第一个;若传入func(3.14),则调用第二个。
1234567void func(int a){ cout << a; ...
现代通信网络-罐装知识
电路交换和分组交换
电路交换描述:连接建立开始时,通信系统分配给它的资源(通道、带宽、时隙、码字等等),通信活动的整个过程中,这个连接将始终占用着。电路交换总体可以分为这三步:1. 建立(establish)连接;2. 通话;3.释放连接
电路交换的优点:
无需额外资源开销:业务数据不含有Header,透明传输(Transparent transmission)
通信延迟小
有序传输
控制简单
电路交换的缺点:
资源利用率较低:尽管没有数据传输资源也被占用
鲁棒性差:只要所建立的物理通路中有一点出现故障,就必须拨号重新建立连接
一旦无法建立连接,通信就无法进行。
在要求数据按先后顺序且以恒定速率快速传输的情况下或实时性要求较高时,使用电路交换是较为理想的选择。最典型的应用是传统电信网络。
分组交换描述:分组交换(packet switching)是将数据打包成分组(Packets)进行传输、交换。数据包包含标头(Header),和负载(Payload)。标头包含分组的基本信息,例如地址信息,管理信息等。分组通过最优路径(取决于 路由算法)路由到目标。分组交换可细分为虚电路和数据 ...
Control-Systems-Part2-Lectrue4-根轨迹
引入我们在研究系统极点的路径时,都是对闭环传递函数而言的。因为闭环传递函数的零极点可以直接反应系统的一些特性,例如稳定性,收敛速度,是否存在过冲等等。
考虑下图这样的一个系统,其系统闭环传递函数为$\frac{KG(s)}{1+KG(s)H(s)}$。我们研究的就是$1+KG(s)H(s)=0$时产生的极点。但是,我们的分析对象其实是$G(s)H(s)$这个开环传递函数,我们是通过分析OLTF,来研究CLTF的根。
而所谓根轨迹,就是随着增益K的变换,CLTF极点的移动路径。而这个轨迹可以通过CLTF,即$G(s)H(s)$的极点和零点绘制出来。
根轨迹的基本特性Dr.Huda PPT上的规则比较基础,但下一章会用到超出这个范围外的知识。这个视频讲了更普适的规则【自动控制原理】8_根轨迹_Part2_根轨迹手绘技巧_哔哩哔哩_bilibili。下面的笔记是结合二者写的
根轨迹的数种规则规则1:系统的根轨迹条数等于系统极点个数或零点个数(取最大的那个)例如$G(s)=\frac{(s+4)(s+1)}{(s+3)(s+0.5)}$,系统有2个零点2个极点,Max(2,2)=2,因此系 ...
Control-Systems-Part2-Lectrue5-PID调谐和数字补偿器设计
PID控制器调谐PID三个部分对系统响应的贡献在Part1中详细介绍和分析过PID控制器,这里主要介绍一个调谐原则。回顾一下,PID的通式是:
u(t)=K_pe(t)+K_i\int e(t)dt+K_d\frac{de(t)}{dt}写成并联形式是:
C(s)=K_p+\frac{K_i}{s}+K_ds
写成标准形式是:
K_p(1+\frac{1}{sT_i}+sTd)
C(s)=\frac{U(s)}{E(s)}=K_p+\frac{K_i}{s}+K_ds=\frac{K_ps+K_i+K_ds^2}{s}PID控制器会给系统引入一个位于原点的极点,和2个零点。由前面介绍的零极点分析系统响应的法则,可以导出其各个部分对系统瞬态响应的贡献:
$K_p$的贡献是:
减少rise time $t_r$
但是无法消除稳态误差
决定响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。
$K_i$的贡献是:
消除稳态误差
但是会削减瞬态响应
会削减系统稳定性
在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。
$K_d ...
Control-Systems-Part2-Lectrue1~3-数字控制系统基础
数字控制系统简介数字控制系统的核心是使用MCU、电脑之类的控制器通过软件的形式对数据进行处理。而不是模拟信号那样通过模拟器件来构成积分器微分器等等。
数字控制系统具有如下优点:
对噪声的鲁棒性好:数字信号可以无损传输,只要不超过门限值,数字信号读取出来都是无损的。
灵活性高:数字控制系统主要通过软件编程来实现对数据的处理,这样的系统灵活性高,重新刷写程序即可设计新的系统
成本:数字系统的可靠性在升高而成本在下降
易用性:大规模集成电路可以更轻易地集成数字IC,这对数字信号处理更加友好
数字控制系统的基础-ADC和DAC
一个基本的数字系统如上图所示,其模拟输出的数字信号必须经过DAC转化为模拟信号交给模拟系统去执行,而反馈回来的模拟信号又必须通过ADC转化为数字信号以作为参考计算值。
DAC有两种常用的DAC电路:
R-2R 梯子(R-2R ladder)网络。
加权电阻器
R-2R ladder下图是一个3bits R-2R DAC的电路图。$b_1$是LSB,$b_2$是MSB。让我们分析一下这个电路。
(1)上图这样$b_2$接通的状态,
将电阻器件编为3组。如上图 ...
Control Systems Part1-4b-超前、滞后补偿器设计
预补偿器(Pre-Compensator)的介绍预补偿器和上文PID控制器位于系统中同一位置,它旨在用于调整系统响应的各个方面,包括稳态误差、Overshoot、setting time等等。在不重新设计整个控制系统的情况下,使用预补偿器是一种相对简单的方法来修改系统。PID其实就是一种特殊的预补偿器。
它的优点有:
简单:无需重新设计整个系统
精确:可以通过对与补偿器的设计来消除系统稳态误差
灵活:它可以影响系统的方方面面而不直接修改系统
它的缺点有:
带宽限制:提高稳态误差性能会导致带宽变窄,从而影响系统快速响应变化的能力。
稳定性问题:如果设计不当,添加预补偿器可能会破坏系统的稳定性,特别是如果引预补偿器入了明显的相位滞后。
设计中的复杂性:对于某些系统,设计有效的预补偿器需要对系统响应进行复杂的分析和理解,这可能既复杂又耗时。
根轨迹下预补偿器的设计前置知识:如何判断根是否在根轨迹上频率响应下的预补偿器(Pre-Compensator)设计引入-PID控制器与与补偿器的关系PI控制器前面提到PI控制器有消除稳态误差的能力。PI控制器的通式为:
G_c(s)=K_p(1 ...