[제어] Transfer function을 s plane에 mapping하는 코드

2022. 4. 11. 20:36·연구 Research/제어 Control

 

시스템에 대한 Transfer function을 구하면 보통 $s=j\omega$로 두고 bode plot을 그려서 주파수 응답을 확인한다.

 

bode plot 외에도 nyquist plot, nichols plot 등 시스템에 대해 이해하기 위한 plot들이 있다.

그런 plot은 이미 MATLAB에 구현되어있으므로 넘어가고

여기서 소개하는 코드는 간단하게 직접 s plane(complex domain)에서 Transfer function의 크기와 위상이 어떻게 되는지 확인하는 plot을 그리는 코드이다.

 

아래 코드에서 사용된 transfer function은

$\frac{s+2}{s^2+6s+5}$

이다.

 

 

% Code for magnitude and phase plot of transfer function in s plane
num = [1,2] ;
den = [1,6,5] ;
G = tf(num, den) ;
%G = ( s + 2 )/( s^2 + 6*s + 5 ) ;
pole_sys = pole(G);

real_range = -20:0.1:0 ;
imag_range = -20:0.1:20 ;

n = length(real_range);
m = length(imag_range);

[x,y] = meshgrid(real_range, imag_range) ;
mag = zeros(n,m) ;
phase = zeros(n,m) ;

for i = 1:length(real_range)
    for j = 1:length(imag_range)
        complex_num = real_range(i)+ 1j*imag_range(j);
        g = ( complex_num + 2 )/( complex_num^2 + 6*complex_num + 5 ) ;
        mag(i,j) = abs( g ) ;
        phase(i,j) = atan2( imag(g), real(g) ) ;
    end
end

mag_dB = 20 * log(mag);
phase_deg = 180/pi * phase ;

figure ;
s = surf(y,x,mag_dB') ;
title('Magnitude plot of G(s)') ;
zlabel('Magnitude (dB)');
ylabel('Real');
xlabel('Imaginary');
s.EdgeColor = 'none';

figure ;
s = surf(y,x,phase_deg') ;
title('Phase plot of G(s)') ;
zlabel('Phase (deg)');
ylabel('Real');
xlabel('Imaginary');
s.EdgeColor = 'none';

 

이 코드를 좀 더 개선해서 일반화된 transfer function을 plot해주는 함수를 만들면 좋을 것 같다.

 

NOTE : 누군가는 이 코드를 symbolic 식을 이용해서 subs를 가지고 대입하면 될 것이라고 생각할 수 있는데, 절대 권하지 않는 방식이다. MATLAB 코드를 짤 때 반복적으로 대입(subs)하는 코드는 무조건 속도가 느리다.

 

위 코드의 결과는 다음과 같다.

 

저작자표시 비영리 변경금지 (새창열림)

'연구 Research > 제어 Control' 카테고리의 다른 글

[제어] MATLAB을 활용한 Realization  (0) 2022.04.16
[제어] Realization에 대한 고찰  (0) 2022.04.16
[제어] Actuator modelling  (0) 2021.12.16
[제어] H2 norm, H infinity norm 개념  (0) 2021.11.30
[제어] Control theory 관련 레퍼런스 정리  (1) 2021.11.11
'연구 Research/제어 Control' 카테고리의 다른 글
  • [제어] MATLAB을 활용한 Realization
  • [제어] Realization에 대한 고찰
  • [제어] Actuator modelling
  • [제어] H2 norm, H infinity norm 개념
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (468)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (27)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 실험 Experiment (1)
      • 유학 생활 Daily (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에러기록
    JAX
    서버
    Linear algebra
    MATLAB
    텝스공부
    matplotlib
    ChatGPT
    우분투
    인공지능
    논문작성법
    텝스
    Zotero
    논문작성
    Numerical Analysis
    Statics
    obsidian
    생산성
    옵시디언
    Python
    Dear abby
    고체역학
    딥러닝
    WOX
    pytorch
    Julia
    IEEE
    수치해석
    LaTeX
    teps
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[제어] Transfer function을 s plane에 mapping하는 코드
상단으로

티스토리툴바