Take the 2-minute tour ×
Signal Processing Stack Exchange is a question and answer site for practitioners of the art and science of signal, image and video processing. It's 100% free, no registration required.

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 :

enter image description here

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;

}
share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

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.

share|improve this answer
    
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
show 1 more comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.