Matlab中用于计算自相关函数的指令是xcorr.比如矩阵A=[1 2 3];

xcorr(A)=3.0000 8.0000 14.0000 8.0000 3.0000

自相关函数是信号间隔的函数,间隔有正负间隔,所以n个长度的信号,有2n-1个自相关函数值,分别描述的是不同信号间隔的相似程度。

比如,上面的矩阵,最后得到5个结果,其中第三个是自己和自己相乘,最后相加的结果,值最大1*1+2*2+3*3=14。而第二个和第四个分别是间隔正负1的结果也就是1*2+2*3=8,2*1+3*2=8。第1个和第五个分别是间隔正负2,也就是1*3=3,3*1=3。

xcorr求出的结果仅仅是x(n)*x(n+m)并对其求和,并没有除以前面的N或者是N-|K|。不用这个函数也可以求

for k=0:1:p

t5=0;

for

n=0:1:N-k-1

t5=t5+conj(x(n+1))*x(n+1+k);

end

Rxx(k+1)=t5/N;

end

也可以实现,其中N为序列长度此处并未求出全部的自相关序列,只求了间隔从0到p的。

我们令Rx=xcorr(x);

则Rxx(k+1)=Rx(N+k)/N得到。

下面是摘自一篇博文:

1. 首先说说自相关和互相关的概念。

这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号

x(t),y(t)在任意两个不同时刻t1,t2的取值之间的相关程度,自相关函数是描述随机信号x(t)在任意两个不同时刻t1,t2的取值之间的相关程度。

自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度;互相关函数给出了在频域内两个信号是否相关的一个判断指标,把两测点之间信号的互谱与各自的自谱联系了起来。它能用来确定输出信号有多大程度来自输入信号,对修正测量中接入噪声源而产生的误差非常有效.

事实上,在图象处理中,自相关和互相关函数的定义如下:设原函数是f(t),则自相关函数定义为R(u)=f(t)*f(-t),其中*表示卷积;设两个函数分别是f(t)和g(t),则互相关函数定义为R(u)=f(t)*g(-t),它反映的是两个函数在不同的相对位置上互相匹配的程度。

那么,如何在matlab中实现这两个相关并用图像显示出来呢?

dt=.1;

t=[0:dt:100];

x=cos(t);

[a,b]=xcorr(x,'unbiased');

plot(b*dt,a)

上面代码是求自相关函数并作图,对于互相关函数,稍微修改一下就可以了,即把

[a,b]=xcorr(x,'unbiased');改为[a,b]=xcorr(x,y,'unbiased');便可。

2. 实现过程:

在Matalb中,求解xcorr的过程事实上是利用Fourier变换中的卷积定理进行的,即R(u)=ifft(fft(f)×fft(g)),其中×表示乘法,注:此公式仅表示形式计算,并非实际计算所用的公式。当然也可以直接采用卷积进行计算,但是结果会与xcorr的不同。事实上,两者既然有定理保证,那么结果一定是相同的,只是没有用对公式而已。下面是检验两者结果相同的代码:

dt=.1;

t=[0:dt:100];

x=3*sin(t);

y=cos(3*t);

subplot(3,1,1);

plot(t,x);

subplot(3,1,2);

plot(t,y);

[a,b]=xcorr(x,y);

subplot(3,1,3);

plot(b*dt,a);

yy=cos(3*fliplr(t)); % or use: yy=fliplr(y);

z=conv(x,yy);

pause;

subplot(3,1,3);

plot(b*dt,z,'r');

即在xcorr中不使用scaling。

3. 其他相关问题:

1) 相关程度与相关函数的取值有什么联系?

相关系数只是一个比率,不是等单位量度,无什么单位名称,也不是相关的百分数,一般取小数点后两位来表示。相关系数的正负号只表示相关的方向,绝对值表示相关的程度。因为不是等单位的度量,因而不能说相关系数0.7是0.35两倍,只能说相关系数为0.7的二列变量相关程度比相关系数为0.35的二列变量相关程度更为密切和更高。也不能说相关系数从0.70到0.80与相关系数从0.30到0.40增加的程度一样大。

对于相关系数的大小所表示的意义目前在统计学界尚不一致,但通常按下是这样认为的:

相关系数 相关程度

0.00-±0.30 微相关

±0.30-±0.50 实相关

±0.50-±0.80 显著相关

±0.80-±1.00 高度相关

matlab计算自相关函数autocorr和xcorr有什么不一样的?xcorr是没有将均值减掉做的相关,autocorr则是减掉了均值。

文章二

% 不是x[n]和h[n]的长度相等了就不用补零了,可以直接用FFT算卷积了。

%

FFT计算卷积时,必须依据线性卷积后序列的长度补零后进行才能得到正确的结果。

%

验证用FFT-*-IFFT进行求解的循环卷积与线性卷积在L>M+N-1时相等的情况

%

1.用DFT能计算循环卷积:FFT-->* ---> IFFT

%

2.当L>=N+M-1时,此时的循环卷积==线性卷积可用DFT来求算循环卷积,从而也就得出了线性卷积

