使用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从多个连续波形中提取数据假设每行具有时间戳和电压值,则通过数据并检测数据何时越过指定电压非常简单。 对多个波形执行此操作会稍微复杂一些。 有用的是查看数据表的结构。 如果您能提供,我相信社区中的某个人能够为您提供解决方案