我对我录制的信号的插值有疑问。
我有更多这些信号,想要比较它们。所以我最初的想法是在定义的时间间隔内对它们进行映射/插值。
我之前使用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')
但数据不是单调的,我不知道如何绕过它。有什么建议吗?
答案 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对其进行良好的采样。
然而,我被认为是一个数字受虐狂,并且使用火箭发射器来射杀蚊子。