2012년 2월 23일 목요일

모스부호(Morse code)와 Tip



간만에 블로그를 올린다.

이번에는 직접 제작한 매트랩 프로그램과 알면 유용한 매트랩 명령어에 대하여 알아보자!



그러기에 앞서, 항상 느끼는 것이지만,,,

매트랩은 공대생들에게 쉽고 유용한 필수도구라고 생각이든다.

짧은코딩으로, 쉽게 목적을 달성할 수 있는지 미리 살필 수 있고, 원리를 파악하기도 쉽다.

하드웨어랑 연결하고 조작도 쉬운것 같은데,,, 아직은 잘 모르겠다.

분명한것은 공부해야할 것들이 무궁무진하게 많고,

쉽게 코딩해서 강력한 기능을 맘대로 사용할 수 있다는 점이다.

수학과 공학 지식의 축적으로 이루어진 거대한 탑...^^

너무 높고, 방대해서 한 사람의 노력으로는 다 이해하기 어려운,,,

아무튼, 멋진 공학의 기초 도구이가 될것이다!ㅎ



그럼 이제, K5 자동차 광고에 이용해서 고급스러움과 신비스러움을 더 해줬던

모스부호의 세계로 빠져봅시다~

아래 광고의 '뚜~ 뚜 뚜~ 뚜 뚜 뚜 뚜 뚜' 의 세련된 음은

모스부호로써  'K5' 를 연속해서 가르키고 있다.


 


아래코드는 자작한 모스부호생성, 모스부호분석하여 변환하는 프로그램이다.</><>

아직 wave 파일 분석은 일반적이지 못해 좀더 수정해 볼 생각이다.



table={'a' '.-';
'b' '-...';
'c' '-.-.';
'd' '-..';
'e' '.';
'f' '..-.';
'g' '--.';
'h' '....';
'i' '..';
'j' '.---';
'k' '-.-';
'l' '.-..';
'm' '--';
'n' '-.';
'o' '---';
'p' '.--.';
'q' '--.-';
'r' '.-.';
's' '...';
't' '-';
'u' '..-';
'v' '...-';
'w' '.--';
'x' '-..-';
'y' '-.--';
'z' '--..';

'1' '.----';
'2' '..---';
'3' '...--';
'4' '....-';
'5' '.....';
'6' '-....';
'7' '--...';
'8' '---..';
'9' '----.';
'0' '-----'};

code=[];
c=input('문자를 입력해주세요!\n', 's'); c=lower(c);
for i=1:length(c)
for j=1:length(table)
if strcmp(c(i), table{j,1}), code=[code table{j,2}]; end
end
code=[code ' '];
end

fs=8000;
l=0.1;
dot_t=0:1/fs:l;      %
dash_t=0:1/fs:3*l;   % -
dot=sin(2*pi*1812.5*dot_t);
dash=sin(2*pi*1812.5*dash_t);
space=zeros(1,length(dot));
 

code
morse=[];
for i=1:length(code)
if strcmp(code(i),'.')
morse=[morse dot];
elseif strcmp(code(i),'-')
morse=[morse dash];
else
morse=[morse space space];
end
morse=[morse space];
end
sound(morse,fs)
% wavwrite(morse,fs,16, c)


% morese=wavread(c)
ev=(abs(hilbert(morse))>0.5);
% s(t)=Re[s_hat(t)·exp(jwt)]=si(t)cos(wt)-sq(t)sin(wt)  ,  s_hat(t)=si(t)+j·sq(t)
evs=downsample(ev,fs*l/8);
re=[]; k=1;
while k~=length(evs)
if length(evs)>=k+23 & sum(evs(k:k+23))==24, re=[re '-']; k=k+24;
elseif length(evs)>=k+23 & sum(evs(k:k+23))==0, re=[re ' ']; k=k+24;
elseif length(evs)>=k+7 & sum(evs(k:k+7))==8, re=[re '.']; k=k+8;
end
k=k+1;
end

