互相关函数的频域计算

1.时域计算

x1(n)与x2(n)的互相关定义如下x1(n)与x2(n)的互相关定义如下x_1(n)与x_2(n)的互相关定义如下

R(τ)=E[x1(m)x2(m+τ)]R(τ)=E[x1(m)x2(m+τ)]R(\tau)=E[x_1(m)x_2(m+\tau)]

离散信号的互相关由下式计算,结果中的R(n)长度为2∗N−1R(n)长度为2∗N−1R(n)长度为2*N-1

R(n)=∑m=N−|n|−1m=0x1(m)x2(m+n)R(n)=∑m=0m=N−|n|−1x1(m)x2(m+n)R(n)=\sum_{m=0}^{m=N-\left | n \right |-1}x_1(m)x_2(m+n)

上代码

x1 = [1,2,3,7,9,8];
x2 = [4,5,6,5,4,3];
N =length(x2);
xc = xcorr(x1,x2,'biased');
[k,ind] = max(xc);
an = acos((ind-N)/Fs*340/d)*180/pixc12 = zeros(2*N-1,1);
m = 0;
for i = -(N-1):N-1m = m+1;for t = 1:Nif 0<(i+t)&&(i+t)<=Nxc12(m) = xc12(m) + x2(t)*x1(t+i);end end
end
xc12 = xc12/N;

验证可以看到自己循环计算得到的结果与matlab的xcorr结果相同

2.频域计算

由维纳-辛钦定理可知,随机信号的自相关函数和功率谱密度函数服从一对傅里叶变换的关系

P(ω)=∫+∞−∞R(τ)e−jωτdτP(ω)=∫−∞+∞R(τ)e−jωτdτP(\omega)=\int_{-\infty }^{+\infty }R(\tau)e^{-j\omega\tau}d\tau

R(τ)=12π∫+∞−∞P(ω)ejωτdωR(τ)=12π∫−∞+∞P(ω)ejωτdωR(\tau)=\frac{1}{2\pi}\int_{-\infty }^{+\infty }P(\omega)e^{j\omega\tau}d\omega

P(ω)P(ω)P(\omega)为x1、x2x1、x2x_1、x_2的互功率谱,这一步是把互相关函数变换到了频域,互相关函数的傅里叶变化就是互谱密度,写成下式

P(ω)=∫+∞−∞∫+∞−∞x1(t)x2(t+τ)dt*e−jωτdτP(ω)=∫−∞+∞∫−∞+∞x1(t)x2(t+τ)dt*e−jωτdτP(\omega)=\int_{-\infty }^{+\infty }\int_{-\infty }^{+\infty }x_1(t)x_2(t+\tau)dt*e^{-j\omega\tau}d\tau

由交换积分性质和傅里叶变换的移位性质上式可简化成以下形式(参考时域卷积频域相乘推导)

P(ω)=F∗1(ω)F2(ω)P(ω)=F1∗(ω)F2(ω)P(\omega)=F_{1}^{*}(\omega)F_2(\omega)

这也是互谱密度的频域计算方法,时域互相关可以由上式做傅里叶逆变换得到

R(τ)=12π∫+∞−∞F∗1(ω)F2(ω)ejωτdωR(τ)=12π∫−∞+∞F1∗(ω)F2(ω)ejωτdωR(\tau)=\frac{1}{2\pi}\int_{-\infty }^{+\infty }F_{1}^{*}(\omega)F_2(\omega)e^{j\omega\tau}d\omega

matlab中xcorr函数计算相关就是在频域计算的,这里用几行代码验证下

x1 = [1,2,3,7,9,8,3,7]';
x2 = [4,5,6,5,4,3,8,2]';
N = length(x1)+length(x2)-1;
NFFT = 64;
range = NFFT/2+1-(N-1)/2:NFFT/2+1+(N-1)/2;
xcorr(x1,x2)
ifft(fft(x1,NFFT).*conj(fft(x2,NFFT)));
r = fftshift(ifft(fft(x1,NFFT).*conj(fft(x2,NFFT))));
r = r(range)

关于这个计算,几点需要注意:

  • 互相关函数不是对称的,xcorr(x1,x2) != xcorr(x2,x1),而卷积计算是相等的,因此频域计算要注意看谁取共轭,简单记住哪个信号做参考就哪个信号取共轭,matlab的xcorr是第二个信号做参考
  • 频域相乘恢复到时域时得到的是[0~+lag_max,-lag_max~0],而直接时域计算得到的就是[-lag_max~+lag_max],因此想要与xcorr对应需要将逆变换后的数据后半部分移到前面来(fftshift),matlab 的xcorr函数内部也可以看到这个操作, % Keep only the lags we want and move negative lags before positive
    % lags.
    c = [c1(m2 - mxl + (1:mxl)); c1(1:mxl+1)];
  • fft长度必须大于等于2N-1以避免混叠,长度大于2N−12N−12N-1时,取后2N−12N−12N-1个值,而频域计算卷积是取前部分的值,参考这里,这里取后部分是指分别取[0:+lag_max]和[-lag_max:0]的后部分,而在处理过程中使用fftshift调换了先后顺序,那么实际就相当于就取中间部分,如上面代码中的range

