평균필터

제목만 보고 이글을 읽지 않으시는 분들이 분명히 많을것 같습니다 ㅋㅋ

무슨 중학생도 아니고 평균을 언급하고 그래?

라는 생각 분명히 하셨지요? ㅋㅋ

저도 그랬거든요 ㅋㅋ

이래서 역시 사람은 겸손하고, 돌다리도 두들겨 보고 가고 이래야 합니다 ㅋㅋ

자 여기서 문제 ~

문) 10Hz 로 샘플링되는 데이터가 계속 들어오고 있다. 1초동안 각 데이터가 들어올때 변화하는 평균값의 추이를 보고자한다. 이를 구현하라.

너무 쉽나요? ㅋㅋ

역시 여러분은 똑똑하군요 ㅋㅋ

이 멍청한 저는 말이지요 ㅋㅋㅋ

이렇게 구현했습니다 ㅋㅋㅋ

데이터의 처음부터 새로들어오는 데이터까지 다 더하고, 데이터 갯수로 나눈다. ㅋ

아 심플하고 직관적이다 ㅋㅋㅋ 역시 멋지다 ㅋㅋㅋ

요로면 망합니다 ㅋㅋㅋ

이전 데이터 까지의 평균을 계산하기 때문에 그 값을 이용한다면 Stack 의 사용량과 연산량을 대폭 줄일수 있겠죠? ㅋㅋ

자 그럼 한번씩 읽어 보시기 바랍니다



오... ㅋㅋ

이렇게 재귀식을 이용해서 계산하니까 어떠세요? ㅋㅋㅋ

처음부터 무식하게 다 더하는 그런 짓을 하지 않아도 될것 같은 느낌이 들지요? ㅋㅋㅋ

이제 이대로 구현해서 어떤 결과를 보여주는지 한번 봐볼까요? ㅋㅋ

이게 정말로 맞는지 궁금하시면, 손으로 직접 같은 결과가 나오는지 계산들 해보세요 ㅋㅋㅋ

이게 Matlab 으로 구현한 함수를 이용해서 계산한 값입니다 ㅋㅋ

5V 전압에 White Noise 가 끼었다고 가정하고 ㅋㅋ

실제 입력 데이터와 출력데이터가 어떻게 나오는지를 살펴보지요 ㅋㅋ

오늘도 어김없이 코드는 제공됩니다 ~ ㅋㅋㅋ

다운받을때 댓글이라도 좀 달아주시고 ㅋㅋ 어떻게 쓰시던 개념치 않겠습니다 ~ ㅋㅋ

그럼 다음에 뵈용 ㅋ~



## 추가 ##

얼마나 계산량의 차이가 나는지를 보고싶어서 ㅋ

1kHz Fs 에 60초간의 데이터를 Average Filtering 취한다고 했을때 수행시간을 알아보겠습니다 ㅋㅋ

1. 재귀식을 이용한 연산 : 1.587초
2. 싸그리 더해서 나누는 연산 : 3.672초

데이터의 수가 많아질수록 이 효과는 극명하게 나타나겠죠? ㅋㅋ
그럼 재미로 300초 데이터로 다시 비교해볼까요?

1. 7.627초
2. 23.895초

ㅋㅋㅋ 극명하게 차이가 나는군요 ㅋㅋ

제공되는 코드는 tic, toc 함수를 사용하여 몇초의 연산이 걸렸는지를 확인할수 있는 걸로 올리겠습니다.

300초 연산으로 잡혀있는것이므로, 컴퓨터가 후달리면 시간을 좀 줄이고 하시길 추천합니당~


 

Posted by J.Bear