2015-04-02 59 views
0

我试图使用此代码从导入CSV情节类似Matplotlib Gallery相干情节:Matplotlib连贯情节ValueError异常

r1 = mru['r1'] 
r2 = mru['r2'] 
t = mru['time'] 

plt.cohere(t, r1, 'b-', t, r2, 'g-', ax=ax10) 
ax10.xlim(0,5) 
ax10.xlabel('time') 
ax10.ylabel('r1 and r2') 
ax10.grid(True) 

我得到这个错误:

ValueError: Coherence is calculated by averaging over *NFFT* 
length segments. Your signal is too short for your choice of *NFFT* 

因此,我改变价值二:

plt.cohere(t, r1, 'b-', t, r2, 'g-', NFFT=2, ax=ax10) 

而得到这个错误:

TypeError: cohere() got multiple values for keyword argument 'NFFT' 

如何正确绘制相关性?

+0

你的原始信号有多长?基于选择2点窗口计算基于DFT的相干性没有意义。 NFFT通常默认为256,所以你的信号必须很短。 – FuzzyDuck 2015-04-02 17:50:53

+0

它比较了两个不同的VRU的两个小时的滚动数据..我认为这将是充足的。我输入2作为支票。 – risail 2015-04-02 17:52:22

+0

好的 - 还有,你在滥用这个功能。我会在回答中回答 – FuzzyDuck 2015-04-02 17:53:26

回答

1

您传递给cohere()的参数是错误的。您不需要时间,您只需要两个系列r1r2,以及常见采样率Fs

由于函数期望NFFT成为第三个参数,因此按照文档(http://matplotlib.org/api/mlab_api.html#matplotlib.mlab.cohere),您会得到原始错误消息,并且它以某种方式将'b-'解释为数字。当你在其他地方明确定义NFFT时,你就会把NFFT的定义加倍。

尝试

plt.cohere(r1, r2, NFFT=256)

或者任何NFFT的价值需要。确保你的采样率也是正确的,否则你的结果将没有物理意义。

+0

我仍然会得到'ValueError:连贯性是通过平均长度分段* NFFT * 来计算的。您的信号太短,无法选择* NFFT * .'我的采样率为1秒 – risail 2015-04-02 18:01:20

+0

您的数据的采样率是多少?你的系列有多少个样品?编辑 - 只看到你的采样率。我认为你的意思是1赫兹。 – FuzzyDuck 2015-04-02 18:02:37

+0

count = 1959.000000 @ 1Hz – risail 2015-04-02 18:03:42