我试图确定一个以最大值为特征的周期的开始。尽管数据似乎是周期性的,但没有固定的点数,所以我不能将数据分成 50 个点并搜索最大值。但是,我知道循环不能在 20 pts (pt_limit) 过去之前重复,这可能会被用来检查。由于 DAQ 硬件的限制,也没有数据触发。我在下面包含了几个周期,但实际数据集将包含数千个这样的准周期周期。
这是一个示例(对于较长的数据集,请提前抱歉):
data = [9147 9147 9513 9696 9696 9940 10093 10093 10246 10520 10520 10520 10795 10947 10947 11222 11772 11772 9452 4049 4049 4049 599 111 691 691 1515 2309 2309 2309 3072 3683 3683 4415 4995 4995 5453 5453 6063 6063 6643 7162 7162 7468 7742 7742 7742 8200 8536 8536 8841 9116 9116 9238 9543 9543 9543 9818 10001 10001 10246 10551 10551 10673 10673 10673 10917 10917 8749 4049 4049 1057 722 722 722 1210 2004 2004 2828 3683 3683 4293 4293 4751 4751 5270 5728 5728 6155 6643 6643 6643 7071 7437 7437 7712 8048 8048 8353 8353 8689 8689 9024 9269 9269 9513 9909 10215 10215 10215 10368 10673 10673 11008 11192 11192 11039 7864 7864 7864 2828 661 661 661 1332 1332 2309 2309 2950 2950 3683 4507 4507 5117 5667 5667 5667 6094 6521 6521 6949 7437 7437 7864 7864 8169 8169 8322 8689 9086 9086];
dt = [0 diff(data)];
t_thresh = -0.5; % threshold to identify changes (exclude noise)
ind = find(dt < t_thresh);
figure
set(gcf,'position',[50 50 (1080) (675)])
ax(1) = subplot(2,1,1);
plot(data, '.')
xlim([-5 155])
grid on
ax(2) = subplot(2,1,2)
plot(dt, '.')
grid on
hold on
plot(ind, dt(ind), 'ro')
xlim([-5 155])
linkaxes(ax,'x')
数据通常包含重复点,这使得仅寻找导数中的大变化变得困难。
使用包含的数据集解决此问题的方法是:
cycle_ind = [18 68 116]
谢谢您的帮助
任何帮助将不胜感激。