跳转至

说明

相关 — 信号相似度随位移的变化

衡量两个信号的相似度。与卷积的区别:相关不翻转核


算法原理

滑动相关(模板匹配)

\[ y[n] = \sum_{k=0}^{M-1} p[k] \cdot s[n + k], \quad n = 0, \dots, L-M \]

模板 \(p\)(长 \(M\))滑过信号 \(s\)(长 \(L\)),各位置点乘。输出长 \(L-M+1\)。

应用:模板匹配、模式识别、峰值位置对应最佳匹配偏移。

完全互相关(信号对齐)

\[ y[n] = \sum_{k=0}^{L-1} s[k] \cdot t[n + k], \quad n = -(L-1), \dots, L-1 \]

输出长 \(2L-1\)(双边)。峰值位置 = 两信号的时延估计。

应用:信号对齐、延时估计、DOA 估计。

相关 vs 卷积

相关 卷积
不翻转 翻转
含义 相似度 vs 位移 系统响应 vs 时间
交换律 不满足 满足

FFT 加速

长序列的互相关可借助 FFT:\(\text{corr}(s, t) = \text{IFFT}(\text{FFT}(s) \cdot \overline{\text{FFT}(t)})\)

自相关检测周期性

信号与自身的互相关,峰值在延迟 0 处,后续峰值间距 = 周期。


API 参考

// 滑动相关(模板匹配)
tiny_error_t tiny_corr_f32(const float *Signal, int siglen,
                           const float *Pattern, int patlen,
                           float *corrout);

// 完全互相关(信号对齐)
tiny_error_t tiny_ccorr_f32(const float *Signal, int siglen,
                            const float *Pattern, int patlen,
                            float *corrout);

注意事项

输出缓冲区大小

滑动相关:\(L - M + 1\);完全互相关:\(L + M - 1\)。

\(siglen < patlen\) 怎么办?

滑动相关要求 \(L \geq M\),否则合理输出为空。完全互相关无此限制。

相关 ≠ 卷积

两个操作数学上只差一个符号:\(\text{corr}(s, p)[n] = \text{conv}(s, p_{\text{flipped}})[n]\)。不要混用。