반응형

 

 

평균 : 데이터의 총합을 개수로 나눈 값

 

배치식 : 데이터를 한번에 계산하는 식

 

아래는 평균의 배치식입니다.

 

재귀식 : 이전의 결과를 재사용하는 식

(계산 효율이 좋음. 위 식과 아래식의 연산자 개수를 비교해보자

위 식은 +연산자가 k 개인 반면, 아래식은 1개 뿐이다!)

 

Matlab 코드

clear all

dt  = 0.2;
t   = 0:dt:10;

Nsamples    = length(t);

Avgsaved    = zeros(Nsamples, 1);
Xmsaved     = zeros(Nsamples, 1);

for k=1:Nsamples
    xm   = GetVolt();
    avg = AvgFilter(xm);

    Avgsaved(k) = avg;
    Xmsaved(k)  = xm;
end

figure
plot(t, Xmsaved, 'r:*');
hold on
plot(t, Avgsaved, 'o-');
legend('Measured', 'Average');




function avg = AvgFilter(x)

persistent prevAvg k
persistent firstRun

if isempty(firstRun)
    k = 1;
    prevAvg = 0;

    firstRun = 1;
end

alpha   = (k - 1) / k;	% 이전/현재 (데이터수)
avg     = alpha*prevAvg + (1 - alpha)*x;	% 현재 평균

prevAvg = avg;
k       = k + 1;

end

function z = GetVolt()

w   = 0 + 4*randn(1,1);
z   = 14.4 + w;
end

 

코드 설명

1-2 예제를 코드화 한 것으로

14.4 V 에서 4*정규분포 만큼의 잡음을 가지는 모델을 나타낸 것입니다.

따라서 표본이 충분히 많으면 14.4로 수렴하는 결과를 나타냅니다.

 

  • randn(1,1) :
    행(x) : 1개
    열(y) : 1개
    를 가지는 정규분포를 생성하는 함수 입니다. 
  • persistent : 
    C/C++ 에서 static 과 같이 정적 변수로 설정하여
    함수를 벗어나도 해당 값이 유지됩니다.

 

 

 

반응형

+ Recent posts