티스토리 뷰

반응형

 

환경: 3600 PLS 인코더, 최소 2극 이상의 파형 생성

수집

1. 데이터 수집

DAQ 장치로부터 데이터를 N회 수집한다.

 

2. 배열 저장

double[3600 * N] 배열에 수집한 데이터를 기록한다.

 

연산

1. 수집된 데이터를 변환한다.

Voltage 값에 ax+b를 적용하여 데이터를 변환한다.

 

2. 필터링 한다.

노이즈를 제거하여 분석 오차를 줄인다.

  • a. 데이터 수집 횟수로 나눠 평균값을 구한다.
  • b. 배열을 순환하면서 n개 요소의 평균값을 새로운 배열에 저장한다.(예: 주식 차트의 이동평균선)

 

3. 제로크로스 위치를 기준으로 파형을 시프트 한다.

  • a. 양음 트리거 범위 내에서 제로크로스 되는 부분 중, 중간의 X 위치를 구한다.
    (파형 굴곡이 심한 모델은 한 극에서 영점을 여러번 지나간다)
  • b. 음 트리거의 X 위치보다, 양 트리거의 X 위치가 클 때까지 양음 트리거에 걸리는 X 위치를 비교한다.
    (양의 영역을 첫 극으로 한다)
  • c. X 위치를 찾으면 double[3600] 배열을 X 만큼 왼쪽으로 시프트한다.
    (X 위치가 0이 된다)

 

분석

1. 각 극의 기준 X 위치를 구한다.

3.a에서 구한 X 위치를 컬렉션에 넣으면 된다.

  • 각 극의 각도를 알 수 있다.
  • 극의 개수를 알 수 있다.

 

2. 각 극의 최대 Y 값, X 위치를 구해서 컬렉션에 넣는다.

  • 최대값 컬렉션에서 최대, 최소, 평균, 편차를 알 수 있다.

 

3. 각 극의 각도를 구해서 컬렉션에 넣는다.

  • 극 각도 컬렉션에서 최대, 최소, 평균, 편차를 알 수 있다.

 

사용되는 문법

// index 위치 부터 count 개의 요소를 컬렉션으로 반환한다.
.GetRange(index, count)
// 연산.2.a 항목
// 수집 단계에서 N회 수집한 데이터의 평균값을 구한다.
.SelectMany(s1 => s1.Select((s2, idx) => data[idx] += s2))
.Select(s => s / N)
// 연산.2.b 항목
// 데이터 컬렉션을 전체 순환하면서 지정 범위의 평균값을 반환한다.
for (int i = 0; i < 데이터컬렉션.Count(); i++)
{
    yield return 데이터컬렉션.GetRange(i, 평균할요소수).Average();
}
// 각 요소를 ax+b로 연산하여 새로운 배열에 저장한다.
.Select(s => (s + b) * a)
.ToArray()
// trig 보다 큰 값의 인덱스를 구한다.
.FindIndex(f => f > trig)

// trig 보다 작은 값의 마지막 인덱스를 구한다.
.FindLastIndex(f => f < trig)

// startIndex 부터 시작해서 trig 보다 큰 값의 인덱스를 구한다.
.FindIndex(startIndex, f => f > trig)

// startIndex 부터 시작해서 trig 보다 작은 값의 마지막 인덱스를 구한다.
.FindLastIndex(startIndex, f => f < trig)

 

반응형
댓글
댓글쓰기 폼