序列互相关函数c语言 序列的互相关运算

matlab 如何关联两个序列在统计学中的定义,自相关函数就是将一个有序的随机变量系列与其自身作比较 。每个不存在相位差的系列,都与其都与其自身相似,即在此情况下,自相关函数值最大 。
在信号分析当中通常将自相关函数称之为自协方差方程 。用来描述信息在不同时间的,信息函数值的相关性 。
互相关
在统计学中,互相关有时用来表示两个随机矢量 X 和 Y 之间的协方差 cov(X, Y),以与矢量 X 的“协方差”概念相区分,矢量 X 的“协方差”是 X 的各标量成分之间的协方差矩阵 。
在信号处理领域中,互相关(有时也称为“互协方差”)是用来表示两个信号之间相似性的一个度量,通常通过与已知信号比较用于寻找未知信号中的特性 。互相关实质上类似于两个函数的卷积 。
对于离散函数 fi 和 gi 来说,互相关定义为
其中和在整个可能的整数 j 区域取和,星号表示复共轭 。
对于连续信号 f (x) 和 g (x) 来说 , 互相关定义为
其中积分是在整个可能的 t 区域积分 。
即互相关函数是描述随机信号x(t),y(t)在任意两个不同时刻t1 , t2的取值之间的相关程度,自相关函数是描述随机信号x(t)在任意两个不同时刻t1,t2的取值之间的相关程度 。
自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度;互相关函数给出了在频域内两个信号是否相关的一个判断指标,把两测点之间信号的互谱与各自的自谱联系了起来 。
===============================================================================================
在matlab当中可以使用xcorr函数来求序列的自相关和互相关 。
使用方法:
c = xcorr(x,y) 返回矢量长度为2*N-1互相关函数序列 , 其中x和y的矢量长度均为N,如果x和y的长度不一样,则在短的序列后补零直到两者长度相等 。
c = xcorr(x) 为矢量x的自相关估计 。
c = xcorr(x,y,’option’) 为有正规化选项的互相关计算;其中选项为”biased”为有偏的互相关函数估计;”unbiased”为无偏的互相关函数估计;”coeff”为0延时的正规化序列的自相关计算;”none”为原始的互相关计算 。
在Matalb中,求解xcorr的过程事实上是利用Fourier变换中的卷积定理进行的 。
可以查阅这篇博客了解xcorr函数的实现过程:自相关和互相关在matlab中的实现
也可以查阅matlab论坛中教学直接用FFt变换求两个序列互相关的方法:matlab求两个序列的互相关函数
================================================================================================
相关程度与相关函数的之间的联系
在概率论和统计学中 , 相关(Correlation,或称相关系数或关联系数),显示两个随机变量之间线性关系的强度和方向 。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离 。最常用的是皮尔逊积矩相关系数 。其定义是两个变量协方差除以两个变量的标准差(方差的平方根) 。
相关系数只是一个比率 , 不是等单位量度,无什么单位名称 , 也不是相关的百分数,一般取小数点后两位来表示 。相关系数的正负号只表示相关的方向,绝对值表示相关的程度 。因为不是等单位的度量 , 因而不能说相关系数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中使用corrcoef函数可以求两个序列的相关度
corrcoef(x,y)表示序列x和序列y的相关系数,得到的结果是一个2*2矩阵,其中对角线上的元素分别表示x和y的自相关,非对角线上的元素分别表示x与y的相关系数和y与x的相关系数,两个是相等的 。
转载请注明:数据分析 ? matlab求两个序列的相关性_matlab求相关性_两个序列的相关性
MATLAB程序设计教程(13)——在Word环境下使用MATLAB
MATLAB程序设计教程(13)——在Word环境下使用MATLAB
第13章在Word环境下使用MATLAB
13.1Notebook操作基础
13.2单元的使用
13.3输出格式控制
13.1Notebook操作基础
13.1.1Notebook的安装
首先安装Word 2002,然后启动MATLAB , 在其命令窗口输入:
notebook -setup
此时,用户根据所用Word版本,在最后一行提示后面输入对应序号,并按回车键 。于是MATLAB会自动寻找winword.exe的安装路径,并在该路径下寻找模板文件normal.dot 。如果找到了 , 则出现提示:
Notebook setup is complete.
表示Notebook安装结束 。
13.1.2Notebook的启动
启动Notebook有两种方法:从Word中启动或从MATLAB命令窗口启动 。
1.从MATLAB中启动Notebook
2.从Word中启动Notebook
13.1.3Notebook界面
M-book模板为用户提供了在Word环境下使用MATLAB的功能 。该模板定义了Word与MATLAB进行通讯的宏指令、文档样式和工具栏 。当调用该模板时的Word界面和通常的Word界面主要有两点区别:
(1) 在菜单栏中多了一个Notebook菜单项,Notebook的许多操作都可以通过该菜单项的命令来完成 。
(2) 在“文件”菜单项下多了一个New M-book命令项 。如果在M-book模板下要建立新的M-book文档,可以选择该命令 。
13.2单元的使用
13.2.1输入输出单元
1.输入单元
定义输入单元的方法是:首先选中所需命令,然后在Notebook菜单项中选择Define Input Cell命令,于是被选中的MATLAB命令成为输入单元 。定义输入单元也可以在选中所需命令后 , 直接按组合键Alt D 。
为了执行输入单元,应选择Notebook菜单项中的Evaluate Cell命令或直接按组合键Ctrl Enter 。
2.输出单元
输入单元执行后产生输出单元 。如果输入单元经修改后重新执行,那么新的输出单元将替换原有的输出单元 。图形的输出格式则通过Notebook菜单中的Notebook Options来设置 。
例13-1在M-book文档中定义输入单元,要求产生一个5阶魔方阵,并求相应的逆矩阵和各元素的倒数矩阵 。
操作步骤如下:
(1) 在文档中输入MATLAB命令:
(2) 选中命令行 , 在Notebook菜单项中选Define Input Cell命令或直接按组合键Alt D,于是命令行就变成了“绿色”的输入单元 。
(3) 若要把输入单元送去执行 , 则可用Notebook菜单项中的Evaluate Cell命令或直接按组合键Ctrl Enter,执行后产生“蓝色”的输出单元:
输入单元的定义与执行也可以同时进行 。先选中MATLAB命令,然后从Notebook菜单项中选择Evaluate Cell命令或直接按组合键Ctrl Enter,不但使被选中的命令成为输入单元,而且送去执行,产生输出单元 。
例13-2输入单元定义与执行同时进行 。
在英文状态下,以文本方式键入命令 , 然后选中命令并按Ctrl Enter键,则得到输入、输出单元 。
13.2.2自动初始化单元
可以把文本形式的MATLAB命令或已经存在的输入单元定义为自初始化单元 。其方法是:先选中它们,然后选择Notebook菜单中的Define AutoInit Cell命令即可 。
在打开M-book文档以后 , 新定义的自动初始化并不会自动执行 , 须另外进行运行操作 。运行自活细胞的方法同输入细胞一样,选择Eva1uate Cell菜单命令或按Ctrl+Enter键 。
13.2.3单元组
定义单元组的方法如下:
(1) 对输入的多行文本型MATLAB命令,用鼠标把它们同时选中,然后在Notebook菜单中选择Define Input Cell或Define AutoInit Cell命令,便生成输入单元组或自初始化单元组 。
(2) 对输入的多行文本型MATLAB命令 , 用鼠标把它们同时选中,然后在Notebook菜单中选择Evaluate Cell或按组合键Ctrl Enter,于是单元组被定义并执行 。
【序列互相关函数c语言 序列的互相关运算】(3) 把已有的多个独立输入单元或自初始化单元同时选中,然后在Notebook菜单中选择Group Cells,于是 , 便获得以第一个独立单元的性质组合而成的单元组 。
例13-3对循环结构使用单元组 。
例13-4使用单元组产生完整图形 。
13.2.4计算区
定义计算区的方法是:先选定包含普通Word文本、输入单元和输出单元的一个连续区,然后选择Notebook菜单中的Define Calc Zone命令 。
一旦计算区被定义后,不管光标在计算区的什么位置,只要选择Notebook菜单中的Evaluate Calc Zone命令即可执行计算区中的全部输入单元,且在每个输入单元后面以输出单元形式给出相应的计算结果 。
13.2.5单元的其他操作
1.单元的循环执行
利用Notebook菜单中的Evaluate Loop命令可实现单元的循环执行 。
例13-5单元的循环执行 。
2.整个M-book文档输入单元的执行
Notebook菜单项中的Evaluate M-book命令可以把整个M-book文档中的所有输入单元送到MATLAB中去执行 。
3.删去M-book文档中所有输出单元
Notebook菜单项中的Purge Output Cells命令可以删去M-book文档中所有输出单元 。
4.单元转化为文本
单元转化为文本的方法是:选定单元,再选择Notebook菜单中的Undefine Cells命令 。或将光标置于单元之中,按组合键Alt+U 。
13.3输出格式控制
输出格式控制包括输出数据控制和输出图形控制 。可以通过Notebook菜单中的Notebook Options命令来实现 。
13.3.1数据输出控制
1.输出数据的表示方式
2.输出数据间的空行控制
13.3.2图形输出控制
1.图形镶嵌的控制
2.曲面图色彩控制
3.图形背景色的控制
4.图形大小的控制
13.3.3修改M-book模板的样式
选取Word“格式”菜单中的“样式”选项,弹出样式对话框 。在“样式”列表框中选择Output , 然后单击“更改”按钮,弹出更改样式对话框 , 进行有关设置 。
两个序列做类似于卷积的运算,不同的是把乘后求和改为求与并输出所有序列原理方法
1
基本数学原理
序列互相关函数c语言我们假设有两个长度有限的任意序列A(n)和B(n) , 其中A(n)和B(n)的具体数学表达式可以看下图一 。那么这两个有限长序列的卷积就应该为C(n)=A(n)*B(n),其具体表达式请参看一下图二 。
2
相关函数指令
Matlab中的conv和deconv指令不仅可以用于多项式的乘除运算,还可以用于两个有限长序列的卷积和解积运算 。
Matlab提供的函数conv,语法格式:w=conv(u , v),其中u和v分别是有限长度序列向量,w是u和v的卷积结果序列向量 。如果向量u和v的长度分别为N和M , 则向量w的长度为N M-1.如果向量u和v是两个多项式的系数,则w就是这两个多项式乘积的系数 。下面序列互相关函数c语言我们看一下deconv指令 。功能:求向量反褶积和进行多项式除法运算 。语法格式:[q,r]=deconv(v,u) ,参数q和r分别返回多项式v除以多项式u的商多项式和余多项式 。具体实例请看下一步 。
3
conv和deconv指令实例
具体实例请看下图,这里我们求多项式(x2 2x 1)与多项式(2x2 x 3)的积,再求积与(x2 2x 1)的商 。需要注意的是向量c代表多项式(2x4 5x3 7x2 7x 3) 。
END
两个有限长序列的卷积实例
具体序列的数学形式
在这一步我们将具体的有限长时间序列按数学方式显示,具体请看下图 。
解法一:循环求合法求卷积
在本例中我们将按照原理方法第一步中图二的方式进行卷积计算,即循环求合法求卷积 。具体的代码及结果请看下图 。图一是是生成有限长度时间序列,图二是根据原理方法第一步中图二的方式即循环求合法求卷积的具体代码,图三是是图二的计算结果 。
解法二:0起点序列法
下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令 。具体代码看下图 。
解法三:非平凡区间序列法
下面就说一下第二种方法,即“0起点序列法”,所采用的指令就是我们在原理方法中介绍的conv函数指令 。具体代码看下图 。图一为计算代码,图二为计算结果 。
绘图比较
这一步我们将解法二和解法三的计算结果绘制在一张图片中进行比较,其中第一幅是“0起点法”的计算结果图,第二幅是“非平凡区间法”的计算结果图 。其中画图代码为:
subplot(2,1,1),stem(kc,c),text(20,6,'0 起点法') %画解法二的结果
CC=[zeros(1,KC(1)),C]; %补零是为序列互相关函数c语言了两子图一致
subplot(2,1,2),stem(kc,CC),text(18,6,'非平凡区间法') %画解法三的结果
xlabel('n')
小结
有以上可以得出如下结论:
1、“解法三”最简洁、通用;
2、“解法二”使用于序列起点时刻N1或(和)M1小于0的情况,比较困难;
3、“解法一”最繁琐,效率低下 。
互相关函数计算公式表达式 R(τ)=(1/T)∫[f(t)g(t τ)]dt
互相关函数是信号分析里序列互相关函数c语言的概念序列互相关函数c语言,表示的是两个时间序列之间的相关程度,即描述信号x(t),y(t)在任意两个不同时刻t1,t2的取值之间的相关程度 。描述两个不同的信号之间的相关性时 , 这两个信号可以是随机信号,也可以是确知信号 。
适用领域范围 离散信号公式序列互相关函数c语言:系统x序列的自/互相关函数对于连续信号公式表示为R(τ)=(1/T)∫[f(t)g(t τ)]dt积分限为0至T 。
对于离散信号公式表示为R(n)=(1/N)∑[x(m)y(m n)]其中m从0到N-1变化 。
特殊地,若离散信号为二进制信号,互相关函数应表示为R(n)=(A-D)/(A D)其中A、D分别为x序列与循环移n位后的y序列之间相同的码元数和不同的码元数 。
随机信号的相关函数估计:xcorr函数调用方式
(1)C=xcorr(A,B):当A和B为长度为M(M>1)的向量时,返回结果为长度为2M-1的互相关函数序列;如果A和B的长度不相同,则要对长度小的进行补零操作 。如果A为列向量 , 则结果C也为列向量;如果A为行向量,则结果C也为行向量;
(2)C=xcorr(A):估计向量A的自相关函数;
(3)C=xcorr(A):当A为M×N的矩阵时,返回结果为(2M-1)行、N2列的矩阵,该矩阵的列是由矩阵A所有列之间的互相关函数构成的;
(4)C=xcorr(…,maxlags):返回长度为2*maxlags 1的相关函数序列,其范围为-maxlags到maxlags,maxlags的默认值为M-1;
(5)[C,lags]=xcorr(…):同时返回坐标向量lags;
(6)C=xcorr(…,scaleopt):参数scaleopt用来指定相关函数估计所采用的估计方式 , 即
·biased:有偏估计方式;
·unbiased:无偏估计方式;
·coeff:对序列进行归一化处理,保证对零滞后的样本数值的自相关序列恒为1 。
·none:计算序列的非归一化相关,这是默认方式 。
如何求序列的自相关系数和互相关系数首先说说自相关和互相关的概念 。
这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号
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高度相关
(2)matlab计算自相关函数autocorr和xcorr有什么不一样的?
分别用这两个函数对同一个序列计算,为什么结果不太一样?因为xcorr是没有将均值减掉做的相关,autocorr则是减掉了均值的 。而且,用离散信号做自相关时 , 信号截取长度(采样点N)不一样,自相关函数就不一样 。
(3)xcorr是计算互相关函数,带有一个option的参数:
a=xcorr(x,y,'option')
option=baised时,是计算互相关函数的有偏估计;
option=unbaised时,是计算互相关函数的无偏估计;
option=coeff时,是计算归一化的互相关函数,即为互相关系数,在-1至1之间;
option=none,是缺省的情况 。
所以想要计算互相关系数,可用'coeff'参数 。
用这个xcorr函数作离散互相关运算时要注意 , 当x, y是不等长向量时,短的向量会自动填0与长的对齐 , 运算结果是行向量还是列向量就与x一样 。
互相关运算计算的是x,y两组随机数据的相关程度,使用参数coeff时,结果就是互相关系数 , 在-1至1之间,否则结果不一定在这范围,有可能很大也有可能很小 , 这视乎x, y数据的大小 , 所以一般要计算两组数据的相关程度,一般选择coeff参数 , 对结果进行归一化 。
所谓归一化简单理解就是将数据系列缩放到-1到1范围 , 正式的就是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量 。变换式为X=(X实测--Xmin)/(Xmax-Xmin) 。
一般来说选择归一化进行互相关运算后,得到结果绝对值越大 , 两组数据相关程度就越高 。
关于序列互相关函数c语言和序列的互相关运算的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读