I'm converting the simulink diagram found in this paper to C code. I'm not familiar with matlab/simulink(too expensive) so need help interpreting the diagram. The problem I experience is that once a value like $\theta$, or $x_1$ becomes zero, zero is propagated everywhere due to the multiplication. The paper states that the integrators are initialized to zero, so I don't see how the system works.

Any ideas?

Below is the simulink diagram and my C code:

The block diagram is found in the paper above as Figure 1 and Figure 2 :

typedef struct  { float zeta,gamma;} PARAM_ANFfloat;
typedef struct  { float err,regressor,x1,theta;} STATE_ANFfloat;

typedef struct {PARAM_ANFfloat p;STATE_ANFfloat s;} ANFfloat;

void dspANFfloat_perform(ANFfloat *anf, float y)
{
anf->s.err = y - anf->s.regressor;

anf->s.theta = -anf->p.gamma * anf->s.x1 * anf->s.theta * anf->s.err;

anf->s.x1 = anf->s.theta * anf->s.err * 2 * anf->p.zeta - anf->s.x1 * - anf->s.theta * anf->s.theta;

anf->s.regressor = anf->s.x1;

}
-

In this line:

anf->s.theta = -anf->p.gamma * anf->s.x1 * anf->s.theta * anf->s.err;

you seem to be conflating $\theta$ and $\dot{\theta}$ (the derivative).

Equation 5 of the paper is:

$$\dot{\theta} = -\gamma x_1 \theta \left[ y(t) - \sum_{l=1}^n \dot{x}_l \right]$$

Note that the left-hand term is the derivative of $\theta$, not $\theta$ itself.

-
Thank, Peter, for pointing out that error. My problem now is I don't understand how those integrator boxes work. The main integrator seems to be turning the derivative of theta into the new theta, as only theta appears in the diagram. Does just keeping a running sum of the derivatives form the derivative? Thus: anf->s.theta += -anf->p.gamma * anf->s.x1 * anf->s.theta * anf->s.err; –  Chuck Carlson Feb 26 '13 at 14:54
Could it be that the left side is not the derivative but a correction factor? –  Chuck Carlson Feb 26 '13 at 15:11
No, I believe they are really integrators, and simulink is pretending to be analog computer. What you probably want to do, to implement this in C, is to re-jig the algorithm for discrete-time implementation. –  Peter K. Feb 26 '13 at 16:08
Thanks, more study needed for me. –  Chuck Carlson Feb 26 '13 at 16:33
I wonder if a running sum of the last N values would suffice for an integrator? –  Chuck Carlson Feb 27 '13 at 5:46