我有两个数据集,如果我将它们绘制出来,那么它们看起来就像你所看到的正弦波
我想移动一条曲线以便与另一条曲线重叠。我想使用 fminsearch 找到一个转变以最小化它们的差异。我有数字数据,但我不知道如何将 fminsearch 与可用信息一起使用。
我有两个数据集,如果我将它们绘制出来,那么它们看起来就像你所看到的正弦波
我想移动一条曲线以便与另一条曲线重叠。我想使用 fminsearch 找到一个转变以最小化它们的差异。我有数字数据,但我不知道如何将 fminsearch 与可用信息一起使用。
假设您有两个数据集作为n
元素的向量red
,blue
每个数据集都是一个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
输出
为