본문으로 바로가기

본 강좌에 사용되는 MATLAB은 버젼7.9.0 (R2009b)을 대상으로 합니다.

mat 화일 읽기 !

MATLAB에서 데이터만 저장하는 화일을 mat화일이라고 합니다. 다루는 데이터의 등치가 큰 경우, 이 mat화일을 잘 활용하면 꽤 유용합니다.

Current Folder에서 운하는 mat화일을 더블클릭하거나

load('경로\화일명.mat')

으로 읽어오면 됩니다. 

이렇게 하면, work space에 

mat화일의 내용이 읽혀있음을 확인할 수 있습니다. 위 mat 화일은

matlab.mat

입니다. 뭐 관심없는 분은 상관없지만, 위 mat화일은 저희가 직접 테스트한 화일로

1열 : 가속도센서에서 추출한 각도

2열 : 자이로센서에서 추출한 각속도

3열 : 엔코더에서 추출한 각도

입니다. 단지 설명을 위한 것이니 실험환경을 설명드릴 필요는 없을 것 같구요.^^. DSP에서 시리얼통신으로 데이터를 가져온 것인데, 샘플링타임은 10ms입니다.

행렬에서 콜론( : ) 연산자 !

이전 강의때 콜론연산자에 대해 이야기 했는데요. 벡터나 행렬에서는 이 콜론 연산자가 재미있는 역활을 합니다. 

위를 보시면, AccAng라는 변수에 아까 읽은 mat화일의 1열을 선택한 것입니다. 물론 mat화일을 저장할때, 저렇게 변수명을 각각 적어줄 수 있지만, 콜론연산자에 대해 이야기도할 겸해서요^^. 

이렇게 data(1:5,1)이라고 명령을 주면 1열의 1행부터 5행까지를 의미합니다. 

위 코드를 한번 보죠. 5행까지는 방금설명을 했구요. 7행은 변수로 샘플링타임(ts)을 10ms로 저장하고, 이제 시간축을 만들어내는 것이 9행입니다. 9행의 의미는 0초부터 0.01초의 간격으로 실험이 끝난 시각까지 시간을 만들어 내는 것입니다. length라는 명령어는 해당 벡터의 크기를 잡아줍니다. 그리고, -1 을 한 것은 0부터 시작해서 그렇구요. /100이야 당연히 ms단위로 만들어 주기 위해서지요^^. 위 코드를 다 실행하면

work space에 위와 같이 나타나야 합니다.

다중 그래프 표현 !

저렇게만 입력하면

위와 같은 그래프나 나타나는데요. (물론 빨간색 글씨는 없어요). subplot이라는 명령어로 한 figure에서 다중 그래프를 표현할 수 있습니다.

subplot(X, Y, N)

의 문법을 가지는데요. X는 위 그림에서 보면 행의 수 즉, 3이 되구요. Y는 열의 수로 2가니다. N은 순번이에요. 코드상에 빨간박스가 쳐져있는 번호가 위 그림의 번호를 의미합니다. 그러면 아까 읽었던 matlab.mat 화일을 가지고 다중 그래프를 한번 그려보죠.

load('matlab.mat')

AccAng = data(:,1)*180/pi;
GyroVel = data(:,2)*0.007*180/pi;
EncAng = data(:,3);

ts = 0.01;

t = 0:ts:(length(EncAng)-1)/100;

DiffEnc = [0; diff(EncAng)/ts];

figure
subplot(4,1,1);
    plot(t, AccAng)
    title('Angle using Accelerometer');
    ylabel('degree')
subplot(4,1,2);
    plot(t, GyroVel)
    title('Angular velocity using Gyro');
    ylabel('degree/sec')
subplot(4,1,3);
    plot(t, EncAng)
    title('Angle using Encoder');
    ylabel('degree')
subplot(4,1,4);
    plot(t, DiffEnc)
    title('Angle using Encoder');
    ylabel('degree/sec')
    xlabel('sec')

위 코드의 실행결과를 보기전에 11번행은 코드내의 변수 EncAng의 차분을 계산하는 루틴입니다. 

위 그림이 실행된 결과입니다. 

3차원 그래프 !

MATLAB의 다양한 그래프 출력 기능들 중 특별한 것들을 그저 간단히 한번 보겠습니다. 그 전에 테스트를 위해 데이터를 임의로 만들 필요가 있겠네요.

위 코드에 meshgrid라는 명령어는 일정간격을 가지는 격자형태의 좌표를 생성해 줍니다. 위 실행결과는 (-1, -1), (-0.5, -1), (0, -1) ... 이렇게 좌표를 생성한 것입니다.

위 형태처럼 Z축상의 데이터를 임의로 생성했습니다. 뭐 일종의 반구형태라고 해두죠^^. 그리고 mesh 명령어로 X,Y,Z 좌표를 다 주면

위 그림을 얻을 수 있습니다.

위에 보이듯이, surf 명령을 사용하면

이런 그림을 얻을 수 있구요.

보통 출력물을 종이로 인쇄하는 경우는 3D가 사실 좀 불편할 때도 있지요. 흔히 등위선이라고 부르는 contour가 이때는 적합합니다.

위 그림처럼 말이죠. contour는 등위선에 대한 주석이 필수 인데요. 그 명령이 clabel입니다.

위와 같이 잡아주는 거죠. 그러면,

 

이렇게 만들어 줍니다. 마지막으로

위와 같이 surfc라는 명령어는

 

저렇게 surf명령어와 같은 결과를 가지면서 X-Y 평면상에 등위선을 같이 그려줍니다.

MATLAB 02. 기초 연산 법 및 그래픽 출력 02.pdf

신고