我在时域中有两个波形,我需要在MATLAB中测量cross-correlation系数 . 我试过 max(abs(xcorr(m,n,'coeff')))
但似乎没有正常工作 .
另外,我需要测量波形的不同部分的互相关系数,例如,以1分钟的间隔测量互相关系数 . 如果可能的话,将这些值输出到矩阵或其他东西 .
我知道这是一个很多问题,但我是一个MATLAB新手,发现这个任务令人生畏!
我将非常感激地向您提供有关此问题任何部分的任何帮助 .
EDIT: 这是我用来测试相关代码的代码:
x = rand(1,14400);
y = rand(1,14400);
r = max( abs(xcorr(x,y,'coeff')) )
4 回答
根据本文中的公式,您可以通过以下方式计算互相关系数:
如果你只想为信号的某些部分计算系数,只需使用:
你有没有试过
corrcoef
功能?Edit 好的,我检查了corrcoef功能,它似乎工作正常,看看:
因此相关系数等于-0.0543 - 相似性小(如预期的那样) .
为了检查这一点,让我们计算相同信号的系数:
正如预期的那样,它等于1 .
Edit . 如您所见,corrcoef的结果是这两个信号之间所有可能相关系数的矩阵:
因此,对于互相关,您需要选择主对角线之外的一个元素(存在自相关系数,在这种情况下总是等于1) .
如果你选择ans(2,1)或ans(1,2)没有区别 - 如果计算x和y的相关性,或y和x的相关性,则没有区别 .
所以最终的代码看起来应该类似于:
请尝试使用 Cross-Covariance
交叉协方差序列是均值去除序列的互相关 . 就像Joonas提到的那样,
rand
的DC偏移为0.5,会给你一个"incorrect"的结果 .你是什么意思?它输出了什么,你期待什么?
互相关中可能存在的一个问题是波形中的直流偏置会破坏结果 . 据我所知,没有通用的方法可以做任何事情 . 您必须以某种方式确保波形不包含任何直流偏置 .
问题是
rand
返回的数字是 uniformly distributed in the interval (0,1). 换句话说,你的DC偏差(平均值)为0.5!这就是为什么你得到看似随机信号的高相关系数的原因:它们不是很随机,因为每个都有相似的常数分量,显示在相关系数中 .所以,尝试使用
randn
:它返回其元素为 normally distributed with mean 0 的随机数,这就是你想要的 .