Wind Turbine Control
A wind turbine must sit on the peak of an efficiency curve it cannot measure, using a knob whose effect arrives buried in turbulence.
Below rated wind speed, a turbine’s job is to hold the tip-speed ratio \(\lambda = R\Omega/V\) at the value that maximizes the rotor’s power coefficient \(C_P\). The difficulty is that both coordinates of that curve are written in terms of the wind speed reaching the rotor, which is the one quantity the machine cannot measure. An anemometer on the nacelle reads air the rotor has already slowed, by an amount that depends on what the controller is doing.
Extremum seeking control solves this without a model: perturb the control parameter with a small periodic dither, correlate the response against it, and climb. The line of work developed at the UTD Wind Energy Center has made that practical, above all by feeding the algorithm the logarithm of power. That removes the wind speed from the loop gain exactly, so a controller tuned at one wind speed works at every other.
Our interest is in what happens next: the statistics of the gradient the algorithm computes.
The survey
Presentation
Extremum Seeking Control of Wind Turbines → is an illustrated walkthrough of the Region-2 control problem, the extremum-seeking machinery built for it, and five questions the published record leaves open. Roughly twenty slides, figure-first, with speaker notes.
The deck builds the problem from the beginning: why the \(k\Omega^2\) torque law works, why its equilibrium is a ray rather than a setpoint, and what the logarithm of power actually fixes. It then turns to what is unresolved.
Q4: the curvature question, worked through and simulated
Presentation
A Matrix Gain for Extremum Seeking → works the fourth question all the way through. Meyn’s Zap stochastic approximation needs the Jacobian of the update direction, which a demodulated gradient estimate does not supply in closed form. It turns out to sit at the second harmonic of the probe already being injected, so reading it costs one extra correlation rather than one extra experiment.
Using it takes the curvature out of the loop gain, which turns the step size into a settling time and removes the retuning that Rotea describes as the practical obstacle. This one is simulated rather than argued: a JAX and diffrax model of the NREL 5 MW rotor under Kaimal turbulence confirms the central claim, with a gradient loop settling over a \(5\times\) range as the plant curvature varies and a Newton loop settling in the same 4 periods on all three plants. It also corrects two of the estimates made on paper: the second-harmonic reading is \(21\%\) low at the published dither period, and the curvature estimate needs about 15 days of averaging rather than one. The deck also carries the version without extremum seeking at all, where a random perturbation supplies the gradient and either Spall’s second-order SPSA or a Gaussian probe supplies the Jacobian, and then compares the two. That comparison turns out to be combinatorial rather than statistical: resolving every entry of the Hessian needs a frequency plan whose bandwidth grows quadratically in the number of parameters, from 101 seconds of averaging for one parameter to 2915 for six.
One question about one turbine
Worked to a test rather than surveyed. The stability question was answered by the existing log-of-power fix, and the probing question by a degeneracy that no amount of data removes; neither has a deck.
Presentations
Q1: Where Does the Torque Gain Converge? → Extremum seeking adapts one quantity, the torque gain \(k\), and in the published simulations it lands five to eight percent below the design value in every run. Estimator bias and a shifted turbulent optimum are both dead by an order of magnitude, and the scatter is bounded well below the gap. The decisive point is that most of the offset is already present in uniform inflow, where none of the three can act, which leaves only the reference: the design value comes from a blade-element curve whose peak may not be where the simulated rotor’s is.
The wind as a stochastic process
Presentation
Wind as a Stochastic Process → derives the gradient-estimate noise from the inflow spectrum instead of measuring it, in two decks, one for each IEC spectrum: Kaimal and von Karman. Writing \(V = \bar V(1+\varepsilon)\) with \(\varepsilon\) a stationary process, and using the fact that \(C_P' = 0\) at the optimum kills the tip-speed-ratio channel, the whole first-order fluctuation in log-power is \(3\varepsilon(t)\). The estimator is then a linear functional of it, and its variance is an ordinary spectral integral. Built from the definitions up: what a spectral density is, the Wiener-Khinchin pair, the one-sided convention, and the two IEC forms, compared side by side down to the design they lead to.
Least squares for the gradient
Presentation
Least Squares for the Gradient → builds recursive least squares from the cost up, derives the covariance of its estimate and the one number, the noise density at the dither frequency, that the algorithm cannot compute itself. Applied to LP-PIESC with its published tuning, the estimator turns out to read only the quadrature part of the power’s response, at \(40\) times the variance of the in-phase part; regressing the power itself fixes this, and the wind model’s density calibrates the error bars to \(2\%\).
It agrees with simulation to 6%, with nothing fitted, and produces a design rule: gradient noise has a maximum near \(T = 6L/\bar V\), and the published 150-second dither period sits almost exactly on it. Both longer and shorter periods are quieter, and longer also fixes the second-harmonic curvature bias. It does not close the factor of 15 against the published scatter, but it eliminates two explanations for it.
Five questions, audited
Two of the five closed under inspection. They are kept here with their verdicts rather than quietly dropped.
- What is the estimator estimating? Closed as a control question. The published runs land \(0.35\) in \(\lambda\) above the design optimum, but most of that offset is already present in uniform inflow, where neither estimator bias nor a turbulent peak shift can act, and the scatter is bounded well below it. What is left is the reference: a blade-element \(\lambda^\star\) scoring an actuator-line rotor. A modeling check, not a controls problem.
- What sets the stability limit? Closed, and closed in 2017. Plain extremum seeking goes unstable at high wind because the loop is sampled and its gain scales as \(V^3\); the log-of-power feedback removes that scaling exactly, which is why LP-ESC does not. Nor is the stability bound a speed ceiling: the deadbeat gain sits well inside it. The residual is that the loop gain still carries the curvature \(J''\), and that belongs to the Hessian question below.
- Is the dither necessary? Closed: yes, and structurally so. Aerodynamic torque is recoverable from rotor speed and commanded torque with no wind sensor, and turbulence does move \(\lambda\) about as far as the probe does. But the curve still cannot be identified: at each instant there is one equation and one unknown wind speed, so any candidate curve is absorbed by a correspondingly adjusted \(V(t)\). Simulation confirms it: a curve with its peak flattened by \(30\%\) reproduces the data exactly, with an implied wind of the same mean and turbulence intensity, correlated \(0.9999\) with the truth. A known excitation is the only thing that breaks the degeneracy, which is why extremum seeking exists.
- What is the Hessian for? The curvature at the peak sets the loop gain calibration, the terminal scatter, and the energy lost to mistuning. In stochastic approximation the same matrix governs the asymptotic covariance, where iterate averaging attains the optimum without estimating it.
- How good could any algorithm be? No performance bound exists for this problem, so there is no way to tell whether current algorithms are near optimal or leaving an order of magnitude on the table.
Why turbulence is not ordinary noise
In classical stochastic approximation the disturbance is pure nuisance: it corrupts the measurement and is averaged away. Here the same physical process does both jobs. Turbulence is what buries the gradient estimate, and it is also what moves the rotor across the \(C_P\) curve without anyone paying a fatigue cost to put it there. That duality is what makes estimating the curve without probing it worth asking about.
Status
This is a reading of the published record rather than a result, and the reading has cost two of the five questions. Q3 and Q4 have not yet had the same treatment.
The immediate next step is an open-loop measurement rather than a control experiment: hold the torque gain at a series of fixed values, run each long enough to average the turbulence, and measure the simulator’s own \(C_P(\lambda)\) curve to find where its peak actually is. That settles the reference question directly, and the same runs give the gradient-estimate scatter at each gain, which is the one quantity the analysis here cannot predict. A prerequisite either way: the published inflow recycles a 20-minute precursor, so no variance estimate survives it and non-repeating seeds have to come first.