본문으로 바로가기

[MATLAB 연재] 5. Simulink의 기초

category Software/MATLAB 2010.03.16 19:57
본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.

Simulink 실행하기 !

Simulink를 실행하는 방법은 Command Window에서 "Simulink"라고 입력하거나 혹은

위에 표시된 아이콘을 누르면 됩니다. 그러면 Simulink Library가

나타나는데요. 위에 표시된 새화일 열기를 클릭하시면

위와 같이 작업이 가능한 창이 나타납니다. 일단 저 창에 뭘 입력하고 실행하기 전에 자주사용하는 (순전히 제가 사용하는 기준입니다...^^) 블럭들을 간단히 소개하고 시작해야겠네요. 

Sources !

Sources 폴더에는 출력만 가지는 블럭들이 모여있습니다. 

위에서 보시면 

  • Clock : 시간을 출력해줍니다. 몇분몇초 이런 형식이 아니라 그냥 초 단위로 나타납니다.
  • From File : mat화일로 저장된 블럭에서 데이터를 가져와서 일정 시간간격으로 출력해줍니다.
  • Signal Builder : sin과 같이 수학적으로 간단히 수식화 할 수 없는 신호를 GUI기반으로 편집할 수 있게 해줍니다.
  • Chirp Signal : 통상 system identification에서 시스템에 가하는 입력신호로 많이 사용되는 걸로 알고 있는데요. 저주파부터 고주파까지의 정현파신호를 출력으로 가집니다.
  • Constant : 말 그대로 상수를 출력으로 가집니다.
  • From Workspace : Workspace상에서 저장되어있는 변수를 일정시간간격에 맞춰 출력해 줍니다.
  • In1 : subsystem등을 만들때 subsystem내에서 입력을 정의할 때 사용합니다.
  • Signal Generator : matlab상의 function generator라고 생각하시면 됩니다. 다양한 신호를 생성할 수 있습니다.
  • Step : 원하는 시간에 step입력을 가지도록 설정할 수 있습니다.

Sink !

데이터의 출력을 어떤 형태로 표현 혹은 저장할 것인지를 정해주는 폴더입니다.

  • Out1 : 위의 In1처럼 subsystem내에서 사용하는 것입니다.
  • To File : 입력받은 데이터들을 mat화일 형태로 바로 저장해줍니다.
  • XY Graph : X축 데이터와 Y축 데이터를 받아 그림을 그려줍니다.
  • Scope : 시뮬레이션 시간을 x축으로 가지고, 주어진 신호를 y축신호로 해서 그림을 출력해 줍니다.
  • To Workspace : 입력받은 데이터들을 workspace에 저장해줍니다.

Continuous & Discontinuities !

저는 Continuous 폴더에서는 딱 두개를 참 자주 사용하는데요. 바로 미분(derivative)적분 (integrator) 블럭입니다. 적분블럭에는 초기치를 지정할 수 있도록 되어있습니다.

Discontinuities 폴더에서는 Saturation 블럭을 많이 사용합니다. 이 블럭은 입력받은 신호를 특정범위를 벗어날때 일정한 값을 가지도록 변환해줍니다.

Math Operation !

각종 수학 함수를 많이 가지고 있는데, 전 블럭으로 복잡하게 꾸미기 보다는 function블럭이나 embedded function 블럭을 m-file로 작성하는 버릇이 있어서 이 폴더에서는 몇가지만 사용을 합니다. 제가 자주 사용한다는 방금전의 방법은 다음에 다시 알려드리겠습니다.

  • Gain : 신호에 특정한 값을 이용해 실수배를 수행합니다.
  • Product : 두 개 이상의 신호를 곱해줍니다.

  • Sign : 경계값(0)을 기준으로 1과 -1의 값을 가지도록 합니다.
  • Sine Wave Function : 정현파 신호를 만들어 줍니다.
  • Sum : 두개이상의 신호를 더해줍니다.

User-Defined Function !

