Simulink 에서 소스데이터를 발생시키는 방법은 다양하게 있겠지만, 덤프 받은 데이터 등을 사용할 때 From/To workspace 블록을 주로 사용합니다.
From workspace 블록은 말 그대로 workspace 상의 변수를 simulink 상으로 불러 오는 것을 말하고 ~ To workspace블록은 반대로 Simulink 상에서 MATLAB workspace 로 값을 내보내는 것을 말하죠~
아래 예는 간단하게 Fixed step solver 에서 간단하게 Sin, cosine 값을 읽어 들여서 두 배 해서 a 라는 변수로 내보내는 예인데요.
From Workspace 창을 열어서 읽어보면 아시겠지만, 1차원 데이터에 대해서는 matrix 형태로 읽어 들여도 되지만, Multi-dimentsion 신호의 경우에는 구조체의 형태로 읽어 들여야 합니다.
다음과 같이 sin, cosine 값을 m 파일로 만들고 실행 시켜서 workspace 에 변수가 생성 되도록 합니다.
t=linspace(0,2*pi,100);
y=sin(t);
y2=cos(t);
time_v=0.1*[0:length(y)-1]; % 시간
% 구조체 부분
sin_v2.time= time_v; % time
sin_v2.signals.values=[y(:) y2(:)]; % sin,cosine 신호
sin_v2.signals.dimensions=2; % 2 차원
그 담에 아래 그림처럼 From Workspace 블록을 설정해 줬습니다. Extrapolation 으로 설정 할 때는 intrerpolate data 부분에 꼭 체크를 해야 합니다. 그리고 위 코드에서 신호 구조체를 만들 때 신호의 시간을 설정 해줘야 에러가 안 납니다.
To workspace 블록은 간단하게 아래 그림처럼 설정했구요.
이제 결과로 나온 a 변수를 command 창에서 그려보면 아래 그림처럼 나옵니다. 신호의 맨 끝의 두 점을 이용하여 extrapolation 을 하기 때문에 발산하는 형태의 그림이 나오게 되죠~
그럼 이제 From workspace 블록을 Cyclic repetition 으로 설정해 볼까요? Cyclic repetition으로 설정 할 때는 일단 interpolate data 의 체크를 해제 해 줘야 합니다. 그런데 이 상태에서는 아래와 같은 에러 메시지를 받게 됩니다.
잘 읽어보면 아시겠지만, 구조체의 시간 field 를 empty time vector로 설정하라고 나옵니다.
즉 위 코드에서 time field 를 다음과 같이 고친 다음에 Cyclic repetition 옵션으로 실행 시켜야 에러가 나지 않습니다.
sin_v2.time= []; % time
요렇게 고치고~ 실행 시킨 후에 command 창에서 그려 보면 아래와 같은 그래프를 얻을 수가 있습니다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB log 저장하기 diary (0) | 2012.06.16 |
---|---|
MATLAB Harmonographs (0) | 2012.06.11 |
MATLAB MAP data structure (0) | 2012.06.10 |
MATLAB Fast DCT(Discrete cosine transform) algorithm (0) | 2012.05.29 |
MATLAB Fractal, Mandelbrot (만델브로) 집합의 아름다움..... (0) | 2012.05.25 |
MATLAB Coil Spring (0) | 2012.05.11 |
MATLAB Euler's formula (0) | 2012.05.01 |
MATLAB 뫼비우스의 띠 (0) | 2012.03.23 |
댓글