본문으로 바로가기

MATLAB에서 Filter를 간단히 적용할 수 있는 툴박스가 있습니다. 바로 sptool이죠. 필터적용을 간단히 할 거라면 꽤 유용한 툴입니다. 간단히

 sptool


라고 command창에서 입력하면 되죠. 그러면

이와같은 창이 뜹니다. 별도의 신호를 등록해서 filtering할 테니, file 메뉴를 선택하고 import를 선택하면

와 같은 창이 뜨구요... 거기서 신호를 선택하고 그 신호의 샘플주파수를 설정해주면 됩니다. 지금은 그냥 툴박스가 제공하는 예제신호를 가지고 하죠 첫번째 그림의 첫번째 신호를 선택하면

view를 통해보면 신호가 보입니다. 이를 필터에 적용시키기 위해

표시된 edit를 누립니다. 물론 원하는 필터를 선택해야겠지만. 지금은 lowpass필터를 적용해보죠

edit를 누르면 나오는 그림입니다. 좌측하단에서 lowpass필터를 선택하고 하단 중앙쯤에서 샘플주파수와 패스벤드 스탑벤드를 설정하고 Design Filter를 누르면 끝입니다.

그리고 apply를 누르는 거죠

그러면 필터가 적용된 신호이름을 설정하는 곳이나옵니다. sig2라고 되어있네요. 실제로는 sig2.data에 저장됩니다. 이를 춰크스페이스에 저장해야겠지요.

첫번째 창에서 file의 export를 선택하면 뜨는 창입니다. sig1은 필터링된 신호고 LSlp라고 되어있는것이 설계된 필터입니다. 이를 워크스페이스에 올려놓고 사용하면 되겠지요. 필터만 따로 사용하고 싶다면,

워크스페이스의 LSlp를 보면

LSlp.tf 안에

num이 보이시죠? 그걸 적용하고자 하는 신호와 (시간영역의 신호일테니) 컨벌루션시키면됩니다. 방법은

Result_Sig = conv(LSlp.tf.num, SampleData);

라고만 해주면 되겠죠.... 앞뒤 데이터가 좀더 붙어 있으니 짜르시면 됩니다.

이 글은 제 이전 홈페이지에 2008년 11월 7일 올렸던 내용입니다.
티스토리로 이전하면서 몇몇 글들을 이렇게 옮기고 있습니다.



댓글을 달아 주세요

  1. 부싯돌 2010.02.17 16:22

    이 블러그에 있는 강좌를 그대로 따라해보고 있는데

    마지막 컨벌루션 시키는 부분에서 막혀서 이렇게 글을 남기게 되었습니다.

    위에 있는 강좌를 아주 그대로 따라해보고 command창에 아래와 같이 입력하였습니다.

    Result_Sig = conv(LSlp.tf.num, SampleData);

    그러하였더니 아래와 같이 에러가 떴습니다.

    ??? Undefined function or variable 'SampleData'.

    이 문제 어떻게 해결할 수 있을까요??

    tvio84@naver.com이나 답변 부탁드립니다.(__)

    • BlogIcon PinkWink 2010.02.17 16:35 신고

      네.. 여기서 SampleData는 필터를 적용하고자하는 대상을 의미합니다. 위 예제라면 세번째 그림의 데이터죠(위 예제에서는 그 데이터를 필터링하고싶었으니까요) 물론 필터를 적용한 결과도 같이 워크스페이스에 저장됩니다만, 디자인된 필터를 다른곳에 적용시키고 싶을때도 있자나요^^. 위 예제에서 결과를 확인하시겠다면

      SampleData 자리에 sig1.data 를 입력하시면 됩니다.

      아 그전에... 세번째그림에서 메뉴의 File-Export를 이용해서 데이터를 워크스페이스에 보내주셔야합니다.

  2. 부싯돌 2010.02.17 17:05

    빠른 답변 정말 감사합니다.

    뒤에 SampleData를 sig1.data라고 고치니 에러구문이 사라졌습니다..^^

    그러나 또다른 문제가 발생하였네요..ㅜ.ㅜ

    simulink의 library에 제가 만든 필터를 찾아볼 수 없더군요

    이번 강좌의 용도는 sptool에서 설계한 필터를 simulink의 library에 저장하여

    언제든지 설계한 필터를 쓰고 싶을때 쓰는 것이 아닙니까??;;

    • BlogIcon PinkWink 2010.02.17 17:14 신고

      음... 라이브러리에 저장한다는 말은 하지 않았습니다만...ㅜ.ㅜ
      라이브러리는 Subblock이나 Masking된 블럭을 유저가 저장할 수 있습니다. 그러나 위 필터는 일종의 계수(숫자)만 존재하는 것으로, workspace상에 존재하게 하는 것입니다. 뭐 억지로 라이브러리에 넣을 순 있겠습니다만....ㅜ.ㅜ
      같은 필터를 계속 사용하실거라면, 위 예제의 경우 LSlp.tf.num을 저장하고 계속 적용하는 것도 한 방법일 것입니다.

  3. Vysion 2013.01.29 14:20

    혹시 필터의 크기를 결정 할 수도 있나요??? 혹은 필요가 없나요??? sample data와 크기를 맞춰줘야 하지 않나요?