말 그대로 Function문을 작성할 수 있습니다. 

  • Fcn : mux를 통해 다수의 입력을 받아 그것을 이용해서 적절한 출력을 가지도록 한줄의 함수를 작성할 수 있습니다.
  • MATLAB Fcn : matlab의 command window에서 실행할 수 있는 명령이라면 이 블럭에 입력해서 그 함수의 출력을 사용할 수 있게 해줍니다.
  • Embedded Matlab Function : Fcn블럭은 한줄의 명령어만 사용해서 복잡한 코드의 구현이 힘들때가 있는데, 이때 MATLAB Fcn을 사용하면 됩니다. 그러나 이 블럭은 M-File을 계속 가지고 다녀야해서 어떨때는 불편할 때가 있는데, 그럴때 embedded matlab function을 사용하면 유용합니다. 그러나 이 embedded블럭은 사용상의 범위가 약간 한정적입니다.

블럭 찾기 !

처음 사용하는 분이라면, 일일이 찾아다니며 내가 필요로 하는 블럭의 위치를 알아둘 필요가 있습니다만, 저같은 경우는 대부분 블럭찾기를 통해 사용할 블럭을 찾습니다.

위에 표시된 부분에 fcn이라고 치고 엔터를 누르면

fcn 과 관련있는 블럭들이 검색되는데 거기서 원하는 것을 사용하는 것이지요^^

간단한 예제 !

이제 간단한 예제를 통해 simulink의 사용을 익혀보겠습니다.

처음에 만들었던 untitled.mdl 창에서 위 블럭을 구성하려고 한번 시도해 보시길 바랍니다. Library에서 블럭을 마우스로 왼쪽 버튼으로 누르고 새로 열린 작업창에 가져다 놓으면 됩니다. 그리고, 왼쪽 버튼으로 누르고 선을 그어 주거나, Clock 블럭을 마우스 왼쪽 버튼을 누르고 키보드에서 Ctrl키를 누르고 다음 블럭을 마우스 오른쪽 버튼을 눌러가면서 클릭하면 위 그림처럼 흐름선이 만들어 집니다.

Sine Wave Function을 더블클릭하면 위의 창이 나타나는데요. 표시된 부분을 보시면 설명이 나타나있습니다. 이걸 보고 아래의 각 성분을 수정하시면 됩니다. 지금은 그저 첫 사용에서 사용법만 익히는 것이니 그대로 두도록 하지요. 작업창의 상단에 플레이버튼이 있습니다. 그걸 누르고, Scope창을 더블클릭하시면

와 같은 결과를 얻을 수 있습니다. 이제 조금더 확장해서

위 그림처럼 미분하고 적분까지 해서 원신호와 같이 세개의 신호를 한 Scope창에서 확인해보도록 하겠습니다. 이때 사용하는 것이 mux라는 블럭입니다. 이 블럭을 library에서 가져와서 더블클릭하시면

위와 같이 나타나는데, 여기서 우리는 신호가 세개니까 "3"이라고 입력하시면 됩니다.

mux블럭으로 scope블럭에 두개이상의 신호를 넣은 경우 노란색이 제일 위의 신호, 그 다음이 적색, 그 다음이 청록색입니다. 그런데 화면에서 청록색, 즉 미분된 신호의 처음이 좀 이상하죠? 그것은 시뮬레이션이 시작하는 첫 단계에서 미분값이 약간 오차를 가지기 때문인데다, 지금은 설정에 auto로 잡혀있는 샘플링간격이 좀 넓게 나타나서 눈에 거슬려보이기 때문입니다. 아까도 말했지만, 지금은 뭐 그냥 한번 실행해보는 것이 목적이니까. 패쓰~~~^^ 

