Search This Blog

Monday, January 21, 2013

Amplitude spectrum of a signal using Fourier transform

signal တစ်ခုရဲ့ amplitude spectrum ကို Fourier transform သုံးပြီး ရှာတဲ့ MATLAB ဖန်ရှင်လေး တစ်ခု ရေးကြည့်ထားပါတယ်။ အဲဒီ ဖန်ရှင်ကို နမူနာ သုံးတဲ့ ပုံစံ ရယ်၊ ဖန်ရှင် ရေးထားတဲ့ ကုဒ်တွေ ရယ်ကို အောက်မှာ ဖော်ပြထားပါတယ်။ MATLAB မှာ ပါတဲ့ ဖန်ရှင် fft ကို သုံးတဲ့ ဟာ ကို လည်း နောက်ထပ် နမူနာ တစ်ခု ပြထားပါတယ်။ ဒီဟာလေးတွေက amplitude spectrum တို့၊ power spectrum တို့ ရှာချင်တဲ့ သူတွေ အတွက် အသုံးဝင်မယ်လို့ မျှော်လင့်ပါတယ်။
%Example MATLAB code to test function FX
Fs=100;
t=(0:1/Fs:1-1/Fs)';
x=2*cos(2*pi*5*t)+sin(2*pi*10*t);
[f a]=FX(x,Fs);
plot(f,a);

function [f a]=FX(x,fs)
%Calculates amplitude spectrum of a signal x using Fourier transform
%[f a]=FX(x,fs)
%Input: x=signal, fs = sampling rate
%Output: f = frequency axis, a = amplitude spectrum
%File name: FX.m
%Author: Yan Naing Aye
%Website: http://cool-emerald.blogspot.sg/

dT = 1/fs; 
N=length(x);
dF=1/(N*dT);
NF=fs/2;%Nyquist Freq
%You can always limit freq range for faster performance
%NF=20;
t=(0:dT:(N-1)*dT)';
f=(0:dF:NF)';
a=f;%initialize a
a(1)=mean(x);
for i=2 : length(a)
    b=(2*mean(x.*cos(2*pi*dF*(i-1)*t)));
    c=(2*mean(x.*sin(2*pi*dF*(i-1)*t)));
    a(i)=sqrt(b^2+c^2);
end

%MATLAB program to calculates amplitude spectrum of a signal x using fft
%Author: Yan Naing Aye
%Website: http://cool-emerald.blogspot.sg/

Fs=100;
t=(0:1/Fs:1-1/Fs)';
x=2*cos(2*pi*5*t)+sin(2*pi*10*t);
L=length(x);

A=2*abs(fft(x)/L);
A=A(1:Fs/2+1);
f = Fs/2*linspace(0,1,Fs/2+1);
plot(f,A);

Sunday, January 13, 2013

Changing sampling rate using quadratic regression

signal တစ်ခုရဲ့ sampling rate ကို 333Hz ကနေ 5000Hz ကို ပြောင်းဖို့ အတွက် လုပ်ကြည့်ထားပါတယ်။ ပိုမို ချောမွေ့တဲ့ ရလာဒ် ရချင်တာမို့ ပုံမှန် zero order hold (ZOH) ကို သုံးမယ့်အစား second order hold ကို သုံးကြည့်ထားတာပါ။ ဒီမှာ sampling rate ကို တင်ဖို့လုပ်ထားပေမယ့်၊ ဒီနည်းကို down sampling လုပ်ဖို့လည်း သုံးလို့ရပါတယ်။ အခြား ဖြစ်နိုင်ချေတွေကတော့ noise ကို phase delay မရှိပဲ filter လုပ်တဲ့ဟာမျိုးတွေ အတွက်လည်း သုံးလို့ ရနိုင်ပါတယ်။ real-time application တွေအတွက်ပေါ့။
Approach 1: Quadratic regression
Quadratic ဖန်ရှင်တစ်ခုကို အောက်ပါအတိုင်း သတ်မှတ်နိုင်ပါတယ်။

$$f=w_0+w_1 x + w_2 x^2$$

အနည်းဆုံး ဖြစ်အောင် လုပ်မယ့် cost function ကို အောက်ကလို သတ်မှတ်မှာပါ။

$$J(w)=\frac{1}{2}\sum_{i=1}^{n}(y_i-f_i)^2$$
$$J(w)=\frac{1}{2}\sum_{i=1}^{n}(y_i-w_0+w_1 x_i + w_2 x_i^2)^2$$

ဒါဆို Optimal weights တွေကို differentiate လုပ်ပြီးသုည ညီလိုက်ပြီး ရှာနိုင်ပါတယ်။

$$\frac{\partial J(w)}{\partial w_0}=0$$
$$-\sum_{i=1}^{n}(y_i-w_0+w_1 x_i + w_2 x_i^2)=0$$
$$w_0\sum_{i=1}^{n}1+w_1\sum_{i=1}^{n}x_i+w_2\sum_{i=1}^{n}x_i^2=\sum_{i=1}^{n}y_i$$

w1 နဲ့ w2 ကိုလည်း အဲဒီလိုပဲ ရှာလိုက်မယ် ဆိုရင် အောက်အတိုင်း ထပ်ရလာပါမယ်။

$$w_0\sum_{i=1}^{n}x_i+w_1\sum_{i=1}^{n}x_i^2+w_2\sum_{i=1}^{n}x_i^3=\sum_{i=1}^{n}y_i x_i$$
$$w_0\sum_{i=1}^{n}x_i^2+w_1\sum_{i=1}^{n}x_i^3+w_2\sum_{i=1}^{n}x_i^4=\sum_{i=1}^{n}y_i x_i^2$$

အဲဒီ equation သုံးခုကို မေ့ထရစ် ပုံစံ နဲ့ အောက်ပါအတိုင်း ရေးလို့ရပါတယ်။

$$ \begin{bmatrix} \sum_{i=1}^{n}1 & \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 \\ \sum_{i=1}^{n}x_i & \sum_{i=1}^{n}x_i^2 & \sum_{i=1}^{n}x_i^3 \\ \sum_{i=1}^{n}x_i^2 & \sum_{i=1}^{n}x_i^3 & \sum_{i=1}^{n}x_i^4 \end{bmatrix} \begin{bmatrix} w_0 \\ w_1 \\ w_2 \end{bmatrix} = \begin{bmatrix} \sum_{i=1}^{n}y_i \\ \sum_{i=1}^{n}y_i x_i \\ \sum_{i=1}^{n}y_i x_i^2 \end{bmatrix} $$
$$\mathbf{A}\mathbf{W}=\mathbf{B}$$
$$\mathbf{W}=\mathbf{A}^{-1}\mathbf{B}$$

Approach 2: Three equations
တကယ်တော့ ဒီကိစ္စမှာ နောက်ဆုံး အမှတ် ၃ ခုကိုပဲ သုံးလိုက်ရင်ရတဲ့ အတွက်၊ ညီမျှခြင်း သုံးကြောင်း ကို အောက်က အတိုင်း တစ်ခါတည်း ချရေးလို့လည်း ရပါတယ်။


$$y_1=w_0+w_1 x_1 + w_2 x_1^2$$
$$y_2=w_0+w_1 x_2 + w_2 x_2^2$$
$$y_3=w_0+w_1 x_3 + w_2 x_3^2$$
$$ \begin{bmatrix} 1 & x_1 & x_1^2 \\ 1 & x_2 & x_2^2 \\ 1 & x_3 & x_3^2 \end{bmatrix} \begin{bmatrix} w_0 \\ w_1 \\ w_2 \end{bmatrix} = \begin{bmatrix} y_1 \\ y_2 \\ y_3 \end{bmatrix} $$
$$\mathbf{A}\mathbf{W}=\mathbf{B}$$
$$\mathbf{W}=\mathbf{A}^{-1}\mathbf{B}$$

