Tips
智能系统设计-Part2.2-图像压缩
引入图像的冗余信息编码冗余(encoding redundancy):下图这个图像中,只有4种颜色,如果采用8bit色深编码,则会有252种值从未被使用。
空间冗余(spatial redundancy):下图每一行都是一样的像素点,如果每一个像素都独立记录值,则会浪费很多空间。如果能记录256个像素的一条线,再记录这条线重复256次,那么将会剩下很多的空间。
无关信息(irrelevant information):下图的灰度值差异很小很小,肉眼不可查(下图左)。除非使用直方图均衡等算法(下图右),否则图像信息不可见。因此其为可压缩信息。
主流音视频压缩格式
图像编码的总体流程图像存储在设备上,可以总地分为如下几个步骤:
映射器(Mapper):将原图像的$f(x,…)$变换为减少空间和时间冗余的格式,这一操作是可逆的,但并不会减少数据量。在后续介绍JPEG压缩时会介绍DCT变换。
量化器(Quantizer):上一步中,mapper将图像转化到变换域,量化就是将变换域中的数根据存储的比特要求量化成特定值。这一过程会损失信息,如果是无损压缩,则需要舍弃这一步。
符号编码 ...
智能系统设计-Part1-ANN
当时忙期末ANN部分笔记未整理,网站笔记不全,建议参考mirror。其余部分笔记完整。
引入Artificial Neural Network (ANN)是人工智能学科的分支,其由人类大脑结构仿生而来。其具有自我学习,适应新环境,从已有经验学习解决新问题的能力。
人类神经元与仿生神经元
人类神经元上,一个细胞可以通过轴突(Axon)发送信号给另一个细胞,另一个细胞使用树突(Dendrites) 接收并汇聚所有收到的信号后,进行处理。人类大脑中约有100亿个神经元,每个神经元有约1万个突触与其他神经元相连。(具体数据与解刨学有关,不一定准确)。
在人脑系统中,采用低频(约100Hz)并行计算的策略,这与高频但是核心数少的现代计算机有所差异。
人工神经元与人类神经元类似,它接受多个输入,且针对每个输入有一个权重值,将输入加权求和后,放入“激活函数”中,计算本神经元的输出,将其输出给下一神经元。
y_i=f(\sum_jw_{ij}y_j)其中这个激活函数是非线性的。为什么需要这个“激活函数”呢?因为早在信号与系统就学过,线性系统无法通过加减乘除变为非线性系统,因此一旦需要输出结果具有 ...
智能系统设计-罐装知识
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-5-状态空间表示
本章节Dr.Zooba的PPT在原理阐释上比较模糊,以教会你套公式怎么做题为主,建议参考B站DR_CAN视频:【Advanced控制理论】2_状态空间_State Space_哔哩哔哩_bilibili。本篇笔记在原理阐释部分以DR_CAN的视频笔记为主。
状态空间表示法原理阐释对于任意一个系统,其输入和输出可用微分方程表示,例如下图这个由弹簧、阻尼器、小物块构成的系统。小物块质量为m,位移为x,受力情况是:($\dot x$表示$x$的一阶导数,$\ddot x$表示二阶,以此类推)
受拉力f(t)
受阻尼力$f_B=B \dot x$
受弹簧拉力$f_k=kx$
根据$F_{合力}=ma,a=v’=x’’$(位移的导数是速度,速度的导数是加速度),因此可以列出方程:
m\ddot x=f(t)-f_k-f_B=f(t)-kx-B\dot x在上式中,记位移$x$是系统的输出,拉力$f(t)$是系统的输入。按照以往信号与系统的处理方式,会将该微分方程输入与输出各放一边后拉普拉斯变换。
但在现在控制理论中,会将其转化为状态空间方程的形式。一个信号经过微分器微分前后就是两个不同 ...