The reference Feedforward control concepts through Interactive Tools says, to minimise the effect of the disturbance $d$ on the process output $y$, a compensator $G_{\text{ff}}=P_3/P_1$ shall be used. From a theory point of view, no problem. Even a few simple examples behave as expected.

Block diagram illustrating the feedforward control

Encouraged by that, I decided to implement three-phase inverter control in $dq$ reference frame. Inverter model is represented by LC filter equations: $$ \text{L} \frac{\operatorname{d}}{\operatorname{d}t} \begin{bmatrix} i_\text{d} \\ i_\text{q} \\ \end{bmatrix} = \begin{bmatrix} v_\text{dn} \\ v_\text{qn} \\ \end{bmatrix} - \begin{bmatrix} v_{\text{d load}} \\ v_{\text{q load}} \\ \end{bmatrix} + \text{L} \omega \begin{bmatrix} i_\text{q} \\ -i_\text{d} \\ \end{bmatrix} $$ $$ \text{C} \frac{\operatorname{d}}{\operatorname{d}t} \begin{bmatrix} v_\text{d load} \\ v_\text{q load} \\ \end{bmatrix} = \begin{bmatrix} i_\text{d} \\ i_\text{q} \\ \end{bmatrix} - \begin{bmatrix} i_{\text{d load}} \\ i_{\text{q load}} \\ \end{bmatrix} + \text{C} \omega \begin{bmatrix} v_\text{q load} \\ -v_\text{d load} \\ \end{bmatrix} $$ From there, I derive plant model and control structure in $dq$ reference frame (only $d$ frame is shown): three-phase inverter control strucure and plant model for d reference frame

In this case disturbance $i_{\text{d load}}$ is fed directly to the plant model. i.e. $P_3=1$. Open-loop inner loop equation is: $$ G_\text{co}(s) = \underbrace{K_\text{P} \left( 1 + \frac{1}{s T_\text{I}} \right)} _\text{PI controller} \underbrace{ \left(\frac{1}{s \text{L}}\right) } _{\text{Process}} $$ and closed loop ($P_1$) is $$ G_\text{cc}(s) = \frac{G_\text{co}(s)}{1 + G_\text{co}(s)} = ... = \frac{s T_\text{I}+1}{s^2 \text{L} T_\text{I}/K_\text{P} + s T_\text{I} + 1} $$ Compensator transfer fucntion is $G_{\text{ff}}=1/G_\text{cc}(s)$ and numerator is a higher order than the denominator.

  • I cannot implement this transfer function in MATLAB Simulink. Is there a way forward?
  • I don't see any issues with the method! Is this the right approach? Articles deal little with feed-forward signal or cross-coupling compensation.
  • When I make $P_3$ equal to $P_1$, i.e. $G_{\text{ff}}=1$, the disturbance is eliminated. In other cases, there is a huge overshoot for step disturbance. It eventually stabilises.
  • I also have to compensate the cross-coupling element $\omega\text{C}v_{\text{q load}}$ using the same compensator?
  • In the real system (e.g. DSP), I will implement only the control part in $dq$ frame. Do I need to add compensators to load current and cross-coupling signals? Also, the plant's transfer function will be different and unknown. How to determine compensator there or leave it at 1 and only tune PI controller to get the desired response.

2 Answers 2


I cannot implement this transfer function in MATLAB Simulink. Is there a way forward?

That's because you can't implement it at all.
$$ \frac{1}{G_\text{cc}(s)} = \frac{s^2 \text{L} T_\text{I}/K_\text{P} + s T_\text{I} + 1}{s T_\text{I}+1}, \tag 1 $$ which is impossible because it's not proper. But consider two things: first, $P_3(s)$ may save you, and second, if it doesn't, there's an approximation that will.

If $P_3(s)$ is inherently low-pass, then your $G_{ff} = \frac{P_3(s)}{G_\text{cc}(s)}$ will become proper, or at least will have the same order in the numerator and the denominator. Then it can be realized without pain.

If $P_3(s)$ isn't low-pass then you can approximate $G_{ff}$. Consider $P_3(s) = 1$. With a bit of rearrangement, you can get: $$ \frac{1}{G_\text{cc}(s)} = k_1 s + k_0 + \frac{k_{lp}}{s T_I + 1} $$ The low-pass filter is realizable, the proportional gain is realizable, and only the naked differentiator is unrealizable. So let $$ G_{ff}(s) = \frac{k_1 s}{\tau s + 1} + k_0 + \frac{k_{lp}}{s T_I + 1} \simeq \frac{1}{G_\text{cc}(s)} $$

The smaller the $\tau$, the more this approaches the "ideal", but the more sensitive the system becomes to noise, and the bigger the signal is coming out of it. The larger the $\tau$, the easier the system design gets, but the more error you have.

Choosing the right value for $\tau$ involves the cost of control, the anticipated power spectrum of the disturbance, the robustness of the system, what you really need to achieve, and a whole bunch of other parameters.


1 - What transfer function are you trying to implement? The controller transfer function or the "plant" transfer function?

2 - You are trying to simulate some kind of inverter/active rectifier, right? Inverters are non-linear, you can simulate them with only linear blocks if you want but you will not be able to test your controller with the non-linearities that are present in real-life.

3 - What are P1 and P3 ?

4 - You kind of compensate your cross-coupling terms in the second image the $\omega Li_q$ and $\omega Li_q$ terms. The cross-coupling terms are compensated to improve the response of your controller, but they are not technically needed.

5 - In a real-life implementation you don't have to compensate the cross-coupling terms but compensating the cross-coupling makes your control system settle faster if I recall correctly.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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