链接:https://www.zhihu.com/question/24687047/answer/31176606
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我来简洁地解释一下。
1) 首先我们仅考虑实信号。
自相关的直观含义就是:把一个信号平移一段距离,跟原来有多相似。
于是就有了自相关的定义:
它代表了“移、乘、积”这三步操作。
如果只谈自相关,其实到此就可以结束了。
只不过,在信号处理领域中还有一个叫“卷积”的东西,在别的地方(已知线性时不变系统的冲激响应和输入,求响应)有用。
它跟自相关的定义很相似,包含了“卷、移、乘、积”四步操作:
左边有时也写作,表示这个函数是由x(t)和y(t)卷积而得的,但它的自变量是
。
我们发现卷积比自相关多了一步“卷”的操作,为了去掉这个多余的操作,我们先把原信号自己卷一下,就可以抵消掉卷积中的“卷”操作了。这就是自相关与卷积的关系:
2) 现在扩展到复数域。
自相关是要刻画一个信号平移后与原始信号的相似性。显然,不平移时应该是最相似的。
我们希望x(t)与x(t)本身相乘后积分时,各时间点的值能够因叠加而增强。
在实数域上x(t)直接自乘没有问题。在复数域上,x(t)自乘后辐角还是乱的。
如果对其中一个x(t)取一下共轭,相乘后辐角就统一变成0了,积分时就能够取得叠加增强的效果。
所以在复数域上,自相关是这样的:
(共轭取在前者还是后者上都可以,取决于作者的习惯)
“相关”这个运算其实就是一种内积。
作者:马同学
链接:https://www.zhihu.com/question/22298352/answer/228543288来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
从数学上讲,卷积就是一种运算。
某种运算,能被定义出来,至少有以下特征:
- 首先是抽象的、符号化的
- 其次,在生活、科研中,有着广泛的作用
比如加法:
- a+b,是抽象的,本身只是一个数学符号
- 在现实中,有非常多的意义,比如增加、合成、旋转等等
卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。
卷积很直观呀,就是把二元函数 U(x,y) = f(x)g(y) 卷成一元函数 V(t) 嘛,俗称降维打击。。
怎么卷?
考虑到函数 f 和 g 应该地位平等,或者说变量 x 和 y 应该地位平等,一种可取的办法就是沿直线 x+y = t 卷起来:
1 卷积的定义
我们称 为
的卷积
其连续的定义为:
其离散的定义为:
这两个式子有一个共同的特征:
![](https://i-blog.csdnimg.cn/blog_migrate/034d7ec2a3dac8c8c9ed694d31f913e3.png)
这个特征有什么意义?
我们令 ,那么
就是下面这些直线:
![](https://i-blog.csdnimg.cn/blog_migrate/1baaa3330753f8ec0c5f59a5ed9c31b0.gif)
如果遍历这些直线,就好比,把毛巾沿着角卷起来:
![](https://i-blog.csdnimg.cn/blog_migrate/ea9969a44d45c5597d3470032acd89c3.gif)
此处受到 荆哲:卷积为什么叫「卷」积? 答案的启发。
只看数学符号,卷积是抽象的,不好理解的,但是,我们可以通过现实中的意义,来习惯卷积这种运算,正如我们小学的时候,学习加减乘除需要各种苹果、糖果来帮助我们习惯一样。
我们来看看现实中,这样的定义有什么意义。
2 离散卷积的例子:丢骰子
我有两枚骰子:
![](https://i-blog.csdnimg.cn/blog_migrate/467e4689fec7065a7e5e37833f617820.png)
把这两枚骰子都抛出去:
![](https://i-blog.csdnimg.cn/blog_migrate/bf77f5e09680c82ebd9d7b823145ec94.png)
求:
![](https://i-blog.csdnimg.cn/blog_migrate/652ca2ba80ab7cbb908a793f4f63eec8.png)
这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景。
我们把骰子各个点数出现的概率表示出来:
![](https://i-blog.csdnimg.cn/blog_migrate/34e823b59fbbf1cad6d3b31ab4e54950.png)
那么,两枚骰子点数加起来为4的情况有:
![](https://i-blog.csdnimg.cn/blog_migrate/c0bd8432f7f8a3525b083fe38f0ebbe5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b5556155e96d6a849aa9cf471270afa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/718059f1f71adc5fb6881d4fe9f97138.png)
因此,两枚骰子点数加起来为4的概率为:
符合卷积的定义,把它写成标准的形式就是:
3 连续卷积的例子:做馒头
楼下早点铺子生意太好了,供不应求,就买了一台机器,不断的生产馒头。
假设馒头的生产速度是 ,那么一天后生产出来的馒头总量为:
馒头生产出来之后,就会慢慢腐败,假设腐败函数为 ,比如,10个馒头,24小时会腐败:
想想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。
如此,我们可以知道,一天后,馒头总共腐败了:
这就是连续的卷积。
4 图像处理
4.1 原理
有这么一副图像,可以看到,图像上有很多噪点:
![](https://i-blog.csdnimg.cn/blog_migrate/abd11b12dc4539b7689d2477aa5896ef.png)
高频信号,就好像平地耸立的山峰:
![](https://i-blog.csdnimg.cn/blog_migrate/9ac0b15f9a1d0f98ff2f41ab9fdd1c3c.png)
看起来很显眼。
平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。
平滑后得到:
![](https://i-blog.csdnimg.cn/blog_migrate/3d7ed0884513e1cc1c2a775794f54d72.png)
4.2 计算
卷积可以帮助实现这个平滑算法。
有噪点的原图,可以把它转为一个矩阵:
![](https://i-blog.csdnimg.cn/blog_migrate/3bd8818cddb4968c3853734609f42260.png)
然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:
记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。
比如我要平滑 点,就在矩阵中,取出
点附近的点组成矩阵
,和
进行卷积计算后,再填回去:
![](https://i-blog.csdnimg.cn/blog_migrate/00153014408b378365ad732a52b29f11.png)
要注意一点,为了运用卷积, 虽然和
同维度,但下标有点不一样:
![](https://i-blog.csdnimg.cn/blog_migrate/fdbd95e787b161275779bf67e9c08298.png)
我用一个动图来说明下计算过程:
![](https://i-blog.csdnimg.cn/blog_migrate/aaafa0188f411235e824342088ca63de.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5b62d2361e17bdbf0b62c0e75cbf51e5.jpeg)
写成卷积公式就是:
要求 ,一样可以套用上面的卷积公式。
这样相当于实现了 这个矩阵在原来图像上的划动(准确来说,下面这幅图把
矩阵旋转了
):
![](https://i-blog.csdnimg.cn/blog_migrate/6bd14295d32c13c7cc09bcc3c139d723.gif)
此图出处:Convolutional Neural Networks - Basics
-------------------------------------------------------------------------------------------------------------------------------
互相关与卷积http://blog.sina.com.cn/s/blog_bf373a140101mixe.html
互相关
设两个函数分别是f(t)和g(t),则互相关函数定义为:
它反映的是两个函数在不同的相对位置上互相匹配的程度。
线性卷积
在泛函分析中,是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与经过翻转和平移的g的重叠部分的累积。如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是"移动平均"的推广。
理解卷积的物理含义也许有点难,但是理解其计算却是相对容易,东南大学的数字信号课程里做了一个线性卷积的动画演示:线性卷积
因此,我们很容易理解,卷积和相关是相似的,两者就是多了一个旋转过程而已,卷积要先对Y轴旋转!
用卷积来表示相关就是:
通常来说,计算卷积都是在频域进行的,这主要是利用了FFT变换的卷积定理
快速傅里叶转换(FFT)计算卷积,在时域(time domain)做卷积相当于这两个信号的离散傅里叶转换在频域(frequency domain)做相乘。
因此,matlabz中计算相关和卷积都是在频域计算的,再转回时域,这可以简单用代码来验证一下:
Matlab计算互相关函数xcorr,计算卷积函数conv;
C = xcorr(x,y,'option'),如果x,y长度不同,matlab会自动给短向量后面补零,最终长度length=2*max(n,m)-1;
"biased"为有偏的互相关函数估计;
"unbiased"为无偏的互相关函数估计;
"coeff"为0延时的正规化序列的自相关计算;
"none"为原始的互相关计算,也是默认模式;
Z= conv(x,y,'shape'),两向量长度不需要一致,最后卷积长度length=n+m-1;
"full"为默认模式,返回全部卷积(n+m-1);
"same",返回中间部分卷积,长度与x相同(n);
"valid",返回中间没有用零填充部分的卷积值,用滑动窗的方法解释的话,就是第2个窗口能够完全被第一个窗口重合、包含的部分(max(n-max(0,m-1),0),因此如果n<m的话,返回值就不存在)。
% 卷积法计算互相关的验证程序
dt=0.1;
t=[0:dt:100];
x=5*sin(4*t);
y=3*cos(3*t);
[a,b]=xcorr(x,y);
plot(b*dt,a);
yy=3*cos(3*fliplr(t)); % 以Y为轴对称翻转 yy=fliplr(y);
c=conv(x,yy);
err = a-c;
subplot(3,1,1);
plot(b*dt,a,'k');
title('Corr','fontsize',16);xlabel('Logs','fontsize',12);
subplot(3,1,2);
plot(b*dt,c,'r');
title('Conv','fontsize',16);xlabel('Logs','fontsize',12);
subplot(3,1,3);
plot(b*dt,err,'g');
title('Error','fontsize',16);xlabel('Logs','fontsize',12);
% 这里误差小于1e-13,本人认为是由matlab的数值误差所引起,可以忽略。