信号は非常にきれいなので、単純なしきい値を使用できます。もう少しノイズを処理する必要がある場合は、次の方法があります。
基本的なアプローチは、信号を区分的に (一定のセグメントのシーケンスに) 分解することです。変化点の識別により、各セグメントの開始時間と終了時間、大きさがわかります。

次に、すべての偶数回が立ち上がりエッジで、奇数回が立ち下がりエッジです (またはその逆)。これらの 2 つのベクトルの差は、各パルスのハイとローの持続時間を示し、立ち上がりエッジの差は、パルスごとの持続時間を示します。
rising = TIME(1+est.time(2:2:end));
falling = TIME(1+est.time(1:2:end));
hightime = falling(2:end) - rising(1:end-1);
lowtime = rising(2:end) - falling(2:end);
plot([lowtime hightime diff(rising)])
legend('Low Time', 'High Time', 'Pulse Duration')

デューティ サイクルはhightime ./ diff(rising)
であり、ジッタの計算を続行できます。
セグメンテーションを実行するために、論文のコードを使用しましたが、この単純なケース (区分定数) は、Killick らによって既に解決されています。アル (2012)
R. Killick、P. Fearnhead、および IA Eckley。線形の計算コストによる変化点の最適な検出。Journal of the American Statistical Association、107(500):1590–1598、2012 年 12 月。doi: 10.1080/01621459.2012.737745