使用JSL從多個連續波形中提取數據我正在嘗試提取連續矩形脈衝符合V0 potentail的時間值。
雖然我只為3個波形顯示了2個週期,但是存在更多周期並且波形數量超過3個。
上升和下降發生在每個波形的不同時間,我希望找到解決方案來提取t1_rise,t1_fall,t2_rise,t2_fall ...... 對於給定的數據集。
如果你們中的任何一個人能夠啟發我,那將是非常感激的。
謝謝,
皮
Re:使用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%";
);
)
);Re:使用JSL從多個連續波形中提取數據有一段時間我在電力線波形上有一個遠距離相關的帖子 。
它包括一個60Hz波形的圖表,其中有1/2秒的退出,以及一些關於通過計算過零點來檢測頻率的想法很少...特別是頻率計算在電源失效時產生極端異常值。
Re:使用JSL從多個連續波形中提取數據它成功了!!
吉姆,我真的很感謝你的幫助,我很高興向你們學習。
確實找到了將解決方案實現到我的jsl代碼中的方法後,我發現了另一個問題。
由於波形中的振盪,幾乎沒有錯誤檢測。
通過刪除數據點,我可以擺脫脈衝後發生的一些錯誤檢測。
但是,對於第一個脈衝,由於上升時間較慢,多個波形在上升沿有多個檢測。(它也可以在我之前附在此線程中的示例數據表中找到。)
我知道我太困擾你了,但我想不出如何去掉脈衝中的那些。
我希望你能告訴我一種過濾/忽略它們的方法。
謝謝,
弼
Re:使用JSL從多個連續波形中提取數據我已經整理了一個簡單的小腳本,除了計算max的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%";
);
)
);Re:使用JSL從多個連續波形中提取數據我非常感謝你的評論
我在下面附上了一個樣本數據表,真的希望你能給我一個解決方案。
正如您所說,我在同一列中堆疊在一起的波形具有相等間隔的時間戳,並且波形編號分類在我需要保留的列中。(即 我無法分割專欄。)
為了找到每個矩形脈衝的上升和下降時間,我希望在每個矩形脈衝上找到電壓在最大電壓的10%和90%(不包括大約6V的過沖和下衝)的交叉時間。
如果每個邊緣的兩個閾值交叉太複雜,我希望找到檢測僅一個閾值交叉的時間的方法。
希望我能從社區找到解決方案。
謝謝,
弼
謝謝,
弼
Re:使用JSL從多個連續波形中提取數據假設每行具有時間戳和電壓值,則通過數據並檢測數據何時越過指定電壓非常簡單。 對多個波形執行此操作會稍微複雜一些。 有用的是查看數據表的結構。 如果您能提供,我相信社區中的某個人能夠為您提供解決方案