2017-01-08 30 views
2

現在、Pythonを使用して、ある一定の時間にわたって行われた240の距離測定からなる2つの異なるデータセット(xDATとyDAT)を比較しています。しかし、データセットxDATは非線形量によってオフセットされます。この非線形量は、レベルAと呼ばれる時間依存の動的媒体の幅に等しい。より具体的には、xDATは原点からレベルAの上端まで測定するが、yDATは原点からレベルAの底まで測定する。以下の図を参照してください。両方の曲線を比較するためにPythonのカーブフィッティングとパラメータ見積もり

enter image description here

を、Iは(レベルAの幅)オフセットを補うためにXDATに補正を適用する拳なければなりません。

まだ、私はnumpy.polyfitの度合いを変えて遊んでいます。すなわち:この方法を使用して

coefs = np.polynomial.polynomial.polyfit(xDAT, yDAT, 5) 
polyEST=[] 
for i in range(0,len(x-DAT)): 
    polyEST.append(coefs[0] + coefs[1]*xDAT[i] + coefs[2]*pow(xDAT[i],2) + coefs[3]*pow(xDAT[i],3) + coefs[4]*pow(xDAT[i],4) + coefs[5]*pow(xDAT[i],5)) 

の問題は、私が(XDATの修正版です)polyESTをプロットすると、プロットはまだyDATの傾向と一致し、オフセット残っていないということです。以下、青XDAT =は、緑XDAT =赤、およびyDAT =を修正ところ図を参照してください。

enter image description here

は、理想的には、修正XDATはまだyDATよりもノイズが多く残っている必要がありますが、一般的な振動とのトレンド曲線は一致するはずです。

レベルAによって引き起こされた非線形オフセットを補正するために、異なるカーブフィッティングおよびパラメータ推定手法を実装する際に助けていただければ幸いです。

ありがとうございます。

+0

あなたがしようとしていることが明確ではないと思います。 'polyfit'は' xDAT'と 'yDAT'がサンプルポイントの単一セットの' x'と 'y'座標であるかのように呼び出しますが、あなたの問題の説明とプロットはそれらが関連していないことを示唆しています。 – Stelios

+0

あなたの説明では、オフセットは定数です。次数> 0の多項式を使うことは間違ったアプローチのようです。また、あなたのプロットから、xDatとyDatは "並んでいない"ように見えます - それはxDatが明らかにyDat +/-一定ではありません - それは "反転"または位相シフトされているようです。 –

+0

ありがとうStelios。はじめに、私はxDATとyDATの両方が240ポイントのデータセットであると述べました。これらの点のそれぞれは、特定の時刻の測定値に対応しています...両方のデータセットは、同じ時間増分で測定されました。私は多項式を使って2つのデータセットの差を表す多項式を導出し、その多項式を使ってxDATに見られるオフセットを修正しました。私は、np.polyfitではなくxDATで観測されたレベルAオフセットを修正するより適切な方法があると確信しています。 – LexStJ

答えて

0

答えはレベルAによります。それは独立している場合は、あなたの最初の行が描かれたように、これは独立したAの関数polyfitを与えるだろうし、その後訂正さx

xDAT+np.polynomial.polynomial.polyval(numpy.arange(xDAT.size),coefs)

た場合でなければなりません

coefs = np.polynomial.polynomial.polyfit(numpy.arange(xDAT.size), yDAT-xDAT, 5)

のようなものでなければなりませんAは変数に依存していますが、振動の実際の部分(スプリングダンパーシステムの「スプリング」部分)を回帰するに過ぎないので、polyfitにはしたくありません。 corrected_xDatyDatの代わりにxDatと同位相です。そのようなものを後退させるには、フーリエ変換を使用する必要があります(これは私の専門ではありません)。

関連する問題