MATLAB 05. Simulink의 기초.pdf


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 박종혁 2010.12.08 00:18 신고

    Envelope detector를 만들기 위해
    다이오드를 사용하려 하는데요,,, 다이오드에 input과 output포트가 없는데
    어떻게 해야하는거죠? '.'?

  3. 불타는가슴 2011.05.10 22:18 신고

    위에서 강의해주신 simulink를 작성하고 저장하려구하는데요.

    the model 'test1' contains characters that cannot be encoded with the model's cjaracter encoding, 'window-949'. either:~
    라는 창이 뜨면서 저장이 안되는데... 무슨 이유인지를 잘 모르겠습니다..

    • BlogIcon PinkWink 2011.05.11 07:57 신고

      http://pinkwink.kr/26 를 일단 참조하시구요.
      인터넷으로 검색해보면
      MATLAB은 컴퓨터 이름, 사용자 이름 등등이 한글로 지정되어있는경우 말씀하신 에러가 나타난다고 합니다.
      저는 사실 아주 예전부터 PC이름과 네트워크이름을 영문으로 지정하는 버릇이 있어서 그 에러를 모르고 있었는데요...
      http://pinkwink.kr/26 에서 나타난대로 수행해도 에러를 잡지 못하는 경우도 많으신듯합니다.

    • 불타는가슴 2011.05.11 16:11 신고

      감사합니당.. 일단 말씀해 주신데로

      바로 참조해 봐야겟네용 ㅎㅎ

    • BlogIcon PinkWink 2011.05.11 17:59 신고

      네... 해당 글을 보시고.. 에러를 잡을 수 있으셨으면 좋겠네요...^^

  4. cowncks 2011.05.28 15:16 신고

    그런데 스코프로는 1~10 까지밖에 못보는건가요? ㅠㅠ

  5. luffy 2011.06.16 05:55 신고

    낼 셤보는데.....많은 도움 됐어요~~ 감사합니다~~^^

  6. 2011.06.18 23:51

    비밀댓글입니다

    • BlogIcon PinkWink 2011.06.19 08:43 신고

      simulink가 설치 되었는지 확인해보세요. MATLAB은 모듈별로 설치되는데 최초 설치시 어떤 이유에서 simulink가 선택되지 않았을 수도 있습니다.

  7. 랄라 2011.06.21 14:48 신고

    정말 쉽고 명확한 설명 감사드립니다. ~!!!!!!

  8. sj 2011.08.11 23:34 신고

    공대생에 있어서 꼭 필요한 정보 감사합니다. 덕분에 여러가지 배워갑니다.
    한 가지 질문이 있습니다만, sine wave function에서 어떻게 신호가 세 갈래로 나뉘어 나갈 수 있는 것인가요? Demux 는 써보니 계속 오류가 나고, 그냥 세 개로 나누자니 어찌해야 할 지 모르겠습니다.

  9. sj 2011.08.11 23:46 신고

    질문해놓고 죄송합니다만, 금방 해결되었습니다....^^;;

  10. lake 2012.02.06 17:44 신고

    위에 말한 샘플린간격을 줄일려면 어떻게 해야하나요???ㅜ

  11. 이명화 2012.03.28 06:48 신고

    안녕하세요 갓 매트랩을 시작한 왕초보인데요..
    시뮬링크 누가 만든 예제 하나를 돌리려는데 분명 그사람 컴퓨터에서는 잘 돌아가는데 제 컴으로 옮기니깐 오류가 나네요. 원인을 보니까 마이크로소프트 비주얼 씨 설치에 문제가 있단식으로 뜨는데 그걸 또 따로 깔아야하는건가요??

    • BlogIcon PinkWink 2012.03.28 09:31 신고

      아.. 그건 저도 잘 모르겠네요^^
      저희도 언능 MATLAB을 사야하는데.. 이게 원체 가격이...ㅠㅠ
      일단 예전 학교에 있을때 경험으론 그냥 깔았던 기억이..ㅠㅠ

  12. ddolgang 2012.04.17 16:46 신고

    올려주신글 잘보고 갑니다
    한가지 질문이 있는데 여쭤봐도 될런지요?

    WORKSPACE 블락을 불러와서 엑셀파일에서 끌어 쓰고있는데
    엑셀 파일안에 12:00:00 이런 형태의 시간은 인식하지 못하는 것인가요?

  13. overpower 2012.05.05 02:17 신고

    안녕하세요. 이제 matlab 시작하는 학생으로서 정말 좋은 글이에요.
    여쭤보고싶은게 있는데요, stepfunction 에 시간을 지정하는 방법이 있을까요?

    가장 기본적인 stepfunction 은 1초부터 1의 신호를 내보내는거잖아요, 이걸 0.5초~ 2초까지만 1의 신호를 보내고 나머지에선 다시 0으로 보내는 그러한 신호로 지정할 수 있는지 여쭤보고 싶네요..

    • BlogIcon PinkWink 2012.05.06 11:57 신고

      이글에 댓글을 다셨으니 simulink의 step 블럭을 말씀하시는거겠죠. simulink의 step블럭을 더블클릭해서 보시면, 원하시는데로, 시작시간이나, 수치까지도 입력할 수 있도록 되어있습니다.
      그리고, 말씀하신 또 구형파와같은 모습은 직접 fcn으로 프로그램을 짜셔도 되고, sum정도를 이용하셔서 두게의 step을 조합하셔도 됩니다.

  14. oversh 2012.12.04 03:14 신고

    과제 땜에 공부해야 헸는데 많이 도움됐습니다. 글 잘 보 고 갑 니 다.

  15. jun hong 2013.05.21 00:10 신고

    혹시 message 신호랑 반송파 carrier 블럭들이 어디있는지 알수있을까요? ㅠㅠ 찾아도 잘 안나오네요 ㅠㅠ 찾기검색해도 나오지가 않는데 ㅠㅠ 어뜩게 해야되는지 알수 있을까요? ㅠ 오늘 시뮬링크를 처음써봐서 어렵네요 ㅠㅠ

  16. op 2013.05.25 20:41 신고

    혹시 반응기 모델을 어디서 추가하는지 알수 있을까요??
    아무리 찾아도 찾을 수가 업네요. cstr반응기가 필요한데.....

  17. anonymous 2015.11.20 15:06 신고

    제가 목소리를 녹음해서 변조 복조기를 만들려고하는데요.
    제가 컴퓨터로 녹음한 파일을 시뮬링크로 가져오고싶어요
    가능할까요?? 즉, 저위에 sine wave가 아닌 제목소리 파형을 따고싶어요.

    • BlogIcon PinkWink 2015.11.20 16:36 신고

      전 해본적 없지만.. 어쩌다 구경한 적이 있는데, wav 파일을 로딩해서 신호처를 하더군요. loading wav file in MATLAB 정도로 구글링해보시면 아~주 많은 자료가 뜰것 같은데요^^

  18. 2016.04.06 11:47

    비밀댓글입니다

    • BlogIcon PinkWink 2016.04.07 14:35 신고

      m-file은 스크립트 언어로 일반적인 언어와 유사하겠지만...
      simulink는 시스템 모델을 블럭선도처럼 꾸미는 것입니다. 좀 일반적인 언어와는 다른 모습이지요..

  19. 2016.04.12 20:41

    비밀댓글입니다

  20. 다조 2016.09.21 12:58 신고

    어쩌면 여기 내용과 상관없는 질문일 수도 있는데 알려주신 것을 직접 따라해보고 simulink를 저장하려하니
    Error saving "파일저장경로" Invalid argument Cannot overwrite read-only files or write to read-only storage 라는에러 메세지가 뜨면서 저장이 안되는데 이걸 어떻게 해결할수 있을까요?
    그 이미 전에 windos-949? 였나 그 오류때문에 window command에 코드 써서 그 문제를 해결했는데 또 문제가 ㅠㅠ

    • BlogIcon PinkWink 2016.09.22 08:36 신고

      잘 모르겠습니다... 그저... 메세지만 봐서는 다른 창에서 해당 소스를 같이 열고 있거나, 쓰기 금지된 USB같은 장치에서 바로 읽었거나, 혹은 쓰기 금지된 보안 시스템에서 USB를 읽었거나 하는 등의 에러가 아닌가요?

  21. cuma 2017.01.12 11:38 신고

    이제 갓 시작한 초보입니다. 예제 첫번째와 두번째를 실행했을 때 Scope에서 나타나는 sine wave 그래프가 왜 다른건가요? ㅠㅠ