相干函数为什么计算出来恒等于1?
我在matlab中用mscohere计算频域的相干函数,直接将两个信号时程带入该命令,可是计算出来的相干函数恒等于1,命令如下:= mscohere(xx5,xx4,hamming(np),0,np,sf);
为了对比,我又采用相干函数的定义来计算,即用互谱的平方除以两个自谱再开方,结果还是等于1:
=periodogram(xx5,hamming(np),np,sf,'onesided');
=periodogram(xx4,hamming(np),np,sf,'onesided');
=cpsd(xx5,xx4,hamming(np),0,np,sf,'onesided');
S54=abs(S54);
C54 =sqrt(S54.^2./(S55.*S44));
我在matlab专区发了帖子没人理我,只有在这里再发一遍。 信号中没有干扰时相干函数=1 本帖最后由 VibInfo 于 2016-11-9 15:10 编辑
原帖由 hcharlie 于 2008-11-29 16:02 发表
信号中没有干扰时相干函数=1
相干函数表示的是两个随机过程的相关性,和干扰有什么关系?
回复 板凳 vincentsuen 的帖子
你将xx5或xx4中加一点噪声再试试看。 把S54=abs(S54);去掉,而把C54 =sqrt(S54.^2./(S55.*S44));
改为以下试试:
C54 =sqrt(S54.*conj(S54)/(S55.*S44));
[ 本帖最后由 songzy41 于 2008-11-30 15:15 编辑 ] 以下是这个问题的matlab代码:
clear;
clc;
fid4=fopen('input8(t).txt','r');
xx4=fscanf(fid4,'%f');
status=fclose(fid4);
fid5=fopen('input10(t).txt','r');
xx5=fscanf(fid5,'%f');
status=fclose(fid5);
sf=187.5; %采样频率
np=length(xx5);
t=1:1/sf:np/sf;
=periodogram(xx5,hamming(np),np,sf,'onesided');
=periodogram(xx4,hamming(np),np,sf,'onesided');
=cpsd(xx5,xx4,hamming(np),0,np,sf,'onesided');
S54=abs(S54);
C54 =sqrt(S54.^2./(S55.*S44));
% = mscohere(xx5,xx4,hamming(np),0,np,sf); 应该和这两个信号没有关系,换成其他的信号也是一样等于1。 本帖最后由 VibInfo 于 2016-11-9 15:10 编辑
原帖由 songzy41 于 2008-11-30 11:33 发表
把S54=abs(S54);去掉,而把
C54 =sqrt(S54.^2./(S55.*S44));
改为以下试试:
C54 =sqrt(S54.*conj(C54)/(S55.*S44));
改成这样:C54 =sqrt(S54.*conj(S54)./(S55.*S44));
还是一样的。 本帖最后由 VibInfo 于 2016-11-9 15:10 编辑
原帖由 vincentsuen 于 2008-11-30 14:58 发表
改成这样:C54 =sqrt(S54.*conj(S54)./(S55.*S44));
还是一样的。
我改成这样后,得到不完全是1,图如下:
%S54=abs(S54);
C54 =S54.*conj(S54)/(S55.*S44); 本帖最后由 VibInfo 于 2016-11-9 15:11 编辑
原帖由 songzy41 于 2008-11-30 15:22 发表
我改成这样后,得到不完全是1,图如下:
%S54=abs(S54);
C54 =S54.*conj(S54)/(S55.*S44);
这个表示什么意义啊? 抱歉,我上面给的不正确。是否应该用平均功率谱的概念?把程序改成这样:
np=1024;
S55=psd(xx5,np,sf,hamming(np),np/2);
S44=psd(xx4,np,sf,hamming(np),np/2);
=cpsd(xx5,xx4,hamming(np),np/2,np,sf,'onesided');
S54=abs(S54);
C54 =sqrt(S54.^2./(S55.*S44));
[ 本帖最后由 songzy41 于 2008-12-1 16:18 编辑 ]
回复 楼主 vincentsuen 的帖子
相关与相关有什么区别?有的书籍都是混为一谈的。 你好vicentseun,我也碰到同样的问题 不知道你现在解决了没有啊 如果方便 麻烦加我qq 307688218 好向你当面请教 谢谢 没仔细读以上程序,但估计相干函数在各频点恒为1的原因是整段数据只含一个FFT段的缘故。求相干函数必须将数据分为多个FFT段才有意义。以下是用multi-instrument作相干分析的结果,下图的FFT点数与数据长度相等,为8192点,因此相干函数在各频点恒为1。
下图的FFT点数为1024点,等于数据长度的1/8,可见相干函数并不恒为1,相干函数最大值为1,且正好位于两段数据皆含有的峰值频率处。(假定这两段数据的采样频率为44100HZ,经过频谱分析可得峰值频率为1722.7Hz)。