때로는 단순 해 보이는 것이 그렇게 단순하지 않습니다. 측정이 매우 복잡하지만 간단한 결과를 원합니다. 측정하려는 것은 일정하지 않으며 시간에 따라 다릅니다. 요구 사항 수준에 따라 현재 소비의 하나 이상의 속성을 계산할 수 있습니다. 이러한 속성은 시스템을보다 잘 모니터링하는 데 도움이됩니다. 복잡성을 증가시키는 3 가지 솔루션을 제안합니다.
해결 방법 1 : 평균
단일 값 결과를 얻으려면-> 평균 시간을 얻으십시오. @akellyirl에서 이미 제안했듯이 저역 통과 필터를 사용하십시오. 평활 계수가있는 float y = alpha*input + (1-alpha)*y
각 샘플에 대해 계산 합니다 alpha
. 자세한 내용은 Wikipedia 를 참조 하십시오.
해결 방법 2 : 최대 + 평균
평균과 최대 값을 얻는 데 흥미가 있습니다. 예를 들어 최대 값을 모니터링하는 것은 구성 요소 치수 측정에 유용 할 수 있습니다.
if (y > max)
max = y;
솔루션 3 : 표준 편차 + 최대 + 평균
왜?
아래 차트를 참조하십시오. 다른 모양의 3 가지 신호가 있습니다. 삼각형 하는 사인 및 스파이크 신호. 그것들은 모두 같은주기, 동일한 진폭 , 동일한 평균 및 동일한 최소 및 최대로 주기적 이다. 그러나 그들은 모양이 다르며 실제로 완전히 다른 이야기를 가지고 있습니다 ...
차이점 중 하나는 표준 편차입니다. 그렇기 때문에 측정을 확장하고 표준 편차를 포함하는 것이 좋습니다. 문제는 그것을 계산하는 표준 방법이 CPU를 소비한다는 것입니다. 바라건대 하나의 해결책이 있습니다.
어떻게?
히스토그램 방법을 사용하십시오 . 모든 측정의 히스토그램을 작성하고 데이터 집합의 통계 (최소, 최대, 평균, 표준 편차)를 효율적으로 추출하십시오. 히스토그램은 동일한 값 또는 동일한 값 범위를 가진 값을 그룹화합니다. 이점은 모든 샘플을 저장하지 않고 (시간이 증가 함) 제한된 수의 데이터를 빠르게 계산할 수 있다는 것입니다.
측정을 시작하기 전에 히스토그램을 저장할 배열을 만듭니다. 예를 들어 크기가 32 인 1 차원 정수 배열입니다 .
int histo[32];
전류계의 범위에 따라 아래 기능을 조정하십시오. 예를 들어, 범위가 256mA이면 히스토그램의 빈 0이 0 ~ 8mA 사이의 값으로 증가하고 빈 1이 8 ~ 16mA 사이의 값으로 증가한다는 것을 의미합니다. 따라서 나타내는 정수가 필요합니다. 히스토그램 빈 번호 :
short int index;
샘플을 얻을 때마다 해당 빈 인덱스를 찾으십시오.
index = (short int) floor(yi);
이 bin을 늘리십시오.
histo[index] += 1;
평균을 계산하려면 다음 루프를 실행하십시오.
float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
mean = i * histo[i]; // sum along the histogram
N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.
표준 편차를 계산하려면 다음 루프를 실행하십시오.
float std_dev = 0;
for (i=0; i < 32 ; i++) {
std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.
히스토그램 방법의 전략은 수집 된 모든 신호 샘플 대신 몇 개의 빈에서 느린 작업을 수행하는 것입니다. 샘플 크기가 길수록 좋습니다. 자세한 내용을 보려면이 흥미로운 페이지 히스토그램, Pmf 및 Pdf를 읽으십시오 .