<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요,
나는 신호 트레이스를 처리하고 임의의 웨이퍼 형태에 대한 펄스 추적을 식별합니다. 아래 플롯에서 인접 샘플링 포인트가있는 신호 값만이 0이 아닌 값을 갖지만 1 샘플 포인트가 0이 아닌 값을 가지면이를 버려야합니다.
두 번째로, 특정 값 이상의 임계 값을 갖는 펄스 추적 만 여기 에서처럼 1.5로 계산됩니다.
나는 이것을위한 간단한 스크립트를 개발하고자한다. signalv, 샘플 및 추적은 열로 저장됩니다.

의심의 여지 가이 일을 더 효율적인 방법이지만, 아래 코드는 당신을 시작할 수 있습니다 :
NamesDefaultToHere ( 1 ) ;
// 데이터 벡터에서 '신호'를 계산하는 함수
카운트 신호 =
기능 ({ vec , 발 } , { 기본 로컬 } ,
// 'val'값 위에 포인트를 찾습니다.
플러스 포트 = Loc ( vec > 발 ) ;
제로 포스 = Loc ( vec <= 발 ) ;
// 적절히 포인트를 리 코드
vec [ 플러스 포트 ] = 1 ;
vec [ 제로 포스 ] = 0 ;
// 신호의 수를 세어 라 (두 개 이상의 +1 값으로 실행) : 변수 초기화
n 신호 = 0 ;
isSignal = 0 ;
너무 이른 = vec [ 1 ] ;
// vec의 요소를 두 번째 요소로 반복합니다. . .
에 대한 ( 이자형 = 2 , 이자형 <= NRow ( vec ) , 이자형 ++,
만약 ( ! isSignal ,
// 우리가 신호의 '중간'에 있지 않다면, 하나를 시작한다.
만약 ( vec [ 이자형 ] == 너무 이른 & 너무 이른 == 1 , isSignal = 1 ) ,
// 우리가 이미 신호의 중간에 있다면 그것은 끝났습니까? 그렇다면 그것을 세고 재설정하십시오.
만약 ( vec [ 이자형 ] == 0 , n 신호 ++; isSignal = 0 )
) ;
// 우리가 vec의 끝 부분에 있고 신호의 중간에 있다면, 우리는 여전히 그것을 세어야합니다
만약 ( 이자형 == NRow ( vec ) & isSignal , n 신호 ++ ) ;
// 다음 반복을 위해 준비된 '이전'값을 업데이트합니다.
너무 이른 = vec [ 이자형 ] ;
) ;
// 신호 수를 반환합니다.
n 신호 ;
) ;
/ *
//이 테스트 벡터에는 네 번의 실행이 있습니다 (임계 값 0.5 사용).
v = [0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1];
인쇄 (countSignals (v, 0.5));
* /
// somw 더미 데이터를 만듭니다. . .
엔 = 100 ;
데이터 = 랜덤 셔플 ( 일본 ( 엔 / 2 , 1 , 임의의 정규화 ( 4 , 1 )) | / 일본 ( 엔 / 2 , 1 , 0 )) ;
dt = AsTable ( 데이터 ) ;
dt << setName ( "신호 세기를위한 테스트 데이터" ) ;
기둥 ( dt , "Col1" ) << setName ( "값" ) ;
// 플롯합니다. . .
새창 ( "이 데이터는" || 숯 ( 카운트 신호 ( 데이터 , 1.0 )) || "신호" ,
dt << 그래프 빌더 (
제어판 표시 ( 0 ) ,
전설보기 ( 0 ) ,
변수 ( 엑스 ( 열 변환 ( "열" , 공식 ( 열 () ) ) ) , 와이 ( : 값 ) ) ,
집단 ( 선 ( 엑스 , 와이 , 전설 ( 4 ) ) , 전철기 ( 엑스 , 와이 , 전설 ( 5 ) ) ) ,
SendToReport (
급파 ( {} , "값" , ScaleBox , { 참조 선 추가 ( 1 , "고체" , "빨간" , "" , 1 }} )
)
) ;
) ;