1.実現したいこと
XRD測定の解析を行う上で回析図のピークを検出するため,現在はsignal.argrelmaxを
用いて,極大値を算出することで検出しております。
しかし,このやり方ではノイズの極大値を拾い,また間隔がせまいピークは検出
することができないという問題点が発生してしまいます。
そこで微分によるピーク検出や平滑化などで
・ノイズの削除
・すべてのピークの検出
を実現したいと考えています。
とてもアバウトな質問ですが,どなたか回答をお願いします。
2.コード
import pandas as pd import numpy as np from scipy import signal import matplotlib.pyplot as plt import os file = pd.read_csv("D.csv") xx = file.iloc[:,0] yy = file.iloc[:,1] #データの変換,signal.argrelmax()関数がPandasのSeriesやDataFrameに対応していないため x = np.array(xx) y = np.array(yy) maxid = signal.argrelmax(y, order=100) #極大値 orderを変えることでピークの検出が変わる(ピーク検出の閾値) #minid = signal.argrelmin(y, order=1) #極小値 x_max = max(x) y_max = max(y) y_min = min(y) x_min = min(x) plt.figure(figsize=(5,8))#図のアスペクト比を変更(横×縦) #棒グラフの図示 width=線の幅,デフォルトは0.8 plt.bar(x,y, width=0.3) #plt.plot((x, y), pltsize=(6,6)) plt.tick_params(labelsize = 9)#目盛りの数字の大きさを変更 plt.ylim(y_min, y_max*1.1) # y 軸の範囲の設定, plt.xlim(10,80) # x 軸の範囲の設定 #plt.show() plt.xlabel("2θ" , fontsize = 20) #plt.tight_layout() plt.plot(x[maxid],y[maxid],'ro',label='peak_max') #plt.plot(x[minid],y[minid],'bo',label='ピーク値(最小)') plt.legend() print(maxid)
3.試したこと
orderの値を変更させると,望むピークは得られるのですが手動での操作に
なってしまいますので,できれば自動で行いたいです。
4.使っているツール
python 3.7 , spyder
回答1件
あなたの回答
tips
プレビュー