<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,
我有过程信号迹线,并根据随机晶圆形式识别脉冲迹线。 在下图中,只有相邻采样点的信号值具有非零值,但如果1个采样点具有非零值,则将其丢弃。
其次,只计算阈值高于某个值的脉冲迹线,比如这里的1.5。
我期待为此开发一个简单的脚本。 信号v,样本和跟踪存储为列。

毫无疑问,有更有效的方法可以做到这一点,但下面的代码可能会让你开始:
NamesDefaultToHere ( 1 ) ;
//用于计算数据向量中的“信号”的函数
countSignals =
功能 ({ VEC , VAL } , { 默认本地 } ,
//找到值'val'以上的点
plusPos = 禄 ( VEC > VAL ) ;
zeroPos = 禄 ( VEC <= VAL ) ;
//适当地重新编码点
VEC [ plusPos ] = 1 ;
VEC [ zeroPos ] = 0 ;
//计算信号数量(运行两个或多个+1值):初始化变量
nSignals = 0 ;
isSignal = 0 ;
以前 = VEC [ 1 ] ;
//从第二个开始循环遍历vec的元素。。。
对于 ( Ë = 2 , Ë <= NRow ( VEC ) , Ë ++,
如果 ( ! isSignal ,
//如果我们还没有处于信号的“中间”,请启动一个
如果 ( VEC [ Ë ] == 以前 & 以前 == 1 , isSignal = 1 ) ,
//如果我们已经处于信号的“中间”,它是否已经结束了?如果这样算,并重置。
如果 ( VEC [ Ë ] == 0 , nSignals ++; isSignal = 0 )
) ;
//如果我们处于vec的末尾并处于信号的“中间”,我们仍需要计算它
如果 ( Ë == NRow ( VEC ) & isSignal , nSignals ++ ) ;
//为下一次迭代更新“上一个”值
以前 = VEC [ Ë ] ;
) ;
//返回信号数量
nSignals ;
) ;
/ *
//此测试向量有四次运行(使用阈值0.5):
v = [0,1,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1];
打印(countSignals(v,0.5));
* /
//制作somw虚拟数据 。。
ñ = 100 ;
数据 = RandomShuffle ( Ĵ ( ñ / 2 , 1 , RandomNormal ( 4 , 1 )) | / Ĵ ( ñ / 2 , 1 , 0 )) ;
DT = 非稳态 ( 数据 ) ;
DT << 的setName ( “信号计数的测试数据” ) ;
柱 ( DT , “Col1中” ) << 的setName ( “值” ) ;
//绘制它。。。
新窗户 ( “这个数据有” || 烧焦 ( countSignals ( 数据 , 1.0 )) || “信号” ,
DT << 图形生成器 (
显示控制面板 ( 0 ) ,
显示传奇 ( 0 ) ,
变量 ( X ( 变换列 ( “行” ,式 ( 行 () ) ) ) , ÿ ( : 值 ) ) ,
分子 ( 线 ( X , ÿ ,传说 ( 4 ) ) ,点 ( X , ÿ ,传说 ( 五 ) ) ) ,
SendToReport (
调度 ( {} , “值” , ScaleBox , { 添加参考线 ( 1 , “固体” , “红色” , “” , 1 )} )
)
) ;
) ;