关于线性相关和循环相关
本帖最后由 Rainyboy 于 2013-2-1 01:01 编辑在这里我想跟大家探讨一下“相关”中的两个概念。类似于卷积有线性卷积(linear convolution)和循环卷积(circular convolution);
相关也有线性相关(linear correlation)和循环相关(circular correlation)。
在Python 的scipy库和numpy库中,有一些计算“线性相关”的函数,没有函数直接用于计算“循环相关”。
在MATLAB 中,似乎xcorr()计算的是“线性相关”,而没有函数直接用于计算“循环相关”。
http://www.mathworks.cn/cn/help/signal/ref/xcorr.html
还有人专门写了一个叫cxcorr()来算“循环相关”:
http://www.mathworks.com/matlabcentral/fileexchange/4810-circular-cross-correlation
在Python中,cxcorr()函数可以这样实现:
def cxcorr(a,v):
nom = np.linalg.norm(a[:])*np.linalg.norm(v[:])
return fftpack.irfft(fftpack.rfft(a)*fftpack.rfft(v[::-1]))/nom
关于这些内容,我整理了一个小心得,见附件。
贴出来只是希望被大家阅读后纠正理解上的错误,请不吝指正!
我的疑问是:
1)为什么“循环相关”在两个平台上都缺乏标准程序?是因为用得不多?
就振动分析而言,经常我们会得到N个点的响应数据和N个点的激振力数据,
如果采用“线性相关”的手段对这两组数进行处理,会得到2N-1个数,在计算过程中对原始数据自动补零
但是其中只有1个是‘有效’的(类似于两个N点序列进行“线性卷积”,除去一前一后的“末端效应”,就只剩下1个点了)。
而如果采用“循环相关”,也将得到N个数据点,在计算过程中对原始数据周期延拓
因而不存在末端效应。
并且将原始数据视作“周期序列中的一段”不是比视作“前后都是零的序列中的非零段”更接近振动的应用场合么?
因此我的第二个问题是:
2)大家在用“相关”概念处理程序的时候,都用的哪种相关?是什么场合?
当然也可以不在意我的这些问题,随便聊聊这个话题。
##相关网址##
关于MATLAB中的xcorr() 的论述
http://www.mathworks.cn/cn/help/signal/ref/xcorr.html 关于MATLAB中的cxcorr() 的论述
http://www.mathworks.com/matlabcentral/fileexchange/4810-circular-cross-correlation 网络论坛Stackoverflow关于此问题的讨论
http://stackoverflow.com/questions/6991471/computing-cross-correlation-function
http://stackoverflow.com/questions/12323959/fast-cross-correlation-method-in-python
http://stackoverflow.com/questions/9281102/n-fold-fft-convolution-and-circular-overlap
http://stackoverflow.com/questions/6855169/convolution-computations-in-numpy-scipy
http://stackoverflow.com/questions/4688715/find-time-shift-between-two-similar-waveforms 关于Cross-correlation的定义
http://mathworld.wolfram.com/Cross-Correlation.html
http://paulbourke.net/miscellaneous/correlate/
http://en.wikipedia.org/wiki/Cross-correlation 关于 CircularCross-correlation的定义
http://en.wikipedia.org/wiki/Circular_convolution
http://cnx.org/content/m22974/latest/
怎么没有人回应,我先说一点我的看法。相关一般用于随机信号研究,意义是一个信号当前波形与另一信号(可以是同一信号)的时移波形的相似程度。因此至于你说的“周期延拓”之后的时域波形,用作波形相似程度的计算还有依据吗? 周期延拓可以处理周期信号(同周期),工程上的随机信号没有明显的周期(通常使用功率谱描述),这时候做循环相关还有意义吗? 随心就动 发表于 2013-5-29 11:39 static/image/common/back.gif
周期延拓可以处理周期信号(同周期),工程上的随机信号没有明显的周期(通常使用功率谱描述),这时候做循 ...
你这么一说,我算是有些明白了。可是根据线性相关的定义,要计算相关性的两组数据应该是不一样长的,对吗?因为如果一样长的话,根据末端效应,结果中只有一个数是有效的? Rainyboy 发表于 2013-5-29 13:17 static/image/common/back.gif
你这么一说,我算是有些明白了。可是根据线性相关的定义,要计算相关性的两组数据应该是不一样长的,对吗 ...
数据量小的话可能会出现这个问题。当两个信号的数据量都很大时,补零产生的影响就可以忽略。应用的时候是分析两个信号之间的关系,不用把所有的数据都用上,稳态情况下1s或者2s的数据(采样频率一般是很高的)的数据就足以说明两个信号之间的关系了。当然对于确定性信号的周期信号,把一个周期内所有的数据都用上,结果肯定是最有效、最准确的。
页:
[1]