1. ホーム
  2. matlab

[解決済み] データの補間は失敗:グリッドベクトルは与えられた値に一致する点のグリッドを定義しない

2022-02-12 06:23:56

質問

時間/周波数のデータがあり、それを補間するために interp2 という関数があります。データ [F,T,data] はMatlabの別のルーチン、spectrogramから取得したものです(興味があれば)。

[~,F,T,data] = spectrogram(...)
data = 10*log10(data);

を使ってプロットすることができます。 surf . データは問題ないと思います。しかし、データの補間には問題があるようです。を使っても interp2(F,T,data,F,T) (というエラーが発生します。

何が間違っているのでしょうか?

ここで使用するデータがあります。 https://www.dropbox.com/s/zr5zpfhp6qyarzw/test.mat

interp2(F,T,data,f,t)
Error using griddedInterpolant
The grid vectors do not define a grid of points that match the given values.
Error in interp2>makegriddedinterp (line 228)
    F = griddedInterpolant(varargin{:});
Error in interp2 (line 128)
        F = makegriddedinterp({X, Y}, V, method,extrap);
>> size(F),size(T),size(data),size(f),size(t)
ans =
   129     1
ans =
     1    52
ans =
   129    52
ans =
   200     1
ans =
     1   121

解決方法は?

を入れ替える必要があります。 FT :

interp2(T,F,data,t,f);

最初の引数は行列の列、2番目の引数は行に対応する。 ここで :

<ブロッククオート

XとYがグリッドベクトルである場合、Vは以下のような行列でなければなりません。 length(Y) の行と length(X) の列を持つ。

として 代替 の転置を取ることができます。 data :

interp2(F,T,data',f,t);

引数の順番がおかしい理由

interp2(X,Y,V,Xq,Yq) を補間すると解釈されます. 機能 で表される。 行列 V、すなわち標本値である。問題は、関数/行列の引数/インデックスが、むしろ逆の順序で供給されることです。

matrix(row, column)

function(x,y)

x (第一引数)は、多くの場合、水平軸を表すので、それに対応する column (第2引数) の引数と同値です。 yrow .