信号的同调性(Coherence)分析及MATLAB实例

信号处理中,信号的相关性是两种或两种以上信号分析的常用手段,用于寻找两种信号之间的关联性,例如在医学信号分析中常常用眼电信号与脑电信号做相关性分析来探究两者之间的关系。如今随着计算机的普及与发展以及电子科学技术的进步,常常用一些统计学的手段来处理所采集到的数字信号,也就是离散信号,在时域上用于评估信号相关性的指标是相关系数。皮尔森相关系数(Pearson)的计算公式如下:
在这里插入图片描述
同样的,在频域上也有评估两个信号相关的指标,在频域上的相关性一般称为同调性(coherence)。同调性是一个频率的函数,处于0到1之间,作用是评估在特定频段上两个信号的频率线性相关性。同调性的计算方法为:
在这里插入图片描述

由于同调性是关于频谱的函数,因此计算同调性之前需要对信号进行傅里叶变换,变换后得到的信号频率是复数因此上述运算要符合复数运算法则。在matlab中可通过mscohere函数计算信号同调性。下面是利用matlab计算信号的同调性示例,首先准备好需要计算同调性的原始信号:请添加图片描述
接着调用mscohere函数得到不同信号之间的同调性:
请添加图片描述
我们可以看到对角元素就是原始信号的频谱,也可以理解为自己与自己的同调性,以P22与P33为例,两个信号都有两个波峰,而在Coh32或Coh23上的对应频带上也出现了两个峰值,说明信号在这两个频带上具有较高的相关性。以上示例代码如下:

clear, close all
clc

%% initialize parameters
samplerate=1; % in Hz

%%% try different parameters and compare results!!
noverlap=25; % overlapping for 25 data points
nfft=50;    % the length of each segement for welch average

% noverlap=50; % overlapping for 50 data points
% nfft=100;    % the length of each segement for welch average

% noverlap=0; % overlapping for 0 data point
% nfft=250;    % the length of each segement for welch average

% noverlap=0; % overlapping for 0 data point
% nfft=500;    % the length of each segement for welch average
%% load and plot pre-defined simulated signal
load('SimSignal.mat')

[M,N] = size(X);
taxis = [1:N]/samplerate;

figure,
for i=1:M
    subplot(M,1,i),plot(taxis,X(i,:)) 
    ylabel(['x' num2str(i)])
end

%% estimate and display the coherence between channels using mscohere
figure,
for i=1:M
    for j=1:M
        if i==j
            %%% plot power spectrum of channel i using pwelch's method
            [Sxx,F] = pwelch(X(i,:),hamming(nfft),noverlap,nfft,samplerate);
            subplot(M,M,(i-1)*M+j),plot(F,Sxx)
            title(['P' num2str(i) num2str(j)])
        else
            [Cxy,F] = mscohere(X(i,:),X(j,:),hamming(nfft),noverlap,nfft,samplerate);
            subplot(M,M,(i-1)*M+j),plot(F,Cxy)
            title(['Coh' num2str(i) num2str(j)])
        end
    end
end

然而仅仅通过一次实验就证明两个信号在特定频率上具有同调性显然是不科学的,要通过反复的实验才能下定论,同时也要分析同调性的显著性存在,计算同调性的显著性阈值的方法如下:
在这里插入图片描述
其中n代表量测量,α表示置信度,例如在n=19,95%的置信度所需同调性阈值要达到0.1533才能认为是相关的。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
相干分析Coherence Analysis)是一种用于分析信号之间相互关系的方法,常用于信号处理和频谱分析中。在Matlab中,可以使用信号处理工具箱中的函数进行相干分析。 首先,你需要获取要进行相干分析的两个信号。假设你有两个信号x和y,可以将它们存储为向量或矩阵。 然后,可以使用Matlab中的cohere函数计算相干性。cohere函数的基本语法如下: [Cxy, f] = cohere(x, y, window, noverlap, nfft, fs) 其中,x和y是要进行相干分析信号,window是窗口函数(如'hann'或'hamming'),noverlap是窗口重叠的样本数,nfft是FFT的长度,fs是采样率。 cohere函数将返回相干性Cxy和对应的频率向量f。Cxy是一个0到1之间的值,表示两个信号之间的相干性程度,1表示完全相干,0表示完全不相关。 以下是一个简单的示例代码: ```matlab % 生成两个随机信号 fs = 1000; % 采样率 t = 0:1/fs:1-1/fs; % 时间向量 x = sin(2*pi*50*t) + randn(size(t)); % 信号x y = sin(2*pi*50*t + pi/4) + randn(size(t)); % 信号y % 相干分析 window = hamming(256); % 窗口函数 noverlap = 128; % 窗口重叠样本数 nfft = 512; % FFT长度 [Cxy, f] = cohere(x, y, window, noverlap, nfft, fs); % 绘制相干性谱 figure; plot(f, Cxy); xlabel('频率 (Hz)'); ylabel('相干性'); title('相干性谱'); ``` 上述代码将生成两个随机信号x和y,并使用hamming窗口函数进行相干分析。最后,绘制了相干性谱图。 希望对你有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值