非单调数据的插值

时间:2014-02-27 14:57:07

标签: matlab signal-processing interpolation

我对我录制的信号的插值有疑问。

我有更多这些信号,想要比较它们。所以我最初的想法是在定义的时间间隔内对它们进行映射/插值。 我之前使用meshgrid()griddata()完成了此操作。 它工作正常,但我有2D数据的问题。

数据如下(只是其中的一小部分):

y           x
-11,04  0,2301
-11,04  0,2301
-11,04  0,2301
-11,03  0,2302
-11,04  0,2302
-11,04  0,2303
-11,04  0,2303
-11,03  0,2303
-11,03  0,2303
-11,03  0,2304

由于采样率高,所以变化确实很小。

所以在这种情况下,我想在

上映射它
xq=0,2301:0,0001:0,2304;
using 
interp1(x,y,xq,'method')

但数据不是单调的,我不知道如何绕过它。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我期待奈奎斯特的采样。找到变化的最小步骤,并将其设为步长。

%find places where measurement changes
ind=find(diff(x)~=0)

%compute minimum y-step
dy=min(diff(y(ind)))

%create new sampling vector
y2=0.2301:dy:0.2304

%sample at that spacing
x2=interp1(x,y,y2);

就个人而言,我不喜欢在没有明确理由的情况下抛弃数据。如果你能给出更多关于项目的背景信息,那么我可以更好地证明采用不同的抽样方法。

编辑:

清理数据后,您想要做什么?

我会使用样条曲线。让我们看看我是否可以挖一个。

ft = fittype( 'loess' );
opts = fitoptions( ft );
opts.Robust = 'on';

opts.Weights = zeros(1,0);
opts.Span = 0.04;

nu=10.^linspace(-5,log10(0.5));
nu=[nu fliplr(1-nu(1:end-1))];
%plot(nu)

for i=1:length(nu)
  opts.Span=nu(i)
[fr, gof, myout] = fit( [X, Y], temp, ft, opts );
    n= myout.numobs;
    rss=gof.sse;
    k=myout.numparam;
    AIC(i)=-2*n*log(rss/n)+2*k;
end

plot(AIC)

然后我会选择一个不是端点的局部最小值并将其用作感兴趣的范围。这将允许我绕过离散化和一些噪音。如果你没有获得良好的内部最小值,那么你可以考虑调整下端点,关闭强大的关闭,或使用AICc而不是AIC。

AICc (i)=-2*n*log(rss/n)+2*k+(2*k*(k+1))/(n-k-1)

然后我可以将结果包装在一个函数中并使用FPLOT对其进行良好的采样。

然而,我被认为是一个数字受虐狂,并且使用火箭发射器来射杀蚊子。