Feedforward disturbance signal compensation

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.

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):

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.

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.