2016-12-30 38 views
2

如何計算一個信號v(t)的具有非均勻樣品的標準偏差可以說,我有兩個numpy的數組:numpy的:

y(n) = [y1, y2, y3...] 
t(n) = [t1, t2, t3...] 

y(n)表示信號在時間點t(n)的值。 現在,我想計算這個信號的標準偏差等統計量。 如果以統一的時間間隔取樣,我可以使用標準numpy函數std()。在我的情況下,樣本不是統一的時間間隔。也就是說,t2-t1可能不等於t3-t2

我想創建一個新的數組,它將通過插值y的值創建。

g = [g1, g2, g3...] where 
ts = np.min(np.diff(t)) # new sample size 
g(n) = numpy.interp(n*ts, t, y) # interpolate 

現在使用g代替y計算std等 我想知道是否有更好的方法來做到這一點。

+1

信號的標準偏差是在假設y(n)是從相同概率分佈取得的獨立隨機變量的情況下計算的。如果採樣時間分佈與信號相關,採用非均勻採樣這種假設可能並非如此。網絡搜索指向最近的一篇論文,其中計算來自非均勻採樣信號的統計信息詳見http://liu.diva-portal.org/smash/get/diva2:23251/FULLTEXT01.pdf –

+0

在我的情況中,它是不是一個隨機變量。這是從特定時間點的物理事件觀察到的一系列值。這在理想情況下應該是一個常數。標準差用於衡量它與理想情況的差距。 感謝您的鏈接。我會檢查是否可以從那裏利用任何見解。 – Suresh

回答

1

插值和重採樣是一種方法,但使用非均勻時間間隔作爲權重更容易。也就是說,隨着時間的推移平均一些東西,將每個值乘以相應的時間間隔;拿總和併除以總時間。

dt = np.diff(t) 
total_time = t[-1] - t[0] 
mean = np.dot(y[:-1], dt)/total_time 
std = np.sqrt(np.dot((y[:-1]-mean)**2, dt)/total_time) 

隨着你結束了n-1個時間間隔n個樣本(在數組DT),樣品使一個(最後一個)被丟棄,因爲我們不知道它的時間段。除非樣本數量非常小,否則這應該不重要。