일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 우분투
- Julia
- Numerical Analysis
- Zotero
- IEEE
- 옵시디언
- 텝스공부
- 텝스
- Statics
- WOX
- 수식삽입
- 에러기록
- Linear algebra
- 논문작성
- matplotlib
- 생산성
- 고체역학
- 논문작성법
- MATLAB
- 딥러닝
- obsidian
- Python
- teps
- 인공지능
- pytorch
- JAX
- LaTeX
- Dear abby
- 수치해석
- ChatGPT
- Today
- Total
뛰는 놈 위에 나는 공대생
Low pass filter에서 시상수(Time constant)의 의미 본문
1. Time domain에서의 해석
low pass filter 식으로 알려져있는 $\displaystyle\frac{y}{y_{c}}=\frac{1}{\tau s + 1}$는
time domain에서 다음과 같이 표현된다.
$\dot{y}+\displaystyle\frac{1}{\tau}(y-y_{c})=0$
여기서 $\tau$는 시상수(time constant)라는 이름으로 많이 쓰인다.
그 의미는, response가 1을 기준으로 $1-e^{-1}=0.6321$만큼 도달했을 때의 시간을 의미한다.
이를 구하는 방법은 역라플라스 변환도 있는데 직접적으로 구하면
$\dot{y}+\displaystyle\frac{1}{\tau}(y-y_{c})=0$
$\displaystyle\frac{dy}{y-y_{c}}=-\frac{1}{\tau}dt$
$\ln\left(\displaystyle\frac{y-y_{c}}{y_{0}-y_{c}}\right)=-\frac{1}{\tau}(t-t_{0})$
$y-y_{c}=-y_{c}e^{-\frac{1}{\tau}t} \; \because y_{0},t_{0}=0$
$y=y_{c}\left(1-e^{-\frac{1}{\tau}t}\right)$
다음과 같이 t가 무한대로 갈 때 $y$가 $y_{c}$에 근사해가는 것을 확인할 수 있다.
이 때 t가 시상수 $\tau$일 때 $1-e^{-1}=0.6321$이 되는 것이다.
내가 도달하고자 하는 $y_{c}$의 63.21%에 도달하는 시간이라고 볼 수 있다.
$y_{c}=10$으로 설정했을 때 다음과 같다.
확대해서 보면 다음과 같다. 검은 점선은 63.21%에 도달한 것을 표시한다.
(아래에 이 그래프를 그리는 코드를 첨부했습니다. 참고할 분들은 참고하세요.)
2. Frequency domain에서의 해석
$\displaystyle\frac{y}{y_{c}}=\frac{1}{\tau s + 1}$식은 다른 방식으로도 쓰인다.
위키피디아에는
$\displaystyle\frac{\omega_{0}}{s+\omega_{0}}$과 같이 식으로 표현한다. 그리고 이 $\omega_{0}$는 cutoff frequency라고 한다.
이를 위의 형식에 맞게 변형하면
$\displaystyle \frac{1}{s/\omega_{0}+1}$
위의 $\tau = \displaystyle \frac{1}{\omega_{0}}$ 둘은 일치한다.
$\tau$는 앞서 말한 것처럼 시상수로, dimension이 시간이므로, s(second)이다.
$\omega_{0}$는 rad/s이므로 역수를 취하면 s/rad이므로 둘의 단위가 일치한다. (rad은 no dimension이다.)
그래서 $\tau$를 역수로 취함으로써 frequency domain에서의 cutoff frequency를 알 수 있다.
이 값은 gain이 -3.01dB일 때의 주파수이다.
-3.01dB는 dB가 $20\log_{10}(\text{magnitude})$일 때 magnitude가 0.707를 의미한다.
즉 $20\log_{10}(0.707)=-3.01(dB)$이다.
아래 그래프에서는 $\tau$를 바꿔가며 확인한 것이다.
첫번째 그래프는 frequency가 log scale로 되어있어서 각 cutoff frequency($\omega_{0})$에서 -3.01dB가 됨을 확인할 수 있다.
두번째 그래프는 log scale 대신 일반 scale로 표현한 것이므로, magnitude가 0.707일 때 각각 cutoff frequency에 해당한다는 것을 확인할 수 있다.
이 그림을 그리는 코드 역시 아래에 남겨놓았다.
3. MATLAB 코드
1) Time domain
t_f = 3 ;
dt = 0.01 ;
t = 0:dt:t_f ;
N = floor(t_f/dt) ;
tau = 0.1 * [1:2:15] ;
y_c = 10 ;
figure ;
for k = 1:length(tau)
y = zeros(N+1,1) ;
for i = 1:N
y(i+1) = y(i) - 1/tau(k) * dt * ( y(i) - y_c ) ;
end
plot(t, y, 'DisplayName',"\tau = "+string(tau(k))) ;
hold on ;
end
plot(t, 6.321 * ones(length(t),1), '--k', 'DisplayName','63.21%');
legend('Location','best') ; xlabel('Time(s)');
2) Frequency domain
close all ;
tau = 0.1 * [1, 2, 5, 10] ;
figure(1) ;
figure(2) ;
for k = 1:length(tau)
tf_low_pass = tf([1],[tau(k),1]) ;
[mag, phase, wout] = bode(tf_low_pass, {0.1,20}) ;
figure(1);
plot(wout, squeeze(mag), 'DisplayName',"\tau = "+string(tau(k))+" \omega_{0}="+string(1/tau(k))) ;
hold on ;
figure(2);
semilogx(wout, 20*log10(squeeze(mag)), 'DisplayName',"\tau = "+string(tau(k))+" \omega_{0}="+string(1/tau(k))) ;
hold on ;
end
figure(1) ;
plot(wout, 0.707 * ones(length(wout),1), '--k', 'DisplayName','mag = 0.707');
legend('Location','best') ; xlabel('Frequency(rad/s)'); ylabel('Gain');
figure(2) ;
semilogx(wout, -3.01 * ones(length(wout),1), '--k', 'DisplayName','mag = -3.01(dB)');
grid on ;
legend('Location','best') ; xlabel('Frequency logscale(rad/s)'); ylabel('Gain(dB)');
'연구 Research > 제어 Control' 카테고리의 다른 글
[MATLAB] 3차원 vector field diagram과 시뮬레이션 결과 mapping (0) | 2022.09.26 |
---|---|
[제어] Phase portrait 프로그램과 예시 (0) | 2022.09.16 |
[Optimal Control] Optimal control problem의 performance index (0) | 2022.07.29 |
[제어] Regulation problem과 Tracking problem (0) | 2022.06.05 |
[제어] MATLAB을 활용한 Realization (0) | 2022.04.16 |