最大値によって特徴付けられるサイクルの開始を識別しようとしています。データは周期的であるように見えますが、ポイント数が決まっていないため、データを 50 ポイントに分割して最大数を検索することはできません。ただし、チェックに使用される可能性のある 20 ポイント (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]
助けてくれてありがとう
どんな助けでも大歓迎です。