可以在 Python 中计算多元信号的相干矩阵而不诉诸循环吗?

问题描述 投票:0回答:1

给定两个信号向量 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中找不到。如果可能的话,我宁愿不诉诸嵌套循环。

python signal-processing
1个回答
0
投票

晚了三年多,但以防万一其他人遇到这个问题......

您可以通过添加新的信号数组来改变信号数组的形状,计算多变量信号的形状为

(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
次。

© www.soinside.com 2019 - 2024. All rights reserved.