본문 바로가기

Software/MATLAB

Embedded Block을 이용해보자.

MATLAB/Simulink로 각종 시뮬레이션을 하다보면, M-File을 직접 입력해야만 하는 상황이 꼭 오게 되는데요. 희한하게도 간혹 MATLAB 유저들중에는 Simulink 블럭만으로 이를 해결할려고 하는 경향을 가지고 있는걸 보게 됩니다. 전 잘 모르겠는데, 아주 실행시간이 많이 걸리는 코드의 경우 Simulink로 시뮬레이션을 해야하는 상황이라면, Simulink로만 블럭을 꾸밀수록 그 실행속도가 빨라진다고들 하더군요. 이건 미확인입니다. 말씀드렸듯이 전 잘 모르겠습니다. ^^. 그런데, 대부분은 그렇게 해결이 또한 가능하긴 하죠. 먼저 몇몇개의 Function 블럭을 보면,


위 function블럭은 fcn 블럭이라고 하는데요. MATLAB의 수학함수들을 가지고 위의 예시처럼 꾸밀 수 있습니다. 다중입력과 출력은 Mux/Demux로 구현하는데요. 위 블럭은 조건문이나 반복문, 심지어 사용자의 정의 함수등을 사용할 수 업습니다.


위 블럭은 Math Function 블럭인데요. 이미 준비되어있는 단일수학함수를 사용합니다. 위에서 이야기한 Fcn블럭과 중복되는듯해도 다양한 함수와 다양한 형태의 입력형태를 정의할 수 있어서 꽤 유용할때가 있습니다. 그럼 조건문들은 어떻게 해결해야할까요...


위의 Switch 블럭으로 해결해야합니다. 그런데 이게 좀 까다롭습니다. 아니.. 귀찮다는 표현이 맞겠네요.^^


보통 가장 많이 쓰는 MATLAB fcn 블럭입니다. 그냥 M-file로 줄줄줄 코드 만들고 저 블럭으로 연결해 버리는 거죠. 단점은 딱 하나... Simulink화일인 MDL화일과 저 블럭에서 사용된 M-File을 같이 들고 댕겨야한다는 단점이 있습니다.^^ 물론 이건 단점이 아닐 수도 있습니다. 또한 어떤 블럭을 사용하는가하는 문제는 어떤 스타일로 코드를 편집하는가하는 문제로 볼때는 뭐 스타일의 차이라고 볼수밖에 없을듯합니다. 그러나, 제 주위에서 MATLAB을 사용하는 사람들을 볼때, 또 희한하게 그 사용빈도가 낮은 블럭하나를 소개할려고 합니다. 이는 순전히 제 생각인데, 아주 예전 MATLAB 4.*대 버전부터 쓰던 분들이 제 주위에 많은데, 그때는 이 블럭이 없었기 때문이지 않나 합니다.^^


바로 이 블럭입니다. Embedded MATLAB Function 이 블럭은 이름에서도 나와있듯이 위의 MATLAB fcn과 기능은 거의 같습니다. (어떤 이유인진 아직 잘 모르겠지만, 내부에서 호출할 수 없는 몇몇 함수가 있습니다.) 그러면서 구질구질하게 m-file을 들고 다니지 않아도 됩니다. 위의 Embedded Function을 사용하게 되면, 처음 실행할때 컴파일이라고 하는 MATLAB에서는 익숙치 않은 과정을 거치게 됩니다. 그 후 내부코드를 바꾸지 않는다면 동일합니다.


저 블럭을 편집창에 가져와서 내부를 열어보면 위와같은 화면이 나타납니다.^^


저기서 만약 입력이나 출력 변수가 여러개라면 저렇게 표기하고 저장하거나 창을 닫으면 블럭모양이


위와 같이 바뀌게 됩니다. 간단한 테스트용 프로그램을 하나 보겠습니다.


주파수가 두배차이가 나는 사인함수를 입력으로 두고 단순히 더해보겠습니다.


뭐 당연히 예상했던 결과지요...^^

컴파일이 완료된 MDL화일을 열어보면, 내부의 블럭 연결도가 마치 Simulink로 직접 블럭을 연결해서 꾸민것처럼 나타나게 됩니다. 


반응형