【问题标题】:interpolation of non monotonic data非单调数据的插值
【发布时间】:2014-03-01 02:58:06
【问题描述】:

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

我有更多这样的信号并想比较它们。所以我最初的想法是在定义的间隔内映射/插值它们。 我以前用meshgrid()griddata() 做过这个。 它运行良好,但我遇到了二维数据问题。

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

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')

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

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/21702110/…
  • 也许您只是发布了伪代码,但要使 xq: xq=0.2301:0.0001:0.2304 用小数点而不是逗号。只有你的 x 数据需要是单调的,y 可以是任何东西。

标签: matlab signal-processing interpolation


【解决方案1】:

我会考虑奈奎斯特采样。找出变化时最小的步长,并将其作为您的步长。

%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 对其进行良好的采样。

然而,我被认为是一个数字受虐狂和使用火箭发射器射蚊子的人。

【讨论】:

  • 这就是我一直在做的事情。但我自己决定 dy (0.0001 基本上是最小值)。问题是 interp1 函数不起作用。因为数据不是单调的,所以设置如下。我正在测量 2400 Hz 的力位移曲线,因为我需要精度。但在许多情况下,一个时间步长没有变化,导致测量值相等。这对你有帮助吗?到目前为止,感谢您的时间和帮助:D
  • 哦,我错过了这一行“ind=find(diff(x)~=0)”需要试试这个来确认它是否解决了我的问题。我尝试使用“唯一”功能,但遇到了一些问题
  • 我终于有机会测试/实施您的建议了!它没有解决插值,但它为我解决了问题:D 我正在使用 ind=find(diff(x)~=0) 和 xnew=x(ind) 来摆脱冗余数据。 (我也不喜欢扔掉它,但到目前为止看起来还不错,而且我还是保留了原件)。为了平滑,我使用 savitzky golay 基函数(因为我知道如何使用它们)。但我会试试你的方法!谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2023-03-14
  • 1970-01-01
  • 2011-07-05
  • 2014-06-30
  • 1970-01-01
相关资源
最近更新 更多