검색결과 리스트
글
MATLAB에서 미분(차분) 및 적분하는 간단한 코드를 소개하겠습니다. 어떤 형태든 계측기를 사용하든지 하면 ADC든 혹은 해당 계측기의 통신방법을 통해 데이터를 받게 됩니다. 이때, 미분-디지털값이 들어오니까 엄밀히 말하면 차분-과 적분을 수행하게 됩니다. 이를 MATLAB에서 간단히 수행해 보겠습니다. 먼저 대상 함수를 만들어야 할테니 간단히 y = sin(omega * t)를 대상으로 하겠습니다. 이때 샘플타임을 10ms로 하죠.
ts = 0.01;
t=0:ts:10;
oemga = pi/5;
y = sin(omega*t);
이제 미분해 보겠습니다. MATLAB 명령어 " diff " 를 사용할 겁니다. 이는 단순히 앞선값에서 바로 뒤의 값을 빼는 것입니다. 차분을 할려면 그 상태에서 샘플 타임으로 나눠줘야하니까
diff_y = [0, diff(y)/ts];
를 사용하도록 합니다. 이때, 앞에다가 "0"의 값을 추가하는 것은, 차분을 사용하면 데이터 개수가 하나 작습니다. 둘씩 빼니까요... 데이터가 1번,2번,3번이 있으면 2번-1번, 3번-2번... 이러면 2개로 줄자나요. 그래서 갯수를 맞춰줄려고 하나 집어넣습니다. 적분은 구분구적분처럼 샘플링타임으로 잘린 사각형의 넓이의 합으로 구하면 됩니다. 일명, ZOH (Zero-Order Hold) 방법이라고 하죠. 여하튼, " cumsum "이라는 함수는 누적도수를 구하는 함수입니다. 여기다가 샘플 타임을 곱해주면, 나눠진 사각형마다의 넓이를 구해 누적해서 더하는 것이 되겠죠. 그러면 적분(정적분)이 수행됩니다.
int_y = cumsum(y)*ts;
figure
plot(t, y, 'LineWidth',2)
hold on
grid on
plot(t, diff_y,'r', 'LineWidth',2)
plot(t, int_y,'c', 'LineWidth',2)
legend('t', 'y_{diff}', 'y_{int}')
hold off
ts = 0.01; t = 0:ts:10; oemga = pi/5; y = sin(omega*t); diff_y = [0, diff(y)/ts]; int_y = cumsum(y)*ts; figure plot(t, y, 'LineWidth',2) hold on grid on plot(t, diff_y,'r', 'LineWidth',2) plot(t, int_y,'c', 'LineWidth',2) legend('t', 'y_{diff}', 'y_{int}') hold off
그 실행 결과 입니다.
티스토리로 이전하면서 몇몇 글들을 이렇게 옮기고 있습니다.
'The Robot > Prog.Lang.' 카테고리의 다른 글
MATLAB/Simulink Scope 창에서 데이터 축출하기 (10) | 2009/07/11 |
---|---|
Embedded Block을 이용해보자. (0) | 2009/04/15 |
MATLAB/Simulink 기동시 읽기나 쓰기 실패(에러)하는 경우 (2) | 2009/04/15 |
미분(차분) 및 적분하기 (8) | 2009/04/15 |
sptool을 이용한 간단한 필터적용법 (filter) (6) | 2009/04/15 |
cftool 명령으로 Curve Fitting 간단히 하기 (2) | 2009/04/15 |
Figure에서 Legend사용시 아랫첨자 구현하기 (0) | 2009/04/15 |
Simulink에서 Annotation 사용하기 (4) | 2009/04/15 |
보여주신 적분은 sin --> cos(x) -cos(0) 인 정적분이 된것으로 보이는데요
(모두 양수값이죠)
sin -> cos(x) 가 되는 적분은 어찌해야될까요? (우리가 알고있는 cos파형)
high pass 필터로 cos(0) 을 짜르는 방법밖엔 생각이 안나네요.....
그런가요?? 실제 수치가있는(그래프에도 나와있지만) 대상을 적분했으니 (실제로는 ZOH의 구분구적분인가요??^^) 그렇죠... 실제 수치가 있는 대상에 대한 모든 적분은 정적분이 아닌가요???
cumsum으로 하시면 되는데...
네.. 그러면 되죠^^
감사합니다^^ 미분함수그리는 샘플을 찾고있었는데 적합한 자료가 여기 있었네요^^
네.. 다행이네요. 감사합니다.
3번재 줄에 omega 오타있네요.
왜 안되나 했는데.. 그거 수정하니까 잘됩니다.감사합니다,
아.. 그런가요? 오류 리포트 감사합니다.^^