From 8bda315f3ac6988e8564ccf16d5fcb12b320eba3 Mon Sep 17 00:00:00 2001 From: xiahouzuoxin Date: Mon, 15 Jun 2020 16:04:36 +0800 Subject: [PATCH] fix equations --- ...06\345\210\260\345\256\236\347\216\260.md" | 52 +++++++++---------- ...17\347\232\204\346\226\271\346\263\225.md" | 8 +-- ...4\271\213Hough\345\217\230\346\215\242.md" | 6 +-- ...76\345\203\217\345\271\263\346\273\221.md" | 4 +- ...00\344\270\216\350\206\250\350\203\200.md" | 8 +-- ...00\346\265\213\347\256\227\345\255\220.md" | 10 ++-- ...76\345\203\217\351\242\221\345\237\237.md" | 2 +- ...76\347\211\207\345\217\240\345\212\240.md" | 2 +- ...13\346\237\245\346\211\276\350\241\250.md" | 2 +- ...65\350\267\257\345\210\206\346\236\220.md" | 10 ++-- ...56\346\240\207\350\257\206\345\210\253.md" | 12 ++--- ...60\351\237\263\345\216\273\345\231\252.md" | 6 +-- ...23\344\274\240\346\222\255\345\220\227.md" | 4 +- ...46\346\261\202\345\235\207\345\200\274.md" | 6 +-- ...27\347\232\204\345\210\206\346\236\220.md" | 2 +- ...13\347\274\251\346\204\237\347\237\245.md" | 24 ++++----- ...20\345\217\212\345\272\224\347\224\250.md" | 16 +++--- ...66\347\216\207\347\256\227\346\263\225.md" | 8 +-- ...adientsforObjectnessEstimationat300fps.md" | 10 ++-- ...\345\210\260\345\256\236\347\216\260.html" | 52 +++++++++---------- ...\347\232\204\346\226\271\346\263\225.html" | 8 +-- ...271\213Hough\345\217\230\346\215\242.html" | 6 +-- ...\345\203\217\345\271\263\346\273\221.html" | 4 +- ...\344\270\216\350\206\250\350\203\200.html" | 8 +-- ...\346\265\213\347\256\227\345\255\220.html" | 10 ++-- ...\345\203\217\351\242\221\345\237\237.html" | 2 +- ...\347\211\207\345\217\240\345\212\240.html" | 2 +- ...\346\237\245\346\211\276\350\241\250.html" | 2 +- ...\350\267\257\345\210\206\346\236\220.html" | 10 ++-- ...\346\240\207\350\257\206\345\210\253.html" | 12 ++--- ...\351\237\263\345\216\273\345\231\252.html" | 6 +-- ...\344\274\240\346\222\255\345\220\227.html" | 4 +- ...\346\261\202\345\235\207\345\200\274.html" | 6 +-- ...\347\232\204\345\210\206\346\236\220.html" | 2 +- ...\347\274\251\346\204\237\347\237\245.html" | 24 ++++----- ...\345\217\212\345\272\224\347\224\250.html" | 16 +++--- ...\347\216\207\347\256\227\346\263\225.html" | 8 +-- ...ientsforObjectnessEstimationat300fps.html" | 10 ++-- 38 files changed, 192 insertions(+), 192 deletions(-) diff --git "a/essays/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.md" "b/essays/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.md" index 052361c..a024589 100644 --- "a/essays/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.md" +++ "b/essays/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.md" @@ -32,29 +32,29 @@ Rudolph Kalman在1960年发现了离散时间系统的Kalman滤波器,这就 话说,有一辆质量为m的小车,受恒定的力F,沿着r方向做匀加速直线运动。已知小车在t-ΔT时刻的位移是s(t-1),此时的速度为v(t-1)。求:t时刻的位移是s(t),速度为v(t)? -由牛顿第二定律,求得加速度: +由牛顿第二定律,求得加速度: 那么就有下面的位移和速度关系: - + - + 如果将上面的表达式用矩阵写在一起,就变成下面这样: - + 卡尔曼滤波器是建立在动态过程之上,由于物理量(位移,速度)的不可突变特性,这样就可以通过t-1时刻估计(预测)t时刻的状态,其__状态空间__模型为: - + 对比一下(1)(2)式,长得及其相似有木有: - + 匀加速直线运动过程就是卡尔曼滤波中状态空间模型的一个典型应用。下面我们重点关注(2)式,鉴于研究的计算机信号都是离散的,将(2)是表示成离散形式为: -
+
其中各个量之间的含义是: @@ -71,9 +71,9 @@ Rudolph Kalman在1960年发现了离散时间系统的Kalman滤波器,这就 然而,初中物理就告诉我们,“尺子是量不准的,物体的物理真实值无法获得”,测量存在误差,我们暂且将这个误差记为v(n)。这种通过直接测量的方式获得所需物理量的值构成__观测空间__: -
+
-z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量(位移、速度),v(n)~N(0,R)为测量噪声,同状态空间方程中的过程噪声一样,这也是一个后面要讨论的量。大部分情况下,如果物理量能直接通过传感器测量,。 +z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量(位移、速度),v(n)~N(0,R)为测量噪声,同状态空间方程中的过程噪声一样,这也是一个后面要讨论的量。大部分情况下,如果物理量能直接通过传感器测量,。 ![img1] ![img2] @@ -92,25 +92,25 @@ z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量( 预测值: - + 最小均方误差矩阵: - + 2. 修正 误差增益: - + 修正值: - + 最小均方误差矩阵: - + 从(5)~(9)中: @@ -121,7 +121,7 @@ z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量( - x(n|n):用n时刻及n时刻以前的数据对n时刻的估计结果,这也是Kalman滤波器的输出 - P(n|n-1):NxN,最小预测均方误差矩阵,其定义式为 - + 通过计算最终得到(6)式。 - P(n|n):NxN,修正后最小均方误差矩阵。 @@ -133,11 +133,11 @@ Kalman滤波算法的步骤是(5)(6)->(7)->(8)(9)。当然,建议找本教材 > __Example__: -> 还可以更简单一些:设小车做匀速(而非匀加速)直线运动,方便计算,假设速度绝对的恒定(不波动,所以相关的方差都为0),则u(t)==0恒成立。设预测(过程)位移噪声w(n)~N(0,2^2),测量位移噪声v(n)~N(0,1^2),n-1状态的位移,速度为v=10m/s,n时刻与n-1时刻的物理时差为ΔT=1s。同时,也用尺子测了一下,结果位移为z(n)=62m。 +> 还可以更简单一些:设小车做匀速(而非匀加速)直线运动,方便计算,假设速度绝对的恒定(不波动,所以相关的方差都为0),则u(t)==0恒成立。设预测(过程)位移噪声w(n)~N(0,2^2),测量位移噪声v(n)~N(0,1^2),n-1状态的位移,速度为v=10m/s,n时刻与n-1时刻的物理时差为ΔT=1s。同时,也用尺子测了一下,结果位移为z(n)=62m。 > 则A = [1 ΔT; 0 1]=[1 1; 0 1],根据(5),预测值为 -> 。 +> 。 > 现在已经有了估计值和测量值,哪个更接近真值,这就通过最小均方误差矩阵来决定! @@ -145,13 +145,13 @@ Kalman滤波算法的步骤是(5)(6)->(7)->(8)(9)。当然,建议找本教材 > 由物理量的关系知,H(n)=[1 1],增益K(n)=[1;0]{1+[1 1][1 0; 0 0][1; 1]}^(-1)=[1/2;0]。 -> 所以,最后的n时刻估计值既不是用n-1得到的估计值,也不是测量值,而是:,因此,最终的Kalman滤波器的输出位移是60.5m。 +> 所以,最后的n时刻估计值既不是用n-1得到的估计值,也不是测量值,而是:,因此,最终的Kalman滤波器的输出位移是60.5m。 从上面的递推关系知道,要估计n时刻就必须知道n-1时刻,那么n=0时刻该如何估计,因此,卡尔曼滤波要初始化的估计值x(-1|-1)和误差矩阵P(-1|-1),设x(-1,-1)~N(Us, Cs),则初始化: - + - + 综上,借用一张图说明一下Kalman滤波算法的流程: @@ -175,23 +175,23 @@ Kalman滤波算法的步骤是(5)(6)->(7)->(8)(9)。当然,建议找本教材 ![img4] - + 稍微计算一下,通过上式求出u和σ^2, -
+
-
+
现在令 -
+
则(10)(11)变成: -
+
-
+
到这里,请将(13)-(14)与(8)-(9)式对比!标量的情况下,在小车的应用中有:A=1,H=1,正态分布的均值u就是我们要的输出结果,正态分布的方差σz^2就是最小均方误差。推广到矢量的情况,最小均方误差矩阵就是多维正态分布的协方差矩阵。 diff --git "a/essays/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.md" "b/essays/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.md" index fa06b8a..0fac532 100644 --- "a/essays/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.md" +++ "b/essays/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.md" @@ -33,18 +33,18 @@ forkosh上提供了关于Latex公式的一份简短而很有用的帮助,参 使用forkosh插入公式的方法是 ``` - + ``` 给个例子, ``` - + ``` 显示结果为: - + 因为网页插入公式的原理是调用“某某网站的服务器”动态生成的,所有保证公式正常显示的前提是该网址能一直存在着为我等小生做些小小的服务。forkosh我是用了快2年了,一直很好,推荐! @@ -89,7 +89,7 @@ $$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$ @触发文本:Equation @代码片段:请在下一行开始输入内容! - + ``` diff --git "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.md" "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.md" index 8cddf77..e03f1a2 100644 --- "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.md" +++ "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.md" @@ -6,7 +6,7 @@ 对于图像中共线的点集{(x0,y0), (x1,y1), ...}都经过直线y=kx+b,先在我们换一个说法,“斜率为k,截距为b的直线y=kx+b包含了所有在该直线上的点”。一种强调的是图像中的点集,另一种强调的是直线的参数k和b,通过直线的点集去描述这条直线明显没有直接通过k,b两个参数去描述那样直接方便。而Hough变换就是将我们“点共线”的思维转化到参数空间{k,b}进行描述,图像空间中所有经过y=kx+b的点经过Hough变换后在参数空间都会相交于点(k,b),这样,通过Hough变换,就可以将图像空间中直线的检测转化为参数空间中对点的检测。我们不妨将y=kx+b进行一下变形: - + 这就是Hough变换将图像空间坐标(x,y)转化为参数空间(k,b)的Hough变换式。 @@ -24,11 +24,11 @@ Hough变换的步骤(执行过程): 极坐标中的直线方程为 - + 将其改写成Hough变换式,即自变量(x,y)到参数变量(r,$theta$)的映射: - + 使用极坐标参数空间,Hough变换的步骤不变,只不过将kbcnt替换成rthcnt,r范围是图像对角线的长度,th范围是0~2*pi。因为图像是离散的,所以r和th都有一个步进值dr和dth。 diff --git "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.md" "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.md" index f93a286..992460b 100644 --- "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.md" +++ "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.md" @@ -6,7 +6,7 @@ 图像平滑与图像模糊是同一概念,主要用于图像的去噪。平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器,其统一形式如下: - + 其中h称为滤波器的核函数,说白了就是权值。不同的核函数代表不同的滤波器,有不同的用途。 @@ -20,7 +20,7 @@ 是实际中最常用的滤波器,高斯滤波是将输入数组的每一个像素点与 高斯内核 卷积将卷积和当作输出像素值。高斯核相当于对输出像素的邻域赋予不同的权值,输出像素点所在位置的权值最大(对应高斯函数的均值位置)。二维高斯函数为, - + 3. 中值滤波器(median blur) diff --git "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.md" "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.md" index 8b2ddb8..7696d71 100644 --- "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.md" +++ "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.md" @@ -26,21 +26,21 @@ _结构元素_是形态学操作中最重要的概念, 1. 腐蚀操作 - + 其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。腐蚀运算是由结构元素确定的邻域块中选取图像值与结构元素值的差的最小值。 2. 膨胀操作 - + 其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。 膨胀运算是由结构元素确定的邻域块中选取图像值与结构元素值的和的最大值。 在灰度图的形态学操作中,一般选择“平摊”的结构元素,即结构元素B的值为0,则上面对灰度图的形态学操作可简化如下: - + - + 好了,这就是基本的形态学操作——腐蚀和膨胀,下面是使用OpenCV对图像进行腐蚀和膨胀的程序,还是秉承我们一贯的原则:搁下理论,先直观地感觉图像处理算法的效果,实际项目需要时再深入挖掘! diff --git "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.md" "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.md" index dc82b5a..c59300e 100644 --- "a/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.md" +++ "b/essays/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.md" @@ -10,7 +10,7 @@ 对于二维的图像,梯度定义为一个向量, - + Gx对于x方向的梯度,Gy对应y方向的梯度,向量的幅值本来是 $mag(f)=({G_x}^2+{G_y}^2)^{1/2}$,为简化计算,一般用mag(f)=|Gx|+|Gy|近似,幅值同时包含了x而后y方向的梯度信息。梯度的方向为 $\alpha=arctan(Gx/Gy)$ 。 @@ -29,11 +29,11 @@ Gx对于x方向的梯度,Gy对应y方向的梯度,向量的幅值本来是 $ 上面的一阶导数算子,是各向异性的,因此分x方向和y方向的梯度值,而高斯拉普拉斯算子是对图像求二阶导数,边缘对应二阶导数的过零点。 - + 由上式可知,xy进行互换的结果是一样的,所以拉普拉斯算子没有x方向和y方向的区分,拉普拉斯算子对应图像中的差分运算是: - + 也可以通过卷积模板实现, @@ -41,7 +41,7 @@ Gx对于x方向的梯度,Gy对应y方向的梯度,向量的幅值本来是 $ 相对于一阶导数,高斯拉普拉斯算子(Laplacian of Gaussian, LOG算子)由于求二阶导数,很容易将点噪声判别为边界,因此常在使用LOG算子前先用高斯平滑滤波器去除正态分布的噪声,二维高斯分布为: - + 其中 $\sigma$ 为高斯分布标准差,决定高斯滤波器的宽度,用该函数对图像平滑滤波,可以减少椒盐噪声对LOG算子的影响。 @@ -58,7 +58,7 @@ Canny算子力图在抗噪声干扰与精度之间寻求最佳方案,Canny算 1. 使用高斯滤波器平滑图像,卷积核尺度通过高斯滤波器的标准差确定 2. 计算滤波后图像的梯度幅值和方向 可以使用Sobel算子计算Gx与Gy方向的梯度,则梯度幅值和梯度的方向依次为 - + 3. 使用非最大化抑制方法确定当前像素点是否比邻域像素点更可能属于边缘的像素,以得到细化的边缘 其实现是:将当前像素位置的梯度值与其梯度方向上相邻的的梯度方向的梯度值进行比较,如果周围存在梯度值大于当前像素的梯度值,则不认为查找到的当前像素点为边缘点。举例来说,Gx方向的3个梯度值依次为[2 4 3],则在Gx梯度方向上4所在像素点就是边缘点,如果把改成[2 4 1]就不是边缘点。如果用全向的梯度方向作为非最大抑制的判断依据,则要求G(x,y)>所有4邻域的或8邻域的梯度值才被认为是边缘点。 diff --git "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.md" "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.md" index ab13654..b7e2ef8 100644 --- "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.md" +++ "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.md" @@ -99,7 +99,7 @@ int main(int argc, char *argv[]) 1. 二维图像的DFT(离散傅里叶变换), - + 图像的频域表示的是什么含义呢?又有什么用途呢?图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像大部分平缓的灰度变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征。 diff --git "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.md" "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.md" index e9bc31f..cf336aa 100644 --- "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.md" +++ "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.md" @@ -67,7 +67,7 @@ int main(int argc, char *argv[]) 这里的图像叠加指线性叠加,设图像A的像素为fA(x),图像B的像素为fB(x),叠加系数为α,则线性叠加操作为: - + α为0-1之间的值,从上面也可以看出,叠加必需保证两幅输入图像的尺寸大小相同。程序中的 diff --git "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.md" "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.md" index 76b3f26..43823e7 100644 --- "a/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.md" +++ "b/essays/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.md" @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) 一般的灰度图像有256个灰度级,而有时我们并不需要这么精确的灰度级(严重影响运算时间),比如黑白图像。这意味着我们以一个新的输入值划分当前的颜色空间,比如灰度到黑白色,将0~127灰度值直接赋值0,128~255赋值1,最终得到较少的黑白两色。查找表就扮演着这种降低灰度级而提高运算速度的角色。量化前和量化后的灰度值可以用下面的表达式表示: - + 其中Q表示量化级别,如取10,表示:灰度值1-10用灰度值1表示,灰度值11-20用灰度值11表示,以此类推! diff --git "a/essays/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.md" "b/essays/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.md" index 57f20dc..e23d443 100644 --- "a/essays/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.md" +++ "b/essays/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.md" @@ -15,7 +15,7 @@ 但是,加了R91又要注意了:R91如果太小,基极电压近似 - + 只有Vb>0.7V时才能使US_CH0为高电平时导通,上图的Vb=1.36V @@ -40,15 +40,15 @@ 1. 计算下各处的电流(S9013的β=120,设蜂鸣器电流15mA): - + - + - + 输入为高电平的门槛电压计算为: - + R1起到了提供啊门槛电压的作用。 diff --git "a/essays/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.md" "b/essays/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.md" index 20be746..de3d0fd 100644 --- "a/essays/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.md" +++ "b/essays/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.md" @@ -16,11 +16,11 @@ y = pyulear(x, 256, 128); AR谱的计算有2个重要的参数:系数阶数、FFT反变换的点数。AR谱是一种递推模型,即用前p个时刻的时域值估计当前第n时刻的值: - + 其中u(n)是噪声输入,系数阶数就是上式中的p。牵扯到FFT,是因为功率谱的计算中可以使用FFT进行快速计算,因此就有离散FFT在单位圆上抽样点数的问题,功率谱的计算公式是: - + 上式中转化后有a0=1,将FFT计算扩充到N点后有a(p+1)...a(N-1)=0,FFT点数就是指的这里用于FFT计算的长度N。 @@ -34,7 +34,7 @@ AR谱的细节参见胡广书编著《数字信号处理》一书,其C实现 ### 1 短时平均能量(Short Time Energy, STE) - + 其中N表示一帧的长度。短时平均能量可用于判断静音帧,静音帧的短时能量小,这比直接通x(n)的最高幅值进行判断稳定性要高。对于静音帧,应该在后续的处理之前去除。通常,语音比音乐含有更多的静音(人说话没有音乐那样着腔带调),因此,语音的平均能量的变化要比音乐中大很多。 @@ -42,7 +42,7 @@ AR谱的细节参见胡广书编著《数字信号处理》一书,其C实现 短时过零率是在一个音频帧内,离散采样信号值由负到正或由正到负的变换次数。 - + 从某种程序上讲,过零率表达了信号的跳变速度,是频率的一种简单度量。过零率与平均能量结合能用于语音端点检测。在博文[自适应含噪信号过零率算法](../html/自适应含噪信号过零率算法.html)中也曾尝试改进过零率用于震动信号的识别。 @@ -50,7 +50,7 @@ AR谱的细节参见胡广书编著《数字信号处理》一书,其C实现 子带能量用于描述主要能量的频域分布特征,其过程就是将频域等间隔划分成B个子带,在AR谱图上,对每个子带范围进行积分就可求出子带能量Ei,则子带能量比就是 - + 不同音频信号的能量分布不同,通过子带能量能区分能量的主要分布频带。子带能量比是一个很好参数,用于识别频率能量分布不同的目标。当然类似的思想也可以用到FFT频谱图上。 @@ -58,7 +58,7 @@ AR谱的细节参见胡广书编著《数字信号处理》一书,其C实现 将AR谱的幅值看做权值w,则谱频率重心的计算是: - + 谱频率重心是通过谱峰统计的中心,并不会(当然也可能等于)等于AR谱主峰对应的频率。 diff --git "a/essays/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.md" "b/essays/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.md" index 7b9a804..d3276ed 100644 --- "a/essays/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.md" +++ "b/essays/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.md" @@ -6,13 +6,13 @@ 实际听觉环境中,肯定是含有噪声的,那掺杂有噪声的声音信号中原声音信号和噪声信号是如何体现的呢?一种普遍被使用的方法是:采集到的声音信号永远都是原信号与噪声信号的叠加,即 - + 模型是信号的直接叠加,这就要满足:原信号与噪声信号不相关。其实有些情况下这个条件是不满足的,所以依然有很多其他的模型,如有人认为原信号和噪声信号是卷积的关系。当然,这些都是模型,还没有明确的理论证明那种是对的,反正哪种好用我们就捡谁。谱减法就是基于噪声的加法模型。 语音信号本身是非平稳过程,但假如取很短的一段(10~30ms),则具有短时平稳特性。因此,使用窗函数取含噪语音信号的一帧(N点)进行处理。信号叠加模型两边同时进行傅里叶变换,并取模, - + 则对原信号幅值的估计就可通过|S(k)|=|Y(k)|-|N(k)|求得,但仅这样存在2个问题: @@ -25,7 +25,7 @@ 在语音增强的应用中,由于人耳对相位信息的感知不敏感,信号恢复时仍使用的相位信息为带噪信号的相位,相位信息保存在哪里呢?我们知道FFT的结果是复数, - + $\phi(w)$ 就是相位,具体一些,复数在直角坐标系上表示, diff --git "a/essays/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.md" "b/essays/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.md" index ba24001..4133376 100644 --- "a/essays/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.md" +++ "b/essays/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.md" @@ -13,13 +13,13 @@ 1. 反射系数 - + 其中Z = pv为材料的特性阻抗(p为材料密度,v为声波在材料中传播速度) 2. 透射系数 - + 依据以上的反射与透射系数,对介质情况分析如下: diff --git "a/essays/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.md" "b/essays/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.md" index 594c406..ddb6ca1 100644 --- "a/essays/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.md" +++ "b/essays/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.md" @@ -28,11 +28,11 @@ 综合这两种情况,当|α-β|>180情况下不是求算术平均值。这种情况下期望的角度均值为(以α小于β为例): - + 同理,因为上面的表达式中的α与β对称,所以α大于β计算的结果也一样。因此可知,非算术平均值的情况只要在算术平均值的基础上加180就可以了,因此归纳如下: - + 上面仅是两个角度值的平均,通过两个角度的差值做判别条件确定是否是算术均值,然而,多个的呢? @@ -97,7 +97,7 @@ float angle_avg(float *angle, uint32_t n) Wikipedia中计算平均角度的方法: - + 参考文献1中给出了关于圆周变量更细致的数学分析与描述,是一份难得的资料,参考文献2是StackOverflow上关于圆周角度的探讨,作为对该问题的理解很有帮助。 diff --git "a/essays/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.md" "b/essays/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.md" index 5f8488c..488fd8c 100644 --- "a/essays/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.md" +++ "b/essays/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.md" @@ -18,7 +18,7 @@ Author: [xiahouzuoxin](http://xiahouzuoxin.github.io) / Date: [2014-10-18](http: 实验最后给出了两个不同频率下的匹配阻抗值。非线性电路中也满足欧姆定律,只不过电阻被阻抗代替了,“欧姆定律真是一项伟大的发现”, - + 超声的发送距离与超声探头发射的能量P=U^2/|Z|有关,远距离超声测距当然希望的是:相同电压下,超声探头的阻抗越小越好。 diff --git "a/essays/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.md" "b/essays/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.md" index 07535f6..b90e5ed 100644 --- "a/essays/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.md" +++ "b/essays/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.md" @@ -22,15 +22,15 @@ 使用压缩感知理论首先要求信号能表示为稀疏信号,如x=[1 0 0 0 1 0],其中只有2个1,可认为是稀疏的。我们将信号通过一个矩阵映射到稀疏空间, - + -设信号x为N维,即,则为NxN维稀疏表达矩阵,s即是将x进行稀疏表示后的Nx1维向量,其中大部分元素值为0。稀疏表示的原理就是通过线性空间映射,将信号在稀疏空间进行表示。 +设信号x为N维,即,则为NxN维稀疏表达矩阵,s即是将x进行稀疏表示后的Nx1维向量,其中大部分元素值为0。稀疏表示的原理就是通过线性空间映射,将信号在稀疏空间进行表示。 比如,信号 - + -在时域是非稀疏的,但做傅里叶变换表示成频域后,只有少数几个点为非0(如下图)。则该信号的时域空间为非稀疏,频域空间为稀疏空间,组成的矩阵。一般为正交矩阵。 +在时域是非稀疏的,但做傅里叶变换表示成频域后,只有少数几个点为非0(如下图)。则该信号的时域空间为非稀疏,频域空间为稀疏空间,组成的矩阵。一般为正交矩阵。 ![example1] @@ -40,9 +40,9 @@ 压缩感知的目的是在采集信号时就对数据进行压缩,大牛们的思路集中到了数据采集上——既然要压缩,还不如就从大量的传感器中只使用其中很少的一部分传感器,采集少量的冗余度低的数据。这就是感知测量的通俗的说法,用表达式表示 - + -其中的x就是稀疏表示中的信号,为MxN维的感知矩阵(M表示测量信号的维度),y则表示M(M远小于N才有意义)个传感器的直接测量,因此维度为Mx1。 +其中的x就是稀疏表示中的信号,为MxN维的感知矩阵(M表示测量信号的维度),y则表示M(M远小于N才有意义)个传感器的直接测量,因此维度为Mx1。 将稀疏表示过程和感知测量过程综合起来: @@ -60,27 +60,27 @@ > 由已知条件: -> (1) 测量值y,且,其中e为噪声引入 +> (1) 测量值y,且,其中e为噪声引入 > (2) s为k-Sparse信号(k未知) -> 求解目标:k尽可能小的稀疏表示信号s及对应的。 +> 求解目标:k尽可能小的稀疏表示信号s及对应的。 用数学形式描述为: - + - + e可以看成告诉随机噪声,e~N(0,δ2)。 即是要求s使s的0范数(非0值的个数)最小,但0范数优化问题是很难求解的,于是一帮大牛就证明求解1范数也能逼近和上面相同的效果,而求解2范数及其更高的范数则结果相差越来越大(有些人在研究介于0范数与1范数之间的范数求解方法)。因此可转化为1范数求解: - + 由拉格朗日乘子法,上面的最优问题可转化成: - + 上面的最小值求解问题就可以直接通过凸优化解得结果了。 diff --git "a/essays/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.md" "b/essays/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.md" index 2a32584..472bcc0 100644 --- "a/essays/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.md" +++ "b/essays/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.md" @@ -7,7 +7,7 @@ 矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。 矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法 -就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化: +就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化: 1. 伸缩 @@ -82,7 +82,7 @@ 好,关于矩阵乘就这些了。那么,我们接着就进入主题了,对特定的向量,经过一种方阵变换,经过该变换后,向量的方向不变(或只是反向),而只是进行伸缩变化(伸缩值可以是负值,相当于向量的方向反向)?这个时候我们不妨将书上对特征向量的定义对照一遍: -> 数学教材定义: 设A是n阶方阵,如果存在 $\lambda$ 和n维非零向量X,使 ,则 $\lambda$ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 $\lambda$ 的一个特征向量。 +> 数学教材定义: 设A是n阶方阵,如果存在 $\lambda$ 和n维非零向量X,使 ,则 $\lambda$ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 $\lambda$ 的一个特征向量。 上面特定的向量不就是特征向量吗? $\lambda$ 不就是那个伸缩的倍数吗?因此,特征向量的代数上含义是:将矩阵乘法转换为数乘操作;特征向量的几何含义是:特征向量通过方阵A变换只进行伸缩,而保持特征向量的方向不变。特征值表示的是这个特征到底有多重要,类似于权重,而特征向量在几何上就是一个点,从原点到该点的方向表示向量的方向。 @@ -104,11 +104,11 @@ 设A有n个特征值及特征向量,则: - + 将上面的写到一起成矩阵形式: - ,该表达式称为方阵的特征值分解,这样方阵A就被特征值和特征向量唯一表示。 +则 ,该表达式称为方阵的特征值分解,这样方阵A就被特征值和特征向量唯一表示。 一个变换方阵的所有特征向量组成了这个变换矩阵的一组基。所谓基,可以理解为坐标系的轴。我们平常用到的大多是直角坐标系,在线性代数中可以把这个坐标系扭曲、拉伸、旋转,称为基变换。我们可以按需求去设定基,但是基的轴之间必须是线性无关的,也就是保证坐标系的不同轴不要指向同一个方向或可以被别的轴组合而成,否则的话原来的空间就“撑”不起来了。从线性空间的角度看,在一个定义了内积的线性空间里,对一个N阶对称方阵进行特征分解,就是产生了该空间的N个标准正交基,然后把矩阵投影到这N个基上。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度。特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。 @@ -158,11 +158,11 @@ D对角线的元素即为特征值(表示了伸缩的比例),D就是特征 特征值分解是一个提取矩阵特征很不错的方法,但是它只适用于方阵。而在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有M个学生,每个学生有N科成绩,这样形成的一个M * N的矩阵就可能不是方阵,我们怎样才能像描述特征值一样描述这样一般矩阵呢的重要特征呢?奇异值分解就是用来干这个事的,奇异值分解是一个能适用于任意的矩阵的一种分解的方法。我们有必要先说说特征值和奇异值之间的关系。 -对于特征值分解公式, $A^TA$ 是方阵,我们求 $A^TA$ 的特征值,即 ,此时求得的特征值就对应奇异值的平方,求得的特征向量v称为右奇异向量,另外还可以得到: +对于特征值分解公式, $A^TA$ 是方阵,我们求 $A^TA$ 的特征值,即 ,此时求得的特征值就对应奇异值的平方,求得的特征向量v称为右奇异向量,另外还可以得到: - + - + 所求的ui就是左奇异向量, $\sigma_i$ 就是奇异值。已有人对SVD的几何机理做了清晰的分析,非常受用,就不重复造轮子,下文为转载自 。 diff --git "a/essays/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.md" "b/essays/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.md" index 207adce..e2ba50a 100644 --- "a/essays/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.md" +++ "b/essays/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.md" @@ -5,7 +5,7 @@ 本文讨论的是实际使用过程中计算过零率的一种自适应方法。过零率常用于语音检测识别中,一般叫短时过零率更贴切些(指一段短时平稳信号才能计算过零率),简单有效,近期亦打算将这个简单的概念用于识别脚步声和卡车声(近似短时平稳)。过零率的定义计算一般通过下面的表达式描述: - + 过零率是对频率从时域进行的一种简单的度量,一般情况下,过零率越大频率近似越高,反正亦然,相关推倒可参考相关文献。 @@ -13,7 +13,7 @@ 自然信号由于电路、环境引入的噪声会在0水平位置波动,直接按上式计算过零率,严重影响识别效果。因此,本文在计算过零率时,对信号的幅值进行阈值限定,阈值的计算方法是: - + 其中F为阈值与峰峰值的系数因子,一般F在0.1~0.2之间,Vpp表示当前短时信号的峰峰值,THR(t)表示t时段的阈值。 @@ -83,7 +83,7 @@ void zerorate_thr_update(struct st_zerorate_thr thr, uint32_t peak_value) 关于初始阈值的选择: - + ## 改进:增加能量阈值的策略 @@ -192,7 +192,7 @@ uint16_t zero_rate(int16_t x[], uint32_t n, struct st_zerorate_thr thr, uint16_t 因此,提出新的特征,用于区分两类信号——数字化占空比。其过程是:设定一个阈值,从头到尾扫描一帧信号,大于阈值的点设为1,否则设为0,我称之为数字化过程,然后计算高电平(即1)占所有一帧(512点)的百分比,用该百分比作为脚步声和卡车的识别数学特征。好了,我们用数学表述得专业些: - + 其中x>=THR表示序列中值大于THR的点数。测试结果:取THR=0.4*Vpp,则计算脚步信号的Dutycycle=4,而卡车信号的Dutycycle=113,差异非常明显。 diff --git "a/essays/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.md" "b/essays/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.md" index 9062e2a..8620872 100644 --- "a/essays/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.md" +++ "b/essays/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.md" @@ -12,7 +12,7 @@ 窗口打分是通过一个线性模型来操作的(其实就是一个滤波器), - + 为获得权值w,则必须通过训练数据训练,作者采用了最简单的Linear SVM,大致过程应该是:对训练用数据,目标窗和背景窗分别给定不同的分数(从程序上看,目标窗是1,背景窗是-1),训练数据经过Linear SVM调整w使训练数据的误差最小,得到调整w向量就用于预测中的窗口打分,打分越接进1的窗口为目标窗,否则为背景窗。 @@ -20,17 +20,17 @@ 既然得到了w,就能直接根据(1)计算窗口的分数,确定预测目标了,但作者没有简单的按(1)式做,而是将(1)的操作转化为位运算,这也是为什么特征称为BING(B就是Binarized),直接采用硬件指令大幅度地提升速度。为使用二进制运算,必须将w和gl都转成二进制的模型。Algorithm1就是将w转成二进制模型的算法,我感觉原理大致就是:将w在投影到不同的正交向量上,如果还不理解Algorithm1,好好看看算法是怎么操作的,那不就是“__Gram-Schmidt正交化__”吗?只不过只取了包含大部分信息的前Nw个正交向量作为输出,目的也是为了降低计算量。NG特征gl转成二进制模型是 - + 我觉得大概的意思好像是,比如一个十进制的数121D,转成二进制就是0111 1001B,也可以直接将低位截断(这时Ng=3),用0111 1000近似代替121D。不过这里还是有些不明白,b_kl不是8x8维的特征吗?就不明白这里是什么意思了,矩阵求sum会得到标量的gl?感觉这一段下表用得有些混乱,没解释太清楚。而为了计算64维的BING特征,要扫描64个点,作者用Algorithm2也是通过二进制的移位运算降低计算量,就如作者原文所说的——有些类似于积分图像的计算一样(with the integral image representation)。 最后将算法1和2结合起来对窗口打分的操作由卷积运算变成了大部分是位运算操作, - + 其中C_j,k是 - + 上面的计算很容易通过位运算和SSE指令(支持8x8=64bit)来完成快速运算。 @@ -60,6 +60,6 @@ StageI也就是训练w参数居然用了13s,StageII用了344s居然,单张 DR的计算是参考[The PASCAL Visual Object Classes (VOC) Challenge](http://pascallin.ecs.soton.ac.uk/challenges/VOC/pubs/everingham10.pdf),目标检测任务中DR的计算的是true/false positive精度,将算法检测目标结果放到groud truth中,将“预测目标区域与groud truth区域的交集”除以“预测目标区域与groud truth区域的并集”作为DR: - + DR自少在50%以上才算目标检测正确,其实,50%已经是很低的了,几乎不能做为检测结果,难怪那些个算法(BING这篇文章也是)随随便便都到95%以上了。 diff --git "a/html/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.html" "b/html/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.html" index de3ddda..3053b6c 100644 --- "a/html/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.html" +++ "b/html/Kalman\346\273\244\346\263\242\345\231\250\344\273\216\345\216\237\347\220\206\345\210\260\345\256\236\347\216\260.html" @@ -70,19 +70,19 @@

Kalman滤波器的历史渊源

从牛顿到卡尔曼

从现在开始,就要进行Kalman滤波器探讨之旅了,我们先回到高一,从物理中小车的匀加速直线运动开始。

话说,有一辆质量为m的小车,受恒定的力F,沿着r方向做匀加速直线运动。已知小车在t-ΔT时刻的位移是s(t-1),此时的速度为v(t-1)。求:t时刻的位移是s(t),速度为v(t)?

-

由牛顿第二定律,求得加速度:

+

由牛顿第二定律,求得加速度:

那么就有下面的位移和速度关系:

-

-

+

+

如果将上面的表达式用矩阵写在一起,就变成下面这样:

-

+

卡尔曼滤波器是建立在动态过程之上,由于物理量(位移,速度)的不可突变特性,这样就可以通过t-1时刻估计(预测)t时刻的状态,其__状态空间__模型为:

-

+

对比一下(1)(2)式,长得及其相似有木有:

-

+

匀加速直线运动过程就是卡尔曼滤波中状态空间模型的一个典型应用。下面我们重点关注(2)式,鉴于研究的计算机信号都是离散的,将(2)是表示成离散形式为:

- +

其中各个量之间的含义是:

    @@ -96,9 +96,9 @@

    从牛顿到卡尔曼

    计算n时刻的位移,还有一种方法:拿一把长的卷尺(嗯,如果小车跑了很长时间,估计这把卷尺就难买到了),从起点一拉,直接就出来了,设测量值为z(n)。计算速度呢?速度传感器往那一用就出来了。

    然而,初中物理就告诉我们,“尺子是量不准的,物体的物理真实值无法获得”,测量存在误差,我们暂且将这个误差记为v(n)。这种通过直接测量的方式获得所需物理量的值构成__观测空间__:

    - +
    -

    z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量(位移、速度),v(n)~N(0,R)为测量噪声,同状态空间方程中的过程噪声一样,这也是一个后面要讨论的量。大部分情况下,如果物理量能直接通过传感器测量,

    +

    z(n)就是测量结果,H(n)是观测矢量,x(n)就是要求的物理量(位移、速度),v(n)~N(0,R)为测量噪声,同状态空间方程中的过程噪声一样,这也是一个后面要讨论的量。大部分情况下,如果物理量能直接通过传感器测量,

    img1 img2

    现在就有了两种方法(如上图)可以得到n时刻的位移和速度:一种就是通过(3)式的状态空间递推计算(Prediction),另一种就是通过(4)式直接拿尺子和传感器测量(Measurement)。致命的是没一个是精确无误的,就像上图看到的一样,分别都存在0均值高斯分布的误差w(n)和v(n)。

    那么,我最终的结果是取尺子量出来的好呢,还是根据我们伟大的牛顿第二定律推导出来的好呢?抑或两者都不是!

    @@ -108,16 +108,16 @@

    一场递推的游戏

    1. 预测

      预测值:

      -

      +

      最小均方误差矩阵:

      -

    2. +

    3. 修正

      误差增益:

      -

      +

      修正值:

      -

      +

      最小均方误差矩阵:

      -

    4. +

    从(5)~(9)中:

      @@ -126,7 +126,7 @@

      一场递推的游戏

    • x(n|n-1):用n时刻以前的数据进行对n时刻的估计结果
    • x(n|n):用n时刻及n时刻以前的数据对n时刻的估计结果,这也是Kalman滤波器的输出
    • P(n|n-1):NxN,最小预测均方误差矩阵,其定义式为

      -

      +

      通过计算最终得到(6)式。
    • P(n|n):NxN,修正后最小均方误差矩阵。
    • K(n):NxM,误差增益,从增益的表达式看,相当于“预测最小均方误差”除以“n时刻的测量误差+预测最小均方误差”,直观含义就是用n-1预测n时刻状态的预测最小均方误差在n时刻的总误差中的比重,比重越大,说明真值接近预测值的概率越小(接近测量值的概率越大),这也可以从(8)式中看到。

    • @@ -137,13 +137,13 @@

      一场递推的游戏

      Example:

      -

      还可以更简单一些:设小车做匀速(而非匀加速)直线运动,方便计算,假设速度绝对的恒定(不波动,所以相关的方差都为0),则u(t)==0恒成立。设预测(过程)位移噪声w(n)~N(0,22),测量位移噪声v(n)~N(0,12),n-1状态的位移,速度为v=10m/s,n时刻与n-1时刻的物理时差为ΔT=1s。同时,也用尺子测了一下,结果位移为z(n)=62m。

      +

      还可以更简单一些:设小车做匀速(而非匀加速)直线运动,方便计算,假设速度绝对的恒定(不波动,所以相关的方差都为0),则u(t)==0恒成立。设预测(过程)位移噪声w(n)~N(0,22),测量位移噪声v(n)~N(0,12),n-1状态的位移,速度为v=10m/s,n时刻与n-1时刻的物理时差为ΔT=1s。同时,也用尺子测了一下,结果位移为z(n)=62m。

      则A = [1 ΔT; 0 1]=[1 1; 0 1],根据(5),预测值为

      -

      +

      现在已经有了估计值和测量值,哪个更接近真值,这就通过最小均方误差矩阵来决定!

      @@ -155,11 +155,11 @@

      一场递推的游戏

      由物理量的关系知,H(n)=[1 1],增益K(n)=[1;0]{1+[1 1][1 0; 0 0][1; 1]}^(-1)=[1/2;0]。

      -

      所以,最后的n时刻估计值既不是用n-1得到的估计值,也不是测量值,而是:,因此,最终的Kalman滤波器的输出位移是60.5m。

      +

      所以,最后的n时刻估计值既不是用n-1得到的估计值,也不是测量值,而是:,因此,最终的Kalman滤波器的输出位移是60.5m。

      从上面的递推关系知道,要估计n时刻就必须知道n-1时刻,那么n=0时刻该如何估计,因此,卡尔曼滤波要初始化的估计值x(-1|-1)和误差矩阵P(-1|-1),设x(-1,-1)~N(Us, Cs),则初始化:

      -

      -

      +

      +

      综上,借用一张图说明一下Kalman滤波算法的流程:

      img3

      img3

      @@ -180,24 +180,24 @@

      均方误差中的门道

      img4

      img4

      -

      +

      稍微计算一下,通过上式求出u和σ^2,

      - +
      - +

      现在令

      - +

      则(10)(11)变成:

      - +
      - +

      到这里,请将(13)-(14)与(8)-(9)式对比!标量的情况下,在小车的应用中有:A=1,H=1,正态分布的均值u就是我们要的输出结果,正态分布的方差σz^2就是最小均方误差。推广到矢量的情况,最小均方误差矩阵就是多维正态分布的协方差矩阵。

      从(12)式也很容易看到卡尔曼增益K的含义:就是估计量的方差占总方差(包括估计方差和测量方差)的比重。

      diff --git "a/html/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.html" "b/html/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.html" index d238120..2cf30c9 100644 --- "a/html/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.html" +++ "b/html/Markdown\344\270\255\346\217\222\345\205\245\346\225\260\345\255\246\345\205\254\345\274\217\347\232\204\346\226\271\346\263\225.html" @@ -44,11 +44,11 @@

      方法一:使用Google Chart

      方法二:使用forkosh服务器

      forkosh上提供了关于Latex公式的一份简短而很有用的帮助,参考[1]和[3].

      使用forkosh插入公式的方法是

      -
      <img src="http://www.forkosh.com/mathtex.cgi? 在此处插入Latex公式">
      +
      <img src="https://latex.codecogs.com/png.latex? 在此处插入Latex公式">

      给个例子,

      -
      <img src="http://www.forkosh.com/mathtex.cgi? \Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">
      +
      <img src="https://latex.codecogs.com/png.latex? \Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">

      显示结果为:

      -

      +

      因为网页插入公式的原理是调用“某某网站的服务器”动态生成的,所有保证公式正常显示的前提是该网址能一直存在着为我等小生做些小小的服务。forkosh我是用了快2年了,一直很好,推荐!

      方法三:使用MathJax引擎

      大家都看过Stackoverflow上的公式吧,漂亮,其生成的不是图片。这就要用到MathJax引擎,在Markdown中添加MathJax引擎也很简单,

      @@ -72,7 +72,7 @@

      代码片段

      @触发文本:Equation @代码片段:请在下一行开始输入内容! -<img src="http://www.forkosh.com/mathtex.cgi? \Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}"> +<img src="https://latex.codecogs.com/png.latex? \Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">
      1. 使用MathJax解析公式
      2. diff --git "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.html" "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.html" index d1cc431..76de598 100644 --- "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.html" +++ "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213Hough\345\217\230\346\215\242.html" @@ -49,7 +49,7 @@

        Tags: OpenCV

        图像空间到参数空间的转换

        对于图像中共线的点集{(x0,y0), (x1,y1), ...}都经过直线y=kx+b,先在我们换一个说法,“斜率为k,截距为b的直线y=kx+b包含了所有在该直线上的点”。一种强调的是图像中的点集,另一种强调的是直线的参数k和b,通过直线的点集去描述这条直线明显没有直接通过k,b两个参数去描述那样直接方便。而Hough变换就是将我们“点共线”的思维转化到参数空间{k,b}进行描述,图像空间中所有经过y=kx+b的点经过Hough变换后在参数空间都会相交于点(k,b),这样,通过Hough变换,就可以将图像空间中直线的检测转化为参数空间中对点的检测。我们不妨将y=kx+b进行一下变形:

        -

        +

        这就是Hough变换将图像空间坐标(x,y)转化为参数空间(k,b)的Hough变换式。

        Hough变换的步骤(执行过程):

          @@ -62,9 +62,9 @@

          图像空间到参数空间的转 极坐标中的直线表示

          极坐标中的直线表示

      极坐标中的直线方程为

      -

      +

      将其改写成Hough变换式,即自变量(x,y)到参数变量(r,theta)的映射:

      -

      +

      使用极坐标参数空间,Hough变换的步骤不变,只不过将kbcnt替换成rthcnt,r范围是图像对角线的长度,th范围是0~2*pi。因为图像是离散的,所以r和th都有一个步进值dr和dth。

      Hough变换除了检测直线,还可用来检测任何能用数学表达式表示的形状,如最常见的圆、椭圆,基本原理都是将图像空间的像素转变到参数空间,然后在参数空间中对共线/圆/椭圆的点进行统计,最后通过阈值判决是否是符合要求的形状。

      http://en.wikipedia.org/wiki/Hough_transform 上对Hough变换的内容有更多的描述。

      diff --git "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.html" "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.html" index e4883e0..90ca81f 100644 --- "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.html" +++ "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\345\233\276\345\203\217\345\271\263\346\273\221.html" @@ -49,7 +49,7 @@

      Tags: OpenCV

      图像平滑算法

      图像平滑与图像模糊是同一概念,主要用于图像的去噪。平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器,其统一形式如下:

      -

      +

      其中h称为滤波器的核函数,说白了就是权值。不同的核函数代表不同的滤波器,有不同的用途。

      在图像处理中,常见的滤波器包括:

        @@ -57,7 +57,7 @@

        图像平滑算法

        也是__均值滤波器__,用输出像素点核窗口内的像素均值代替输出点像素值。

      1. 高斯滤波器(Guassian blur)

        是实际中最常用的滤波器,高斯滤波是将输入数组的每一个像素点与 高斯内核 卷积将卷积和当作输出像素值。高斯核相当于对输出像素的邻域赋予不同的权值,输出像素点所在位置的权值最大(对应高斯函数的均值位置)。二维高斯函数为,

        -

      2. +

      3. 中值滤波器(median blur)

        中值滤波将图像的每个像素用邻域(以当前像素为中心的正方形区域)像素的中值代替。对椒盐噪声最有效的滤波器,去除跳变点非常有效。

      4. 双边滤波器(Bilatrial blur)

        diff --git "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.html" "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.html" index ea0e0f7..3d76b74 100644 --- "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.html" +++ "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\205\220\350\232\200\344\270\216\350\206\250\350\203\200.html" @@ -65,15 +65,15 @@

        腐蚀与膨胀

        以上都是关于二值图像的形态学操作,对于灰度图像:

        1. 腐蚀操作

          -

          +

          其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。腐蚀运算是由结构元素确定的邻域块中选取图像值与结构元素值的差的最小值。

        2. 膨胀操作

          -

          +

          其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。 膨胀运算是由结构元素确定的邻域块中选取图像值与结构元素值的和的最大值。

        在灰度图的形态学操作中,一般选择“平摊”的结构元素,即结构元素B的值为0,则上面对灰度图的形态学操作可简化如下:

        -

        -

        +

        +

        好了,这就是基本的形态学操作——腐蚀和膨胀,下面是使用OpenCV对图像进行腐蚀和膨胀的程序,还是秉承我们一贯的原则:搁下理论,先直观地感觉图像处理算法的效果,实际项目需要时再深入挖掘!

        程序分析

        /*
        diff --git "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.html" "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.html"
        index 56c705b..67acbe5 100644
        --- "a/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.html"
        +++ "b/html/OpenCV\345\233\276\345\203\217\345\244\204\347\220\206\347\257\207\344\271\213\350\276\271\347\274\230\346\243\200\346\265\213\347\256\227\345\255\220.html"
        @@ -56,7 +56,7 @@ 

        3种边缘检测算子

        灰度或结构等信息的突变位置是图像的边缘,图像的边缘有幅度和方向属性,沿边缘方向像素变化缓慢,垂直边缘方向像素变化剧烈。因此,边缘上的变化能通过梯度计算出来。

        一阶导数的梯度算子

        对于二维的图像,梯度定义为一个向量,

        -

        +

        Gx对于x方向的梯度,Gy对应y方向的梯度,向量的幅值本来是 mag(f) = (Gx2 + Gy2)1/2,为简化计算,一般用mag(f)=|Gx|+|Gy|近似,幅值同时包含了x而后y方向的梯度信息。梯度的方向为 α = arctan(Gx/Gy)

        由于图像的数字离散特性,所以梯度微分运算用差分代替,并且用小的空域模板和图像进行卷积近似计算梯度,由于模板的不同,因此衍生处多种梯度算子:Roberts算子、Sobel算子和Prewitt算子。

        @@ -71,15 +71,15 @@

        一阶导数的梯度算子

      高斯拉普拉斯算子

      上面的一阶导数算子,是各向异性的,因此分x方向和y方向的梯度值,而高斯拉普拉斯算子是对图像求二阶导数,边缘对应二阶导数的过零点。

      -

      +

      由上式可知,xy进行互换的结果是一样的,所以拉普拉斯算子没有x方向和y方向的区分,拉普拉斯算子对应图像中的差分运算是:

      -

      +

      也可以通过卷积模板实现,

      LOG算子

      LOG算子

      相对于一阶导数,高斯拉普拉斯算子(Laplacian of Gaussian, LOG算子)由于求二阶导数,很容易将点噪声判别为边界,因此常在使用LOG算子前先用高斯平滑滤波器去除正态分布的噪声,二维高斯分布为:

      -

      +

      其中 σ 为高斯分布标准差,决定高斯滤波器的宽度,用该函数对图像平滑滤波,可以减少椒盐噪声对LOG算子的影响。

      Canny算子

      1983,MIT,Canny提出的边缘检测三个标准:

      @@ -91,7 +91,7 @@

      Canny算子

      Canny算子力图在抗噪声干扰与精度之间寻求最佳方案,Canny算子有相关的复杂理论,其基本的步骤是:

      1. 使用高斯滤波器平滑图像,卷积核尺度通过高斯滤波器的标准差确定
      2. -
      3. 计算滤波后图像的梯度幅值和方向 可以使用Sobel算子计算Gx与Gy方向的梯度,则梯度幅值和梯度的方向依次为

      4. +
      5. 计算滤波后图像的梯度幅值和方向 可以使用Sobel算子计算Gx与Gy方向的梯度,则梯度幅值和梯度的方向依次为

      6. 使用非最大化抑制方法确定当前像素点是否比邻域像素点更可能属于边缘的像素,以得到细化的边缘 其实现是:将当前像素位置的梯度值与其梯度方向上相邻的的梯度方向的梯度值进行比较,如果周围存在梯度值大于当前像素的梯度值,则不认为查找到的当前像素点为边缘点。举例来说,Gx方向的3个梯度值依次为[2 4 3],则在Gx梯度方向上4所在像素点就是边缘点,如果把改成[2 4 1]就不是边缘点。如果用全向的梯度方向作为非最大抑制的判断依据,则要求G(x,y)>所有4邻域的或8邻域的梯度值才被认为是边缘点。
      7. 使用双阈值[T1,T2]法检测边缘的起点和终点,这样能形成连接的边缘。T2>T1,T2用来找到没条线段,T1用来在这条线段两端延伸寻找边缘的断裂处,并连接这些边缘。

      diff --git "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.html" "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.html" index 2ef54bc..ca0a0a8 100644 --- "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.html" +++ "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\345\203\217\351\242\221\345\237\237.html" @@ -139,7 +139,7 @@

      程序及分析

      本程序的作用是:将图像从空间域转换到频率域,并绘制频域图像。

      1. 二维图像的DFT(离散傅里叶变换),

        -

        +

        图像的频域表示的是什么含义呢?又有什么用途呢?图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像大部分平缓的灰度变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征。

        频域在图像处理中,就我所知的用途主要在两方面:图像压缩和图像去噪。关于这两点将在下面给出图片DFT的变换结果后说明。

        有关DFT的更多性质请参考胡广书教授的《数字信号处理》教材。

      2. diff --git "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.html" "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.html" index dac15af..4aa25c3 100644 --- "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.html" +++ "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\345\233\276\347\211\207\345\217\240\345\212\240.html" @@ -107,7 +107,7 @@

        程序及分析

        return 0; }

        这里的图像叠加指线性叠加,设图像A的像素为fA(x),图像B的像素为fB(x),叠加系数为α,则线性叠加操作为:

        -

        +

        α为0-1之间的值,从上面也可以看出,叠加必需保证两幅输入图像的尺寸大小相同。程序中的

        addWeighted(src1, alpha, src2, beta, 0.0, dst);

        完成叠加操作。

        diff --git "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.html" "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.html" index 0d10d6e..791ba40 100644 --- "a/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.html" +++ "b/html/OpenCV\345\237\272\347\241\200\347\257\207\344\271\213\346\237\245\346\211\276\350\241\250.html" @@ -112,7 +112,7 @@

        程序及分析

        1. 为什么要使用查找表?

          一般的灰度图像有256个灰度级,而有时我们并不需要这么精确的灰度级(严重影响运算时间),比如黑白图像。这意味着我们以一个新的输入值划分当前的颜色空间,比如灰度到黑白色,将0127灰度值直接赋值0,128255赋值1,最终得到较少的黑白两色。查找表就扮演着这种降低灰度级而提高运算速度的角色。量化前和量化后的灰度值可以用下面的表达式表示:

          -

          +

          其中Q表示量化级别,如取10,表示:灰度值1-10用灰度值1表示,灰度值11-20用灰度值11表示,以此类推!

        2. 使用上面公式和查找表有毛关系,当然没有,但上面公式代价就是要对图片遍历的每个灰度值都计算一次。因此,本着程序设计中的“以空间换时间”的基本算法策略,引入查找表,查找表就是将0~255个灰度值量化后的结果提前计算好存储在一个表中,上面程序中的CreateLookupTable就是完成该功能的函数。从程序中可以看出,查找表的数据结构定义为Mat类型。

        3. 有了查找表后,要对图像中的像素灰度值进行替换,OpenVC提供了使用查找表直接计算出量化灰度级后图像的函数——LUT,其函数原型为:

          diff --git "a/html/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.html" "b/html/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.html" index 388bce1..698c9db 100644 --- "a/html/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.html" +++ "b/html/\344\270\211\346\236\201\347\256\241\347\232\204\347\224\265\345\271\263\350\275\254\346\215\242\345\217\212\351\251\261\345\212\250\347\224\265\350\267\257\345\210\206\346\236\220.html" @@ -39,7 +39,7 @@

          3.3V-5V电平转换电路

        4. 假设没有R87,则当US_CH0的高电平直接加在三极管的BE上,>0.7V的电压要到哪里去呢?
        5. 假设没有R91,当US_CH0电平状态不确定时,默认是要Trig输出高电平还是低电平呢?因此R91起到固定电平的作用。同时,如果无R91,则只要输入>0.7V就导通三极管,门槛电压太低了,R91有提升门槛电压的作用(可参见第二小节关于蜂鸣器的分析)。

          但是,加了R91又要注意了:R91如果太小,基极电压近似

          -

          +

          只有Vb>0.7V时才能使US_CH0为高电平时导通,上图的Vb=1.36V

        6. 假设没有R83,当输入US_CH0为高电平(三极管导通时),D5V0(5V高电平)直接加在三极管的CE级,而三极管的CE,三极管很容易就损坏了。

        @@ -57,11 +57,11 @@

        蜂鸣器驱动电路

        上面是从周立功的iMX283开发板上载下的电路,既可以是有源也可以是无源蜂鸣器。来分析下:

        1. 计算下各处的电流(S9013的β=120,设蜂鸣器电流15mA):

          -

          -

          -

          +

          +

          +

          输入为高电平的门槛电压计算为:

          -

          +

          R1起到了提供啊门槛电压的作用。

        2. 有源蜂鸣器和无源蜂鸣器的驱动电路区别主要在于无源蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管D1提供续流。否则,在蜂鸣器两端会有反向感应电动势,产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。而如果电路中工作电压较大,要使用耐压值较大的二极管,而如果电路工作频率高,则要选用高速的二极管

        3. 设计这种电路的基本路子是:确定负载(蜂鸣器10mA~80mA)电流和输入门槛电压。依据1中的方法计算获得R1与R2的值。

        4. diff --git "a/html/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.html" "b/html/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.html" index 2eb1465..8bf9874 100644 --- "a/html/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.html" +++ "b/html/\345\237\272\344\272\216AR\350\260\261\347\211\271\345\276\201\347\232\204\345\243\260\347\233\256\346\240\207\350\257\206\345\210\253.html" @@ -62,28 +62,28 @@

          关于AR谱

          ARspectrum

          ARspectrum

          AR谱的计算有2个重要的参数:系数阶数、FFT反变换的点数。AR谱是一种递推模型,即用前p个时刻的时域值估计当前第n时刻的值:

          -

          +

          其中u(n)是噪声输入,系数阶数就是上式中的p。牵扯到FFT,是因为功率谱的计算中可以使用FFT进行快速计算,因此就有离散FFT在单位圆上抽样点数的问题,功率谱的计算公式是:

          -

          +

          上式中转化后有a0=1,将FFT计算扩充到N点后有a(p+1)...a(N-1)=0,FFT点数就是指的这里用于FFT计算的长度N。

          AR谱是一个什么样的概念呢,首先我对功率谱的理解就是:不同频率处的能量值的大小,这个大小并不一定是真实的能量值,但不同频率的能量谱值的相对大小关系却接近真实值,因此不同频率处功率谱值的相对关系比其真实的谱值更重要。比如,车辆在远处的时候能量相对较小,在近处的时候能量较大,但对于平稳的信号,虽然能量值不同,但都具有相似的谱包络,因此我们更关注的是谱在不同频率上的分布大小,就像概率一样,看在哪个频率值(或段)的功率谱大。

          通过观察AR谱,我们能清晰的知道:主要的能量都集中在什么频率段,从而对信号进行分析主要关注这些频率段就行了。

          AR谱的细节参见胡广书编著《数字信号处理》一书,其C实现参考我的Github项目,关于AR的基本理论参见之前的博文“现代数字信号处理——AR模型

          音频信号特征提取

          1 短时平均能量(Short Time Energy, STE)

          -

          +

          其中N表示一帧的长度。短时平均能量可用于判断静音帧,静音帧的短时能量小,这比直接通x(n)的最高幅值进行判断稳定性要高。对于静音帧,应该在后续的处理之前去除。通常,语音比音乐含有更多的静音(人说话没有音乐那样着腔带调),因此,语音的平均能量的变化要比音乐中大很多。

          2 短时过零率(Short Time Zero-Corssing Rate, ZCR)

          短时过零率是在一个音频帧内,离散采样信号值由负到正或由正到负的变换次数。

          -

          +

          从某种程序上讲,过零率表达了信号的跳变速度,是频率的一种简单度量。过零率与平均能量结合能用于语音端点检测。在博文自适应含噪信号过零率算法中也曾尝试改进过零率用于震动信号的识别。

          3 子带能量比(Sub-band energy ratio, SER)

          子带能量用于描述主要能量的频域分布特征,其过程就是将频域等间隔划分成B个子带,在AR谱图上,对每个子带范围进行积分就可求出子带能量Ei,则子带能量比就是

          -

          +

          不同音频信号的能量分布不同,通过子带能量能区分能量的主要分布频带。子带能量比是一个很好参数,用于识别频率能量分布不同的目标。当然类似的思想也可以用到FFT频谱图上。

          4 谱频率重心(Spectrum Centroid, SC)

          将AR谱的幅值看做权值w,则谱频率重心的计算是:

          -

          +

          谱频率重心是通过谱峰统计的中心,并不会(当然也可能等于)等于AR谱主峰对应的频率。

          5 带宽(Band Width, BW)

          带宽指信号谱值下降到中心频率谱值的0.707处的高低频率差BW=fH-fL。

          diff --git "a/html/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.html" "b/html/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.html" index cabb64c..82e1afd 100644 --- "a/html/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.html" +++ "b/html/\345\237\272\344\272\216\350\260\261\345\207\217\346\263\225\347\232\204\345\243\260\351\237\263\345\216\273\345\231\252.html" @@ -50,10 +50,10 @@

          Tags: 谱减法

          谱减法模型

          实际听觉环境中,肯定是含有噪声的,那掺杂有噪声的声音信号中原声音信号和噪声信号是如何体现的呢?一种普遍被使用的方法是:采集到的声音信号永远都是原信号与噪声信号的叠加,即

          -

          +

          模型是信号的直接叠加,这就要满足:原信号与噪声信号不相关。其实有些情况下这个条件是不满足的,所以依然有很多其他的模型,如有人认为原信号和噪声信号是卷积的关系。当然,这些都是模型,还没有明确的理论证明那种是对的,反正哪种好用我们就捡谁。谱减法就是基于噪声的加法模型。

          语音信号本身是非平稳过程,但假如取很短的一段(10~30ms),则具有短时平稳特性。因此,使用窗函数取含噪语音信号的一帧(N点)进行处理。信号叠加模型两边同时进行傅里叶变换,并取模,

          -

          +

          则对原信号幅值的估计就可通过|S(k)|=|Y(k)|-|N(k)|求得,但仅这样存在2个问题:

          1. |S(k)|可能为负值,语音信号的FFT谱幅值怎么可能为负值呢
          2. @@ -64,7 +64,7 @@

            谱减法模型

            图注:谱减法流程图

            图注:谱减法流程图

            在语音增强的应用中,由于人耳对相位信息的感知不敏感,信号恢复时仍使用的相位信息为带噪信号的相位,相位信息保存在哪里呢?我们知道FFT的结果是复数,

            -

            +

            ϕ(w) 就是相位,具体一些,复数在直角坐标系上表示,

            图注:关于保持相位不变

            图注:关于保持相位不变

            diff --git "a/html/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.html" "b/html/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.html" index dbf2abc..0ad4d73 100644 --- "a/html/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.html" +++ "b/html/\345\243\260\346\263\242\350\203\275\344\273\216\347\251\272\346\260\224\344\270\255\347\251\277\351\200\217\345\242\231\344\275\223\344\274\240\346\222\255\345\220\227.html" @@ -31,10 +31,10 @@

            Tags: 阅读

            介质临界面是一种特殊情况,我们更熟悉的是光波的传播,在介质分界面处会发生反射和折射,声波亦是如此,而且特性也几乎一样。都是“波”,就都满足波在介质表面反射规律:

            1. 反射系数

              -

              +

              其中Z = pv为材料的特性阻抗(p为材料密度,v为声波在材料中传播速度)

            2. 透射系数

              -

            3. +

            依据以上的反射与透射系数,对介质情况分析如下:

              diff --git "a/html/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.html" "b/html/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.html" index 244b757..cb03d22 100644 --- "a/html/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.html" +++ "b/html/\345\276\252\347\216\257\347\232\204\350\247\222\345\272\246\346\261\202\345\235\207\345\200\274.html" @@ -64,9 +64,9 @@

              修正的0~360度求均值方案

            如上图,当α<β时,当β-α > 180时,(α+β)/2不再是要求的结果;同理,α<β时,α-β > 180时不再是求算术平均值。

            综合这两种情况,当|α-β|>180情况下不是求算术平均值。这种情况下期望的角度均值为(以α小于β为例):

            -

            +

            同理,因为上面的表达式中的α与β对称,所以α大于β计算的结果也一样。因此可知,非算术平均值的情况只要在算术平均值的基础上加180就可以了,因此归纳如下:

            -

            180, =+180 |-|<180, = .">

            上面仅是两个角度值的平均,通过两个角度的差值做判别条件确定是否是算术均值,然而,多个的呢?

            多个的角度均值显得有些复杂,这需要用户对输入输出角度范围提供约束,这里不妨将命题变成:考虑到相邻角度在时间上的相关性,设相邻的两个输入角度值偏移值不会大于180度,在这种情况下,只要考虑0~360度的突变情况就可以了。

            直接看matlab程序吧(参考资料2),

            @@ -116,7 +116,7 @@

            修正的0~360度求均值方案

            文献综述

            维基百科角度出现循环的变量为圆周量,如上面的角度值、一天的24小时等。

            Wikipedia中计算平均角度的方法:

            -

            +

            参考文献1中给出了关于圆周变量更细致的数学分析与描述,是一份难得的资料,参考文献2是StackOverflow上关于圆周角度的探讨,作为对该问题的理解很有帮助。

            参考

              diff --git "a/html/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.html" "b/html/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.html" index 1422b49..056b8a0 100644 --- "a/html/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.html" +++ "b/html/\346\234\211\345\205\263\350\266\205\345\243\260\346\216\242\345\244\264\351\230\273\346\212\227\347\232\204\345\210\206\346\236\220.html" @@ -40,7 +40,7 @@

              有关超声探头阻抗的分析

              实验最后给出了两个不同频率下的匹配阻抗值。非线性电路中也满足欧姆定律,只不过电阻被阻抗代替了,“欧姆定律真是一项伟大的发现”,

              -

              +

              超声的发送距离与超声探头发射的能量P=U^2/|Z|有关,远距离超声测距当然希望的是:相同电压下,超声探头的阻抗越小越好。

              由于40KHz和51KHz是阻抗匹配谐振的两个低峰值点,对应阻抗的极小值点,这也是为什么市面上的超声一般都用40KHz(40KHz谐振点处变化相对于51KHz平缓,当驱动频率存在小的偏差时对输出的影响要比50KHz小)。从上面的曲线可以看出,如果电路允许,使用51KHz进行超声测距距离会更远(阻抗比40KHz更低)。

              由于超声发射头生产的原因,谐振频率不一定精确的是40KHz和51KHz,难免会存在误差,最好的方法是使用矢量网络分析仪直接测|Z|f曲线,使用|Z|f测出的谐振频率。我购买的收发一体超声探头的谐振频率点时51.48KHz。

              diff --git "a/html/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.html" "b/html/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.html" index e712391..3d6bf70 100644 --- "a/html/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.html" +++ "b/html/\347\231\275\350\257\235\345\216\213\347\274\251\346\204\237\347\237\245.html" @@ -63,19 +63,19 @@

              压缩感知介绍

              好了,那么就来了解一下压缩感知的具体模型。

              1. 稀疏表示

              使用压缩感知理论首先要求信号能表示为稀疏信号,如x=[1 0 0 0 1 0],其中只有2个1,可认为是稀疏的。我们将信号通过一个矩阵映射到稀疏空间,

              -

              -

              设信号x为N维,即,则为NxN维稀疏表达矩阵,s即是将x进行稀疏表示后的Nx1维向量,其中大部分元素值为0。稀疏表示的原理就是通过线性空间映射,将信号在稀疏空间进行表示。

              +

              +

              设信号x为N维,即,则为NxN维稀疏表达矩阵,s即是将x进行稀疏表示后的Nx1维向量,其中大部分元素值为0。稀疏表示的原理就是通过线性空间映射,将信号在稀疏空间进行表示。

              比如,信号

              -

              -

              在时域是非稀疏的,但做傅里叶变换表示成频域后,只有少数几个点为非0(如下图)。则该信号的时域空间为非稀疏,频域空间为稀疏空间,组成的矩阵。一般为正交矩阵。

              +

              +

              在时域是非稀疏的,但做傅里叶变换表示成频域后,只有少数几个点为非0(如下图)。则该信号的时域空间为非稀疏,频域空间为稀疏空间,组成的矩阵。一般为正交矩阵。

              example1

              example1

              若稀疏表示后的结果s中只有k个值不为0,则称x的稀疏表示为k-Sparse。上图对x的频域稀疏表示就是2-Sparse。

              2. 感知测量

              压缩感知的目的是在采集信号时就对数据进行压缩,大牛们的思路集中到了数据采集上——既然要压缩,还不如就从大量的传感器中只使用其中很少的一部分传感器,采集少量的冗余度低的数据。这就是感知测量的通俗的说法,用表达式表示

              -

              -

              其中的x就是稀疏表示中的信号,为MxN维的感知矩阵(M表示测量信号的维度),y则表示M(M远小于N才有意义)个传感器的直接测量,因此维度为Mx1。

              +

              +

              其中的x就是稀疏表示中的信号,为MxN维的感知矩阵(M表示测量信号的维度),y则表示M(M远小于N才有意义)个传感器的直接测量,因此维度为Mx1。

              将稀疏表示过程和感知测量过程综合起来:

              Sparse

              Sparse

              @@ -92,7 +92,7 @@

              数学描述

                -
              1. 测量值y,且,其中e为噪声引入
              2. +
              3. 测量值y,且,其中e为噪声引入
              @@ -101,16 +101,16 @@

              数学描述

            -

            求解目标:k尽可能小的稀疏表示信号s及对应的

            +

            求解目标:k尽可能小的稀疏表示信号s及对应的

            用数学形式描述为:

            -

            -

            +

            +

            e可以看成告诉随机噪声,e~N(0,δ2)。

            即是要求s使s的0范数(非0值的个数)最小,但0范数优化问题是很难求解的,于是一帮大牛就证明求解1范数也能逼近和上面相同的效果,而求解2范数及其更高的范数则结果相差越来越大(有些人在研究介于0范数与1范数之间的范数求解方法)。因此可转化为1范数求解:

            -

            +

            由拉格朗日乘子法,上面的最优问题可转化成:

            -

            +

            上面的最小值求解问题就可以直接通过凸优化解得结果了。

            程序分析

            先下载CVX或spams工具箱,下面的matlab程序分别使用了时域稀疏信号和频域稀疏信号进行测试,两种不同在于时域稀疏信号不用稀疏表达矩阵(因此稀疏表达矩阵使用单位阵即可),而频域稀疏信号则需要先通过稀疏表达矩阵将信号在频域进行稀疏表示,再压缩感知后进行恢复时也要进行反FFT变换到时域。

            diff --git "a/html/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.html" "b/html/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.html" index a8eed99..b2ce9a8 100644 --- "a/html/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.html" +++ "b/html/\347\237\251\351\230\265\347\211\271\345\276\201\345\200\274\345\210\206\350\247\243\344\270\216\345\245\207\345\274\202\345\200\274\345\210\206\350\247\243\345\220\253\344\271\211\350\247\243\346\236\220\345\217\212\345\272\224\347\224\250.html" @@ -53,7 +53,7 @@

            Tags: 数学

            特征值与特征向量的几何意义

            矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。

            -

            矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化:

            +

            矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化:

            1. 伸缩

              clf;
              @@ -118,7 +118,7 @@ 

              特征值与特征向量的几

            好,关于矩阵乘就这些了。那么,我们接着就进入主题了,对特定的向量,经过一种方阵变换,经过该变换后,向量的方向不变(或只是反向),而只是进行伸缩变化(伸缩值可以是负值,相当于向量的方向反向)?这个时候我们不妨将书上对特征向量的定义对照一遍:

            -

            数学教材定义: 设A是n阶方阵,如果存在 λ 和n维非零向量X,使 ,则 λ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 λ 的一个特征向量。

            +

            数学教材定义: 设A是n阶方阵,如果存在 λ 和n维非零向量X,使 ,则 λ 称为方阵A的一个特征值,X为方阵A对应于或属于特征值 λ 的一个特征向量。

            上面特定的向量不就是特征向量吗? λ 不就是那个伸缩的倍数吗?因此,特征向量的代数上含义是:将矩阵乘法转换为数乘操作;特征向量的几何含义是:特征向量通过方阵A变换只进行伸缩,而保持特征向量的方向不变。特征值表示的是这个特征到底有多重要,类似于权重,而特征向量在几何上就是一个点,从原点到该点的方向表示向量的方向。

            特征向量有一个重要的性质:同一特征值的任意多个特征向量的线性组合仍然是A属于同一特征值的特征向量。关于特征值,网上有一段关于“特征值是震动的谱”的解释:

            @@ -132,9 +132,9 @@

            特征值与特征向量的几

            更多关于特征向量及特征值的实际例子参见Wikipedia: http://zh.wikipedia.org/wiki/特征向量

            特征值分解

            设A有n个特征值及特征向量,则:

            -

            +

            将上面的写到一起成矩阵形式:

            -

            特征值分解

            若(x1,x2,...,xn)可逆,则左右两边都求逆,则方阵A可直接通过特征值和特征向量进行唯一的表示,令

            Q=(x1,x2,...,xn)

            Σ = diag(λ1, λ2, ..., λn)

            -

            ,该表达式称为方阵的特征值分解,这样方阵A就被特征值和特征向量唯一表示。

            +

            ,该表达式称为方阵的特征值分解,这样方阵A就被特征值和特征向量唯一表示。

            一个变换方阵的所有特征向量组成了这个变换矩阵的一组基。所谓基,可以理解为坐标系的轴。我们平常用到的大多是直角坐标系,在线性代数中可以把这个坐标系扭曲、拉伸、旋转,称为基变换。我们可以按需求去设定基,但是基的轴之间必须是线性无关的,也就是保证坐标系的不同轴不要指向同一个方向或可以被别的轴组合而成,否则的话原来的空间就“撑”不起来了。从线性空间的角度看,在一个定义了内积的线性空间里,对一个N阶对称方阵进行特征分解,就是产生了该空间的N个标准正交基,然后把矩阵投影到这N个基上。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度。特征值越大,说明矩阵在对应的特征向量上的方差越大,功率越大,信息量越多。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。

            在机器学习特征提取中,意思就是最大特征值对应的特征向量方向上包含最多的信息量,如果某几个特征值很小,说明这几个方向信息量很小,可以用来降维,也就是删除小特征值对应方向的数据,只保留大特征值方向对应的数据,这样做以后数据量减小,但有用信息量变化不大,PCA降维就是基于这种思路。

            Matlab中通过eig函数就可求得特征值和特征向量矩阵。

            @@ -170,9 +170,9 @@

            特征值分解

            D对角线的元素即为特征值(表示了伸缩的比例),D就是特征值分解公式中的Q,V的每一列与D没列对应,表示对应的特征向量,即特征值分解中的Σ。

            奇异值分解

            特征值分解是一个提取矩阵特征很不错的方法,但是它只适用于方阵。而在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有M个学生,每个学生有N科成绩,这样形成的一个M * N的矩阵就可能不是方阵,我们怎样才能像描述特征值一样描述这样一般矩阵呢的重要特征呢?奇异值分解就是用来干这个事的,奇异值分解是一个能适用于任意的矩阵的一种分解的方法。我们有必要先说说特征值和奇异值之间的关系。

            -

            对于特征值分解公式, ATA 是方阵,我们求 ATA 的特征值,即 ,此时求得的特征值就对应奇异值的平方,求得的特征向量v称为右奇异向量,另外还可以得到:

            -

            -

            +

            对于特征值分解公式, ATA 是方阵,我们求 ATA 的特征值,即 ,此时求得的特征值就对应奇异值的平方,求得的特征向量v称为右奇异向量,另外还可以得到:

            +

            +

            所求的ui就是左奇异向量, σi 就是奇异值。已有人对SVD的几何机理做了清晰的分析,非常受用,就不重复造轮子,下文为转载自 http://blog.sciencenet.cn/blog-696950-699432.html

            SVD分解

            SVD分解

            diff --git "a/html/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.html" "b/html/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.html" index 96cf851..c6ba808 100644 --- "a/html/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.html" +++ "b/html/\350\207\252\351\200\202\345\272\224\345\220\253\345\231\252\344\277\241\345\217\267\350\277\207\351\233\266\347\216\207\347\256\227\346\263\225.html" @@ -49,11 +49,11 @@

            Tags: 过零率

            本文讨论的是实际使用过程中计算过零率的一种自适应方法。过零率常用于语音检测识别中,一般叫短时过零率更贴切些(指一段短时平稳信号才能计算过零率),简单有效,近期亦打算将这个简单的概念用于识别脚步声和卡车声(近似短时平稳)。过零率的定义计算一般通过下面的表达式描述:

            -

            +

            过零率是对频率从时域进行的一种简单的度量,一般情况下,过零率越大频率近似越高,反正亦然,相关推倒可参考相关文献。

            自适应噪声阈值

            自然信号由于电路、环境引入的噪声会在0水平位置波动,直接按上式计算过零率,严重影响识别效果。因此,本文在计算过零率时,对信号的幅值进行阈值限定,阈值的计算方法是:

            -

            +

            其中F为阈值与峰峰值的系数因子,一般F在0.1~0.2之间,Vpp表示当前短时信号的峰峰值,THR(t)表示t时段的阈值。

            因此增加阈值判别后计算过零率的流程图为:

            @@ -112,7 +112,7 @@

            自适应噪声阈值

            thr.cur = (uint32_t)(((thr.pre + TH_FACTOR * peak_value) / 2) ); }

            关于初始阈值的选择:

            -

            +

            改进:增加能量阈值的策略

            这时要考虑的情况有些复杂,除了噪声阈值外,还要考虑能量阈值(确定是否是信号段),如下图:

            @@ -210,7 +210,7 @@

            补充:测试效果及新方法

            因为卡车的采集信号高频都载波到低频信号上了,而在未判断实际目标之前,是无法使用低通滤波进行滤波(可能滤掉脚步声信号)。

            综上,我看过很多的论文,大都提到使用过零率对脚步声了卡车进行识别,而且识别效果还不错,我不知他们的实验环境是什么样的,至少从上面的实验分析,还是有问题的。

            因此,提出新的特征,用于区分两类信号——数字化占空比。其过程是:设定一个阈值,从头到尾扫描一帧信号,大于阈值的点设为1,否则设为0,我称之为数字化过程,然后计算高电平(即1)占所有一帧(512点)的百分比,用该百分比作为脚步声和卡车的识别数学特征。好了,我们用数学表述得专业些:

            -

            =THR}{N}*100%">

            其中x>=THR表示序列中值大于THR的点数。测试结果:取THR=0.4*Vpp,则计算脚步信号的Dutycycle=4,而卡车信号的Dutycycle=113,差异非常明显。

            diff --git "a/html/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.html" "b/html/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.html" index 4a8f896..5a11d17 100644 --- "a/html/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.html" +++ "b/html/\350\257\273\350\256\272\346\226\207BinarizedNormedGradientsforObjectnessEstimationat300fps.html" @@ -37,16 +37,16 @@

            关于论文

          3. 作者巧妙的将对窗口打分(分数越高,越可能是目标,否则越可能是背景)的计算转化为(或近似)通过位运算来实现,并以此为基础达到单幅图片的计算时间为0.003s。

          窗口打分是通过一个线性模型来操作的(其实就是一个滤波器),

          -

          +

          为获得权值w,则必须通过训练数据训练,作者采用了最简单的Linear SVM,大致过程应该是:对训练用数据,目标窗和背景窗分别给定不同的分数(从程序上看,目标窗是1,背景窗是-1),训练数据经过Linear SVM调整w使训练数据的误差最小,得到调整w向量就用于预测中的窗口打分,打分越接进1的窗口为目标窗,否则为背景窗。

          使用Linear SVM训练打分窗口的参数倒也没什么,重点在:窗口的预处理中考虑目标一般情况下“不会太小”,选择了一些固定的sliding window,如,10x160,10x320等,并且采取了降低窗口分辨率的方式,将窗口都resize到8x8,之后再进行窗口打分或训练w的操作。我对resize这种操作的理解是:虽然resize会降低前景与背景的差异,可能使前背景难以区分,但这种操作同时也减小了背景和背景之间、前景和前景之间的差异,但只要“背景和背景之间、前景和前景之间的差异”减小得比“前景与背景的差异”更多一些,则还是对区分前景和背景有利的,只不过应该可以找个折中,作者貌似为了计算的效率,直接resize到8x8了。所以(1)中的w和gl都是64维的向量。

          既然得到了w,就能直接根据(1)计算窗口的分数,确定预测目标了,但作者没有简单的按(1)式做,而是将(1)的操作转化为位运算,这也是为什么特征称为BING(B就是Binarized),直接采用硬件指令大幅度地提升速度。为使用二进制运算,必须将w和gl都转成二进制的模型。Algorithm1就是将w转成二进制模型的算法,我感觉原理大致就是:将w在投影到不同的正交向量上,如果还不理解Algorithm1,好好看看算法是怎么操作的,那不就是“Gram-Schmidt正交化”吗?只不过只取了包含大部分信息的前Nw个正交向量作为输出,目的也是为了降低计算量。NG特征gl转成二进制模型是

          -

          +

          我觉得大概的意思好像是,比如一个十进制的数121D,转成二进制就是0111 1001B,也可以直接将低位截断(这时Ng=3),用0111 1000近似代替121D。不过这里还是有些不明白,b_kl不是8x8维的特征吗?就不明白这里是什么意思了,矩阵求sum会得到标量的gl?感觉这一段下表用得有些混乱,没解释太清楚。而为了计算64维的BING特征,要扫描64个点,作者用Algorithm2也是通过二进制的移位运算降低计算量,就如作者原文所说的——有些类似于积分图像的计算一样(with the integral image representation)。

          最后将算法1和2结合起来对窗口打分的操作由卷积运算变成了大部分是位运算操作,

          -

          +

          其中C_j,k是

          -

          +

          上面的计算很容易通过位运算和SSE指令(支持8x8=64bit)来完成快速运算。

          关于程序

          程老师的程序也跑了遍,大致看了看,太佩服大牛了,即使想得到,这程序也不一定能写得好,居然还用的C++。程序配置上需要安装OpenCV,貌似低的版本还不行,作者原先用的VS版本是VS2012,如果不想自己重新编译OpenCV,最好使用OpenCV 2.4.8以上(我用的是2.4.10)。准备好OpenCV环境后,还需要的准备工作包括:

          @@ -69,7 +69,7 @@

          关于程序

          上面的精度曲线称为DR-#WIN curves,源自TPAMI 2012的一篇论文:Measuring the objectness of image windows。原文还提出了将窗口数量比如[[0,5000]归一化到[0,1]之间,用曲线下的面积作为目标检测的度量结果,并称之为the area under the curve(AUC),这样AUC的范围就在[0,1]之间了。

          检测精度DR的计算

          DR的计算是参考The PASCAL Visual Object Classes (VOC) Challenge,目标检测任务中DR的计算的是true/false positive精度,将算法检测目标结果放到groud truth中,将“预测目标区域与groud truth区域的交集”除以“预测目标区域与groud truth区域的并集”作为DR:

          -

          +

          DR自少在50%以上才算目标检测正确,其实,50%已经是很低的了,几乎不能做为检测结果,难怪那些个算法(BING这篇文章也是)随随便便都到95%以上了。