信号处理:互相关函数

文章目录

  • [互相关函数(Cross-Correlation Function)](#互相关函数(Cross-Correlation Function))
    • 公式定义
      • [1. 离散信号](#1. 离散信号)
      • [2. 连续信号](#2. 连续信号)
      • [3. 归一化互相关函数](#3. 归一化互相关函数)
    • 代码及实验

互相关函数(Cross-Correlation Function)

公式定义

1. 离散信号

  • 对于两个离散信号 x n xn xn 和 y n yn yn,它们的互相关函数 R x y m R_{xy}m Rxym 定义如下:
  • m m m 为整数,表示延迟(lag)量。可以是正数(x 滞后于 y)、负数(x 超前于 y)或零(两者对齐)。
  • R x y m R_{xy}m Rxym 表示在延迟 m m m 时,信号 x x x 和 y y y 的相似程度。其幅值受信号幅值影响,因此一般用其归一化形式。
    R x y m = ∑ n = − ∞ ∞ x n ⋅ y n + m R_{xy}m = \sum_{n=-\infty}^{\infty} xn \cdot yn + m Rxym=n=−∞∑∞xn⋅yn+m

2. 连续信号

  • 对于两个连续信号 x ( t ) x(t) x(t) 和 y ( t ) y(t) y(t),它们的互相关函数 R x y ( τ ) R_{xy}(\tau) Rxy(τ) 定义如下:
    R x y ( τ ) = ∫ − ∞ ∞ x ( t ) ⋅ y ( t + τ )   d t R_{xy}(\tau) = \int_{-\infty}^{\infty} x(t) \cdot y(t + \tau) \, dt Rxy(τ)=∫−∞∞x(t)⋅y(t+τ)dt

3. 归一化互相关函数

为了消除信号幅度的影响,常使用归一化互相关函数(Normalized Cross-Correlation),其公式如下:归一化后的互相关函数 R x y ( τ ) R_{xy}(\tau) Rxy(τ) 的取值范围在 − 1 , 1 -1, 1 −1,1 之间,值越接近 1 表示两个信号在对应延迟下越相似。
R x y ( τ ) = ∑ n x n ⋅ y n + τ ∑ n x n 2 ⋅ ∑ n y n 2 R_{xy}(\tau) = \frac{\sum_{n} xn \cdot yn + \\tau}{\sqrt{\sum_{n} xn^2 \cdot \sum_{n} yn^2}} Rxy(τ)=∑nxn2⋅∑nyn2 ∑nxn⋅yn+τ

代码及实验

  • 在信号处理中,互相关法是一种重要的分析手段。互相关函数主要用于衡量两个信号在时间上的相似性。它通过滑动一个信号相对于另一个信号,并计算重叠部分的相似程度,来识别信号之间的时间对齐关系。

  • 如下两个离散信号 x n xn xn 和 y n yn yn,其互相关函数图如下:

  • 从时域图可以看出,两个信号长得比较像,但怎么表达两个函数长得像呢? 我们直观可以感觉到,信号 y n yn yn要比 x n xn xn延迟一些,幅值小一些,但二者形状上是比较像的。

  • 通过作互相关,我们可以计算出二者在不同时间差异下的相似程度,则相似程度最大处的横坐标,即代表了二者信号的相位差。

  • 我们首先对信号进行取样,取样长度 N = 1000 N=1000 N=1000,互相关函数幅值最大处 τ = 961 \tau=961 τ=961,因此 961 − ( 1000 − 1 ) = − 38 961-(1000-1)=-38 961−(1000−1)=−38,即信号 x n xn xn要比 y n yn yn超前38个采样点的时间。

  • matlab实验代码如下:

    matlab 复制代码
    % MATLAB代码演示互相关的意义
    close all;
    clear all;
    % 参数设置
    Fs = 1000;           % 采样频率 (Hz)
    t = 0:1/Fs:1-1/Fs;   % 时间向量 (1秒)
    f = 5;               % 信号频率 (Hz)
    delay = 40;          % y(n)相对于x(n)的延迟样本数
    similarity = 0.8;    % 相似程度系数 (0到1之间)
    % 生成信号x(n)
    x = sin(2*pi*f*t);
    % 生成信号y(n),通过相似程度系数调整,并添加延迟
    y = similarity * sin(2*pi*f*(t - delay/Fs));
    % 绘制x(n)和y(n)的时域图
    figure('Name','互相关函数演示','Position',[400,400,1200,800]);
    subplot(2,1,1);
    plot(t, x, 'b', 'LineWidth', 1.5);
    hold on;
    plot(t, y, 'r--', 'LineWidth', 1.5);
    title('信号x(n)和y(n)的时域图');
    xlabel('时间 (s)');
    ylabel('幅度');
    legend('x(n)', 'y(n)');
    grid on;
    % 计算互相关函数,使用 'biased' 选项
    N = length(x);
    R_xy = xcorr(x, y, 'biased');  % 使用有偏互相关
    % 找到互相关函数的最大值及其对应的位置
    [max_corr, max_idx] = max(R_xy);
    lag_max = max_idx - (N - 1);
    % 绘制互相关函数
    subplot(2,1,2);
    stem(0:length(R_xy)-1, R_xy, 'k', 'LineWidth', 1.5);
    title(['互相关函数 R_{xy}(\tau)  (最大值 = ', num2str(max_corr), ')']);
    xlabel('延迟 \tau (样本)');
    ylabel('互相关幅度');
    grid on;
    % 标记最大值位置
    hold on;
    plot(lag_max, max_corr, 'ro', 'MarkerFaceColor', 'r');
    text(lag_max, max_corr, ['(\tau = ', num2str(lag_max), ')'], 'Color', 'r', 'VerticalAlignment', 'bottom');
    hold off;
    % 显示延迟信息
    fprintf('信号y(n)相对于x(n)的延迟为 %d 个样本。\n', lag_max);
  • 实验结果如下:其中没有归一化,因此纵坐标表示的相似程度会受信号幅值影响。

  • 归一化一般采用能量归一化,使用如下代码:

    matlab 复制代码
    % 计算互相关函数,使用 'biased' 选项
    N = length(x);
    R_xy_norm = xcorr(x, y, 'coeff');
  • 归一化之后的结果如下图:

相关推荐
奔袭的算法工程师6 天前
论文解读--Sparse4D v3: Advancing End-to-End 3D Detection and Tracking
人工智能·目标检测·计算机视觉·自动驾驶·信号处理
江畔柳前堤6 天前
github实战指南01-账号配置与 SSH 密钥
运维·人工智能·深度学习·ssh·github·pyqt·信号处理
江畔柳前堤7 天前
github实战指南02-仓库管理与 Issue
人工智能·深度学习·github·信号处理·caffe·wps·issue
小白小宋8 天前
【PUSCH番外篇】5G NR 相位补偿与频移校正:原理、流程与工程实现
算法·5g·matlab·信息与通信·信号处理
DreamLife☼8 天前
OpenBCI-实时BCI系统:低延迟与闭环控制
人工智能·信息可视化·信号处理·开源硬件·脑机接口·低延迟·openbci
network_tester9 天前
TSN交换机研发测试怎么做?一套可落地的“信而泰仪器 + 康芯源服务”方案解读
网络·网络协议·tcp/ip·车载系统·汽车·信息与通信·信号处理
Code-keys10 天前
ARM NEON SIMD 编程实战:从音频信号处理到AI算子研发实战
arm开发·音视频·信号处理
MARIN_shen10 天前
Marin说PCB之高速信号SERDES (GMSL2)信号换层孔打在焊盘中心真的好吗?---01
硬件工程·信号处理·pcb工艺
Inhand陈工12 天前
映翰通IG502实战:通过RS232采集交通信号灯数据,实现自动短信告警
网络·嵌入式硬件·物联网·网络安全·边缘计算·信息与通信·信号处理
network_tester13 天前
SENT/PSI5传感器TSN集成测试:打通传统传感与未来车载网络的“最后一公里”
数据库·网络协议·tcp/ip·自动驾驶·信息与通信·信号处理·tcpdump