Approach 3: Two equations အကယ်၍ x1=-1, x2=0, နဲ့ x3=1 လို့ သတ်မှတ်လို့ ရတယ်ဆိုရင် y2 က w0 နဲ့ ညီသွားပါမယ်။ နောက်ကျန်တဲ့ အမှတ် ၂ ခုကနေ ညီမျှခြင်း နှစ်ကြောင်းပဲ ရှင်းဖို့ လိုပါတော့တယ်။

$$y_1=y_2-w_1+ w_2$$
$$y_3=y_2+w_1+ w_2$$
$$ \begin{bmatrix} -1 & 1 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} = \begin{bmatrix} y_1-y_2 \\ y_3-y2 \end{bmatrix} $$
$$ \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} = \begin{bmatrix} -0.5 & 0.5 \\ 0.5 & 0.5 \end{bmatrix} \begin{bmatrix} y_1-y_2 \\ y_3-y2 \end{bmatrix} $$

နောက် အောက်ကအတိုင်းရလာပါမယ်။

$$w_0=y_2$$
$$w_1=-0.5(y_1-y_2)+0.5(y_3-y2)$$
$$w_2=0.5(y_1-y_2)+0.5(y_3-y2)$$

အထက်ကနည်းတွေကို MatLab နဲ့စမ်းကြည့်ထားတာကို အောက်က ကုဒ်တွေမှာ တွေ့နိုင်ပါတယ်။
%-------------------------------------------------------------------------
clc;
close all;
clear all;
%-------------------------------------------------------------------------
% y= w0 + w1*x + w2* x^2;
%-------------------------------------------------------------------------
%Got x and y
x=[-1 0 1]';
Wo=[4 3 2]';
y=Wo(1)+Wo(2)*x+Wo(3).*x.*x;

%-------------------------------------------------------------------------
%Approach 1
%Polynomial regression of order 2
%For n=3
S1=3;
Sx=sum(x);
Sx2=sum(x.*x);
Sx3=sum(x.*x.*x);
Sx4=sum(x.*x.*x.*x);
Sy=sum(y);
Syx=sum(y.*x);
Syx2=sum(y.*x.*x);

P=[S1 Sx Sx2; Sx Sx2 Sx3; Sx2 Sx3 Sx4];
B=[Sy Syx Syx2]';
%P1=P^(-1);
W1=P\B

%-------------------------------------------------------------------------
%Approach 2
%Linear equations
A=[1 x(1) x(1)*x(1);1 x(2) x(2)*x(2); 1 x(3) x(3)*x(3)];
W2=A\y
%-------------------------------------------------------------------------
%Approach 3
%Only 2 linear equations
w0=y(2);
w1=-0.5*( y(1)- y(2))+0.5*( y(3)- y(2));
w2=0.5*( y(1)- y(2))+0.5*(y(3)- y(2));
W3=[w0 w1 w2]'
%-------------------------------------------------------------------------
အောက်ကပုံမှာ ဒီနည်းကို သုံးလို့ရတဲ့ ရလဒ် (အပြာ) နဲ့ ပုံမှန် zero order hold သုံးရင် ရမယ့် ရလဒ် (အနက်) တို့ကို ယှဉ်ပြထားပါတယ်။ ဒီနည်းက ပိုပြီး ညက်ညော ချောမွေ့တဲ့ ရလဒ်ကို ရပေမယ့် one sample delay ရှိသွားတာကိုတော့ သတိထားဖို့ လိုပါတယ်။
ဒီနည်းလမ်းကို LabVIEW မှာ C code သုံးပြီး လုပ်ထားတာကို အောက်ကပုံမှာ တွေ့နိုင်ပါတယ်။
ပထမ နှစ်ခုမှာ 3x3 matrix ကို inverse ရှာဖို့ လိုတဲ့အတွက် inverse ရှာတဲ့ C program လေးတစ်ခုကို ရေးပြီး စမ်းကြည့်ထားပါတယ်။
#include
#include
main()
{
    float M[3][3]={{3,0,2},{0,2,0},{2,0,2}}; //initialize a 3x3 matrix
    float N[3][3]={{0,0,0},{0,0,0},{0,0,0}}; //allocate for inverse
    int i,j;
    float d;
    //-------------------------------------------------------------------------
    N[0][0]=(M[1][1]*M[2][2]-M[2][1]*M[1][2]);
    N[1][0]=-(M[1][0]*M[2][2]-M[2][0]*M[1][2]);
    N[2][0]=(M[1][0]*M[2][1]-M[1][1]*M[2][0]);
    d=M[0][0]*N[0][0]+M[0][1]*N[1][0]+M[0][2]*N[2][0];
    N[0][0]/=d;
    N[1][0]/=d;
    N[2][0]/=d;
    N[0][1]=-(M[0][1]*M[2][2]-M[0][2]*M[2][1])/d;
    N[1][1]=(M[0][0]*M[2][2]-M[0][2]*M[2][0])/d;
    N[2][1]=-(M[0][0]*M[2][1]-M[0][1]*M[2][0])/d;
    N[0][2]=(M[0][1]*M[1][2]-M[0][2]*M[1][1])/d;
    N[1][2]=-(M[0][0]*M[1][2]-M[0][2]*M[1][0])/d;
    N[2][2]=(M[0][0]*M[1][1]-M[0][1]*M[1][0])/d;
    //-------------------------------------------------------------------------
    //print 3x3 matrix
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++) printf("%3.4f ",N[i][j]);
        printf("\n");
    }
    getch();
    return 0;
}

Wednesday, January 9, 2013

Rotations in 3D space using Euler angles

ကိရိယာ တစ်ခုရဲ့ body reference frame နဲ့ world reference frame ရဲ့ ဆက်သွယ်မှု ကို ရှာဖို့အတွက် Euler angle sequence တစ်ခုကို သုံးပြီး သရီးဒီ စပေ့ ထဲမှာ rotation လုပ်တဲ့ အကြောင်း ပြောချင်ပါတယ်။ အွိုင်လာ တင်ပြခဲ့တဲ့ သီအိုရမ်တစ်ခု မှာ ပြောထားတာက အောက်ပါအတိုင်း ဖြစ်ပါတယ်။
Any two independent orthonormal coordinate frames can be related by a sequence of rotations (not more than three) about coordinate axes, where no two successive rotations may be about the same axis.
{M} နဲ့ ကိုယ်စားပြု ခေါ်မယ့် world reference frame နဲ့ {B} နဲ့ ကိုယ်စားပြုမယ့် body reference frame တို့ကို အောက်မှာ ပုံနဲ့ နမူနာ ပြထားပါတယ်။
Pan angle rotation ကို α လို့ ခေါ်မှာ ဖြစ်ပြီး သူ့ကို computer vision ကနေ ရနိုင်ပါတယ်။ နောက် tilt angle rotation - β နဲ့ roll angle rotation - γ တို့ကိုတော့ ကိရိယာ ထဲမှာ တပ်ထားမယ့် accelerometers တွေကနေ မြေဆွဲအား (gravity- g ) ကို အာရုံခံ ပြီး သိရှိနိုင်ပါတယ်။ အရင်ဆုံး pan and tilt မရှိဘူး လို့ ယာယီ ယူဆပြီး roll angle ကို စဉ်းစားကြည့်ပါမယ်။ γ က သုည ဖြစ်နေချိန်မှာ Y ဝင်ရိုးက အထက်ကို ညွှန်ပြီး၊ X ဝင်ရိုးက right handed rule အတိုင်း ရေပြင်ညီ ရှိမယ်လို့ သတ်မှတ် ပါမယ်။ X ဝင်ရိုး accelerometer နဲ့ Y ဝင်ရိုး accelerometer တို့က မြေဆွဲအားကို အာရုံခံ တိုင်းလို့ရတဲ့ တန်ဖိုးတွေကို gx နဲ့ gy လို့ခေါ်ပါမယ်။ roll angle ကို သတ်မှတ် ထားပုံကို အောက် က ပုံမှာ ဖော်ပြထားပါတယ်။
Roll angle - γ ကို အောက်က ညီမျှခြင်း ကိုသုံးပြီး တွက်ယူလို့ ရပါတယ်။

