假设两个平稳信号 $\textbf{x}$ 和 $\textbf{y}$ ,如果 $x\left(t+\tau\right)= y\left(t\right)$ ,则可通过互相关求 $\tau$ 。由于信号处理相关知识都蘸酱吃了,理论相关的部分咱们来日方长(我一定可能会补充的)。

XCORR 实现

首先,通过实现 xcorr 函数介绍互相关计算流程:

clc

clear

close

% 实现 xcorr 函数

% 基本设置

T = 1; % [s] 总时间长度

fs = 5000; % [Hz] 采样频率

t = 0:1/fs:T; % [s] 时间坐标

N = length(t); % 信号个数

% 信号生成

tm = [ t(1:N) - T , t(2:N) ]; % 相关结果的时间延迟坐标轴

td1 = 0.2*T; % x 信号时间延迟

td2 = 0.3*T; % y 信号时间延迟

noise = rand(1,2*N); % 生成了两倍时间 T 长度的噪声 [0,1]噪声

x = noise(1+round(td1*fs):N+round(td1*fs))-0.5*ones(1,N);

y = noise(1+round(td2*fs):N+round(td2*fs))-0.5*ones(1,N);

% 求取互相关

z1 = xcorr(x,y);     % Matlab 自带函数

[~,I1] = max(abs(z1)); % 模仿 Matlab doc 给出延迟坐标

z2 = zeros(1,N);     % 自编函数

for n = 1:length(tm)

z2(n) = sum( x( max(1,n-N+1):min(n,N) ).*y( max(1,N-n+1):min(2*N-n,N) ) );

end

[~,I2] = max(abs(z2)); % 模仿 Matlab doc 给出延迟坐标

%---------------------计算说明--------------------%

% case1: | case2: %

% .N | .2*N-n %

% y: .......... | y: .......... %

% .N-n+1 | .1 %

% .n | .N %

% x: .......... | x: .......... %

% .1 | .n-N+1 %

%------------------------------------------------%

err = z1-z2; % 两种算法的差

% 绘图

subplot(1,3,1)

plot(tm,z1)

title('Matlab function')

xlabel('time delay')

ylabel('Amp')

a1 = gca;

a1.XTick = sort([-1:0.5:1 tm(I1)]);

subplot(1,3,2)

plot(tm,z2)

title('My function')

xlabel('time delay')

ylabel('Amp')

a2 = gca;

a2.XTick = sort([-1:0.5:1 tm(I2)]);

subplot(1,3,3)

plot(tm,err,'.-')

title('error')

xlabel('time delay')

ylabel('Amp')

suptitle('xcorr realization')

以上 Matlab 代码可以得到下面的结果。从左到右依次是 Matlab 自带函数、我编的互相关函数、两个函数的差值。不难发现:两个函数十分接近,但是差值不为零。个人猜测是因为 xcorr 的求和和 sum 求和的截断误差不同所致。这个误差的来源我懒得去编程序验证了——毕竟10-16量级的差别,没多大深究的意义。但是可以注意到这个差值有四个特点:

- 小幅值时有固定几个数值

- 每跑一次程序,rand 产生的噪声数据不同,error 值不同

- 呈“纺锤型”,中间高,两边低

- 实际值大的数据点,error 值大

最后要谈一下 xcorr 的噪声问题。我们通常使用的噪声是白噪声,或者高斯白,有一个很重要的特点就是均值为零,也就是说没有直流分量。但是当我们的噪声存在直流分量的时候(比如上面的噪声信号直接使用rand(1,2*N)时),互相关就是一个类似等腰三角形的东西了(想想门函数卷积)。回忆一下,对于存在稳定周期分量的两组信号 $\textbf{x}$ 、 $\textbf{y}$ 而言,互相关结果将会是一个幅度为“纺锤形”的周期震荡的信号。由此可观:互相关一方面可以得到非周期信号延迟结果,同时也能反映极端情况下,相同频率成分的存在,这一点可以用来观察工频干扰程度。

XCORR 与 CONV

互相关 xcorr 与 conv 的差别在于两点:

- xcorr 在两段信号较短者后补零,使两段信号长度一致

- xcorr 直接用两个信号的各种延迟做相乘求和,conv 使用翻褶后的信号做相乘求和

这导致了:

1、xcorr(x,y) 中 (x,y) 顺序有影响,而conv(x,y) 没有

2、两者在大部分情况下得到的结果是不一样的,但是对于一些有趣的对称信号是存在等价关系的。有兴趣的读者可以搞一搞,找找规律。因为本人并不搞对称相关的研究,这点就不展开了。下面的例子是有等价关系的。

clc

clear

close

% 比较 conv xcorr

% 例子

A = ones(1,12);  % -3:3

B = 0:4;      % 3:-1:-3

C = xcorr(A,B);

D = conv(A,B);

%绘图

subplot(2,2,1)

plot(A,'.-')

ylim([ -0.1 5.1 ])

xlim([ 0.9 12.1])

title('A = ones(1,12)')

xlabel('n')

ylabel('Amp')

subplot(2,2,2)

plot(B,'.-')

ylim([ -0.1 5.1 ])

xlim([ 0.9 12.1])

title('B = 0:4')

