Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Julia
- Python
- MATLAB
- 우분투
- obsidian
- 텝스
- Dear abby
- 논문작성법
- 옵시디언
- teps
- Zotero
- matplotlib
- Statics
- ChatGPT
- 딥러닝
- 논문작성
- LaTeX
- WOX
- 인공지능
- 고체역학
- 수식삽입
- 에러기록
- 수치해석
- 텝스공부
- Numerical Analysis
- Linear algebra
- 생산성
- IEEE
- pytorch
- JAX
Archives
- Today
- Total
뛰는 놈 위에 나는 공대생
[제어] Transfer function을 s plane에 mapping하는 코드 본문
시스템에 대한 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 |
Comments