$$ \gamma = \tan^{-1}\frac{gx}{gy} $$

နောက် second နဲ့ third quadrants တွေ မှာ ရှိမရှိကို ပြန်စစ်ပါမယ်။
if(gy<0)
  if(gx>=0)
    γ=π+γ;
  else
    γ=-π+γ;
  end
end
ဒါဆို roll angle rotation matrix - Rγ ကို အောက်က အတိုင်းရနိုင်ပါတယ်။

$$ \mathbf{R}_{\gamma}= \begin{bmatrix} \cos(\gamma) & -\sin(\gamma) & 0 \\ \sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 \end{bmatrix}$$

Roll angle ကို ပြင်ပြီးတဲ့နောက် tilt angle ကိုဆက်စဉ်းစားပါမယ်။ Tilt angle ရဲ့ သတ်မှတ်ပုံ ကို အောက်မှာ ပြထားပါတယ်။
Tilt angle - β ကို Y နဲ့ Z မြေဆွဲအား တိုင်းတာမှုတွေ ကနေ တွက်လို့ရပါတယ်။ သတိထား ဖို့ လိုတာကတော့ အဲဒီတန်ဖိုးတွေက roll angle ပြင်ထားတဲ့ တန်ဖိုးတွေ ဖြစ်ရပါမယ်။ ပြောင်းသွားတဲ့ Y နဲ့ Z မြေဆွဲအား တိုင်းတာမှုတွေ ကို အောက်ပါအတိုင်း တွက်ယူနိုင်ပါတယ်။

$$ \begin{bmatrix} gx2 \\ gy2 \\ gz2 \end{bmatrix} = \mathbf{R}_{\gamma} \begin{bmatrix} gx \\ gy \\ gz \end{bmatrix} $$

ဒါဆို β ကို အောက်ပါ ညီမျှခြင်း ကနေရှာလို့ ရပါပြီ။

$$ \beta = \tan^{-1}\frac{gy2}{gz2} $$.

နောက် second and third quadrants တွေ အတွက် စစ်ပါမယ်။
if(gz2>=0)
  if(gy2>=0)
    β=-π+β;
  else
    β=π+β;
  end
end
အဲဒီအခါ Tilt angle rotation matrix -Rβ က အောက်ပါအတိုင်းရလာပါမယ်။

$$ \mathbf{R}_{\beta}= \begin{bmatrix} 1 & 0 & 0\\ 0 & \cos(\gamma) & -\sin(\gamma) \\ 0 & \sin(\gamma) & \cos(\gamma) \end{bmatrix}$$

အဲဒီလိုပါပဲ၊ pan angle rotation matrix - Rα နဲ့ pan angle ရဲ့ သတ်မှတ်ပုံတွေ ကိုလည်း အောက်ပါအတိုင်း တွေနိုင်ပါတယ်။

$$ \mathbf{R}_{\alpha}= \begin{bmatrix} \cos(\alpha) & -\sin(\alpha) & 0 \\ \sin(\alpha) & \cos(\alpha) & 0 \\ 0 & 0 & 1 \end{bmatrix}$$

အဲဒီ rotation matrices တွေရဲ့ မြှောက်လဒ် က rotation matrix တစ်ခု ပါပဲ။ $$ \mathbf{R}=\mathbf{R}_{\alpha} \mathbf{R}_{\beta} \mathbf{R}_{\gamma}$$
အဲဒီအခါ အောက်ပါအတိုင်း ရရှိလာမှာပါ။
M=RB

R က rotation matrix တစ်ခု ဖြစ်တာမို့ သူ့ရဲ့ inverse ကို ရှာဖို့ လိုခဲ့ရင် အဲဒါက R transpose နဲ့ အတူတူပါပဲ။ ဒီ 3D rotation ကို LabVIEW မှာ MabLab code သုံးပြီး လုပ်ထားတာကို အောက်ကပုံမှာ မြင်နိုင်ပါတယ်။

အခုလို 3D transformation တွေအတွက် Quaternion algebra ကလည်း လွယ်ကူပြီး ခေတ်စားနဲ့ နည်းတစ်နည်း ပါပဲ။

Reference:
Kuipers, Jack B., Quaternions and rotation sequences : a primer with applications to orbits, aerospace, and virtual reality, Princeton University Press, 1999, ISBN: 0691058725.

Wednesday, December 19, 2012

Current Driver for Laser Diode

Laser Diode ကို မောင်းဖို့ current driver ဆားကစ် တစ်ခုကို လုပ်ကြည့်ထား ပါတယ်။ ပုံမှန်အားဖြင့် အောက်က ပုံမှာ ပြထားတဲ့ အတိုင်း CE with RE ပုံစံ ကို LED အတွက် current source အနေနဲ့ သုံးရတာကို ကြိုက်ပါတယ်။ ဒီဆားကစ်မှာ Laser Components ကထုတ်တဲ့ laser diode ADL-65055TL ကိုသုံးထားပါတယ်။ သူ့ရဲ့ ပုံမှန် အလုပ်လုပ် တဲ့ operating current က 25mA၊ အမြင့်ဆုံး maximum current က 35mA နဲ့ ပုံမှန် အလုပ်လုပ်တဲ့ operating voltage က 2.2V ပါ။
12V ပါဝါ ဆပ်ပလိုင်း အတွက် ထရန်စစ်စတာရဲ့ VCE(saturation) ကို သုညလို့ အနီးစပ်ဆုံး ယူဆပြီး RE ရဲ့ တန်ဖိုးကို အောက်က အတိုင်း တွက်လို့ရပါတယ်။ $$R_E=\frac{Vcc-V_L}{I_{max}}=\frac{12-2.2}{35m}=280 \Omega $$ အဲဒီ CE configuration အတွက် ချဲ့ဆ အများကြီး မလိုတာနဲ့ bypass capacitor ကို မသုံးခဲ့ ပါဘူး။ ဒီ class A amplifier ရဲ့ အထွက် လျှပ်စီးcurrent ကို 23mA နဲ့ 29 mA ကြားမှာ ပြောင်းနေစေချင် တာနဲ့ ထရန်စစ်စတာ ၂ ရဲ့ ပုံမှန် quiescent emitter current ကို IE2=26mA (operating current ပတ်ဝန်းကျင်လောက်မှာ) လို့ သတ်မှတ်လိုက်ပါတယ်။ အဲဒါဆိုရင် emitter voltage က VE2=RE x Iop= 280 x 26m = 7.28V လို့ ရပါတယ်။ input impedance မြင့်ဖို့အတွက် CC amplifier ကိုရှေ့ကနေ တဆင့် ထပ်ခံလိုက်တဲ့ အခါ အောက်မှာ ပြထားတဲ့ ပုံအတိုင်း ဖြစ်သွားပါတယ်။
base-emitter junction voltage, VBE ကို 0.7V လို့ ယူလိုက်ရင် ထရန်စစ်စတာ ၁ ရဲ့ ပုံမှန် တည်ငြိမ် base voltage က VB1= 7.28+0.7+0.7=8.68V ဖြစ်သွားပါတယ်။ သေးငယ်လွန်းတဲ့ ဘေ့စ် လျှပ်စီးကို ထည့်မစဉ်းစား ပဲ R1 နဲ့ R2 ကို တွက်လိုက်ရင် $$ V_{B1}=Vcc \times \frac{R_2}{R_1+ R_2}$$ $$ \frac{R_1}{R_2}+ 1=\frac{12}{8.68V}$$ R2=2.6 R1 လို့ ထွက်လာပါတယ်။ R1 တန်ဖိုးကို 22k လို့ ကြုံရာ ယူလိုက်မယ်ဆိုရင် R2 က 57k လို့ရပါတယ်။ အဝင် ac input voltage ကတော့ (29-23)m x 280= 1.68V peak to peak လောက်ပေးရမှာ ဖြစ်ပါတယ်။ lab ထဲမှာ ရှိတဲ့ ဟာလေးတွေနဲ့ လုပ်ကြည့်ပြီး ရလာတဲ့ prototype လေးကို အောက်မှာ ပြထားပါတယ်။

