matlab coding to s-function level 2 coding.

2 次查看(过去 30 天)
Hi,
Using Matlab, i can initialize the particle filter like this:
for i = 1 : N
xhatplus(:,i) = xhat + sqrt(P) * [randn; randn; randn];
end
Now, i want to use simulink s-function level 2. how should i coding it?
function DoPostPropSetup(block)
block.Dwork(3).Name = 'xhatplus';
block.Dwork(3).Dimensions = N*3;
block.Dwork(3).DatatypeID = 0;
block.Dwork(3).Complexity = 'Real';
block.Dwork(3).UsedAsDiscState = true;
function InitializeConditions(block)
block.Dwork(3).Data = ??
Any advise? Thanks.
  2 个评论
Kaustubha Govind
Kaustubha Govind 2012-1-31
It depends on what xhat and P stand for in your filter.
dab483
dab483 2012-1-31
my coding is something like below:
function DoPostPropSetup(block)
%% Setup Dwork
block.NumDworks = 3;
block.Dwork(1).Name = 'xhat'; %% states
block.Dwork(1).Dimensions = 3;
block.Dwork(1).DatatypeID = 0;
block.Dwork(1).Complexity = 'Real';
block.Dwork(1).UsedAsDiscState = true;
block.Dwork(2).Name = 'P'; %% covariance matrix
block.Dwork(2).Dimensions = 9;
block.Dwork(2).DatatypeID = 0;
block.Dwork(2).Complexity = 'Real';
block.Dwork(2).UsedAsDiscState = true;
N=1000;
block.Dwork(3).Name = 'xhatplus';
block.Dwork(3).Dimensions = N*3;
block.Dwork(3).DatatypeID = 0;
block.Dwork(3).Complexity = 'Real';
block.Dwork(3).UsedAsDiscState = true;
function InitializeConditions(block)
block.Dwork(1).Data = [3e5; -2e4; 1e-3];%%xhat
block.Dwork(2).Data = [1e6;0; 0; 0 ;4e6; 0;0;0;10]; %%P
block.Dwork(3).Data = ??
function Outputs(block)
block.OutputPort(1).Data = block.Dwork(1).Data;%% xhat
%%endfunction
function Update(block)
P=reshape(block.Dwork(2).Data,3,3);
xhatplus=reshape(block.Dwork(3).Data,3,N);

请先登录,再进行评论。

采纳的回答

Kaustubha Govind
Kaustubha Govind 2012-2-3
Oops, just realized that you are asking about the InitializeConditions function, and not Update or Outputs. The initial condition of your state depends on the dynamics of your system or application - it's hard for us to tell what it should be. The only thing that I can say is that it needs to be of size 3000. For example, for zero-initial condition, you can say:
block.Dwork(3).Data = zeros(3, N);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Fluid Dynamics 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by