What the LP-PIESC estimator computes, and what a model of the wind noise adds to it
Robot Control Lab · Systems Engineering · UT Dallas
LP-PIESC [KR22] replaces the demodulation of extremum seeking with a recursive least-squares fit, built on the estimator of Guay and Dochain [GD17]. The wind deck (Wind as a Stochastic Process) gives the variance of the wind’s effect on the measured power. Two questions:
Answers, derived below and checked by simulation.
Four facts, each derived there:
Goal. The estimator of LP-PIESC is a least-squares fit. Its equations, from the cost they minimize, so that what it computes can be read off.
Goal. The covariance of \(\hat\theta\), which RLS knows only up to one number, the noise density \(R\), and that number for the turbine.
Take \(\sigma\) negligible, so \(\Sigma = A\).
RLS computes \(\Sigma^{-1}\) but never \(R\): it knows the covariance of its own estimate only up to the noise intensity. Supplying \(R\) is what a noise model can do.
Goal. What LP-PIESC fits, and why it is built that way.
The model is written for the time derivative of \(y\) [GD17]:
\[\dot y = \theta_0 + \theta_1\,\big(u - \hat u\big) = \phi^T\theta, \qquad \phi = \begin{bmatrix}1\\ u - \hat u\end{bmatrix}\]
\(\dot y\) is not measured, so the estimator runs on a filtered regressor \(c\) and a predictor \(\hat y\) (Eqs. 6 to 11 of [KR22], projection omitted):
\[\dot c = -Kc + \phi,\qquad \dot{\hat y} = \phi^T\hat\theta + Ke + c^T\dot{\hat\theta},\qquad e = y - \hat y\] \[\dot\Sigma = cc^T - k_T\Sigma + \sigma I,\qquad \dot{\hat\theta} = \Sigma^{-1}\big(c\,e - \sigma\hat\theta\big)\]
Goal. Evaluate the published estimator on the turbine. With a \(50\) ms memory and a \(314\) s dither, the fit cannot separate level from slope; the ridge decides, and the answer is a quadrature demodulation.
The control law integrates \(\hat\theta_1\) (the \(\dot{\hat u}\) equation), so what matters is its average over a dither period, \(\langle d\,\dot y\rangle := \frac1T\int_0^T d\,\dot y\,dt\).
The published \(\hat\theta_1\) is the cosine channel times the constant \(-a^2\omega/2 = -2.5\times10^{-7}\). That constant is absorbed by the PI gains, set by trial and error in [KR22].
| per period, \(T = 314\) s | in phase, \(\hat g_{\sin}\) | quadrature, \(\hat g_{\cos}\) |
|---|---|---|
| signal per unit \(J'\) | \(\operatorname{Re}G = 0.984\) | \(\vert\operatorname{Im}G\vert = 0.125\) |
| noise \(\sigma\), long run | \(26.9\) | \(26.9\) |
| noise \(\sigma\), one period alone | \(28.9\) | \(25.2\) |
The factor is \(1/(\omega\tau)^2\): a property of reading \(\dot y\) with a dither slower than the rotor. Over a single period the two windows admit different low-frequency wind and the factor is \(47\); over the long averaging the integrator performs, it is \(62\).
Goal. Recover the in-phase channel, then use \(R\) for error bars and for the tuning.
With memory one period and negligible ridge, the simulation gives \(\hat\theta_1 = 1.259\) at \(0.9\,u^\star\), against \(1.260\) from sine demodulation of the same record.
Tested in Part 6: over 400 dither periods at \(u^\star\) the actual scatter of \(\hat\theta_1\) is \(18.9\), and the reported \(\hat s\) averages \(19.3\). Told \(R\), the estimator knows its own error to within \(2\%\).
Goal. Check every claim above on the NREL 5 MW rotor under synthesized Kaimal inflow.
rotea/src/experiments/exp7_piesc_estimator.py, exp9_long_run.py.Turbulent wind at \(u^\star\) (left): period by period, the published estimate equals the minimum-norm product \(d\,\dot y\), correlation \(0.997\).
Calm wind (no noise), the mean response:
| \(0.9\,u^\star\) | \(1.1\,u^\star\) | |
|---|---|---|
| \(\langle\hat\theta_1\rangle\), published | \(4.016\times10^{-8}\) | \(-3.349\times10^{-8}\) |
| \(\langle d\,\dot y\rangle\) | \(4.011\times10^{-8}\) | \(-3.344\times10^{-8}\) |
| \(\frac{a^2\omega}{2}J'|\operatorname{Im}G|\), predicted | \(4.00\times10^{-8}\) | |
| \(\Sigma^{-1}_{22}\) | \(2.0000\times10^7\) | \(2.0000\times10^7\) |
exp8_snr_gain.py).Every scheduled variant is beaten in both losses by a fixed gain (best scheduled: \(1.47\%\) and \(1.01\%\); fixed at \(12\) h: \(1.16\%\) and \(0.67\%\)). Near \(u^\star\) the per-period signal-to-noise is too low (noise \(2.5\,u^\star\) per period) for the weight to separate “at the optimum” from “not yet”.
The derivations the main line cites.
The per-period channels are \(\hat g_{\sin} = \frac{2}{aT}\int_0^T y\sin\omega t\,dt\) and \(\hat g_{\cos} = \frac{2}{aT}\int_0^T y\cos\omega t\,dt\). Their wind parts are \(\frac{6}{aT}\int_0^T\varepsilon\,w\,dt\) with \(w = \sin\omega t\) or \(\cos\omega t\) on \([0, T]\).
[KR22] D. Kumar & M. A. Rotea, Wind turbine power maximization using log-power proportional-integral extremum seeking, Energies 15 (2022) 1004. doi:10.3390/en15031004
[GD17] M. Guay & D. Dochain, A proportional-integral extremum-seeking controller design technique, Automatica 77 (2017) 61–67. doi:10.1016/j.automatica.2016.11.018
Companion to Extremum Seeking Control of Wind Turbines and Wind as a Stochastic Process.
← Wind Turbine Control · Least Squares for the Gradient