measu = [1.0, 0.9351, 0.8512, 0.9028, 0.7754, 0.7114, 0.6830, 0.6147, 0.5628, 0.7090]
predictionModel = @(B,x) exp(B(1))*x;
B0 = 0.9;
estimatedB =...
lsqcurvefit(model,B0,measu(1:(end-1)),measu(2:end));
x1 = measu(1);
xPred =x1;
for k = 2:length(measu)
xPred = [xPred;model(estimatedB,xPred(k-1))];
end
plot(measu);
hold on;
plot(xPred);
legend('Actual data', 'Fitted data')
pf = robotics.ParticleFilter;
pf.StateTransitionFcn = @stateTransitionFcn;
pf.MeasurementLikelihoodFcn = @measurementLikelihoodFcn;
pf.StateEstimationMethod = 'mean';
pf.ResamplingMethod = 'systematic';
measu = [1.0, 0.9351, 0.8512, 0.9028, 0.7754, 0.7114, 0.6830, 0.6147, 0.5628, 0.7090];
prevState = [measu(1),0.9];
initialize(pf,5000,prevState,eye(2));
states = [measu(1),0.9];
for i=1:9
[statePredicted,stateCov] = predict(pf, measu(i));
[stateCorrected,stateCov] = correct(pf,measu(i+1));
prevState = getStateEstimate(pf);
states = [states;prevState];
end
function predictParticles = stateTransitionFcn(pf, prevParticles,x_1)
p = exp(prevParticles(:,2)).*x_1;
predictParticles = [p,prevParticles(:,2)];
end
function likelihood = measurementLikelihoodFcn(pf, predictParticles, measurement)
predictMeasurement = predictParticles;
measurementError = bsxfun(@minus, predictMeasurement(:,1), measurement);
measurementErrorNorm = sqrt(sum(measurementError.^2, 2));
measurementNoise = 1;
likelihood = 1/sqrt((2*pi).^3 * det(measurementNoise)) * exp(-0.5 * measurementErrorNorm);
end