1

我有两个数据集,如果我将它们绘制出来,那么它们看起来就像你所看到的正弦波以下

我想移动一条曲线以便与另一条曲线重叠。我想使用 fminsearch 找到一个转变以最小化它们的差异。我有数字数据,但我不知道如何将 fminsearch 与可用信息一起使用。

4

1 回答 1

1

假设您有两个数据集作为n元素的向量redblue每个数据集都是一个n×1 向量。
然后,给定一个整数移位delta,您可以使用它circshift来移位其中一个信号:

shifted = circshift( red, delta );

现在您可以使用它来定义您的目标函数fminsearch

delta = fminsearch( @( x ) sum( ( blue(:) - circshift( red(:), round(x) ) ).^2 ), 20 );

请注意,fminsearch很大程度上取决于初始值x0,更改此值可能会对恢复的质量产生重大影响delta

这是一个例子

 th = 0:.01:2*pi;
 blue = sin( th ); % orig signal
 green = sin( th + .5 ); % shifted signal
 delta = fminsearch( @( x ) sum( ( blue(:) - circshift( green(:), round(x) ) ).^2 ), 20 );
 % display results
 figure;
 plot( [blue;green]', 'LineWidth', 2 );
 hold all;
 plot( circshift( green(:), round(delta) ), '--r', 'LineWidth', 1.5 );
 legend({'orig signal','shifted signal','after recovering \delta'});

delta本例中的恢复值为 ,50输出

在此处输入图像描述

于 2014-07-16T08:03:30.740 回答