본문 바로가기

Software/MATLAB

MATLAB 함수로 구현한 구간평균법(moving average)

예전에 구간평균법(moving average)에 대해 이야기를 한 적이 있습니다.
대부분의 프로세서들은 ADC를 수행할때, 사용자의 설정에 따라 수 샘플링 시간동안의 평균을 현재의 ADC값으로 표현하도록 되어있을텐데요.
자이로나 가속도센서 등등의 센서를 사용할 때 누구나 노이즈때문에 고생을 하게 됩니다. 사실 저는 필터에 대해 잘 모르지만, 구간평균법은 간단히 구현하기에 참 편리하고 좋더군요.
이걸 예전부터 MATLAB에서 함수로 구현해서 사용하고 있었는데요. 

비록 허덥한 프로그램이지만, 오늘은 그걸 한번 포스팅할까 합니다.

먼저 함수의 형식은 원데이터를 받고, 평균을 취할 구간의 길이를 정해서 그 구간을 평균해서 현재의 값이라고 생각을 하게 됩니다.

즉, 현재의 값은 정해진 구간(n) 만큼 이전의 데이터부터 지금까지의 데이터의 평균이라고 생각하는 거지요.




위에 제가 만든 함수가 있습니다. (죄송합니다. 대충만들어서 좀....ㅠㅠ) 일단, 2번행과 9번행은 MATLAB에서 함수(funciton)를 만드는 것이고[관련글], 4번행은 만약 평균을 취할 길이를 5개 샘플로 보았다면, 원데이터의 처음부터 5번구간까지는 그대로 두라는 의미입니다.

그리고, 5번행의 for문은 주어진 구간의 길이부터 원데이터끝까지 돌면서, 6번행에서는 간단히 MATLAB이 제공하는 평균을 구한는 함수 mean를 사용한 것입니다. 

제가 원하는 출력이 행렬이 완성되어서 나오것이어서, 6번행과 같이 표현되어있습니다.

음... 더욱 아름답게 만들 수도 있었겠지만, 뭐 당장 사용하기엔 불편함이 없어 그냥 저대로 쓰고 있습니다...ㅠㅠ


반응형