声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 10114|回复: 32

[综合] 相干函数为什么计算出来恒等于1?

[复制链接]
发表于 2008-11-29 14:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我在matlab中用mscohere计算频域的相干函数,直接将两个信号时程带入该命令,可是计算出来的相干函数恒等于1,命令如下:
[C54,w] = mscohere(xx5,xx4,hamming(np),0,np,sf);

为了对比,我又采用相干函数的定义来计算,即用互谱的平方除以两个自谱再开方,结果还是等于1:
[S55,w]=periodogram(xx5,hamming(np),np,sf,'onesided');
[S44,w]=periodogram(xx4,hamming(np),np,sf,'onesided');
[S54,w]=cpsd(xx5,xx4,hamming(np),0,np,sf,'onesided');
S54=abs(S54);
C54 =sqrt(S54.^2./(S55.*S44));


我在matlab专区发了帖子没人理我,只有在这里再发一遍。
回复
分享到:

使用道具 举报

发表于 2008-11-29 16:02 | 显示全部楼层
信号中没有干扰时相干函数=1
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2008-11-29 22:24 | 显示全部楼层
本帖最后由 VibInfo 于 2016-11-9 15:10 编辑
原帖由 hcharlie 于 2008-11-29 16:02 发表
信号中没有干扰时相干函数=1

相干函数表示的是两个随机过程的相关性,和干扰有什么关系?
发表于 2008-11-30 07:35 | 显示全部楼层

回复 板凳 vincentsuen 的帖子

你将xx5或xx4中加一点噪声再试试看。
发表于 2008-11-30 11:33 | 显示全部楼层
把S54=abs(S54);去掉,而把
C54 =sqrt(S54.^2./(S55.*S44));
改为以下试试:
C54 =sqrt(S54.*conj(S54)/(S55.*S44));

[ 本帖最后由 songzy41 于 2008-11-30 15:15 编辑 ]
 楼主| 发表于 2008-11-30 14:55 | 显示全部楼层
以下是这个问题的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;
[S55,w]=periodogram(xx5,hamming(np),np,sf,'onesided');
[S44,w]=periodogram(xx4,hamming(np),np,sf,'onesided');
[S54,w]=cpsd(xx5,xx4,hamming(np),0,np,sf,'onesided');
S54=abs(S54);
C54 =sqrt(S54.^2./(S55.*S44));
% [C54,w] = mscohere(xx5,xx4,hamming(np),0,np,sf);

input8(t).txt

132.25 KB, 下载次数: 61

input10(t).txt

131.98 KB, 下载次数: 47

 楼主| 发表于 2008-11-30 14:56 | 显示全部楼层
应该和这两个信号没有关系,换成其他的信号也是一样等于1。
 楼主| 发表于 2008-11-30 14:58 | 显示全部楼层
本帖最后由 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));
还是一样的。
发表于 2008-11-30 15:22 | 显示全部楼层
本帖最后由 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);
vs02a.jpg
 楼主| 发表于 2008-12-1 09:39 | 显示全部楼层
本帖最后由 VibInfo 于 2016-11-9 15:11 编辑
原帖由 songzy41 于 2008-11-30 15:22 发表

我改成这样后,得到不完全是1,图如下:
%S54=abs(S54);
C54 =S54.*conj(S54)/(S55.*S44);

这个表示什么意义啊?
发表于 2008-12-1 15:31 | 显示全部楼层
抱歉,我上面给的不正确。是否应该用平均功率谱的概念?把程序改成这样:
np=1024;
S55=psd(xx5,np,sf,hamming(np),np/2);
S44=psd(xx4,np,sf,hamming(np),np/2);
[S54,w]=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 编辑 ]
发表于 2008-12-1 18:30 | 显示全部楼层

回复 楼主 vincentsuen 的帖子

相关与相关有什么区别?有的书籍都是混为一谈的。
发表于 2009-3-17 10:01 | 显示全部楼层
你好vicentseun,我也碰到同样的问题 不知道你现在解决了没有啊 如果方便 麻烦加我qq 307688218 好向你当面请教 谢谢
发表于 2009-3-17 17:23 | 显示全部楼层
没仔细读以上程序,但估计相干函数在各频点恒为1的原因是整段数据只含一个FFT段的缘故。求相干函数必须将数据分为多个FFT段才有意义。

以下是用multi-instrument作相干分析的结果,下图的FFT点数与数据长度相等,为8192点,因此相干函数在各频点恒为1。


vibData2.jpg

评分

1

查看全部评分

发表于 2009-3-17 17:27 | 显示全部楼层
下图的FFT点数为1024点,等于数据长度的1/8,可见相干函数并不恒为1,相干函数最大值为1,且正好位于两段数据皆含有的峰值频率处。(假定这两段数据的采样频率为44100HZ,经过频谱分析可得峰值频率为1722.7Hz)。
vibData1.jpg

vibData1_in_MI_format.rar.txt (50.95 KB, 下载次数: 47)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-6 07:27 , Processed in 0.081534 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表