Thursday, July 19, 2012

Myanmar (Burmese) Language with XeTeX and LuaTeX

LaTeX မှာ မြန်မာစာ ကို မှန်မှန်ကန်ကန် ပေါ်ဖို့ အတွက် ဆိုရင် ယူနီကုတ် ကို သုံးလို့ရတဲ့ ဇီးတက်ခ် (XeTeX) နဲ့ လူဝါတက်ခ် (LuaTeX) တို့ကို သုံးဖို့လိုပါတယ်။ မြန်မာစာ ပေါ်ဖို့ TeX Live တို့၊ MiKTeX တို့နဲ့ တစ်ခါတည်း ပါလာတဲ့ XeTeX နဲ့ LaTeX တွေဟာ နောက်ဆုံးပေါ် ဗားရှင်းတွေ ဖြစ်ဖို့ လိုကောင်း လိုပါလိမ့်မယ်။ အယ်ဒီတာ ဆော့ဖ်ဝဲ တွေဖြစ်တဲ့ TeXmaker တို့၊ TeXstudio တို့ မှာ TeX ဖိုင်တွေကို အလွယ်တကူ သုံးရလွယ်အောင် user command တွေ သတ်မှတ် လို့ရပါတယ်။ TeXstudio မှာ ဆိုရင် အဲဒီလို သတ်မှတ်ဖို့ အတွက် Options menu ကို သွားပြီး Configure TeXstudio... ကို နှိပ်ပါ။ နောက် Commands ကို နှိပ်ပြီး PdfLaTeX အတွက် သုံးထားတဲ့ command ကို ကော်ပီ ကူးယူပါ။
အဲဒီနောက် User menu ကိုပြန်သွားပြီး User Commands -> Edit User Commands ကို နှိပ်ပြီး အစိမ်းရောင် အပေါင်း လက္ခဏာ သင်္ကေတ ကို နှိပ်ပါ။ ပြီးရင် ခုနက ကော်ပီကူးထားတဲ့ command ကို Paste လုပ်ပြီး XeTeX ကို သုံးဖို့ pdflatex ဆိုတဲ့ နေရာမှာ xelatex နဲ့ အစားထိုးပါ။ LuaTeX ကိုသုံးဖို့ အတွက်လည်း ခုနက နည်းအတိုင်း ထပ်လုပ်ပြီး lualatex နဲ့ အစားထိုးပါ။
အောက်က နမူနာ (Z1.tex) က xelatex နဲ့ရော lualatex နဲ့ပါ အလုပ်လုပ် ပါတယ်။
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Zawgyi-One}
\begin{document}
ျမန္မာစာ
\end{document}
နောက်ထပ် lua script တွေ သုံးထားတဲ့ lualatex နမူနာ က luaZ1.tex ပါ။ LuaTeX ကို Zawgyi-One ၊ Padauk ၊ Myanmar3 ၊ Myanmar MN အစရှိတဲ့ ဖောင့်တွေနဲ့ စမ်းကြည့်တဲ့ အခါ Zawgyi-One တစ်ခုပဲ လက်ရှိ ဗားရှင်း (LuaTeX, Version beta-0.70.1-2011082320) မှာ လုပ်တာကို တွေ့ပါတယ်။
XeTeX ကတော့ Zawgyi-One နဲ့ Padauk ကို ပလက်ဖောင်း အားလုံးမှာ ပေါ်အောင် လုပ်နိုင်ပြီး၊ Myanmar MN ကိုလည်း Mac OS X မှာ ပေါ်အောင် လုပ်နိုင်ပါတယ်။ ဇော်ဂျီ အတွက် ဘာမှ ပြဿနာ မရှိပေမယ့် Unicode ဖောင့်တွေဖြစ်တဲ့ Padauk အစရှိတဲ့ ဖောင့်တွေမှာတော့ renderer ကို သတ်မှတ် ပေးဖို့လိုပါတယ်။ အောက်က နမူနာမှာတော့ Renderer=Graphite ဆိုပြီး Graphite ကို renderer အနေနဲ့ သတ်မှတ်ပေးလိုက် ပါတယ်။ Myanmar MN ဖောင့် အတွက် ဆိုရင်တော့ Renderer=AAT လို့ သုံးနိုင်ပါတယ်။ နမူနာ အနေနဲ့ အောက်မှာ ပြထားတဲ့ XeFontspec.tex ကို ကြည့်နိုင်ပါတယ်။
\fontspec[Renderer=Graphite]{Padauk} အစား renderer ကို သတ်မှတ်နိုင်တဲ့ တခြားနည်း ကတော့ \font\1="Padauk/GR" \1 ပါ။ အဲဒီမှာ /GR က Graphite font renderer အတွက် ဖြစ်ပြီး၊ /AAT က ATSUI renderer (Mac OS X အတွက်သာ) အတွက် နဲ့၊ /ICU ကို သုံးရင် ICU OpenType renderer အတွက် ဖြစ်ပါတယ်။ ဒါပေမယ့် အဲဒီလို renderer သတ်မှတ်တာ က ကျွန်တော့် Windows XP နဲ့ Ubuntu Linux မှာ ရှိတဲ့ xelatex ဗားရှင်းတွေ အတွက် အလုပ် မလုပ်ဘူး ဖြစ်နေ ပါတယ်။ ကံကောင်းချင်တော့ Calmhill ရဲ့ ဘလော့ဂ် မှာ Padauk ကို ပေါ်အောင် \fontspec[Script=Myanmar]{Padauk} ကို သုံးထားတဲ့ နည်းကို တွေ့ပါတယ်။ နမူနာက XePadauk.tex ပါ။
Myanmar MN အတွက် နမူနာက XeMyanmarMN.tex ပါ။ Myanmar3 ကိုစမ်းကြည့်တာတော့ လောလောဆယ် ပလက်ဖောင်း အားလုံးမှာ မရသေး ပါဘူး။

Updated post: မြန်မာဘာသာ အတွက် LaTeX Report ပုံစံ

Friday, June 8, 2012

LaTeX Bibliography with TeXstudio

