我有两个数据集,如果我绘制它们,那么它们就像sin wave一样,你可以看到
我想移动一条曲线以便与另一条曲线重叠。我想使用fminsearch找到一个转变,以尽量减少它们的差异。我有数字数据,我没有得到如何使用fminsearch和可用的信息。
答案 0 :(得分:1)
假设您有两个数据集作为n
元素red
和blue
的向量,每个数据集都是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
,
输出是