信号处理:互相关函数

文章目录

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

互相关函数(Cross-Correlation Function)

公式定义

1. 离散信号

  • 对于两个离散信号 x [ n ] x[n] x[n] 和 y [ n ] y[n] y[n],它们的互相关函数 R x y [ m ] R_{xy}[m] Rxy[m] 定义如下:
  • m m m 为整数,表示延迟(lag)量。可以是正数(x 滞后于 y)、负数(x 超前于 y)或零(两者对齐)。
  • R x y [ m ] R_{xy}[m] Rxy[m] 表示在延迟 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} x[n] \cdot y[n + m] Rxy[m]=n=−∞∑∞x[n]⋅y[n+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} x[n] \cdot y[n + \tau]}{\sqrt{\sum_{n} x[n]^2 \cdot \sum_{n} y[n]^2}} Rxy(τ)=∑nx[n]2⋅∑ny[n]2 ∑nx[n]⋅y[n+τ]

代码及实验

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

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

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

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

  • 我们首先对信号进行取样,取样长度 N = 1000 N=1000 N=1000,互相关函数幅值最大处 τ = 961 \tau=961 τ=961,因此 961 − ( 1000 − 1 ) = − 38 961-(1000-1)=-38 961−(1000−1)=−38,即信号 x [ n ] x[n] x[n]要比 y [ n ] y[n] y[n]超前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');
  • 归一化之后的结果如下图:

相关推荐
xianshengsun1 天前
光通信产业链分析
信号处理
山河君1 天前
音频进阶学习十八——幅频响应相同系统、全通系统、最小相位系统
学习·音视频·信号处理
北京青翼科技1 天前
【PCIE725-0】基于PCIe x16总线架构的VU9P FPGA高性能数据预处理平台
图像处理·人工智能·ai·架构·信号处理·ai编程
射频微波精密2 天前
安铂克科技 APPH 系列相位噪声分析仪:高性能测量的卓越之选
科技·测试工具·信息与通信·信号处理·量子计算
北京青翼科技5 天前
【PCIE737】基于全高PCIe x8总线的KU115 FPGA高性能硬件加速卡
图像处理·人工智能·信号处理·智能硬件
山河君9 天前
音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)
学习·音视频·信号处理
limingade9 天前
手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
android·人工智能·物联网·智能手机·语音识别·信号处理
network_tester11 天前
5G毫米波测试规范详解:3GPP核心标准、测试流程与实战挑战
网络·网络协议·测试工具·5g·信息与通信·信号处理·射频工程
FPGA狂飙11 天前
快速傅里叶变换(FFT):从数学公式到5G信号,揭开数字世界的“频率密码”
fpga开发·信号处理·verilog·fpga·vivado