JSLを使用して複数の連続波形からデータを抽出する連続矩形パルスがV0ポテンシャルを満たす時間値を抽出しようとしています。
私は3つの波形に対して2つのサイクルしか示していませんが、より多くのサイクルが存在し、波形の数は3つ以上です。
立ち上がりと立ち下がりは波形ごとに異なるタイミングで発生するので、t1_rise、t1_fall、t2_rise、t2_fallを抽出するための解決策を見つけたいと思います。与えられたデータセットに対して。
あなたのうちの誰かが私を啓発することができれば、それは非常に感謝するでしょう。
ありがとう、
パイ
再:JSLを使用して複数の連続波形からデータを抽出する私は自分が含めたコードを取り、観察されれば交差を回避するためのデッドタイムを追加しました。その間、サブ要求交差は無視されます。
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "time of crossing" );
dt << New Column( "direction", character );
dt << New Column( "Which threshold", character );
max90 = 5.6;
max10 = .6;
deadtime = .001;
lastcross = -9999999999;
timerise = Function( {MaxPercent},
:time of crossing[i] = ((MaxPercent - :voltage[i - 1]) / (:voltage[i] - :voltage[i - 1])) * (:time[i] - :time[i - 1]) + :time[i - 1]
);
timefall = Function( {MaxPercent},
:time of crossing[i] = ((:voltage[i - 1] - MaxPercent) / (:voltage[i - 1] - :voltage[i])) * (:time[i - 1] - :time[i]) + :time[i]
);
For( i = 2, i <= N Rows( dt ), i++,
If( :waveform[i - 1] != :waveform[i],
Show( i ),
If( :voltage[i] >= max10 & :voltage[i - 1] < max10 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timerise( max10 );
:direction[i] = "Rise";
:Which Threshold[i] = "10%";
);
If( :voltage[i] >= max90 & :voltage[i - 1] < max90 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timerise( max90 );
:direction[i] = "Rise";
:Which Threshold[i] = "90%";
);
If( :voltage[i] <= max10 & :voltage[i - 1] > max10 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timefall( max10 );
:direction[i] = "Fall";
:Which Threshold[i] = "10%";
);
If( :voltage[i] <= max90 & :voltage[i - 1] > max90 & :time[i]> lastcross+deadtime,
lastcross = :time[i];
x = timefall( max90 );
:direction[i] = "Fall";
:Which Threshold[i] = "90%";
);
)
);再:JSLを使用して複数の連続波形からデータを抽出する私はしばらく前に電力線の波形について遠く関連した投稿をしました 。
これには、1/2秒のドロップアウトを伴う60Hz波形のグラフと、ゼロ交差をカウントして周波数を検出することについてのよく考えられていないアイデアが含まれています。
再:JSLを使用して複数の連続波形からデータを抽出するうまくいった!
私はあなたの助けに本当に感謝しています、そして私はあなたから学ぶことができてとても嬉しいです、ジム。
私のjslコードにあなたの解決策を実装する方法を見つけた後、確かに、私は別の問題を見つけました。
波形の振動による誤検出はほとんどありません。
データポイントを削除することで、パルスの後に発生していたいくつかの誤った検出を取り除くことができました。
しかし、最初のパルスでは、立ち上がり時間が遅いため、立ち上がりエッジで複数の波形が複数検出されます。(それは私が以前にこのスレッドで囲んだサンプルデータテーブルでも見つけることができます。)
私は私があなたをあまりにも悩ませていることを知っています、しかし私は脈動の中でそれらをどうやって取り除くかについて考えることができません。
それらを除外/無視する方法を私に教えてください。
ありがとう、
ピル
再:JSLを使用して複数の連続波形からデータを抽出する私は、最大の90%と10%を計算することを除いて(そこに欲しいものに少し混乱している)、これがあなたが欲しいものの一種であると思うという単純な小さなスクリプトをまとめました。
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "time of crossing" );
dt << New Column( "direction", character );
dt << New Column( "Which threshold", character );
max90 = 5.6;
max10 = .6;
timerise = Function( {MaxPercent},
:time of crossing[i] = ((MaxPercent - :voltage[i - 1]) / (:voltage[i] - :voltage[i - 1])) * (:time[i] - :time[i - 1]) + :time[i - 1]
);
timefall = Function( {MaxPercent},
:time of crossing[i] = ((:voltage[i - 1] - MaxPercent) / (:voltage[i - 1] - :voltage[i])) * (:time[i - 1] - :time[i]) + :time[i]
);
For( i = 2, i <= N Rows( dt ), i++,
If( :waveform[i - 1] != :waveform[i],
Show( i ),
If( :voltage[i] >= max10 & :voltage[i - 1] < max10,
x = timerise( max10 );
:direction[i] = "Rise";
:Which Threshold[i] = "10%";
);
If( :voltage[i] >= max90 & :voltage[i - 1] < max90,
x = timerise( max90 );
:direction[i] = "Rise";
:Which Threshold[i] = "90%";
);
If( :voltage[i] <= max10 & :voltage[i - 1] > max10,
x = timefall( max10 );
:direction[i] = "Fall";
:Which Threshold[i] = "10%";
);
If( :voltage[i] <= max90 & :voltage[i - 1] > max90,
x = timefall( max90 );
:direction[i] = "Fall";
:Which Threshold[i] = "90%";
);
)
);再:JSLを使用して複数の連続波形からデータを抽出するあなたのコメントに本当に感謝します
下記にサンプルのデータテーブルを添付しました。解決策を教えてください。
あなたが言ったように、私は同じ列に一緒に積み重ねられた波形のための等間隔のタイムスタンプを持っています、そして、波形番号は私が保つ必要がある列に分類されます。(すなわち 列を分割することはできません。
各矩形パルスの立ち上がり時間と立ち下がり時間を見つけるために、各矩形パルスの最大電圧の10%と90%(約6Vのオーバーシュートとアンダーシュートを除く)での電圧の交差時間を求めます。
1つのエッジあたり2つのしきい値交差が複雑すぎる場合は、たった1つのしきい値交差の時間を検出する方法を見つけたいと思います。
私はコミュニティから解決策を見つけることができると思います。
ありがとう、
ピル
ありがとう、
ピル
再:JSLを使用して複数の連続波形からデータを抽出する各行にタイムスタンプと電圧値があると仮定すると、データを通過してデータが指定された電圧を超えた時点を検出するのは非常に簡単です。 複数の波形に対してこれを行うのは、もう少し複雑です。 あなたのデータテーブルの構造が何であるかを見ることが役に立つでしょう。 あなたがそれを提供することができれば、私はコミュニティの誰かがあなたに解決策を提供できると確信しています