0

我有一些时间/频率数据,我尝试使用interp2Matlab 的功能对其进行插值。数据[F,T,data]是从 Matlab 的不同 Matlab 例程获得的,如果您有兴趣,可以使用频谱图。

[~,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
4

1 回答 1

2

问题是你应该交换FT

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

第一个参数对应于矩阵的列,第二个参数对应于此处记录的行:

如果 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(第二个参数)参数和和的y同上row

于 2017-08-28T15:09:54.487 回答