3

アンテナ周辺の電界強度の 3D 極座標プロットをプロットしています。データのサンプルは次のようになります。

0.5  0  -22
0.5  0  -21
0.5  0  -22
0.5  0  -21
0.5  0  -22
0.5  0  -22
0.5  0  -22
0.5  0  -22

1 列目はアンテナからの半径、2 列目はアンテナ周りの角度、3 列目は電界強度の dBm 値です。

スクリプトによって平均化された各ポイントで多数のサンプルを取得しました。3 つの対応するリスト R、P、および Z には、半径、角度、および各一意のポイントでの電界強度の線形値が含まれています。

値の 3D 極座標プロットをプロットしたいと考えています。これを行うには、R と P の値を極座標からデカルト座標 X と Y に変換します。

# transform them to cartesian system 
X,Y = R*np.cos(P),R*np.sin(P) 

次に、次のコードを使用してデータを補間します

xi = np.linspace(X.min(),X.max(),100)
yi = np.linspace(Y.min(),Y.max(),100)

zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')

次に、グリッドを作成し、次のようにデータをプロットします

xig, yig = np.meshgrid(xi, yi)

surf = ax.plot_surface(xig, yig, zi,linewidth=0)
plt.show()

これにより、次のプロットが作成されます

プロット

表面を滑らかにする方法はありますか?griddata type=cubic を使用したデータの補間は機能せず、行列 zi に "nan" 値を入力するだけです。おそらく、より優れた 3D の代替手段があるか、何か間違っていますか?

提案された interp2d 関数を使用すると、 zi が nan 値で埋められました。私は次の方法でそれを使用しました:

zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
interp2d(xi, yi, zi, kind='cubic')

zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
zi = interp2d(xi, yi, zi, kind='cubic')

どちらも次のエラーが発生しました。

Warning:     No more knots can be added because the number of B-spline coefficients
already exceeds the number of data points m. Probably causes: either
s or m too small. (fp>s)
kx,ky=3,3 nx,ny=104,105 m=10000 fp=nan s=0.000000

私も試しました

interp = interp2d(X,Y,Z,kind='cubic'); new_zi = interp(xi, yi)

これにより、同様のエラーが発生しました。

Warning:     No more knots can be added because the number of B-spline coefficients
already exceeds the number of data points m. Probably causes: either
s or m too small. (fp>s)
kx,ky=3,3 nx,ny=14,15 m=104 fp=nan s=0.000000

m ははるかに小さいですが。

問題は s が 0 で fp=nan であるようです。これらの値は何ですか?

4

1 に答える 1

1

s指定されたポイントからのエラーを設定するパラメーターです (つまり、補間されたサーフェスがソース ポイントをどれだけ逃すことができるかということです)。の場合s=0、補間はすべてのポイントに正確にヒットする必要があります。データにノイズがある場合、より高い導関数は滑らかにならず、1) 値を一致させるためにそれ自身をゆがめ、2 ) より高い導関数は多くの制御点を必要とするため、適合した曲面がひどく見えます。

ノイズの多いデータの場合、高次の補間は実際には線形補間よりもはるかに悪い場合があります。

ドキュメントによると、interp2D実際にはbisplrep( doc ) を呼び出すだけで、直接操作でき、より多くのノブにアクセスできます。

「よりスムーズな」補間を得るには、元のデータのある程度の平滑化を受け入れる必要があります。それが大丈夫かどうかはあなた次第です。

于 2013-04-16T19:19:02.660 に答える