id=[1 strfind(re, ' ')+1];
rec=[]; i=1; j=1;
for i=1:length(id)-1
for j=1:length(table)
if strcmp(re(id(i):id(i+1)-2), table{j,2}), rec=[rec table{j,1}]; end
end
end
upper(rec)



별건아니지만, hello world의 순수함으로 만들고, 뿌듯함을 느낀다.ㅎㅎ

다음은 잘 몰랐지만, 알고나면 굉장히 유용한 matlab의 주요한 기능을 살펴보자!



%-----------------------------------------------
% Create a new AVI file
%-----------------------------------------------
   t = linspace(0,2.5*pi,40);
       fact = 10*sin(t);
       fig=figure;
       aviobj = avifile('example.avi')
       [x,y,z] = peaks;
       for k=1:length(fact)
           h = surf(x,y,fact(k)*z);
           axis([-3 3 -3 3 -80 80])
           axis off
           caxis([-90 90])
           F = getframe(fig);
           aviobj = addframe(aviobj,F);
       end
       close(fig)
       aviobj = close(aviobj);
%-----------------------------------------------

%-----------------------------------------------
% Display wait bar
%-----------------------------------------------
h = waitbar(0,'Please wait...');
        for i=1:1000,
            % computation here %
            waitbar(i/1000,h)
        end
%-----------------------------------------------


 
%-----------------------------------------------
% Display legend
%-----------------------------------------------
x = 0:.2:12;
        plot(x,bessel(1,x),x,bessel(2,x),x,bessel(3,x));
        legend('First','Second','Third');
        legend('First','Second','Third','Location','NorthEastOutside')
%-----------------------------------------------


 

%-----------------------------------------------
% meshgrid, surf, contour
%-----------------------------------------------

[X,Y] = meshgrid(-1:.1:1);
        Z = 1-(X.^2 + Y.^2);
        surf(X,Y,Z)
        surfc(X,Y,Z)
[C, h]=contour(X, Y, Z);
clabel(C, h)
save('f.mat', 'X', 'Y', 'Z');
load('f.mat')
%-----------------------------------------------

 
%-----------------------------------------------
% Record and play back 2 seconds of single audio sampled at 8 kHz
%-----------------------------------------------
        Fs = 8000;
        y  = wavrecord(2*Fs, Fs, 'Single');
        wavplay(y, Fs);
%-----------------------------------------------


%-----------------------------------------------
% Calendar
%-----------------------------------------------
calendar(date)
%-----------------------------------------------

 
%-----------------------------------------------
% Capture
%-----------------------------------------------
vid = videoinput('winvideo', 1, 'YUY2_160x120');
src = getselectedsource(vid);
vid.FramesPerTrigger = 1;
start(vid);
vid.ReturnedColorspace = 'rgb';
nicelcw = getdata(vid);
imshow(nicelcw);
%-----------------------------------------------

 
 
%-----------------------------------------------
% Font color
%-----------------------------------------------
a='test';
text(1,1,a,'color','r')
%-----------------------------------------------




이상,,, 블로그에 업로드하기까지 오랜기간이 걸렸다. 그동안 항상 맘에 있었지만,,,

게을렀다고 할까?!ㅎ

한편으로는 허접한 블로그를 업로드하기위해, 나는 지난날을 그렇게 끙끙댔나보다~



올해,,, 만학도로 대학원을 입학했다.

몇일해본 대학원은 해주는 것을 받아먹는게 아니라,

노력하는 만큼 얻어가는 곳이라는 느낌이 확 든다.

공부해서,,, 졸업 쯔음엔 떳떳하고 멋있게 내 논문 발표할 수 있으면 좋겠다^^

그리고 좋은 블로그를 게시하여,

디지털통신 전공생의 가려운 부분을 박박 긁어주고 싶고, 지식도 나누고 싶다.

나 자신을 위하여 파이팅~!!ㅎ