互相关函数的频域计算相关推荐

  1. 使用overlap-add方法计算两个信号的卷积示例(在频域计算卷积)

    之前已经写过一篇使用overlap-add方法计算两个信号的卷积示例 本篇将卷积部分的计算从时域改为频域,基本操作步骤不变 示例代码如下: import numpy as npdef get_bloc ...

  2. LC振荡电路 频域计算

    基尔霍夫定律 以LC并联电路为例,电容两端的电压VC等于电感两端的电压VL: 流入电容的电流等于流出电感的电流: 从电路元件的本构关系可知 并且 微分方程 调换顺序并进行代换得到二阶微分方程 参数 ω ...

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

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

  4. 使用fft计算序列的互相关函数

    最近在做关于使用Matlab编程实现小m序列和Gold序列的实验,下面就说说关于这次实验室的一些收获: 1. 关于使用DFT实现线性卷积. 2. 关于自相关函数和互相关函数的Matlab计算. 3. ...

  5. matlab求相关函数,自相关函数和互相关函数的利用MATLAB计算和作图

    互相关函数,自相关函数计算和作图 1.自相关和互相关的概念. ●互相关函数是描述随机信号x(t),y(t)在任意两个不同时刻t1,t2间的相关程度. ●自相关函数是描述随机信号x(t)在任意两个不同时 ...

  6. 数字信号处理中的自相关和互相关计算和物理意义(二)

    在信号处理中,经常要研究两个信号的相似性,或者一个信号经过一段时间延迟后自身的相似性,以便实现信号检测.识别与提取等. 可用于研究信号相似性的方法称为相关,该方法的核心概念是相关函数和互相关函数. 1 ...

  7. KerberosSDR代码笔记(5) 信号处理(采样时间延迟计算、相位差计算的2种方法、MUSIC算法)

    https://github.com/rtlsdrblog/kerberossdr/blob/master/_signalProcessing/hydra_signal_processor.py 这部 ...

  8. 复数/复频域计算器介绍(解方程组)

    本人学电气专业,计算中常用到复数,复频域计算,以及复数复频域的方程组求解. 我市面上没有合适计算器(matlab可以算传函,但是输入太麻烦了.卡西欧有出过功能强大的计算器,但是我太穷了..) 于是,花 ...

  9. Helmholtz方程差分计算

    1.Helmholtz方程差分计算 ∇ 2 p + k 2 p = 0 (1) {\nabla ^2}p + {k^2}p = 0 \tag{1} ∇2p+k2p=0(1) 其中 , k = ω / ...

最新文章

  1. 在spring中,prototype scoped bean 如何注入单例bean中
  2. JZOJ 2413. 【NOI2005】维护数列
  3. arthas命令使用示例:monitor监视指定方法的执行情况
  4. Java线程池示例:并行计算200000以内的质数个数
  5. 嵌入式开发过程中结构体字节对齐问题pragma pack(1)
  6. angular使用动态组件后属性值_Angular 2-组件
  7. Android更改桌面应用程序launcher的两种方式
  8. python二维列表长度_python如何使二维数组的高度大于长度
  9. Wireshark实战分析之IP协议(一)
  10. 修改mysql字段长度
  11. 如何成为一个合格的ASF贡献者?
  12. cisco 路由器时区设置
  13. php 写入exif,用PHP将EXIF写入JPG
  14. 安卓APP自动更新实现
  15. 自动更新Selenium驱动chromedriver
  16. 2019上半年阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总...
  17. git 的批量克隆 批量切换分支 批量pull
  18. MyBatis框架快速入门
  19. java源文件的编写与保存_1.编写源代码编写源文件:CardLayoutDemo.java并保存,例如:I:myAppCardLayoutDemo.java。程序结构如下:p...
  20. 利用php计算bmi代码,用于计算体重指数(BMI)的C程序

热门文章

  1. intel realsense保存16位深度图与rgb图程序
  2. 云计算——IBM smart Cloud
  3. linux驱动程序ioctl函数用法
  4. 【学习笔记】springBoot中获取sping管理的bean
  5. RoboMaster视觉教程(7)风车能量机关识别
  6. ACS606开发方案源码,伺服驱动,无刷 直流
  7. Niagara解决设备连接应用的软件框架平台技术。
  8. python--turtle
  9. SteamVR+Vive叠影器不可用436报错思考与解决
  10. 登录英伟达一直显示服务器不可用,解决打开NVDIA控制面板时提示“NVDIA显示设置不可用”的方法...