TeXstudio (အရင်နာမည် TexMakerX ၊ http://texstudio.sourceforge.net/) က LaTeX နဲ့စာရေးဖို့အတွက် ဆော့ဖ်ဝဲ အယ်ဒီတာ တစ်ခုပါ။ ပုံမှန်အားဖြင့် တော့ ပေပါ တစ်စောင် ယူလိုက်ပြီဆို သူ့အတွက် citation ကိုလဲ အဲဒီမှာပဲ BibTeX style နဲ့ အလွယ်တစ်ကူ ယူလို့ရပါတယ်။ ပြီးရင် အဲဒီရလာတဲ့ BibTeX entry ကို BibTeX database ဖိုင်တစ်ခု ဖန်တီးပြီး သိမ်းထားလို့ရပါတယ်။ BibTeX database ဖိုင်ရဲ့ extension က .bib ပါ။ TeXstudio မှာ ကိုယ့်ဟာကို BibTeX entry တစ်ခုဖန်တီးမယ် ဆိုရင်လဲ လွယ်ပါတယ်။ ဥပမာ Ref1.bib ဆိုပြီး BibTeX database ဖိုင်တစ်ခုကို ဖန်တီးပြီး menu က bibliography ကို ကလစ်နှိပ်ပါ။ နောက် ကိုယ့် ပေပါရဲ့ အမျိုးအစားကို နှိပ်လိုက်ရင် required fields တွေရော၊ optional fields တွေရော အကုန်ထည့်ပေးသွားမှာပါ။ အကယ်၍ optional fields တွေကို ဖယ်ချင်ရင်တော့ clean command ကိုနှိပ်ပြီး ရှင်းလို့ရပါတယ်။ အဲဒီထက်ပို လွယ်တာက တော့ BibTeX insert dialog ... ကို နှိပ်ပြီး ထည့််တာပါ။



New BibTeX entry ဆိုတဲ့ dialog လေးပေါ်လာရင် ကိုယ်လိုတာကို ရွေးထည့်ပြီး OK နှိပ်လိုက်ရုံပါပဲ။ စာရေးသူတွေ ရဲ့ နာမည် ကို ဖြည့်တဲ့ အခါ နာမည် တွေကြားမှာ and ဆိုတဲ့ စာလုံးနဲ့ ခြားပေးရပါမယ်။ အဲဒီ database ဖိုင်ကို ဖန်တီးပြီးရင် သူ့ကို ယူသုံးမယ့် TeX ဖိုင် တစ်ခုကို ဖန်တီးပါမယ်။ ဥပမာ TestBibTex.tex ဆိုပါတော့။ အဲဒီမှာ Ref1.bib ကို \bibliography{Ref1} ဆိုပြီး အောက်ကပုံအတိုင်း သုံးလို့ရပါတယ်။ ဒီနမူနာမှာတော့ အသုံးများတဲ့ ieeetr ဆိုတဲ့ စတိုင်ကို သုံးထားတဲ့ အတွက် အကိုးအကားတွေဟာ သူတို့ကို ကိုးကားထားတဲ့ အစဉ်အတိုင်း နံပါတ်တပ်၊ အစဉ်အတိုင်း ပေါ်လာမှာပါ။





ပုံမှန်အားဖြင့်တော့ မှန်ကန်တဲ့ output ဖိုင်တစ်ဖိုင် ထွက်လာအောင် LaTeX ကို အကြိမ်ကြိမ် run ပေးရပါတယ်။ (LaTeX ကို run ဖို့ MiKTeX ဒါမှမဟုတ် TeX Live ဆော့ဖ်ဝဲ တစ်ခုခုကို ကွန်ပျူတာထဲမှာ ထည့်ပြီးသား ရှိရပါမယ်။) ဥပမာ pdflatex ကိုသုံးပြီး run မယ်ဆိုရင်
အဆင့် ၁။ pdflatex
အဆင့် ၂။ bibtex
အဆင့် ၃။ pdflatex
အဆင့် ၄။ pdflatex
ဆိုပြီး လေးခါ run မှ ရပါတယ်။ TeXstudio မှာတော့ အဆင်ပြေတာ တစ်ခုက Quick Build လုပ်ဖို့ 'F1' တစ်ခါနှိပ် လိုက်ရုံနဲ့ နောက်ဆုံး မှန်ကန်တဲ့ output ဖိုင် ထွက်လာတဲ့ အထိ သူ့ဟာသူ လုပ်သွားတာပါ။ အကယ်၍ စာရေးသူ-ခုနှစ် ဆိုတဲ့ ပုံစံ အကိုးအကား ကို လိုချင်ရင်တော့ \usepackage{natbib} ကို အောက်မှာ ပြထားတဲ့ အတိုင်း အလွယ်တစ်ကူ သုံးနိုင်ပါတယ်။



နမူနာ ပြထားတဲ့ ဖိုင်တွေကို အောက်က လင့်ခ် တွေမှာ ဒေါင်းလုပ် လုပ်ယူနိုင်ပါတယ်။
TestBibTex.tex
TestNatbib.tex
Ref1.bib
အကိုးအကား တွေကို စီမံဖို့ တော့ ဆော့ဖ်ဝဲသုံးတာ ပိုအဆင်ပြေပြီး JabRef Reference Manager ကို သဘောကျပါတယ်။
အကိုးအကား။ http://en.wikibooks.org/wiki/LaTeX/Bibliography_Management

Wednesday, March 7, 2012

Skeleton of Image Region

ပုံရိပ် တစ်ခုရဲ့ တည်ဆောက်ပုံ ပုံသဏ္ဌာန် ကို မျဉ်းကြောင်းများနဲ့ တုတ်ချောင်းပုံ လုပ်ပြီး ကိုယ်စားပြု ဖော်ပြနိုင်ပါတယ်။ အဲဒီလို ဖော်ပြဖို့အတွက် ပုံသဏ္ဌာန် တစ်ခုကို တဖြည်းဖြည်း ပိန်ပါးသွားအောင် လုပ်နည်း တစ်ခုခု ကို သုံးလို့ရပါတယ်။ ရလာတဲ့ မျဉ်းကြောင်းများနဲ့ တုတ်ချောင်းပုံ ကို အဲဒီ ပုံရဲ့ အရိုး (skeleton) လို့ ခေါ်ပါမယ်။ ဒီနည်းဟာ စာလုံးများကို စက်က သိရှိနားလည် မှတ်မိ အောင် လုပ်တဲ့ နေရာ (optical character recognition) တွေမှာ ပဏာမ အဆင့် အနေနဲ့ အသုံးကျကောင်း ကျနိုင်ပါတယ်။ အောက်ကပုံတွေမှာ နမူနာ မူရင်းပုံနဲ့ သူ့ရဲ့ အရိုးကို ဖော်ပြထားပါတယ်.
ပုံရိပ်တစ်ခု ရဲ့ အရိုးကို နည်းအမျိုးမျိုးနဲ့ ရယူနိုင်ပြီး အဲဒီ နည်းတွေထဲက လူသိများတဲ့ နည်းနှစ်နည်းက အလယ်ဝင်ရိုးပြောင်းနည်း Medial Axis Transformation (MAT) နဲ့ နှစ်ဆင့်ပါးနည်း Two Step Thinning တို့ပါ။ MAT မှာ ပုံသဏ္ဌာန် ထဲမှာ ရှိတဲ့ အစက် တစ်စက် ချင်းစီ အတွက် သူတို့ ရဲ့ အနီးဆုံး အနားသတ် ကို လိုက်ရှာပါတယ်။ အဲဒီလို အကွာအဝေးတူ အနီးဆုံး အနားသတ် တစ်ခုမက ရှိတဲ့ အစက်ကို အရိုး လို့သတ်မှတ်ပါတယ်။ MAT ကနားလည်ဖို့ လွယ်ပေမယ့် သူ့ကိုရဖို့ တွက်ချက်မှုတွေ အများကြီး လိုပါတယ်။ သူ့ကို တွက်ဖို့ အကွာအဝေးပုံစံ ပြောင်းခြင်း (distance transform) ကို အရင် လုပ်ပါတယ်။ အကွာအဝေးပုံစံ ပြောင်းတယ်ဆိုတာ ပုံသဏ္ဌာန် ထဲမှာ ရှိတဲ့ အစက် တစ်စက် ချင်းစီ ကို အနီးဆုံး အနားသတ်အထိ အကွာအဝေးနဲ့ အစားထိုးတာပါ။ ရလာတဲ့ ပုံမှာ အနားသတ်နဲ့ နီးတဲ့ အစက်က အကွာအဝေး တန်ဖိုးနည်းတော့ အလင်းအားပျော့ ပြီး၊ အနားသတ်နဲ့ ဝေးတဲ့ အစက်က အကွာအဝေးတန်ဖိုးကြီးတော့ ပိုလင်းပါမယ်။ နောက် အစက်တစ်စက် ခြင်းစီကို ဘေးတိုက် ဒါမှမဟုတ် ဒေါင်လိုက် ကပ်ရပ် အစက်တွေနဲ့ ယှဉ်ကြည့်ပြီး အလယ်မှာ အမြင့်ဆုံး ဖြစ်နေတဲ့ အစက်တွေကို အရိုးလို့ သတ်မှတ်ပါမယ်။ နမူနာ MATLAB ကုဒ် ကို ဒီမှာ (MATeg.m) ကြည့်နိုင်ပါတယ်။ မူရင်း ပုံသဏ္ဌာန်ရယ်၊ အကွာအဝေးပုံစံ ရယ်၊ ရလာတဲ့ အရိုးရယ် ကို အောက်က ပုံတွေမှာ ကြည့်နိုင်ပါတယ်။


နှစ်ဆင့်ပါးနည်း ကတော့ MAT နဲ့ယှဉ်ရင် ပိုမြန်၊ ပိုထိရောက်ပါတယ်။ နှစ်ဆင့်ပါးနည်း က ပုံသဏ္ဌာန် တစ်ခုရဲ့ အနားတွေကို ထပ်တလဲလဲ ဖျက်သွားတာပါ။ အဲဒီလို ဖျက်တဲ့ အခါမှာ အဆုံးမှတ်တွေကို မဖျက်ပါဘူး။ တနေရာနဲ့ တနေရာ ဆက်စပ်နေတဲ့ အမှတ်တွေကို မဖျက်ပါဘူး။ ပုံသဏ္ဌာန် ထဲမှာ ရှိတဲ့ အစက် တွေကို တန်ဖိုး တစ်ရှိတယ်လို့ မှတ်ယူ မှာ ဖြစ်ပြီး နောက်ခံ အစက်တွေကို တော့ တန်ဖိုး သုည ရှိတယ် လို့ မှတ်ယူပါမယ်။ ဒီနည်းမှာ အဆင့် နှစ်ဆင့် ကို ပုံပေါ်မှာ အထပ်ထပ် အဖန်ဖန် နောက်ဆုံး မပြောင်းလဲတဲ့ အရိုး ရတဲ့အထိ သုံးသွားမှာပါ။
အပေါ်ပုံမှာ အလယ် အစက်ရဲ့ ကပ်ရပ် အစက်တွေကို အခေါ်အဝေါ်သတ်မှတ်ပုံကို ပြထားပါတယ်။ ပထမ အဆင့်မှာ အစက် p1 ကို အောက်က အချက်လေးချက်နဲ့ ကိုက်ညီရင် ဖျက်ပစ် ပါမယ်။ (a) 2 ≤ N(p1) ≤ 6 (b) T(p1) = 1 (c) p2.p4.p6 = 0 (d) p4.p6.p8 = 0 အဲဒီမှာ N(p1) ဆိုတာက p1 နဲ့ ကပ်ရပ် အစက်တွေထဲက သုညမဟုတ်တဲ့ အစက် အရေအတွက်ဖြစ်ပြီး၊ T(p1) ဆိုတာက p2, p3, ... , p8, p9, p2 ဆိုတဲ့ အစီအစဉ်အတိုင်း ကြည့်သွားရင် ၀ ကနေ ၁ ကို ပြောင်းသွားတဲ့ အရေ အတွက်ပါ။ ဒုတိယ အဆင့်မှာ (a) နဲ့ (b) ကအတူတူပါပဲ။ ဒါပေမယ့် (c) နဲ့ (d) ကတော့ အောက်မှာ ပြထားတဲ့ အတိုင်း ပြောင်းသွားပါတယ်။ (c') p2.p4.p8= 0 (d') p2.p6.p8= 0 ပထမ အဆင့် ကို ပုံသဏ္ဌာန်တစ်ခုရဲ့ အနားသတ်ပေါ်မှာရှိတဲ့ အစက်တိုင်းအတွက် စဉ်းစားပါမယ်။ အချက် (a) ကနေ (d) ထဲက တစ်ချက်ချက် မကိုက်တာနဲ့ အဲဒီ အစက်ကို မဖျက်တော့ ပါဘူး။ အချက်အားလုံး ကိုက်ညီရင် တော့ ဖျက်ဖို့ အတွက် မှတ်ထားလိုက် ပါမယ်။ ဒါပေမယ့် အဲဒီ အစက် ကို အနားသတ် ပေါ်မှာရှိတဲ့ အစက် အားလုံးကို စဉ်းစားလို့ မပြီးမချင်း တကယ် မဖျက်သေးပါဘူး။ အဲဒီလို နောက်ကျမှ ဖျက်တဲ့ အတွက် တစ်ခြား အစက် တွေကို စဉ်းစား နေတဲ့ အချိန်မှာ ပုံသဏ္ဌာန် ပြောင်းသွားတာကို ကာကွယ်နိုင်ပါတယ်။ ပထမ အဆင့် ကို အနားသတ်ပေါ်မှာရှိတဲ့ အစက် အားလုံးကို စဉ်းစာပြီးပြီဆိုတာနဲ့ ဖျက်ဖို့မှတ်ထားတဲ့ အစက် အားလုံးကို ဖျက်လိုက်ပါမယ်။ (အစက်ရဲ့ တန်ဖိုးကို သုည ပြောင်းလိုက်တာပါ။) ရလာတဲ့ ရလဒ် ပေါ်မှာ ဒုတိယ အဆင့် ကိုလဲ ပထမအဆင့် အတိုင်း ထပ်သုံးပါမယ်။ ဒီ အဆင့်နှစ်ဆင့်ကို အကြိမ်ကြိမ် အဖန်ဖန် ပြန်သုံးမှာ ဖြစ်ပြီး အကြိမ်တစ်ကြိမ်တိုင်းမှာ အောက်က လုပ်ငန်းလေးခုကို လုပ်ပါတယ်။ (၁) ပထမ အဆင့်ကို သုံးပြီး ဖျက်ရမယ့် အစက်တွေကို မှတ်ပါတယ်။ (၂) မှတ်ထားတဲ့ အစက်တွေကို ဖျက်ပါတယ်။ (၃) ဒုတိယ အဆင့်ကို သုံးပြီး ဖျက်ရမယ့် အစက်တွေကို မှတ်ပါတယ်။ (၄) မှတ်ထားတဲ့ အစက်တွေကို ဖျက်ပါတယ်။ ဒီအဆင့်တွေကို သုံးပြီး ပါးပါးသွားရင်း နောက်ဆုံး ဖျက်စရာ အစက် မကျန်တော့ဘူးဆိုရင် ရပ်လိုက်ပါမယ်။ ရလာတဲ့ ပုံက အရိုးဖြစ်ပါတယ်။ အချက် (c) p2.p4.p6 = 0 နဲ့ (d) p4.p6.p8 = 0 ကို တစ်ခါထဲ ပေါင်းပြီး (p4 = 0 or p6= 0) or (p2=0 and p8=0) လို့ တန်းစစ်လို့လဲရပါတယ်။ အဲဒီလိုပဲ (c') နဲ့ (d') ကိုလဲ (p2=0 or p8=0) or (p4=0 and p6=0) လို့ ပေါင်းစစ်လို့ ရပါတယ်။ Two Step Thinning အတွက်နမူနာ MATLAB ကုဒ်ကို ဒီမှာ (TSTeg.m) တွေ့နိုင်ပါတယ်။
ရှေ့မှာ ဖော်ပြခဲ့တဲ့ ကုဒ်တွေက နည်းတွေကိုနားလည်ဖို့ ရယ်၊ တစ်ခြား ပရိုဂရမ် ဘာသာတွေနဲ့ ပြန်ရေးဖို့ရယ် အတွက်တော့ အထောက် အကူ ဖြစ်မယ်ထင်ပါတယ်။ တကယ်တော့ MATLAB မှာ bwmorph ဆိုတဲ့ ဖန်ရှင်ကို သုံးလိုက်တာနဲ့ အရိုးကို တန်းရနိုင်ပါတယ်။ sk=bwmorph(bwImg,'skel',Inf); အဲဒီလိုခိုင်းလိုက်ရင် ထွက်လာတဲ့ ရလဒ် ကို အောက်မှာ ပြထားပါတယ်။
Reference: Rafael C. Gonzalez, Richard E. Woods, Steven L. Eddins, "Digital Image Processing Using MATLAB", Second Edition, Mc Graw Hill (Asia), 2011.

Friday, December 30, 2011

Testing fsolve and anonymous function

တစ်ခါက coefficient တွေ ပြောင်းလဲ နေတဲ့ equation တွေကို ဖြေရှင်းဖို့ လို လာပါတယ်။ ဒါနဲ့ MatLab ဖန်ရှင်တစ်ခု ဖြစ်တဲ့ fsolve ရယ်၊ function handle နဲ့ anonymous function တွေကို သုံးပြီး စမ်းကြည့်ထားတာပါ။
s=[3 7 11];
d=[1 3 5];
%ans= (2,1), (5,2), (8,3)
for i=1:3
x0 = [-5; -5]; % Make a starting guess at the solution
myfun =@(x) [x(1) + x(2) - s(i);
x(1) - x(2) - d(i)];
[x,fval] = fsolve(myfun,x0)  % Call 
end

Friday, December 16, 2011

Hand, Foot and Mouth Disease (HFMD)

အရင် တပါတ် လောက်က သမီးရဲ့ လက် နဲ့ ခြေ မှာ မိတ်လို အဖု နဲ့ အနီပြင် တွေ တွေ့လို့ ဆရာဝန် သွားပြတော့ HFMD ဒါမှမဟုတ် တုပ်ကွေး ကြောင့် ဖြစ်နိုင်တယ်လို့ ပြောပါတယ်။ နောက်တော့ သမီး ဖြစ်တာ တုပ်ကွေးပါ။ HFMD ကိုတော့ မကြားဘူးလို့ KK hospital က လက်ကမ်းစာရွက် မှာ တွေ့တာလေးကို ဖတ် ပြီး ဒီမှာ ပြန်ရေးထားပါတယ်။

မေး။ Hand, Foot and Mouth Diease (HFMD) ဆိုတာ ဘာလဲ?
ဖြေ။ အန်တရိုဗိုင်းရပ်စ် (Enterovirus) လို့ခေါ်တဲ့ ဗိုင်းရပ်စ် ပိုးတွေကြောင့် ဖြစ်တဲ့ ကူးစက်ရောဂါတစ်မျိုးပါ။ အသက် အရွယ် မရွေး ဖြစ်နိုင်ပြီး အထူးသဖြင့် မူကြို အရွယ် ကလေးတွေမှာ ဖြစ်တတ်ပါတယ်။ ဒီ ရောဂါဟာ ရှားပါးတဲ့ ရောဂါ အသစ် မဟုတ် ပါဘူး။ ရှေးကတည်းက ရှိခဲ့ပြီး စင်ကာပူ မှာ တွေ့ရတတ်တဲ့ ရောဂါတစ်မျိုးပါ။

မေး။ HFMD ဖြစ် မဖြစ် ဘယ်လို သိနိုင် မလဲ?
ဖြေ။ HFMD ဖြစ် တဲ့ ကလေးမှာ မိတ်လို၊ အရေကြည်ဖုလို၊ အနီကွက်တွေ လက်၊ခြေ နဲ့ တင်ပါး မှာ ထလာပါမယ်။ ပါးစပ်ထဲမှာ အနာပေါက် မယ်။ ဖျားပါ မယ်။ ဒါ့အပြင် လည်ချောင်းနာတာ၊ နှာရည်ယိုတာ၊ အန်တာ၊ ဝမ်းလျှောတာ နဲ့ မောပန်းတာတွေ လည်း ဖြစ်နိုင်ပါတယ်။ ကလေးကို ဆေးခန်း၊ မိသားစု ဆရာဝန် တို့နဲ့ ပြနိုင်ပါတယ်။ ဆေးရုံ အရေးပေါ် ဌာန ကို သွားဖို့ မလိုအပ်ပါ။

မေး။ ကလေးကို HFMD ဘယ်လို ကူးတာလဲ?
ဖြေ။ နှာရည်၊ တံတွေး၊ ဝမ်း၊ အရည်ကြည်ဖုက အရည် များကို တိုက်ရိုက် ထိခြင်းအား ဖြင့် အလွယ်တကူ ကူးနိုင်ပါတယ်။

မေး။ ဒီရောဂါက ပြင်းထန်လား?
ဖြေ။ ရောဂါဟာ သာမန်အားဖြင့် မပြင်းထန်ပါဘူး။ ကလေး အများစုဟာ တစ်ပါတ် လောက်ကြာရင် သက်သာ သွားပါတယ်။ ရှားရှားပါးပါး မှသာ တွေ့ရခဲတဲ့ ဗိုင်းရပ် ဗီဇကွဲတွေမှာ ပဲ ဦးနှောက် နဲ့ နှလုံး ရောင်တာ အစရှိတဲ့ နောက်ဆက်တွဲ ရောဂါ တွေ ဖြစ်တတ် ပါတယ်။

မေး။ HFMD က ပြုစုကုသ နိုင် ပါသလား?
ဖြေ။ တိကျတဲ့ ပြုစုကုသ မှု သတ်သတ်မှတ်မှတ် မရှိပါဘူး။ ရောဂါ လက္ခဏာ က များသော အားဖြင့် မပြင်းထန်ပဲ ကလေးရဲ့ ကိုယ်ခံအားစနစ်က ဗိုင်းရပ်စ် တွေကို တိုက်ထုတ် တဲ့အခါ များသောအားဖြင့် ပြန်ကောင်း သွားကြပါတယ်။ ဆရာဝန်က အဖျား မကြီးအောင် ဆေး ပေးပါ မယ်။ ကလေးကို တတ်နိုင် သမျှ အရည် များများ တိုက် သင့် ပါတယ်။ အစားအစာ ကို မျိုချရတာ နာကျင် နိုင်တာကြောင့် ကလေးဟာ အစာ စားချင်စိတ် နည်းနေနိုင်ပါတယ်။ ဒါပေမယ့် ရေဓာတ်ခန်းခြောက် ခြင်း မဖြစ်အောင် ကလေးက လုံလောက်တဲ့ အရည် သောက်ဖို့ သေချာအောင် ဂရုစိုက်ပေးပါ။ ကလေးကို သစ်သီးရေ၊ ထမင်းရည်၊ ဘာလီရည် အစရှိတဲ့ အရည်တစ်မျိုးမျိုး ကို နည်းနည်းချင်း (၁၀ ကနေ ၃၀ မီလီလီတာ လောက်) ကို နာရီဝက်ခြား တစ်ခါလောက် တစ်နေ့လုံး တိုက်ကျွေး ပေးပါ။ ဒါက ဗိုင်းရပ်စ် ကြောင့် ဖြစ်ပြီး ဘက်တီးရီးယား ကြောင့် ဖြစ်တာ မဟုတ်တဲ့ အတွက် အန်တီဗိုင်အိုတစ် (Antibiotics) တွေက ထိရောက်ထက်မြက်မှု မရှိပါဘူး။

မေး။ အန်တရိုဗိုင်းရပ်စ် (Enterovirus) တစ်ခါဖြစ်ဘူးရင် ဒီရောဂါကိုပြီးတဲ့ ခံနိုင်ရည်ရှိသွားပြီလား?
ဖြေ။ အဲဒီဖြစ်တဲ့ ဗိုင်းရပ်စ် အတွက်တော့ သီးသန့် ခံနိုင်ရည် ရှိသွားပါတယ်။ ဒါပေမယ့် အဲဒီ အန်တရိုဗိုင်းရပ်စ် (Enterovirus) အုပ်စု ထဲက ပဲ မတူတဲ့ ဗိုင်းရပ် ဗီဇကွဲ တွေကနေ ထပ်ဖြစ်ကောင်း ဖြစ်နိုင် ပါတယ်။

မေး။ ဒီရောဂါ မပြန့် ပွားအောင် ဘာလုပ်လို့ရလဲ?
ဖြေ။ ရောဂါဖြစ်နေတဲ့ ကလေးဟာ မပျောက်မချင်း ကလေးထိန်းကျောင်း၊ ကျောင်း၊ လူထူထပ်တဲ့ နေရာတွေကို မသွား ရပါဘူး။ တကိုယ်ရည် သန့်ရှင်းမှု ကို ဂရုစိုက်သင့်ပါတယ်။ ရောဂါရှိတဲ့ ကလေးကို ထိပြီးတဲ့အခါ၊ ကလေး ခါးတောင်းကျိုက်ကို လဲပေး ပြီးတဲ့အခါ၊ နဲ့ အစားအစာ များကို မကိုင်ခင်မှာ လက်ဆေးပါ။ ရောဂါဖြစ်နေတဲ့ ကလေး ကိုင်ထားတဲ့ ကစား စရာတွေ၊ စာအုပ်တွေ၊ ပန်းကန်ခွက်ယောက်တွေ၊ ပဝါ၊ အဝတ်အစားနဲ့ အခြား အသုံးအဆောင်များကို အခြား ကလေးများ မထိစေရပါဘူး။

မေး။ HFMD ဖြစ်နေတဲ့ ကလေးကို ဘယ်လို အချိန်မျိုးမှာ ဆေးရုံ အရေးပေါ် ဌာန ကို ခေါ်သွားသင့် သလဲ?
ဖြေ။ HFMD ဖြစ် တဲ့ ကလေး အများစု က အဖျားရှိပေမယ့် နေကောင်း တက်ကြွ ကြပါတယ်။ အများစုဟာ ဆေးခန်း၊ မိသားစု ဆရာဝန် တို့နဲ့တင် လုံလောက် အဆင်ပြေပါတယ်။ ဒါပေမယ့် အောက်ပါ ပြဿနာ များ ဖြစ်ပေါ်လာရင်တော့ ဆေးရုံ အရေးပေါ် ဌာန ကို ခေါ်သွားသင့် ပါတယ်။
၁။ ကလေးက အရည် သောက်တာ အရမ်းနည်းနေမယ်၊ မျိုမချ နိုင်ဘူး၊ တောက်လျှောက် အန်နေမယ် ဆိုရင်။
၂။ ကလေးက လျှာက ခြောက်နေမယ်၊ ဆီးသွားတာ နည်းနေတယ် (ရေဓာတ်ခန်းခြောက်ခြင်း) ဆိုရင်။
၃။ ကလေးက နုံးနေမယ်၊ ငိုက်နေမယ်၊ စိတ်တို စိတ်ဆိုးနေမယ်၊ မနားတမ်း ငိုနေမယ်၊ စိတ်ရှုပ်ထွေး စိတ်လွတ် နေမယ် ဆိုရင်။
၄။ တက် မယ်ဆိုရင်။
၅။ အသက်ရှုရ ခက်ခဲနေတယ် ဆိုရင်။
၆။ ကလေးက ဖြူဖပ်ဖြူရော်၊ ဖျော့တော့၊ ပြာနှမ်း လာတယ်ဆိုရင်။
၇။ ကလေးက ခေါင်းကိုက်တာ၊ ခေါင်းမူးတာ၊ အုန်းလွဲတာ တွေ ရှိတယ်ဆိုရင်။

Geometric Template Matching in LabVIEW

NI ရဲ့ IMAQ Vision Concepts Manual ထဲမှာ geometric template matching ကို အောက်ပါ အတိုင်း ဖော်ပြထားပါတယ်။ Geometric matching က ကင်မရာ က ဖမ်းယူ ရရှိတဲ့ ပုံမှာ ကိုယ်ရှာ ဖို့ သတ်မှတ်ထားတဲ့ အရာ ဘယ်နားမှာ ရှိနေလဲ ဆိုတာ ရှာပေး ပေး ပါတယ်။ Geometric matching က ဘယ်လို ပုံသဏ္ဍာန် ဆိုတာ သတ်မှတ်ထားတဲ့ အချက်အလက် ပေါ် မူတည်ပြီး ပုံစံပြား ကို ရှာပါတယ်။ Geometric matching ကို သုံးဖို့ အတွက် ရှာလိုတဲ့ ပစ္စည်း ကို ကိုယ်စား ပြုတဲ့ ပုံစံပြား တစ်ခုကို ဖန်တီးရ ပါတယ်။ စက်ရဲ့ အမြင်အနေနဲ့ အသုံးချ တဲ့ အခါ ပုံရိပ် တစ်ခု ချင်းစီမှာ ပုံစံပြား နဲ့ ကိုက်ညီမှု ရှိ တဲ့ နေရာတွေမှာ ဘယ်လောက်ထိ ကိုက်ညီမှု ရှိလဲ ဆိုတာ အမှတ်တွေ ပေးပါတယ်။ Geometric matching က အလင်းအမှောင် ပြောင်းလဲခြင်း၊ ပုံဝါးနေခြင်း၊ ပုံရိပ် မကြည်လင်ခြင်း၊ တဝက်တပြက် ဖုံးကွယ်နေခြင်း၊ အနေအထား နဲ့ အရွယ်အစား မတူခြင်း တွေ ရှိနေရင် တောင် ရှာ လိုတဲ့ ပုံစံပြား ရှိတဲ့ နေရာတွေ ကို ရှာပေးနိုင်ပါတယ်။ LabVIEW ထဲက IMAQ Find CoordSys (Pattern) 2 အစရှိတဲ့ VI တွေက ပုံစံပြား ကို ရှာဖို့ သုံးနိုင်ပါတယ်။ ပုံစံပြား ကို အောက်မှာ ဖော်ပြထားတဲ့ အဆင့်တွေ အတိုင်း ဖန်တီး နိုင်ပါတယ်။
Template Editor ကို Start -> All Programs -> National Instruments -> Vision -> Template Editor မှာဖွင့်ပါ။ File menu->New Template... ကိုနှိပ်ပါ။ Geometric Matching Template (Edge Based) ကိုရွေးပြီး ဖန်တီးမယ့် ပုံစံပြား ပါတဲ့ ပုံရိပ် ကို သတ်မှတ်ပေးပါ။ Select Template Region ဆိုတဲ့ tab မှာ ပုံစံပြား ဖန်တီးမယ့် နေရာကို သတ်မှတ်ပါ။ ဥပမာ အားဖြင့် (200,300) ကနေ (232,332) ထိ mouse ကို ဖိဆွဲ ပြီး သတ်မှတ်နိုင်ပါတယ်။ ပြီးနောက် မှတ်ထားတဲ့ နေရာကို ကိုယ်လိုချင်တဲ့ နေရာ ရောက်အောင် ပြန်ရွေ့နိုင်ပါတယ်။ Define curves ဆိုတဲ့ tab မှာ ပုံစံပြား ရဲ့ အနားသတ် ပုံစံနဲ့ ပတ်သက် တဲ့ အချက်တွေ ကို သတ်မှတ်ပါ။ ဥပမာ အားဖြင့် Extraction mode ကို normal၊ Edge Threshold ကို 32၊ Edge Filter size ကို Fine၊ Minimum Length ကို 5၊ Row Search Step Size ကို 1 နဲ့ Column Search Step size ကို 1 အစရှိသဖြင့် သတ်မှတ် နိုင်ပါတယ်။ Customize Scoring နဲ့ Specify Match Options tab တွေကိုတော့ နဂို အတိုင်း ထားနိုင်ပါတယ်။ File -> Save Template... ကိုနှိပ်ပြီး ပုံစံပြား ကို သိမ်းပါ။
နမူနာ အနေနဲ့ ဖန်တီးထားတဲ့ VI တွေကို

Geometric Template Matching on GitHub

မှာ ကြည့်နိုင်ပါတယ်။ VI အဝင် တွေ အတွက် သတ်မှတ်ခြင်း တွေကို အောက်မှာ ပြထားပါတယ်။