본문으로 바로가기

MATLAB Simulink에서 Bode Plot 그리기

category Software/MATLAB 2016. 9. 19. 08:00

이 글도 예약 발행으로 추석 전후에 발행되는 것지만, 뭐 그래도 추석인사는 끼워 넣어야죠^^. 추석 잘 들 보내고 계시죠?^^ 제가 MATLAB 2016 EXPO[바로가기]를 다녀온 후 평가판을 신청해서 받고서[바로가기] 이것 저것 테스트하다가 소개할 기능이 있습니다. 이 기능은 2016부터 들어간 기능은 아니지만, 제가 블로그에서 소개한 적이 없더라구요^^ 꾸며져 있는 Simulink에서 바로 Bode Plot을 확인해보는 기능입니다.

일단, 위 그림과 같은 전형적인 Direct II Form의 2차 필터를 블럭을 지정해 두었다고 해두죠. 그리고 적절한 a1, 등의 계수를 확정지었다면, 이 상태에서 살짝 보드 선도를 확인해보고 싶을 때가 있을 겁니다.^^

먼저 Input이 되는 선로에서 마우스 오른쪽 버튼을 누르고 나타나는 메뉴에서 Linear Analysis Points->Open-loop Input을 선택합니다. 그리고,

출력이 되는 선로에서 Open-loop Output을 선택합니다.

그러면 위 그림처럼 입력과 출력이 선로상에 별도로 표기가 됩니다.^^

이제 Analysis->Control Design->Linear Analysis를 선택합니다.

그러면 위 그림과 같은 창이 나타납니다.

아~ 당연히 대상 블럭에서 사용하는 상수값들은 모두 지정이 되어있어야죠...^^ 그리고 Bode를 눌러줍니다.

짜잔~~~ 나타나내요... 그러나 약간 어색하죠?^^ (저만 그런가요^^)

BODE PLOTGrid를 눌러 줍니다.

또 x축이 rad이라면 Plot Properties에서 UnitsFrequencyHz로 변경해 줍니다.

그리고 적절히 필요구간만 확대해서 보면 위 그림처럼 나타나내요^^ [바로가기]에서 이야기한 Band Pass Filter입니다. 손쉽게 Simulink에서도 Bode Plot을 확인해 볼 수 있습니다.^^


댓글을 달아 주세요

  1. BlogIcon 지후대디 2016.09.19 08:35 신고

    즐거운 한가위 보내셨나요?
    연휴 후유증 없는 상쾌한 한주 되시길 바랍니다^^

  2. BlogIcon kakawood 2016.09.19 09:43 신고

    연휴 잘 보내셨나요. 행복한 하루 보내세요^^ 잘 보고갑니다

  3. BlogIcon 『방쌤』 2016.09.19 19:23 신고

    명절은 잘 보내셨나요?
    역시나 연휴 후 월요일은 힘드네요,,ㅎ
    즐거운 한 주 시작하셨길 바랍니다.^^

  4. BlogIcon 핑구야 날자 2016.09.20 07:53 신고

    연휴가 길기는 했지요 일상으로 돌아가서 열심히 일해야죠 잘 보고 갑니다

  5. Reason 2016.10.02 18:27

    덕분에 정말 유용하게 매트랩에 대한 지식들 배워가고있습니다. 감사합니다.

  6. 소소 2017.04.21 11:26

    좋은 정보 감사합니다.

    블럭에서 사용하는 상수값들은 모두 지정이 되어있어야한다고 하셨는데 직접 워크스페이스에 하나하나씩 입

    력을 해주신건가요?

  7. 궁금해요 2017.04.21 11:36

    안녕하세요 !
    위의 내용에서 상수를 지정하는 부분에 대해서 자세히 설명해 주실수 있을까요 ?
    이러한 bode plot을 하려면 gain 부분을 전부다 a1,a2 이런식으로 시뮬링크 schematic에서는 지정을 해 놓고
    work space에서 직접 입력을 해 주어야하는 건가요 ?
    sampling time Fs, Ts , end time 이러한 것도 상수로 지정해야 하는 것인지 궁금합니다.

  8. 맛탱 2020.01.30 18:04

    안녕하세요 핑크윙크님 ㅎㅎㅎ 매트랩 질문 하나만 해도 될까요???
    제가 피드백 시스템은 간단히 만든다음 이산시간으로 변환하는 테스트를 해보고 있는데요
    연속시간 제어 전달함수:Gc=tf([1 1],[1 0]);
    연속시간 플랜트 함수 : Pc=tf([1 1],[1 1 1]);
    피드백 시스템이므로 전체 시스템은 : Ac=(Gc*Pc)/(1+Gc*Pc);

    근데 c2d 라는 함수 가 있어서 연속시간을 이산시간으로 바꿀수 있더라고요
    그래서
    Ad=c2d(Ac,0.1);
    Gd=c2d(Gc,0.1);
    이렇게하고 plant 를
    Pd=Ad/(Gd-Gd*Ad); 이렇게 계산 하였거든요
    근데 여기서 이제 확인해보려고
    figure(1)
    step(Ac,Ad,100)
    figure(2)
    step(Gc,Gd,100)

    Pd=Ad/(Gd-Gd*Ad);
    figure(3)
    step(Pc,Pd,100)
    step 함수를 써서 확인 하였는데
    이산시간 Plant 전달함수가 이상하게 나오는데 왜이런지 아시나요? 매트랩에서 계산에 한계가 있는건지 아니면 실수 한건지 모르겠네요 ㅠㅠ 분명 이론대로 전개를 하였는데 ...

    • BlogIcon PinkWink 2020.02.06 21:07 신고

      MATLAB은 안쓴지 너무 오래되었네요^^. 그런데 step 함수가 두 플랫폼에 같은 결과가 나올지 모르겠습니다. step 함수는 연속시간영역에서만 사용하지 않나요??? (정확하지 않습니다.ㅠㅠ)