본문 바로가기

Theory/ControlTheory

엑셀에서 저역통과필터 (Low Pass Filter) 구현하기

데이터를 분석하다가 보면 여러가지 이유에서 노이즈 성분, 혹은 노이즈 성분으로 취급해도 될 정도로 지저분한 신호가 같이 실려들어올때가 있습니다. 물론 이런 성분이라도 중요하다면 분석을 해야지만, 그렇지 않을 때가 있죠. 이럴때 간편히 저역통과필터(Low Pass Filter)를 사용하면 깔끔합니다. 그 중에서도 상당히 깔끔히 사용할 수 있는 아이가 1차 저역통과필터입니다. 이 아이를 간편히 프로그램으로 구현하는 것을 아주 예전에 한 번 다루었었는데요.[바로가기

1차 저역통과필터의 라플라스 표현이 위와 같구요... 그걸 discrete하게 표현한 것이

위 수식이었습니다. 이걸 아~주 간편히 코드로 구현했던 것이...

이렇게 되었네요.^^. 여기서 pre_y는 필터의 이전 결과값이고, x는 그 순간의 필터의 대상이 되는 원신호이며, tau는 시정수입니다. tau는 크면 클 수록 데이터를 매끈하게 하지만.. 또한 Low pass filter의 특성답게 원 신호 대비 시간 지연이 있습니다.

오늘은 이 저역통과필터를 엑셀에서 구현해 볼까합니다. 사실.. 엑셀은 아주 강력하고 많은 기능을 가지고 있습니다. 역시 아주 예전에 최적화 문제를 엑셀로 풀 수 있다는 이야기[바로가기]도 했으니까요^^ 이런 엑셀로 ... 뭐 특별한 함수 이딴거 없이... 그냥 셀 연산과 그래프만 그려서 저역통과필터를 한 번 구현해 보도록 하겠습니다.

위에 보시면 무려 106591*2개의 크기를 가진 데이터가 있습니다. 뭐 각종 실험을 하다보면 이런 데이터 화일을 간편이 얻을 수 있습니다. 엑셀은 텍스트 화일이라도 저렇게 탭이나 콤마로 구분된 경우는 잘 받아들이니 쉽게 읽을 수 있습니다. 특히나 화일의 크기가 커도 참 안정적으로 로딩하는 편이라고 생각합니다.

이제 index와 rawData가 있네요. 추가로 저는 시간축(time)을 잡고, 테스트삼아 10배씩 차이가 나는 tau값을 이용하여 저역통과필터의 결과를 볼려고 합니다.

일단 이 실험 데이터는 100마이크로세크(micro-sec)마다 데이터를 수집한 것으로 시간 간격이 0.0001초입니다. 그걸 index와 곱해주면 간편히 시간축을 만들 수 있습니다. $ 기호를 잘 쓰면 일괄 적용할 때 편합니다. 일단 저렇게 두고...

저 표시된 부분을 긁으면 되지만~~~ 지금은 데이터의 갯수가 원~체 많아서 그냥 더블클릭하면 됩니다. 그러면 아래로는 쭈~욱 다 적용되죠....

이렇게 시간 축을 다 만들었네요.... 이제 저역통과필터를 적용해야죠^^

일단 첫 값은 그냥 rawData와 같게 둡니다.

그리고 위에서 이야기한 저역통과필터의 C 표현법대로 구성합니다. 화면 중간의 y = 하고 시작하는 수식은 그냥 참조용으로 같이 볼려고 놔둔 것입니다. 엑셀 수식이 아닙니다.^^. 그 y =하는 수식과 위 그림 상단의 수식을 보면 무슨 의미인지 알겁니다.

그러면 이렇게 하나가 또 만들어 졌네요. 또 표시된 부분을 더블클릭을 하면 됩니다.

이번에는 아까의 10배로 큰 tau를 적용하는 저역통과필터를 적용하는 것이구요...

다시 또 그 10배의 시정수를 적용하는 것입니다. 결국 시정수로 0.001, 0.01, 0.1을 사용했는데요. 점점 커질 수록 데이터는 매끈해지고, 대신 데이터는 참값과 비교해서 좀 늦게 나타나게 될 겁니다.

위에 수식이 다 적용된 후 데이터의 일부분입니다. 545로 쭉 오다가 rawData가 544로 떨어졌을때, 각 시정수 별로 어떤 반응을 보이는지를 보여주네요...

지금은 한 번 rawData만 그려보았습니다. 가운데 부분에 엄~청난 노이즈가 보이네요.ㅠㅠ.

시정수 0.001의 1차 저역통과필터를 적용한 후의 데이터입니다. 휠~신 노이즈 성분이 줄어들어 있네요.

그 보다 10배 큰 0.01의 시정수를 적용시킨 경우를 같이 보면 더 노이즈가 줄어든 것이 보입니다.

또 0.1로 10배를 더 키워보면 확실히 알 수 있네요. 노이즈는 줄어들어 있다는 것을요^^

MATLAB이나 Python처럼 그래프의 결과를 가지고 놀기에는 엑셀이 살~짝 부족합니다.ㅠㅠ. 뭐 아무튼 엑셀의 속성에서 위 그래프의 y축 범위를 좀 조절해서 더 잘 보도록 하겠습니다.

어떤가요.. 확실히 tau 시정수가 커질 수록 노이즈가 줄고... 대신 신호가 오른쪽으로 이동해서 응답에 시간 지연이 좀 있다는 것을 알 수 있네요.^^. 

이렇게 데이터는 획득했지만.. 고가의 데이터 분석 툴 없이도 저역통과필터 정도는 엑셀로도 충분히 확인할 수 있답니다.^^. 티스토리의 첨부화일 관련 규정이 10MB를 넘으면 안되서 위에 테스트한 데이터를 다는 못 넣고 일부구간만 올려놓습니다.^^

testLPF.zip

반응형