Python 为什么mlab和scipy信号的交叉谱不同?

Python 为什么mlab和scipy信号的交叉谱不同?,python,numpy,matplotlib,scipy,signal-processing,Python,Numpy,Matplotlib,Scipy,Signal Processing,我有两个信号 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab import mpld3 from scipy import signal mpld3.enable_notebook() nfft = 256 dt = 0.01 t = np.arange(0, 30, dt) nse1 = np.random.randn(len(t)) * 0.1 # w

我有两个信号

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import mlab
import mpld3
from scipy import signal

mpld3.enable_notebook()

nfft = 256
dt = 0.01
t = np.arange(0, 30, dt)
nse1 = np.random.randn(len(t))  * 0.1              # white noise 1
nse2 = np.random.randn(len(t))  * 0.1              # white noise 2



# two signals with a coherent part and a random part
s1 = np.sin(2*np.pi*1*t) + nse1
s2 = np.sin(2*np.pi*1*t+np.pi) + nse2 

plt.plot(s1, 'r', s2, 'g')
plt.show()
我想得到连贯性

cxy, fcoh = plt.cohere(s1, s2, nfft, 1./dt)
fcoh,cxy = signal.coherence(s1,s2, nfft=nfft, fs=1./dt)
plt.hold(True)
plt.plot(fcoh, cxy)
#plt.xlim(0, 5)
plt.show()

以及相移

(csd, f) = mlab.csd(s1, s2, NFFT=nfft, Fs=1./dt)
fig = plt.figure()
angle = np.angle(csd,deg =False)
angle[angle<-np.pi/2] += 2*np.pi

plt.plot(f, angle, 'g')
plt.hold(True)

(f, csd) = signal.csd(s1, s2, fs=1./dt, nfft=nfft)

angle = np.angle(csd,deg =False)
angle[angle<-np.pi/2] += 2*np.pi

plt.plot(f, angle,'r')


#plt.xlim(0,5)
plt.show()
(csd,f)=mlab.csd(s1,s2,NFFT=NFFT,Fs=1./dt)
图=plt.图()
角度=np.角度(csd,deg=假)

角度[角度因为这两个函数对某些参数具有不同的默认值

例如,如果您将选项
noverlap=128
传递到
plt.cohere()
,您将获得与
numpy.signal()解决方案几乎完美的匹配:

除了0 Hz频率的小失配之外,我们并不太关心直流分量的一致性,是吗?我敢打赌,如果你深入研究这两个分量的文档,你会发现这两个分量的标准值中还有另一个较小的怪癖