4

私はpythonとプログラミングが初めてで、スプラインでの波のピーク検出アルゴリズムに取り組んでいます-補間されたプロット。このリンクにあるコードを使用しました: https://gist.github.com/endolith/250860. このアルゴリズムをあらゆるタイプの波形、つまり低振幅と高振幅、整列していないベースラインなどで機能させる必要があります。目標は、プロット内の波の数を計算することです。しかし、私のピーク検出は「無効な」ピークを計算するため、間違った答えを返します。「無効な」ピークとは、波のピークに 2 つのノッチが互いに近接している場合、プログラムは 2 つのピーク、つまり実際には 1 つの波であるのに 2 つの波を検出することを意味します。リンクで指定されたピーク検出関数で定義された「デルタ」パラメーターを変更しようとしましたが、それは私が取り組んでいる一般化の目標を解決しません..アルゴリズムの改善または私がすべき他のアプローチを提案してください使用しています。どんな種類の助けも大歓迎です。前もって感謝します。

PS 間違ったピーク検出波形プロットの画像をアップロードできません。私の説明で十分だと思います...コードは次のとおりです

wave = f1(xnew)/(max(f1(xnew))) ##interpolated wave
maxtab1, mintab1 = peakdet(wave,.005) 
maxi = max(maxtab1[:,1])
for i in range(len(maxtab1)):
    if maxtab1[i,1] > (.55 * maxi) : ## Thresholding
        maxtab.append((maxtab1[i,0],maxtab1[i,1]))
arr_maxtab = np.array(maxtab)
dist = 1500 ## Threshold defined for minimum distance between two notches to be considered as two separate waves
mtdiff = diff(arr_maxtabrr[:,0])
final_maxtab = []
new_arr = []
for i in range(len(mtdiff)):
if mtdiff[i] < dist :
            new_arr.append((arr_maxtab[i+1,0],arr_maxtab[i+1,1])) 
for i in range(len(arr_maxtab)):
if  not arr_maxtab[i,0] in new_arr[:,0]:
    final_maxtab.append((arr_maxtab[i,0], arr_maxtab[i,1]))
else:
final_maxtab = maxtab
4

1 に答える 1