2017-08-03 1 views
2

エネルギースペクトラムマトリックスを線形に離間させずに対数的に間隔を置いて配置したマトリックスに、線形離間した軸から対数的に離間した軸に行列補間を実行するにはどうすればよいですか?

私のエネルギースペクトルマトリックスのサイズは64x165です。元のx軸は方向に関するエネルギー変化を表し、元のy軸は周波数に関するエネルギー変化を表す。両方のベクトルは直線的に(各ベクトル位置の間の同じ間隔で)間隔を空けられている。この行列を24x25形式に補間したいが、x軸(方向)は直線的に間隔を空けているが(今は64の代わりに24の位置にあるベクトル)、y軸(周波数)は直線的に間隔を空けていない。 (位置2と位置1との間の間隔は、このベクトルの位置3と位置2との間の間隔よりも小さく、位置25まで同様である)。 新しい周波数対数間隔ベクトルを含むすべてのベクトルがわかっていることを指摘することは重要です(私はそれらを生成したくありません)。

私は関数interp2とgriddataを試しました。どちらの関数も同じ結果を示しましたが、この結果は元のスペクトルとはまったく異なっています(私が補間を行って以来起こりそうなことはありません)。誰でも助けることができますか?私はMatlab 2011 for Windowsを使用しています。

小さな例:

freq_input=[0.038592 0.042451 0.046311 0.05017 0.054029 0.057888 0.061747 0.065607 0.069466 0.073325]; %Linearly spaced 
dir_input=[0 45 90 135 180 225 270 315]; %Linearly spaced 

matrix_input=[0.004 0.006 1.31E-06 0.011 0.032 0.0007 0.010 0.013 0.001 0.008 
0.007 0.0147 3.95E-05 0.023 0.142 0.003 0.022 0.022 0.003 0.017 
0.0122 0.0312 0.0012 0.0351 0.285 0.024 0.048 0.036 0.015 0.036 
0.0154 0.0530 0.0185 0.0381 0.242 0.102 0.089 0.058 0.060 0.075 
0.0148 0.0661 0.1209 0.0345 0.095 0.219 0.132 0.087 0.188 0.140 
0.0111 0.0618 0.2232 0.0382 0.027 0.233 0.156 0.119 0.370 0.187 
0.0069 0.0470 0.1547 0.0534 0.010 0.157 0.154 0.147 0.436 0.168 
0.0041 0.0334 0.0627 0.0646 0.009 0.096 0.136 0.163 0.313 0.112]; %8 lines (directions) and 10 columns (frequencies) 

freq_output=[0.412E-01 0.453E-01 0.498E-01 0.548E-01 0.603E-01]; %Logarithimically spaced 
dir_output=[0 45 90 135 180 225 270 315]; %The same as dir_input 

freq_inputとdir_inputベクターを用いた関数meshgrid、およびfreq_outputとdir_outputを使用して関数meshgridをした後、私はinterp2(freq_input,dir_input,matrix,freq_output,dir_output)griddata(freq_input,dir_input,matrix,freq_output,dir_output)を試してみましたが、結果が間違っているようです。

+0

まあ、入力データを対数に変換するか、補間のために出力を線形に変えてください。その後の線形から対数への変換は、概念的または計算上の負担をもたらさない。 –

+0

または、私はあなたの意見を完全に欠いているかもしれません。小さなダミーの例([mcve]の行に沿って)をまとめることができれば、それはあいまいさを解決します。 –

+0

@AndrasDeakご意見ありがとうございます。私は私の質問を改善しようとしました。今私は何をしようとしているのかの小さな例を書いています。たぶんあなたはもっとよく理解できます。私はいくつかの書式設定間違いでご迷惑をおかけして申し訳ありませんが、私は本当にここに新しいです... – jukaiser

答えて

0

あなたが説明した行動の流れはうまくいくはずだから、 "結果が間違っているようだ"と言ったときに結果を誤解している可能性があります。 "

% interpolate using griddata 
matrix_output = griddata(freq_input,dir_input,matrix_input,freq_output.',dir_output); 

% need 2d arrays later for scatter plotting the result 
[freq_2d,dir_2d] = meshgrid(freq_output,dir_output); 

figure; 
% plot the original data 
surf(freq_input,dir_input,matrix_input); 
hold on; 

scatter3(freq_2d(:),dir_2d(:),matrix_output(:),'rs'); 

結果がそれに重畳された赤い四角で(元の入力データに基づいて)表面プロットを示しています:補間値

をここで

が質問からあなたのダミーデータを想定し、私が何を意味するかですあなたは線形補間データ値が完全surf(3Dの周りの数字を回転すると、これがさらに明らかになります)によって描かれた双一次表面に従うことを見ることができます

result: red interpolated squares matching the input surface

。言い換えると、補間とそれに続くプロットは問題ありません。

関連する問題