给定两个信号向量 x 和 y,命令
f, Cxy = signal.coherence(Signal[:,i],Signal[:,j], fs)
在 scipy 工具箱中可用,生成 f 中列出的相应频率处的信号 x 和 y 之间的相干值。
是否有内置的 python 命令用于为多元信号创建相干矩阵,或者我必须诉诸使用循环?换句话说,如果 X 是大小为 N×C 的信号矩阵,其中 N 是时间点的数量,C 是通道的数量,是否有内置命令来计算 f,S,其中 f 是频率列表,S 的大小为 C×C×len(f),具有以下属性
S[i,j,k] 表示 f 中第 k 个频率处的通道 i 和 j 之间的相干性?
我似乎记得Matlab中有这样一个命令(mscohere?),但我在Python中找不到。如果可能的话,我宁愿不诉诸嵌套循环。
晚了三年多,但以防万一其他人遇到这个问题......
您可以通过添加新的信号数组来改变信号数组的形状,计算多变量信号的形状为
(len(f), C, C)
的相干连接矩阵(其中 C
是通道或信号的数量,len(f)
是频率的数量)。轴。
使用
numpy.newaxis
功能将新轴添加到信号数组的偏移位置:
f, Cxy = signal.coherence(x=Signal[:, :, np.newaxis], y=Signal[:, np.newaxis, :], fs=fs, axis=0)
这应该返回一个分配给形状为
Cxy
的变量 (len(f), C, C)
的数组。我没有检查过,但我想以这种方式计算相干连接矩阵会比使用循环更快,因为您只调用 spicy.signal.coherence
函数一次,而不是 C x C
次。