본문 바로가기
HW 프로그래밍/아두이노

이동평균필터

by N2info 2021. 1. 9.

아두이노에서 구현한 이동평균 필터

 

전역변수로  boolean firstRun = true;

n 개의 갯수 #define movAvgFillter_data 50 을 선언해주고 실행

 

float movAvgFillter(float k) {  //이동평균필터
  float data_stack[movAvgFillter_data]; // 데이터스텍 10개  많으면 오차는 줄어드나 지연이 생김
  float preAvg;         // 이전에 계산산 평균값
  

  if(firstRun) {  // 처음 1회만 실행됨
    for(int f = 0; f <movAvgFillter_data ;f++) data_stack[f] = k;  // 초기화 첫 입력값으로 전부 입력, 평균이 입력값이 되게함
    
    preAvg = k;  
    //total = 0;
    firstRun = false;
  }  // 처음 1회만 실행됨

  for(int j = 0; j < movAvgFillter_data; j++) data_stack[j] = data_stack[j+1];  // 새로운 값을 박기 위해 한칸식 앞으로

  data_stack[movAvgFillter_data-1] = k; // 새로운값을 마지막에 넣음

  float total = 0;

  for(int f = 0; f <movAvgFillter_data ;f++) total = total + data_stack[f];  // 합계를 구함

  return (total/movAvgFillter_data);
  
}