xlabel('n')

ylabel('Amp')

subplot(2,2,3)

plot(C,'.-')

ylim([ -0.1 15.1 ])

xlim([ 0.9 25.1])

title('xcorr 结果')

xlabel('n')

ylabel('Amp')

subplot(2,2,4)

plot(D,'.-')

ylim([ -0.1 15.1 ])

xlim([ 0.9 25.1])

title('cone 结果')

xlabel('n')

ylabel('Amp')

suptitle('conv与xcorr对比')

有兴趣的读者可以试着用给定函数实现目标函数:

- xcorr --> fliplr

- xcorr --> conv

- conv --> fliplr

- conv --> xcorr

END

matlab的xcorr函数,Matlab_xcorr_互相关函数的讨论相关推荐

  1. matlab中xcorr函数详解

    Matlab中xcorr函数详解 引言 在matlab中查找相关函数时,找到了xcov函数和xcorr函数,仔细看了帮助文档,发现虽然计算公式不一样,但是两个函数用法相同,计算出的值也相同,于是在翻了 ...

  2. Matlab之xcorr函数的解释

    转自:https://www.cnblogs.com/yana-running/p/5458794.html 看了MATLAB关于xcorr的help文档没搞清楚什么意思,只够看到一篇不错的文章,通过 ...

  3. 【 MATLAB 】xcorr 函数介绍(互相关)简介

    xcorr Cross-correlation Syntax r = xcorr(x,y) r = xcorr(x) r = xcorr(___,maxlag) r = xcorr(___,scale ...

  4. Matlab xcorr函数详解

    Matlab提供了计算互相关和自相关的函数xcorr函数 1.使用方法 c = xcorr(x,y) c = xcorr(x) c = xcorr(x,y,'option') c = xcorr(x, ...

  5. MATLAB信号处理工具箱函数列表分类

    **现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾.(只解释基本用途,具体用法请在help目录下查询)** Waveform Generation(波形产生) chairp: 产生 ...

  6. matlab互相关检测器,自相关函数和互相关函数的利用MATLAB计算和作图

    <自相关函数和互相关函数的利用MATLAB计算和作图>由会员分享,可在线阅读,更多相关<自相关函数和互相关函数的利用MATLAB计算和作图(5页珍藏版)>请在人人文库网上搜索. ...

  7. matlab信号处理工具箱函数列表

    现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾.(只解释基本用途,具体用法请在help目录下查询) Waveform Generation(波形产生) chairp: 产生扫频余弦 ...

  8. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections

    [ MATLAB ]filter 函数介绍(一维数字滤波器) 在上篇博文中,里面有一个例子,就是过滤部分中的数据,这个部分中的数据的意思是如果有一个向量需要过滤,我们可以把它分为几段,然后分段过滤. ...

  9. 【转】MATLAB的polar函数 极坐标绘制最大半径怎样设置

    https://zhidao.baidu.com/question/262590480477498125.html MATLAB的polar函数 极坐标绘制最大半径怎样设置,类似于plot用axis( ...

最新文章

  1. [模仿微软Live.cn]JavaScript输入邮箱自动提示
  2. [BZOJ 4819] [SDOI 2017] 新生舞会
  3. Java面向对象基础整理
  4. Pixhawk代码分析-姿态解算篇B
  5. 右移函数(字符串,数组)
  6. dtm文件生成等高线 lisp_南方cass如何用图面高程点生成等高线
  7. flyme7 android彩蛋,魅族 15 系列开启预约,Flyme7 或是发布会彩蛋
  8. js 取get过来的数据
  9. 全文搜索引擎 Elasticsearch 安装
  10. 基于 RISC-V SoC 的可配置 FFT 系统设计(10)1024 点 FFT 程序的交叉编译
  11. Trying to create too many scroll contexts. Must be less than or equal to: [20000]
  12. 计算机电子科技生产质量标准,SJT9527__微型数字电子计算机 质量分等标准(4页)-原创力文档...
  13. 【Python课程作业】食物数据的爬取及分析(详细介绍及分析)
  14. 硕士毕业论文写多少字
  15. web课程设计-照片记录网站(Flask)【web项目】
  16. linux flex安装包,安装flex包
  17. Web狗的CTF出题套路
  18. CRJ巨佬gjd算法伪代码
  19. 虚拟展会结合AI数字人,帮助企业解决当下困局
  20. 智能机器人比巴和智伴哪个好_儿童中英文早教机

热门文章

  1. 北大强基计划有计算机吗,2020年北大及清华等高校的强基计划考试结果已经出炉...
  2. 旅通软件:旅游电子合同与管理系统一体化才是王道
  3. 物联网卡相关的商业模式
  4. 哈尔滨工程大学计算机调剂人多么,哈尔滨工程大学2020招调剂生,缺额1042人,截止到5月20日...
  5. 如何成为一位「不那么差」的程序员?
  6. Mac Book Pro如何新建WPS表格?
  7. .aspx 通过ajax方式提交HTML富文本
  8. AD20原理图转pcb失败
  9. 会计们,擦亮眼睛,不要因为不能报销的发票让自己成为背锅侠!
  10. 洛谷 P2853 Cow Picnic S(DFS)