应使用fminsearch移动多少曲线以最小化差异

时间:2014-07-16 07:53:22

标签: matlab optimization fminsearch

我有两个数据集,如果我绘制它们,那么它们就像sin wave一样,你可以看到below

我想移动一条曲线以便与另一条曲线重叠。我想使用fminsearch找到一个转变,以尽量减少它们的差异。我有数字数据,我没有得到如何使用fminsearch和可用的信息。

1 个答案:

答案 0 :(得分:1)

假设您有两个数据集作为n元素redblue的向量,每个数据集都是n - by-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
输出是
enter image description here