卷积公式的使用条件(R语言——卷积)
昨天被自相关函数带偏,中途转道去看了卷积的内容,结果一抬头发现23点半了,在短暂的迟疑后,我乖乖举起被子正式投降,断更一天
在效率低下地对着各种帖子琢磨了良久之后,我默默地打开了R软件,走回了实践出真知的老路,以下是一个比较初级的实践过程:
卷积函数convolve
把y向量的所有数值顺序倒一遍乘以x再加和,目前来说,这个部分还是可以成立的
基于曾经搞明白过的矩阵乘法,我又稍稍改变了一下这个操作的形式
到这里为止,也还算比较成功的
但是,接下来就是个不作死就不会死的典型案例了,打开这个函数本身的介绍
What?!这货居然是用傅里叶变换做的???
实践结果表示,它没有骗我,只是我智商有点低,一时还理解不了。。。。。。
为了强行结束这个话题以便今天可以按时上床睡觉,我拆解了一下这个计算公式
Re为取实部,第一个fft(。。。)/4这部分是为了把复数做FFT逆运算转换回时域,inverse = TRUE只改变了数列的顺序,姑且当它不太重要好了
那么,抠出来的关键部分就是fft(x) * Conj(fft(y))这两个复数的相乘,在百度了复数乘法的计算之后(基础差没药救),得到的信息是:两个复数相乘的几何意义是模长相乘、角度相加
中间的函数Conj为对fft(y)取共轭,实质上是模长不变,角度取负数
那这段信息结合起来就是x和y以傅里叶变换的方式各自拆分成4个正弦波(或余弦波),然后振幅相乘、相位相减得到4个新的波形,叠加回时域后翻转下顺序就成了卷积。。。以我的水准,能解释到这里也就差不多了,呵呵哒