RMS を使用して平滑化することが想定されている (科学論文の明示的な推奨事項) 筋電図データの信号があります。
次の作業コードがあり、目的の出力が生成されますが、可能だと思うよりもはるかに遅いです。
#!/usr/bin/python
import numpy
def rms(interval, halfwindow):
""" performs the moving-window smoothing of a signal using RMS """
n = len(interval)
rms_signal = numpy.zeros(n)
for i in range(n):
small_index = max(0, i - halfwindow) # intended to avoid boundary effect
big_index = min(n, i + halfwindow) # intended to avoid boundary effect
window_samples = interval[small_index:big_index]
# here is the RMS of the window, being attributed to rms_signal 'i'th sample:
rms_signal[i] = sqrt(sum([s**2 for s in window_samples])/len(window_samples))
return rms_signal
ウィンドウループの移動の最適化に関するいくつかdeque
の提案と、numpy からの提案を見てきましたが、それらを使用して目的を達成する方法がわかりませんでした。itertools
convolve
また、大きな配列と比較的小さなスライディング ウィンドウを使用することになるため、境界の問題を回避することはもう気にしません。
読んでくれてありがとう