Math 计算双相干的函数

Math 计算双相干的函数,math,numpy,matplotlib,scipy,Math,Numpy,Matplotlib,Scipy,各位亲爱的 我正在寻找一个numpy/scipy函数来计算三波相互作用研究之前的双相干和自双相干。 谢谢你所有可能的帮助 尼古拉也许这会有所帮助;一般来说,将Matlab翻译成Python非常容易。也许这会有所帮助;一般来说,将Matlab翻译成Python非常容易。在Python领域,最好的软件包是 它有几个相干性估计器,但我没有仔细研究它们。它是一个用于神经成像的软件包,但是这些算法故意只使用numpy和scipy,因此它可以被其他应用程序使用。python领域中最好的软件包是 它有几个相干

各位亲爱的 我正在寻找一个numpy/scipy函数来计算三波相互作用研究之前的双相干和自双相干。 谢谢你所有可能的帮助
尼古拉

也许这会有所帮助;一般来说,将Matlab翻译成Python非常容易。

也许这会有所帮助;一般来说,将Matlab翻译成Python非常容易。

在Python领域,最好的软件包是


它有几个相干性估计器,但我没有仔细研究它们。它是一个用于神经成像的软件包,但是这些算法故意只使用numpy和scipy,因此它可以被其他应用程序使用。

python领域中最好的软件包是


它有几个相干性估计器,但我没有仔细研究它们。这是一个用于神经成像的软件包,但这些算法只是有意使用numpy和scipy,因此,它可以被其他应用程序使用。

如果你指的是归一化互谱密度,那么你就可以做到这一点。

如果你指的是归一化互谱密度,那么你就可以做到这一点。

这里有一个函数依赖于scipy.spectrogram函数scipy version>0.17,并计算两个函数之间的双相差信号

来自Hagihira 2001和Hayashi 2007的定义。看

希望这有帮助

问候,

def compute_bicoherence(s1, s2, rate, nperseg=1024, noverlap=512):
    """ Compute the bicoherence between two signals of the same lengths s1 and s2
    using the function scipy.signal.spectrogram
    """
    from scipy import signal
    import numpy
    # compute the stft
    f1, t1, spec_s1 = signal.spectrogram(s1, fs = rate, nperseg = nperseg, noverlap = noverlap, mode = 'complex',)
    f2, t2, spec_s2 = signal.spectrogram(s2, fs = rate, nperseg = nperseg, noverlap = noverlap, mode = 'complex')

    # transpose (f, t) -> (t, f)
    spec_s1 = numpy.transpose(spec_s1, [1, 0])
    spec_s2 = numpy.transpose(spec_s2, [1, 0])

    # compute the bicoherence
    arg = numpy.arange(f1.size / 2)
    sumarg = arg[:, None] + arg[None, :]
    num = numpy.abs(
        numpy.mean(spec_s1[:, arg, None] * spec_s1[:, None, arg] * numpy.conjugate(spec_s2[:, sumarg]), 
        axis = 0)
        ) ** 2
    denum = numpy.mean(
        numpy.abs(spec_s1[:, arg, None] * spec_s1[:, None, arg]) ** 2, axis = 0) * numpy.mean(
            numpy.abs(numpy.conjugate(spec_s2[:, sumarg])) ** 2, 
            axis = 0)
    bicoh = num / denum
    return f1[arg], bicoh

# exemple of use and display
freqs, bicoh = compute_bicoherence(s1, s2, rate)
f = plt.figure(figsize = (9, 9))
plt.pcolormesh(freqs, freqs, bicoh, 
    # cmap = 'inferno'
    )
plt.colorbar()
plt.clim(0, 0.5)
plt.show()

这是一个依赖于scipy.spectrogram函数scipy version>0.17的函数,用于计算两个信号之间的双相干

来自Hagihira 2001和Hayashi 2007的定义。看

希望这有帮助

问候,

def compute_bicoherence(s1, s2, rate, nperseg=1024, noverlap=512):
    """ Compute the bicoherence between two signals of the same lengths s1 and s2
    using the function scipy.signal.spectrogram
    """
    from scipy import signal
    import numpy
    # compute the stft
    f1, t1, spec_s1 = signal.spectrogram(s1, fs = rate, nperseg = nperseg, noverlap = noverlap, mode = 'complex',)
    f2, t2, spec_s2 = signal.spectrogram(s2, fs = rate, nperseg = nperseg, noverlap = noverlap, mode = 'complex')

    # transpose (f, t) -> (t, f)
    spec_s1 = numpy.transpose(spec_s1, [1, 0])
    spec_s2 = numpy.transpose(spec_s2, [1, 0])

    # compute the bicoherence
    arg = numpy.arange(f1.size / 2)
    sumarg = arg[:, None] + arg[None, :]
    num = numpy.abs(
        numpy.mean(spec_s1[:, arg, None] * spec_s1[:, None, arg] * numpy.conjugate(spec_s2[:, sumarg]), 
        axis = 0)
        ) ** 2
    denum = numpy.mean(
        numpy.abs(spec_s1[:, arg, None] * spec_s1[:, None, arg]) ** 2, axis = 0) * numpy.mean(
            numpy.abs(numpy.conjugate(spec_s2[:, sumarg])) ** 2, 
            axis = 0)
    bicoh = num / denum
    return f1[arg], bicoh

# exemple of use and display
freqs, bicoh = compute_bicoherence(s1, s2, rate)
f = plt.figure(figsize = (9, 9))
plt.pcolormesh(freqs, freqs, bicoh, 
    # cmap = 'inferno'
    )
plt.colorbar()
plt.clim(0, 0.5)
plt.show()