Voltage divider အနေနဲ့ စဉ်းစားပြီး သူတို့ရဲ့ \(V_o\) နဲ့ \(V_i\) ဆက်သွယ်ချက် \(\mathbf{H}\) ကို အောက်က အတိုင်း ဖော်ပြနိုင်ပါတယ်။ $$ \begin{equation} \mathbf{H}_{lp}(\mathbf{s})=\frac{1}{\mathbf{s}RC+1} \end{equation} $$
$$ \begin{equation} \mathbf{H}_{hp}(\mathbf{s})=\frac{\mathbf{s}RC}{\mathbf{s}RC+1}=\frac{1}{\frac{1}{\mathbf{s}RC}+1} \end{equation} $$
အဲဒီမှာ RC ကို time constant \(\tau\) လို့ ခေါ်ကြပြီး cutoff frequency နဲ့ ဆက်သွယ် ချက်ကို အောက်မှာ ဖော်ပြထားပါတယ်။
$$ \tau = RC = \frac{1}{\omega_c} = \frac{1}{2\pi f_c} $$
Frequency \(\omega\) မှာ ရှိတဲ့ သူတို့ ရဲ့ gain နဲ့ phase shift ကို အောက်ကအတိုင်း ဖော်ပြနိုင်ပါတယ်။ $$ \begin{equation} \lvert \mathbf{H}_{lp}(\mathbf{s}) \rvert=\frac{1}{\sqrt {(\frac{\omega}{\omega_c})^2+1}} \end{equation} $$
$$ \begin{equation} \lvert \mathbf{H}_{hp}(\mathbf{s}) \rvert=\frac{1}{\sqrt {(\frac{\omega_c}{\omega})^2+1}} \end{equation} $$
$$ \begin{equation} \angle \mathbf{H}_{lp}(\mathbf{s})=-\tan^{-1}\frac{\omega}{\omega_c} \end{equation} $$
$$ \begin{equation} \angle \mathbf{H}_{hp}(\mathbf{s})=\tan^{-1}\frac{\omega_c}{\omega} \end{equation} $$
Low pass filter ရဲ့ transfer function ကို s domain ကနေ z domain ကို ပြောင်းကြည့်ပါမယ်။ ရှိပြီးသား transform table တွေမှာ အလွယ် တကူ ကြည့်လိုက်ရင် \( \frac{1}{\mathbf{s}+a} \) က \( \frac{\mathbf{z}}{\mathbf{z}-e^{-aT}} \) ဖြစ်တယ် လို့ သိထားပါတယ်။ အဲဒီမှာ pole က \(\mathbf{s}=-\frac{1}{RC} \) ဖြစ်တဲ့ အတွက် constant နဲ့ အဲဒီ pole ရှိတဲ့ z transform ကို အောက်ကအတိုင်း ရေးနိုင်ပါတယ်။ $$ \begin{equation} \mathbf{H}_{lp}(\mathbf{z})=\frac{K}{1-\mathbf{z}^{-1} e^{-\frac{T}{RC}}} \end{equation} $$ Low frequency ( \(\mathbf{s}=0 \) ) မှာဆိုရင် \(\mathbf{z}=1 \) ဖြစ်ပြီး အဲဒီမှာ low pass filer ရဲ့ gain ဟာ 1 ဖြစ်ရပါမယ်။ $$ \begin{equation} \lim_{z \to 1} \mathbf{H}_{lp}(\mathbf{z})=\frac{K}{1-e^{-\frac{T}{RC}}} = 1 \end{equation} $$ ဒါ့ကြောင့် low pass filter ရဲ့ z transform ကို အောက်ကအတိုင်းရပါမယ်။ $$ \begin{equation} \mathbf{H}_{lp}(\mathbf{z})=\frac{1-e^{-\frac{T}{RC}}}{1-\mathbf{z}^{-1} e^{-\frac{T}{RC}}} \end{equation} $$
\(a = e^{-\frac{T}{RC}}\) လို့ ထားလိုက်မယ်၊ \(b=1-a\) လို့ထားလိုက်မယ် ဆိုရင် အောက်ပါအတိုင်းရပါမယ်။ $$ \begin{equation} \mathbf{H}_{lp}(\mathbf{z})=\frac{b}{1-a\mathbf{z}^{-1}} \end{equation} $$ Recursive equation နဲ့ဆို အောက်ကအတိုင်း ဖြစ်သွားပါမယ်။ $$ y(k)=b . x(k)+a . y(k-1) $$
High pass filter ရဲ့ ညီမျှခြင်းကို အောက်က အတိုင်း 1 ကနေ low pass filter ကို နုတ်ထားတာနဲ့ ပြနိုင်ပါတယ်။ $$ \begin{align} \mathbf{H}_{hp}(\mathbf{s})&=\frac{\mathbf{s}RC}{\mathbf{s}RC+1} \\ &=1-\frac{1}{\mathbf{s}RC+1} \\ &=1-\mathbf{H}_{lp}(\mathbf{s}) \end{align} $$
ဒါကြောင့် သူ့ရဲ့ z transform ကို အောက်ပါအတိုင်း ဖော်ပြနိုင်ပါတယ်။ $$ \begin{equation} \mathbf{H}_{hp}(\mathbf{z})=\frac{a-a\mathbf{z}^{-1}}{1-a\mathbf{z}^{-1}} \end{equation} $$ ယျေဘူယျ အားဖြင့် \(\frac{b-c\mathbf{z}^{-1}}{1-a\mathbf{z}^{-1}} \) ကို Recursive equation နဲ့ဆို အောက်ကအတိုင်း ပြနိုင်ပါတယ်။ $$ y(k)=a . y(k-1)+b . x(k) - c. x(k-1) $$ အခု case အတွက်တော့ ဒီလို ရေးနိုင်ပါတယ်။ $$ y(k)=a[( x(k)-x(k-1)+ y(k-1)] $$
Z transform ပြောင်းတဲ့ အခါ octave မှာ အောက် က အတိုင်း အလွယ် တကူ ပြောင်းနိုင်ပါတယ်။ Octave မှာ control package မရှိသေးရင် အောက်က command ကို ထည့်ဖို့လိုပါတယ်။
pkg load controlဥပမာ အနေနဲ့ 22 kΩ resistor နဲ့ 1 μF capacitor တို့ကို သုံးပြီး MatLab code ရေးလိုက်ပါတယ်။
%Low pass filter clc; clear all; close all; R=22e3 %resistance (Ohm) C=1e-6 %capacitance (F) vc=1/(R*C) %angular cutoff frequency (rad/s) fc=1/(2*pi*R*C) %cutoff frequency (Hz) RC=R*C H=tf([1],[RC 1]) %transfer function for 1/(sRC+1) T=0.01 %sampling period (second) Hd=c2d(H,T,'zoh') %discrete model using zero order hold a=exp(-T/(RC)) %just to check coefficient b=1-a figure; step(H,'-',Hd,'--')%check step response figure; bode(H,Hd) %check bode plot figure; margin(Hd);%check gain margin and phase margin
%High pass filter clc; clear all; close all; R=22e3 %resistance (Ohm) C=1e-6 %capacitance (F) vc=1/(R*C) %angular cutoff frequency (rad/s) fc=1/(2*pi*R*C) %cutoff frequency (Hz) RC=R*C H=tf([RC 0],[RC 1]) %transfer function for 1/(sRC+1) T=0.01 %sampling period (second) Hd=c2d(H,T,'zoh') %discrete model using zero order hold a=exp(-T/(RC)) %just to check coefficient figure; step(H,'-',Hd,'--')%check step response figure; bode(H,Hd) %check bode plot figure; margin(Hd);%check gain margin and phase margin
သူတို့ကို C နဲ့ implement လုပ်ထားတဲ့ နမူနာကို အောက်မှာ ပြထားပါတယ်။
// First Order RC High Pass and Low Pass filters // Author: Yan Naing Aye // http://coolemerald.blogspot.sg/ // Date: 2016 April 21 //----------------------------------------------------- //External variables float ah=0; //for high pass filter float al=0; //for low pass filter //----------------------------------------------------- //initialize low pass filter //input: (T: sampling period, fc: cutoff frequency) void InitLowPass(float T,float fc) {al=exp(-T*2*PI*fc);} //----------------------------------------------------- //Low Pass Filter float LowPass(float x){static float yl=0; yl=x+al*(yl-x); return yl;} //-------------------------------------------------------- //initialize high pass filter //input: (T: sampling period, fc: cutoff frequency) void InitHighPass(float T,float fc) {ah=exp(-T*2*PI*fc);} //----------------------------------------------------- //High Pass Filter float HighPass(float x){static float yh=0,xh=0; yh=ah*(x-xh+yh); xh=x; return yh;} //-----------------------------------------------------
လက်တွေ့ အနေနဲ့ အဲဒီ 22 kΩ resistor နဲ့ 1 μF capacitor တို့ကို သုံးပြီး analog circuit တခုကို breadboard ပေါ်မှာဆက်လိုက်ပါတယ်။ ပြီးတော့ အဲဒီ တန်ဖိုးတွေအတိုင်းပဲ Arduino Zero ပေါ်မှာ A5 ကနေ analog input voltage ကိုဖတ်ပြီး၊ A0 ကနေ analog voltage ပြန်ထုတ်ပေးတဲ့ digital filter တခုဆောက်လိုက်ပါတယ်။ နောက်ပြီး waveform generator ကနေ sinusoidal waveform တခုကို ထုတ်ပေးပြီး RC analog filter ကိုရော၊ Arduino digital filter ကို ရော ပြိုင်တူ ပေးလိုက်ပါတယ်။ ပြီးတဲ့ အခါ frequency ကို 1 Hz ကနေ 30 Hz အထိ တန်ဖိုး အမျိုးမျိုး ပြောင်းပေးပြီး ထွက်လာတဲ့ တန်ဖိုးတွေကို oscilloscope ပေါ်မှာ ယှဉ်ပြီး တိုင်းကြည့်တဲ့ အခါ low pass ရော၊ high pass filter အတွက်ပါ ထပ်တူထွက်တာ ကို တွေ့ရပါတယ်။ High pass filter မှာ digital to analog converter ရဲ့ တန်ဖိုးက 0-1023 အပေါင်းတန်ဖိုးပဲ ထွက်နိုင်တာမို့ offset 512 ပေါင်းထည့်ဖို့လိုပါတယ်။
Arduino program နဲ့ MatLab code တွေကို အောက်ကလင့်ခ်မှာ ယူနိုင်ပါတယ်။
https://github.com/yan9a/RC_Filters
No comments:
Post a Comment