C# 그래프 파형 분석 단계
2022. 6. 29. 09:53ㆍ자료/Data
환경: 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)
'자료 > Data' 카테고리의 다른 글
C#, 3상 BEMF TrueRMS (역기전력 실효값)계산 (0) | 2022.06.29 |
---|---|
자석 극성 검출 Linear 센서 회로 (0) | 2022.03.26 |
각도 센서 (0) | 2022.03.12 |