%===================================

% Original Serial

%===================================

x=[1,1,1,1]; %信号x[n]的时间起始范围 [0:3]

n1=0:1:3;

figure(1)

subplot(2,3,1)

stem(n1,x,'filled'),grid on

title('原始序列')

%===================================

% conv(x,x) 线性卷积

%===================================

x2=[1,1,1,1];

y2=conv(x2,x2); %

看看长度为4的x[n]与长度为4的h[n]线性卷积后的结果长度为 4 + 4 -1

n2=0:1:length(y2)-1; % 更一般的,卷积结果的时间起始范围为[(0 + 0)

: (3 + 3)]

subplot(2,3,2)

stem(n2,y2,'filled'),grid on

axis([0,8,0,4]);

title('线性卷积后的序列')

%===================================

% conv(x,x) Serial 4点循环卷积

% 易犯的错误:

% 用FFT做卷积,给x[n]和h[n]不补零的

% 情况下会导致错误的结果!

%===================================

x3=[1,1,1,1];

y3_tmp=fft(x3);

y3=y3_tmp.*y3_tmp;

Y3=ifft(y3);

%长度为M的x[n]与长度为M的h[n]虽然长度相等,但是也不能直接做FFT计算此两者的卷积

n3=0:1:length(Y3)-1;

subplot(2,3,3)

stem(n3,Y3,'filled'),grid on

%axis([0,4,0,1.5]);

title('不补零直接用FFT做卷积的结果')

注意:1)如果上面的例子中x[n]的非因果匹配滤波器h[n]恰好是它自身,对这一点不清楚的,可以通过xcorr(x)的结果和y2 的结果对比验证下。用conv 或者xcorr计算的非因果匹配滤波器的输出信噪比最大时刻,有N-1个点的延迟。实际上非因果匹配滤波器在t

= 0时刻输出信噪比最大,即出现峰值。

2)对于匹配滤波的情况下,我们只关心输出信噪比最大的那个时刻的输出,对其他的卷积结果不感兴趣。所以,匹配滤波的情况下可以不用给x[n]和h[n]后面补零就可以用FFT算出该输出信噪比最大的时刻,在非因果匹配滤波器下y3[0]点就是匹配滤波器的正确输出结果,即在t=0时刻,输出信噪比达到最大。

%===================================

% conv(x,x) Serial 7点循环卷积

% FFT做卷积补多少零,才能得到正确的结果

% 用FFT做卷积,x[n]长M, h[n]长N

% x[n]与h[n]线性卷积后长 L = M + N -1

% 最少要给x[n]尾部补 L - M 个零

% 最少要给h[n]尾部补 L - N 个零

%这里 补3个零后FFT循环卷积后的序列,恰好等于线性卷积

%===================================

x4=[1,1,1,1,0,0,0]; %线性卷积后的结果长度L = 7,故给x[n]后补 L -

M = 7 - 4 = 3个零

y4_tmp=fft(x4);

y4=y4_tmp.*y4_tmp;

Y4=ifft(y4);

n4=0:1:length(Y4)-1;

subplot(2,3,4)

stem(n4,Y4,'filled'),grid on

%axis([0,4,0,1.5]);

title('补3个零,恰好等于线性卷积')

%===================================

% conv(x,x) Serial 12点循环卷积

% 补3+ 5个零后FFT循环卷积的结果,多余的5个零在结果的最后以5个零值出现

%===================================

x5=[1,1,1,1,0,0,0,0,0,0,0,0];

y5_tmp=fft(x5);

y5=y5_tmp.*y5_tmp;

Y5=ifft(y5);

n5=0:1:length(Y5)-1;

subplot(2,3,5)

stem(n5,Y5,'filled'),grid on

axis([0,12,0,4]);

title('补3+ 5个零,最后5个零不起作用')

%===================================

% conv(x,x) Serial 16点循环卷积

% 补3+ 9个零后FFT循环卷积的结果,多余的9个零在结果的最后以9个零值出现

%===================================

x6=[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0];

y6_tmp=fft(x6);

y6=y6_tmp.*y6_tmp;

Y6=ifft(y6);

n6=0:1:length(Y6)-1;

subplot(2,3,6)

stem(n6,Y6,'filled'),grid on

axis([0,16,0,4]);

title('补3+ 9个零,最后多余9个零')

自相关序列

matlab中xcorr是这样定义的,给结果除以N是经常用的有偏估计。

The output vector c has elements given by c(m) = Rxy(m-N), m=1,

..., 2N-1。其中m表示输出最大值所在的位置,也称为延迟time lag,m<=

N-1。可以清楚的看出长度为N的x,经过y =

xcorr(x)的结果最大值有N-1的延迟(m=1..N-1),在c(N)点输出最大。实际的物理意义就使用积分标量来表示两个序列之间的相似程度度。

x = 1:4; Rx=xcorr(x)

ans =

4.0000 11.0000 20.0000 30.0000 20.0000 11.0000 4.0000

