为什么在mlab和scipy.signal中交叉谱不同?
作者:互联网
我有两个信号
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()
我尝试使用scipy和mlab.谁能解释为什么我得到不同的结果?
解决方法:
因为这两个函数的某些参数具有不同的默认值.
例如,如果您将noverlap = 128选项传递给plt.cohere(),则可以使用numpy.signal()解决方案获得几乎完美的匹配:
除了在0 Hz频率下有很小的失配之外,我们真的不太在乎DC分量的相干性吗?我敢打赌,如果您对两者的文档都有更深入的了解,您将在两者的标准值中找到另一个更小的怪异之处.
标签:scipy,matplotlib,python,numpy,signal-processing 来源: https://codeday.me/bug/20191027/1943060.html