본문 바로가기

Software/MATLAB

RAND 함수를 이용하여 오차 생성하기

MATLAB을 이용해서 시뮬레이션을 하다보면 어떤 이유에서든 원신호에 약간의 오차를 주고 싶어질 때가 있습니다. 특히, 오차범위를 정해놓고 작업을 해야하는 경우가 간혹 발생하는데, 이부부을 구현하는 방법이야 많겠지만, 특별히 간단히 rand 함수를 이용해서 오차를 생성해보겠습니다.

먼저 대상 신호를 만들어보죠.

t = 0:0.01:10;

y = sin(2*pi*t);

이렇게 하면

이런 신호가 하나 만들어 집니다. 이제 저의 목표는 저 신호를 10%이내 범위에서 파괴하는겁니다. 그럼 제목에서도 밝혔듯이 rand함수에 대해 간단히 알아보겠습니다.

rand함수는 랜덤변수를 생성합니다. 그런데 rand함수는 0과 1사이에서 임의의 변수를 생성합니다. 사용법은

rand(X,Y)

이렇게 하면 X*Y크기를 가진 0과 1사이의 임의의 실수로 만들어진 행렬을 생성해줍니다. 그래서 저는 방금전 코드에 이어서

e = rand(1,length(t))/10;

이렇게 에러를 생성합니다. 처음 데이터와 같은 크기를 가지도록하는 것이고, 뒤에 "/10"은 5%이내로 오차를 생성할 것이기 때문입니다. 왜 10%가 아니라 5%의 에러냐면,  센터를 기준으로 나눌것이기 때문입니다. 그래서 생성된 에러는

와 같습니다. 0부터 0.1까지의 값을 랜덤하게 가지게 된 것입니다. 이 값에서 0.95를 더하면

입니다.

이제 이 데이터를 원래 y값에다가 곱할 겁니다.

y1 = (e+0.95).*y;

이렇게 구현하면 

이렇게 됩니다. 음... 확실히 하기 위해 피크치부분을 확대해 보겠습니다.

이렇게 해서 원하는 결과를 얻을 수 있습니다. 구현을 위한 전체코드는

t=0:0.01:10;
y = sin(2*pi*t);
e = rand(1,length(t))/10;
y1 = (e+0.95).*y;

plot(t, y)
axis([0 10 -1.5 1.5])
grid on
hold on
plot(t, y1, 'r')

입니다.

반응형