上结果表示Rx(n)从n=-3:0:3.经过xcorr函数运算得到的c长度为2*N-1,具体为-(N-1):(N-1)。例子中N=4

matlab并行fft实现,matlab fft实现相关相关推荐

  1. matlab并行加路径,matlab parfor_matlab 添加到路径_matlab 分布式计算

    Windows下MATLAB分布式并行计算服务器配置和使用方 法 1 MATLAB分布式并行计算服务器介绍 MATLAB Distributed Computing Server可以使并行计算工具箱应 ...

  2. matlab序列谱分析,基于MATLAB序列谱分析及FFT实现快速卷积.pdf

    数字信号处理大作业 基于MATLAB 的序列谱分析与FFT 实现快速卷积 学 院(系): 软件学院 专 业: 网络工程 学 生 姓 名: 学 号: 班 级: 完 成 日 期: 大连理工大学 Dalia ...

  3. Matlab数字图像的傅里叶变换(FFT)

    查看全文 http://www.taodudu.cc/news/show-6182241.html 相关文章: 使用matlab对图像进行傅里叶变换 [ MATLAB ]离散傅里叶变换(DFT)以及逆 ...

  4. 离散傅里叶变换DFT与FFT,MATLAB的FFT函数使用(原创)——如何使用fft()绘制出真正的频谱图像

    以前一直对MATLAB中fft()函数的使用一直存在疑惑,为什么要加一 些参数,并且如何确定这些参数,也查了许多资料,但很多都感觉只是 表面一说根本没有讲清其本质.但随着学习的推进,慢慢有所领悟,所 ...

  5. 全相位FFT算法matlab的实

    传统FFT利用三角函数的正交性,将信号分离出来,从而将时域的信号变换到频域.但是,它有一个很重要的前提:输入的序列必须是周期内等间隔采样的值,这样,FFT计算的结果才是我们想要的. 实际的情况是,很难 ...

  6. 【 MATLAB 】信号处理工具箱之 fft 案例分析

    上篇博文:[ MATLAB ]信号处理工具箱之fft简介及案例分析介绍了MATLAB信号处理工具箱中的信号变换 fft 并分析了一个案例,就是被噪声污染了的信号的频谱分析. 这篇博文继续分析几个小案例 ...

  7. 【 MATLAB 】信号处理工具箱之fft简介及案例分析

    目录 Syntax Description Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) Examples Noisy Signal Syntax Y = fft( ...

  8. MATLAB中的快速傅里叶变换FFT与IFFT

    背景 FFT (Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号从时域变换到频域.同时与之对应的是IFFT(Inverse Fast Fourier Trans ...

  9. matlab的fft与ifft,fft与ifft区别

    OFDM是如何利用FFT和IFFT技术实现的_信息与通信_工程科技_专业资料.1.LTE 在广义上说只有一个载波,FDD 是上行和下行的载波分配在不同的频点,TDD 是在 同一个...... Matl ...

  10. matlab留学生作业代做,代做DFT留学生作业、代写Matlab实验作业、Matlab程序语言作业调试、FFT课程作业代做代做数据库SQL|调试Matlab程序...

    Introduction This lab is a revision of the Discrete Fourier Transform (DFT), and the Fast Fourier Tr ...

最新文章

  1. 微信公众平台开发(82) 天气预报
  2. BZOJ 1114 Number theory(莫比乌斯反演+预处理)
  3. python版mapreduce题目实现寻找共同好友
  4. JAVA数字处理类使用2
  5. 围观|第一代云原生企业米哈游如何让想象发生?
  6. 【Python】数组索引到底怎么整?
  7. vs2012打包和部署程序成可安装安装包文件(InstallShield
  8. mongodb----集合而定多种查询方式
  9. Tensorflow2.0学习(八) — tf.dataset自定义图像数据集
  10. android-x86 地图,android 手机客户端百度地图 x86的jar包需要吗
  11. Java Swing 课程设计 ---- 实验室设备管理系统
  12. word一级标题行距一样宽度不一致
  13. 2019个人目标——计划未来
  14. 2、slf4j绑定JUL(桥接模式)
  15. Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi)
  16. 中创软件哪个部分是外包_什么是外包| 第1部分
  17. PR菜鸟入门 -- PR基础教学
  18. tweepy 根据推特ID爬取推特数据
  19. CAD高版本转低版本怎么转?分享几种好用的转换方法
  20. 小米遭虚假评价后索赔 100 万元

热门文章

  1. 搜索引擎优化排名的简单介绍
  2. React——返回顶部
  3. 什么是缓冲区溢出?有什么危害?原因是什么?
  4. JVM如何处理StackOverflowError
  5. [附源码]计算机毕业设计大学生心理测评系统Springboot程序
  6. 慧点科技新品牌SmartGO亮相 发力政企移动信息化
  7. C语言程序设计入门11——初识格式化输入1:求圆面积
  8. python卷积神经网络代码,python卷积神经网络分类
  9. 伦敦银和纽约白银行情怎么样?
  10. 关于视频编码器的作用详细介绍