본문으로 바로가기

데이터를 분석하다가 보면 여러가지 이유에서 노이즈 성분, 혹은 노이즈 성분으로 취급해도 될 정도로 지저분한 신호가 같이 실려들어올때가 있습니다. 물론 이런 성분이라도 중요하다면 분석을 해야지만, 그렇지 않을 때가 있죠. 이럴때 간편히 저역통과필터(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


댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2015.05.12 08:13 신고

    엑셀로도 다양한 활용이 가능한데 단순기능만 사용하게 된다는~~ ㅋㅋ

  2. 2015.05.12 16:05

    비밀댓글입니다

  3. BlogIcon 한석규 2015.05.12 17:24 신고

    엘셀의 다양한 기능 잘 보고 갑니다^^

  4. BlogIcon 티나짱 2015.05.12 20:36 신고

    오늘은하루종일바람이엄청부네요 뭔지모르고보고갑니다

  5. BlogIcon 트라이어 2015.05.13 08:25 신고

    저는 잘 이해못하지만 그래도 잘 보고갑니다. ^^

  6. 2015.05.13 19:38

    비밀댓글입니다

  7. BlogIcon 청결원 2015.05.14 16:53 신고

    넘 어렵네요^^

  8. BlogIcon 워크뷰 2015.05.15 04:41 신고

    잘 보고 갑니다^^

  9. cmc 2015.06.27 20:52 신고

    안녕하세요 수집한 데이터를 보정하려고 하는데.. low pass라는 방법이 있어 찾다가 보게 되었습니다.

    제가 하고 있는 실 실험은 필드에서 진행하게 되어 노이즈가 많이 생기는데요

    이러한 노이즈 제거를 위해 low pass 를 사용하려 하는데 위에서 말씀하신 tau 값을 보통 얼마로 정해두고 해야하는지.. 궁금합니다.

    • BlogIcon PinkWink 2015.06.28 09:26 신고

      그건 기준이 없습니다. 사용자의 환경과 목적이 다를테니까요.. 제가 자주 사용하는 것은 0.01정도입니다만.. 뭐 아무튼 그렇답니다.^^

  10. cmc 2015.06.28 22:30 신고

    안녕하세요 어제 질문했던 학생 입니다.

    시정수 관련 다시한번 추가적인 질문이 있어 글 남깁니다.

    앞서 말씀드린 봐와 같이 필드 실험을 진행하였고 low pass 필터를 이용하여 좀더 정확한 출력 값을 얻는것이 목표 입니다.

    그렇다면 논문을 쓸 때 예를들어 .. 본 실험의 결과 계산을 위해서 10Hz 이상의 데이터를 수집하면 문제가 되지 않는다. 따라서 10Hz 이상의 데이터는 노이즈라고 판단하고 시정수(0.01 정도?)를 결정하여 low pass 필터를 이용하여 제거 하였다....

    시정수라는 개념을 위와 같이 이해하고 작성하는게 맞는지 궁급합니다.

    • BlogIcon PinkWink 2015.06.29 08:50 신고

      http://pinkwink.kr/437
      에 보면 유도된 수식이 있습니다. 설정한 값(tau)을 넣고 MATLAB에서 bode plot을 그려보면 차단 주파수 대역이 그림으로 나올겁니다. 그리고.. 1/tau가 차단주파수입니다... 단위가.. 아마 rad/sec일겁니다.(가물가물~~) 그건 확인해보셔야할 듯 하네요...

  11. 초보입니다 2015.08.10 17:48 신고

    안녕하세요 엑셀로 하이패스 필터를 써보려는대요 차단주파수를 1hz로하려고합니다. 예를들어 0.22uf와 724k옴을 사용한다고 가정해서 차단주파수 공식 1/2*3.14rc에 대입하면 1hz와 비슷한 값이나오는대 타우(시정수)는 rc값과 비례한다고 알고있습니다. 그럼 RC=0.22uf * 724k =0.16 인대 그럼 타우값에 0.16을 대입하면 되는 건가요?

  12. 2016.03.29 15:35

    비밀댓글입니다

  13. 필터 공부 2016.07.14 15:48 신고

    안녕하세요
    로패스가 잘이해가 안되서 질문드려요. 혹시 식이 라플라스변환까지 유도되는 과정을 설명해주실수있나요??ㅠㅠ
    TAU라던지 이런부분이 잘 이해가 안되서요. 로패스는 낮은 주파수를 통과시켜 고주파(노이즈)들을 차단하는 필터라고 알고 있는데요, 주파수가 낮을수록 강력한 필터링이 된다고하는데, 반대로 tau가 높아질수록 그리고 해보니 필터링한값을 다시 큰수의 tau값으로 필터링하면 노이즈가 줄었는데요, 이 공식이 좀 이해가 안되서 댓글 남깁니다.ㅠㅠㅠ
    이메일은 312psd@naver.com 입니다.

    • BlogIcon PinkWink 2016.07.15 07:44 신고

      음.. 개념이 혹시 이해가 안되시는 거라면
      http://pinkwink.kr/246
      의 글도 도움이 되지 않을까 생각합니다.

    • 필터 공부 2016.07.15 15:31 신고

      음 일단 타우값을 어떻게 왜설정하는지가 궁금합니다.
      이론적으로 저역통과필터에 대해서는 이해가 가는데, 제가 얻은 값은 회로가 아닌 데이터를 그냥 노이즈를 없애기위해서 사용하려고합니다.
      그런데 타우가 클수록 노이즈가 많이 없어진다는데, 그러면 타우값은 아무렇게나 설정을 해도 되는가에 대해 궁금합니다.

    • BlogIcon PinkWink 2016.07.15 16:15 신고

      http://pinkwink.kr/437
      먼저 위 글을 보시면 tau의 정의가 나타나 있습니다. 뭐 시정수인데요. MATLAB에서 bode plot을 그려보시면 tau의 영향이 나타납니다.
      이것저것 귀찮으시면 tau를 0.1, 1, 10 뭐 이렇게 변화시켜보시면 그 결과가 어떻게 되는지 알 수 있습니다.

  14. 박태강 2016.07.21 11:11 신고

    신호처리에 지식이 없는 한사람으로써 이론만 보았을 때는 어떻게 구현할지 매우 난감하더군요. 그런데 이렇게 엑셀로 시뮬레이션까지 할수 있도록 자세히 설명해 주셔서 많은 도움이 되었습니다. 감사합니다.

  15. 안녕하세요. 2017.02.06 19:42 신고

    안녕하세요. 궁금한게 있어 댓글을 남깁니다.
    Lowpass filter와 Highpass filter에 통과시킨 신호의 결과와
    Bandpass filter에 통과시킨 신호의 결과가 동일한지요?
    Excel로 Bandpass filter를 구현해보고 싶은데 블로그에 없는것 같아 여쭙습니다~

    • BlogIcon PinkWink 2017.02.07 09:11 신고

      저역통과와, 고역통과의 결과와 Band Pass는 당연히 결과가 다릅니다. 다른 필터인데요...^^
      엑셀에서 하지는 않았지만, 블로그 제일 상단 연재목록에 보시면 필터 설명을 한 부분이 나타나 있습니다.

    • 안녕하세요. 2017.02.07 10:46 신고

      댓글 감사합니다.
      질문이 하나 더 있는데요.
      Low pass filter를 적용하여 5Hz 보다 낮은 signal 만 추출하고 싶다면,
      본문에서 말씀해주신 'tau'를 조정하면 되는건가요?
      구글에 찾아보니 cutoff_freq = 1/(2*pi*tau) 이던데 이걸 적용시키면 되는건지요...?

    • BlogIcon PinkWink 2017.02.07 12:47 신고

      네.. 그렇습니다. 그러나... 5Hz를 경계로 딱 잘리진 않습니다.^^ 5Hz 부터 주파수가 높아질 수록 점점 작아진다는 거죠...^^