什么是互相关

在这里我想探讨一下“互相关”中的一些概念。正如卷积有线性卷积(linear convolution)和循环卷积(circular convolution)之分;互相关也有线性互相关(linear cross-correlation)和循环互相关(circular cross-correlation)。线性互相关和循环互相关的基本公式是一致的,不同之处在于如何处理边界数据。其本质的不同在于它们对原始数据的看法不同。通过这篇文章,我想整理一下相关概念,并给出示例。

1. 线性相关(Linear Cross-Correlation)的定义和计算

假设我们手里有两组数据,分别为M个和N个,表示为: a = { a i , i ∈ [ 0 , M ] } {\bf a} = \{a_i,i \in [0,M]\} a={ai,i[0,M]} v = { v j , j ∈ [ 0 , N ] } {\bf v} = \{v_j,j \in [0,N]\} v={vj,j[0,N]} a \bf a a v \bf v v长,即 M ≥ N M \geq N MN。序列 v {\bf v} v a {\bf a} a之间的线性互相关操作表示为 R L ( v , a ) R_{\text L}({\bf v},{\bf a}) RL(v,a),其结果也是一个序列,表示为 R L = { R k L , k = 0 , 1 , 2 , . . . } {\bf R}^\text{L}= \{R^\text{L}_k, k=0,1,2,...\} RL={RkL,k=0,1,2,...}。具体的操作是用这两个序列进行的一种类似“滑动点积”的操作,如图1和图2所示。

图1. 线性互相关的计算过程示意
图2. 线性互相关结果序列中单个值计算示意

得到的互相关序列总长度 M + N − 1 M+N-1 M+N1,该序列的前 N − 1 N-1 N1和后 N − 1 N-1 N1个数值是无效的,有效的数据 M − N + 1 M-N+1 MN+1个。线性互相关的有效数据第k个分量的值为: R k L,eff = ∑ j = 0 N − 1 v j a k + j , k ∈ [ 0 , M − N + 1 ] R^\text{L,eff}_{k}=\sum_{j=0}^{N-1}v_ja_{k+j},k \in[0,M-N+1] RkL,eff=j=0N1vjak+j,k[0,MN+1]注意,线性互相关并不满足交换律,即:

R L ( v , a ) ≠ R L ( a , v ) R_{\text L}({\bf v},{\bf a}) \neq R_{\text L}({\bf a},{\bf v}) RL(v,a)=RL(a,v)一个简单的应证是,等式两侧操作所得结果的有效数据个数都不一致。

很好理解的,如果我把序列 v {\bf v} v a {\bf a} a反过来,上图图1中就是蓝色序列M=3,黄色序列N=6,则对于互相关后得到的ABCDEFGH而言,其前N-1=5和后N-1=5个数据是无效的,整个序列也就是无效的了

线性相关的实际意义是,向量 a {\bf a} a中的各个与向量 v {\bf v} v等长的子向量与向量 v {\bf v} v的相似程度。这样, R L,eff {\bf R}^\text{L,eff} RL,eff中值最大的索引就是与向量 a {\bf a} a中与 v {\bf v} v最相似的子向量的起始索引。通常,为了获得有效的互相关数据,我们总是用较短的数据去滑动点积较长的数据。

用一个实际的应用例子来验证一下吧。如图3的第一个子图表示雷达声纳发射了一个探测信号。经过一段时间之后,收到了如图3的第二个子图所示的回波(带有一定的噪声)。此时我们关注的是如何确定回波中从何时开始是对探测信号的响应,以便计算目标距雷达的距离,这就需要用到线性互相关。在第三个子图中的‘Valid’曲线即是有效互相关数据,其中清晰地呈现出两处与探测信号相似的回波的位置。

图3. 相关计算的一个例子:雷达回波分析

线性互相关中,还有一些概念值得注意:

  • 1 补零。由线性相关的计算式不难发现,为了计算出个完整的相关系数序列(包含那些“无效数据”在内的所有结果),需要用到一些“不存在”的点。这就需要人为地对这些值进行补充,在线性相关的计算中,对这些超出原始数据储存的区域取值为零。
  • 2 末端效应。由图1可以发现,一头一尾的个互相关数据并没有完全“嵌入”两个原始数组的全部信息,它们或多或少地受到了人为补零的影响。因此一般认为这些数据是不可用的。
  • 3 计算模式的选择。这个问题其实是由问题二衍生而来的,就Python语言中的函数而言,至少有两个可以直接计算线性相关:
numpy.correlate(a, v, mode)

scipy.signal.correlate(a, v, mode)

它们的调用参数完全相同。在调用时有三种模式可供选择,它们计算的内容是相同的,但是返回值长度各不相同:
mode = ‘valid’:只返回有效的那一部分相关数据,共 M − N + 1 M-N+1 MN+1个;
mode = ‘same’:只返回与 等长的那一部分相关数据,共 N N N个;
mode = ‘full’:返回全部相关数据,共 M + N − 1 M+N-1 M+N1个。
图3的第三个子图展示了这三种模式的计算结果,在那个例子中,‘valid’模式是最合适的。

2. 循环互相关(Circular Cross-Correlation)的定义和计算

循环互相关是表征两组等长周期性数据之间相似性的操作,其与线性互相关的区别也正由“等长”和“周期性”这个两特点产生。在循环互相关中,被处理的原始数据是等长的,即 a = { a i , i ∈ [ 0 , N ] } {\bf a} = \{a_i,i \in [0,N]\} a={ai,i[0,N]} v = { v j , j ∈ [ 0 , N ] } {\bf v} = \{v_j,j \in [0,N]\} v={vj,j[0,N]}。序列 v {\bf v} v a {\bf a} a之间的线性互相关操作表示为 R C ( v , a ) R_{\text C}({\bf v},{\bf a}) RC(v,a),其结果也是一个序列,表示为 R C = { R k L , k = 0 , 1 , 2 , . . . } {\bf R}^\text{C}= \{R^\text{L}_k, k=0,1,2,...\} RC={RkL,k=0,1,2,...}。其计算式与线性互相关的写法是一致的:
R k C = ∑ j = 0 N − 1 v j a k + j , k ∈ [ 0 , N ] R^\text{C}_{k}=\sum_{j=0}^{N-1}v_ja_{k+j},k \in[0,N] RkC=j=0N1vjak+j,k[0,N]只是得到的互相关序列长度也为 N N N。循环互相关的计算的具体过程如图4所示,注意到在计算时要用到超出原始数据索引范围的数据,其数据补充方式并不是“补零”而是“周期延拓”:即 a N + j = a j a_{N+j} = a_j aN+j=aj。这意味着对于循环互相关,不存在不同的计算模式之分,所有的数据都是有效数据。

图4. 循环互相关的计算过程示意

注意,循环互相关也不满足交换律

这里给出了一个关于循环相关的算例。两路原始数据分别由如下函数生成:

y 1 = 100 s i n ( 2 π t ) y_1=100sin(2\pi t) y1=100sin(2πt) y 1 = 3 s i n ( 2 π t ) + 2 s i n ( 4 π t ) + R a n d o m ( t ) y_1=3sin(2\pi t)+2sin(4\pi t)+Random(t) y1=3sin(2πt)+2sin(4πt)+Random(t)

如果视 y 1 y_1 y1为某个线性系统的周期输入信号,而视 y 2 y_2 y2为这个线性系统的输出信号。由于存在外接干扰,因此输出信号不完全由输入信号决定。此时,循环互相关的实际意义是,分辨输出信号中的哪一个部分(频率成分)是由该输入信号产生的。

图5. 时域数据,从上到下:y1,y2和他们的循环互相关
  • 22
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值