센서 상용 알고리즘 처리
1. 가중 부 드 러 움: 부 드 러 움 과 균형 센서 데이터, 우연 한 데이터 돌변 의 영향 감소;
2. 돌연변이 추출: 정적 과 느 린 변화의 데이터 배경 을 제거 하고 순간 변 화 를 강조 한다.
3. 간단 한 이동 평균 선: 데이터 흐름 이 가장 가 까 운 K 개의 데 이 터 를 보존 하고 평균 값 을 취한 다.
2. 가중 평활
사용 알고리즘 은 다음 과 같 습 니 다.
(새 값) = (이전 값) * (1 - a) + X * a
그 중에서 a 는 설 정 된 가중치 이 고 X 는 최신 데이터 이 며 프로그램 은 다음 과 같 습 니 다.
float ALPHA = 0.1f;
public void onSensorChanged(SensorEvent event){
x = event.values[0];
y = event.values[1];
z = event.values[2];
mLowPassX = lowPass(x,mLowPassX);
mLowPassY = lowPass(x,mLowPassY);
mLowPassZ = lowPass(x,mLowPassZ);
}
private float lowPass(float current,float last){
return last * (1.0f - ALPHA) + current * ALPHA;
}
3. 돌연변이 추출
위의 가중 부 드 러 운 역 알고리즘 을 사용 하 다. 구현 코드 는 다음 과 같 습 니 다:
public void onSensorChanged(SensorEvent event){
final float ALPHA = 0.8;
gravity[0] = ALPHA * gravity[0] + (1-ALPHA) * event.values[0];
gravity[1] = ALPHA * gravity[1] + (1-ALPHA) * event.values[1];
gravity[2] = ALPHA * gravity[2] + (1-ALPHA) * event.values[2];
filteredValues[0] = event.values[0] - gravity[0];
filteredValues[1] = event.values[1] - gravity[1];
filteredValues[2] = event.values[2] - gravity[2];
}
4. 단순 이동 평균 선
센서 데이터 흐름 에서 가장 가 까 운 K 개의 데 이 터 를 보존 하고 평균 값 을 되 돌려 줍 니 다.k 는 평균 '창' 의 크기 를 표시 합 니 다. 구현 코드 는 다음 과 같 습 니 다:
public class MovingAverage{
private float circularBuffer[]; // K
private float avg; //
private float sum; //
private float circularIndex; //
private int count;
public MovingAverage(int k){
circularBuffer = new float[k];
count= 0;
circularIndex = 0;
avg = 0;
sum = 0;
}
public float getValue(){
return arg;
}
public long getCount(){
return count;
}
private void primeBuffer(float val){
for(int i=0;i<circularBuffer.length;++i){
circularBuffer[i] = val;
sum += val;
}
}
private int nextIndex(int curIndex){
if(curIndex + 1 >= circularBuffer.length){
return 0;
}
return curIndex + 1;
}
public void pushValue(float x){
if(0 == count++){
primeBuffer(x);
}
float lastValue = circularBuffer[circularIndex];
circularBuffer[circularIndex] = x; //
sum -= lastValue; //
sum += x;
avg = sum / circularBuffer.length; //
circularIndex = nextIndex(circularIndex);
}
}
비고
참고 자료: < 안 드 로 이 드 센서 고급 프로 그래 밍 >
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.