Where the gradient-estimate noise comes from, derived from the inflow spectrum rather than measured
Robot Control Lab · Systems Engineering · UT Dallas
Extremum seeking perturbs the torque gain and correlates the measured power against the perturbation. One period of that correlation returns one number, \(\hat g\), an estimate of the slope of the objective. Because the wind is random, \(\hat g\) is random.
\[\sigma(\hat g) := \text{standard deviation of one period's gradient estimate}\]
\(\sigma(\hat g)\) is the quantity this deck computes. Three design choices turn on it: the probe amplitude, how long to average, and how widely the gain scatters about its optimum once the adaptation has settled. Each of those dependences is derived in the closing section, once the machinery to do so exists.
Every value quoted for \(\sigma(\hat g)\) so far has been measured: read off a simulation, or bounded from a published table. None was predicted from the turbulence.
\[\hat g = \frac{1}{T}\int_0^T \ln P(t)\,\frac{2}{a}\sin\omega t\;dt\]
\(P\) depends on the wind, which is a random process, not a random number. So \(\hat g\) is an integral of a random process against a deterministic weight, and its variance depends on how the wind’s randomness is distributed in time. A gust lasting an hour and a gust lasting a second contribute quite differently to the same integral.
Three things are therefore needed, and none of them is optional:
Four links. A shows that although log-power depends on the wind three separate ways, at the optimum only one survives. B uses that to write the estimator’s noise as a single integral of one random process. C is the general rule for the variance of such an integral. D puts in the measured frequency content of atmospheric turbulence and produces a number. Each is stated, then checked against simulation at the end.
Log-power depends on the wind three separate ways. At the optimum only one of them survives, and that is what makes the rest tractable.
A wind turbine below rated wind speed. Write \(\bar V\) for the mean wind speed, \(R\) for the rotor radius, \(\Omega\) for the rotor angular speed, \(\rho\) for air density and \(A = \pi R^2\) for the swept area. Define the tip-speed ratio and the power coefficient:
\[\lambda := \frac{R\Omega}{V}, \qquad P = \tfrac12\rho A V^3\,C_P(\lambda)\]
\(C_P\) is a property of the blades. For the rotor studied here it has a single maximum \(C_P^{\max}\) at \(\lambda = \lambda^\star\); where that curve comes from, and what is physics versus measurement in it, is Appendix A.0b. The controller’s only actuator is the torque gain \(u\) in the generator-torque law \(\tau_g = u\Omega^2\); setting \(\dot\Omega = 0\) makes the rotor rest where \(C_P(\lambda)/\lambda^3 = c\,u\) for a rotor constant \(c\) (derived in Appendix A.0), so \(u\) selects an equilibrium \(\lambda_{\text{eq}}(u)\).
Define the objective \(J(u) := \ln C_P\big(\lambda_{\text{eq}}(u)\big)\), and write \(J'\), \(J''\) for its first two derivatives in \(u\). The optimum \(u^\star\) is where \(J'(u^\star) = 0\), equivalently \(\lambda_{\text{eq}}(u^\star) = \lambda^\star\). Numerically, for the NREL 5 MW rotor at \(\bar V = 8\) m/s, \(J'' = -1.41\times10^{-13}\) in SI units.
Split the wind into a mean and a fluctuation about it:
\[V(t) = \bar V\big(1 + \varepsilon(t)\big), \qquad \varepsilon(t) := \frac{\tilde v(t)}{\bar V}, \qquad \mathrm{TI} := \frac{\sigma_{\tilde v}}{\bar V} = \sigma_\varepsilon\]
\(\tilde v\) is the fluctuating part in m/s, \(\varepsilon\) its dimensionless counterpart, and \(\mathrm{TI}\) the turbulence intensity, \(0.10\) in the case studied here. For a random variable \(x\), \(\sigma_x := \sqrt{\mathbb{E}[x^2] - (\mathbb{E}[x])^2}\) is its standard deviation. For a process \(x(t)\) it is evaluated at a fixed \(t\); the assumption that makes it independent of \(t\) is stated on Link A, executed. Since \(\bar V := \mathbb{E}[V]\), both \(\tilde v\) and \(\varepsilon\) have mean zero, so \(\sigma_{\tilde v}^2 = \mathbb{E}[\tilde v^2]\) and \(\sigma_\varepsilon^2 = \mathbb{E}[\varepsilon^2]\).
Remark. The standard form is additive, \(V = \bar V + \tilde v\), with the statistics written for \(\tilde v\) [IEC]. Dividing by the constant \(\bar V\) gives the form above: \(\varepsilon = \tilde v/\bar V\) and \(\sigma_\varepsilon = \sigma_{\tilde v}/\bar V = \mathrm{TI}\).
\(\varepsilon\) is small
\(\sigma_\varepsilon = 0.10\), so a series in \(\varepsilon\) converges quickly and second-order terms contribute about \(1\%\).
\(\varepsilon\) is dimensionless
Every statistic of \(\varepsilon\) is a pure number, \(\mathrm{TI}\) among them. From here on the wind enters only through \(\varepsilon\), and \(\bar V\) appears explicitly wherever it does.
From the definitions, \(y = \ln P = \ln(\tfrac12\rho A) + 3\ln V + \ln C_P(\lambda)\). Substituting \(V = \bar V(1+\varepsilon)\) into the middle term, the logarithm of the product splits, and \(\ln(1+\varepsilon) = \varepsilon - \tfrac12\varepsilon^2 + O(\varepsilon^3)\) for \(|\varepsilon| < 1\):
\[3\ln V = 3\ln\bar V + 3\ln(1+\varepsilon) = \underbrace{3\ln\bar V}_{\text{constant}} + 3\varepsilon \;\underbrace{-\;\tfrac32\varepsilon^2 + O(\varepsilon^3)}_{\text{second order}}\]
The second-order part has typical size \(\tfrac32\sigma_\varepsilon^2 = 0.015\), against \(3\sigma_\varepsilon = 0.30\) for the linear term \(3\varepsilon\).
The third term, \(\ln C_P(\lambda)\), also depends on the wind, through \(\lambda = R\Omega/V\). Both wind-dependent terms are expanded under four standing assumptions, stated on the next slide; the third term is then handled on the slide after.
In force through Links A and B.
Under 1 to 4, \(V(t) = \bar V(1+\varepsilon(t))\), \(\Omega(t)\), hence \(\lambda(t) = R\Omega(t)/V(t)\) and \(y(t)\), are obtained from the wind path up to \(t\) by rules that do not change with \(t\). Assumption 2 then gives each of them the same law at every \(t\), so \(\mathbb{E}[\lambda(t)]\) and \(\mathbb{E}[y(t)]\) are constants.
With \(u\) fixed, \(\lambda(t)\) fluctuates only because the wind does. Write \(\bar\lambda := \mathbb{E}[\lambda(t)]\), a constant by the previous slide, and \(\delta\lambda := \lambda - \bar\lambda\). Two limits of the rotor’s response bracket \(\delta\lambda\):
In both, and in between, \(\delta\lambda = O(\varepsilon)\). Expanding about \(\bar\lambda\):
\[\ln C_P(\bar\lambda + \delta\lambda) = \ln C_P(\bar\lambda) + \frac{C_P'(\bar\lambda)}{C_P(\bar\lambda)}\,\delta\lambda + O(\delta\lambda^2)\]
The next slide evaluates the two terms of this expansion at the optimum. Away from it, \(C_P'(\bar\lambda)\) is a fixed nonzero number, \(\delta\lambda = O(\varepsilon)\), and their product, the linear term, is \(O(\varepsilon)\): a fluctuation of the same order as \(3\varepsilon\), with a coefficient set by how far off the gain sits.
At the optimum, \(u = u^\star\) (What we need from the turbine), so \(\lambda_{\text{eq}}(u) = \lambda^\star\), and \(d := \bar\lambda - \lambda^\star\) is a number with \(d = O(\sigma_\varepsilon^2)\) (A.0d). Three steps.
Collecting the three terms of \(y\) from Link A, executed:
\[y = \underbrace{\ln(\tfrac12\rho A) + 3\ln\bar V + \ln C_P(\bar\lambda)}_{\text{constant}} \;+\; 3\varepsilon(t) \;+\; r(t), \qquad r := -\tfrac32\varepsilon^2 + O(\varepsilon^3) + O(\sigma_\varepsilon^2\,\varepsilon) + O(\delta\lambda^2)\]
\(\mathbb{E}[3\varepsilon] = 0\), so \(\mathbb{E}[y]\) is the constant plus \(\mathbb{E}[r]\), and \[y(t) - \mathbb{E}[y] = 3\varepsilon(t) + \big(r(t) - \mathbb{E}[r]\big)\] Every piece of \(r\) is a product of at least two factors of size \(\sigma_\varepsilon\), so \(\operatorname{sd}(r - \mathbb{E}r) = O(\sigma_\varepsilon^2) \approx 0.01\) against \(\operatorname{sd}(3\varepsilon) = 3\sigma_\varepsilon = 0.30\). This is what \(y - \mathbb{E}[y] = 3\varepsilon + O(\varepsilon^2)\) means wherever it is quoted below: one term, one random process.
Link A leaves a single random process. This writes the estimator’s noise as one integral of it.
Extremum seeking perturbs the gain with a sinusoid of amplitude \(a\) and period \(T\). Time is cut into dither periods \([nT,(n+1)T)\), \(n = 0,1,2,\dots\); \(u_n\) is the gain about which the \(n\)-th period dithers, and the measured log-power is correlated against the sinusoid over exactly that period (written below with the period’s own clock, \(t \in [0,T]\)):
\[u(t) = u_n + a\sin\omega t, \qquad \omega := \frac{2\pi}{T}, \qquad f_1 := \frac{1}{T} = \frac{\omega}{2\pi}\]
\[y(t) := \ln P(t), \qquad \hat g_n := \frac{1}{T}\int_0^T y(t)\,\frac{2}{a}\sin\omega t\;dt\]
Why that integral is a gradient estimate, and why the factor is \(2/a\), is Appendix A.1.
\(\hat g_n\) is an estimate of \(J'(u_n)\). Its mean error is the finite-amplitude bias \(\tfrac{a^2}{8}J'''\), derived on The bias grows as \(a^2\); its scatter, which is what this deck computes, comes entirely from the wind. Published values for the NREL 5 MW case [CLR19]: \(T = 150\) s and \(a = 13.6\%\) of \(u^\star\).
Write the log-power over one period as three parts. \(y_0(t)\) is its value with \(\varepsilon \equiv 0\), a deterministic \(T\)-periodic function of the dither; the wind adds \(3\varepsilon(t)\) and the remainder \(r(t)\) of Link A, executed, concluded:
\[y(t) = y_0(t) + 3\varepsilon(t) + r(t)\]
The estimator is linear in \(y\), so it splits the same way:
\[\hat g = \underbrace{\frac{2}{aT}\int_0^T y_0\sin\omega t\,dt}_{\hat g_{\text{det}}} + \underbrace{\frac{6}{aT}\int_0^T \varepsilon(t)\sin\omega t\,dt}_{\hat g_{\text{noise}}} + \underbrace{\frac{2}{aT}\int_0^T r\sin\omega t\,dt}_{\hat g_r}\]
\(\hat g_{\text{det}}\) is a number (its value is Appendix A.1). \(\hat g_r\) is smaller than \(\hat g_{\text{noise}}\) by the factor \(\operatorname{sd}(r)/\operatorname{sd}(3\varepsilon) = O(\sigma_\varepsilon)\); it is carried by the validation, which measures the total. This deck computes the scatter of the middle term:
\[\hat g_{\text{noise}} = \frac{6}{aT}\,Z, \qquad Z := \int_0^T \varepsilon(t)\,w(t)\,dt, \qquad w(t) := \begin{cases}\sin\omega t, & 0\le t\le T\\ 0,&\text{otherwise}\end{cases}\]
\(Z\) is a scalar random variable: the wind fluctuation over one period, weighted by the dither and integrated. Its mean is zero, because \(w\) is deterministic and \(\mathbb{E}[\varepsilon(t)] = 0\) at every \(t\):
\[\mathbb{E}[Z] = \int_0^T \mathbb{E}[\varepsilon(t)]\,w(t)\,dt = 0, \qquad\text{so}\qquad \operatorname{Var}(Z) = \mathbb{E}[Z^2]\]
Write \(Z^2\) as a double integral and take the expectation inside:
\[\operatorname{Var}(Z) = \mathbb{E}\!\left[\iint_{[0,T]^2}\! w(t)w(s)\,\varepsilon(t)\varepsilon(s)\,dt\,ds\right] = \iint_{[0,T]^2}\! w(t)\,w(s)\,\underbrace{\mathbb{E}[\varepsilon(t)\varepsilon(s)]}_{=\;\Gamma(t-s)}\,dt\,ds\]
Exchanging \(\mathbb{E}\) with the integral is Fubini’s theorem, and its condition holds: \(|\Gamma(\tau)| \le \Gamma(0) = \sigma_\varepsilon^2\) (Cauchy-Schwarz, \(|\mathbb{E}[XY]| \le \sqrt{\mathbb{E}X^2\,\mathbb{E}Y^2}\)), \(|w| \le 1\), and the domain has measure \(T^2\), so \(\mathbb{E}\iint|w\,w\,\varepsilon\varepsilon| \le \sigma_\varepsilon^2T^2 < \infty\). \(\Gamma\) is the autocovariance defined in Link C; Link B needs only that it exists.
Link A held \(u\) fixed; the estimator moves it, \(u = u_n + a\sin\omega t\). That moves \(\bar\lambda\) by \(O(a)\). Differentiating the equilibrium relation of A.0 in the form \(\ln C_P(\lambda) - 3\ln\lambda = \ln c + \ln u\) gives \((\lambda C_P'/C_P - 3)\,d\ln\lambda = d\ln u\), so at the peak
\[\frac{d\ln\lambda}{d\ln u} = -\frac13, \qquad \bar\lambda(t) = \lambda^\star\Big(1 - \frac{a}{3u^\star}\sin\omega t\Big) + O(a^2)\]
The linear term of the previous slide then returns as a cross term. With \(\kappa_2 := -\lambda^{\star 2}C_P''(\lambda^\star)/C_P(\lambda^\star) = 6.3\) for the curve of A.0b, and \(\delta\lambda = -\bar\lambda\varepsilon\) in the frozen-rotor limit,
\[\frac{C_P'(\bar\lambda)}{C_P(\bar\lambda)}\,\delta\lambda = -\kappa_2\,\frac{a}{3u^\star}\,\varepsilon\sin\omega t + O(a^2\varepsilon), \qquad \Big|\frac{\kappa_2\,a/(3u^\star)}{3}\Big| = 0.10 \ \text{at}\ a = 0.136\,u^\star\]
The cross term is at most \(10\%\) of \(3\varepsilon\) in the frozen-rotor limit and zero when the rotor tracks. The validation section measures \(\operatorname{sd}(y)/\operatorname{sd}(3\varepsilon) = 1.037\) with the dither on, which is the total of every term neglected here.
Link B leaves an integral of a random process against a fixed weight. This is the general rule for its variance, and it needs two definitions first.
\(\varepsilon\) is strictly stationary (Link A, executed) with finite variance, hence wide-sense stationary: \(\mathbb{E}[\varepsilon(t)] = 0\) for all \(t\), by construction of \(\varepsilon\), and \(\mathbb{E}[\varepsilon(t)\varepsilon(s)]\) depends on \(t - s\) alone. Define the autocovariance and, as its Fourier transform, the power spectral density; \(\Gamma\) is even, since \(\Gamma(-\tau) = \mathbb{E}[\varepsilon(t)\varepsilon(t-\tau)] = \Gamma(\tau)\) by stationarity (shift \(t\) by \(\tau\)):
\[\Gamma(\tau) := \mathbb{E}\big[\varepsilon(t)\,\varepsilon(t+\tau)\big], \qquad S^{2s}(f) := \int_{-\infty}^{\infty}\! \Gamma(\tau)e^{-i2\pi f\tau}d\tau, \qquad \Gamma(\tau) = \int_{-\infty}^{\infty}\! S^{2s}(f)e^{i2\pi f\tau}df\]
The pair is the Wiener-Khinchin theorem: for \(\Gamma \in L^1(\mathbb{R})\) the transform \(S^{2s}\) exists, is real, even and nonnegative, and the inversion formula holds. Setting \(\tau = 0\) in the inversion gives \(\Gamma(0) = \sigma_\varepsilon^2 = \int S^{2s}df\): the variance is the integral of \(S^{2s}\), which is why it is called a density. How the variance is weighted across frequency by a given integral is exactly what Link C computes, with \(|\hat w|^2\) as the weight.
\(\Gamma\) is real and even, so \(S^{2s}\) is real and even. Tables therefore fold the negative frequencies onto the positive ones and quote the one-sided density:
\[S(f) := 2\,S^{2s}(f)\quad (f>0), \qquad\text{so}\qquad \sigma_\varepsilon^2 = \int_{-\infty}^{\infty}\!S^{2s}(f)\,df = \int_0^{\infty}\! S(f)\,df\]
Everything quoted from a standard is one-sided; every integral over all of \(\mathbb{R}\) below needs two-sided. The conversion \(S^{2s} = \tfrac12 S\) is applied once, explicitly, at the point of use.
Units follow from the definition: \(\varepsilon\) is dimensionless, so \([\Gamma] = 1\), \([S] = \text{Hz}^{-1}\), and \(\int S\,df\) is dimensionless as it must be.
The validation section needs sample paths of \(\varepsilon\) with a prescribed one-sided density \(S\). For a record of length \(D\) sampled every \(\Delta t\):
Every result in this deck uses \(\varepsilon\) through \(\mathbb{E}[\varepsilon] = 0\), \(\Gamma\), and \(\mathbb{E}[\varepsilon^4] < \infty\) only, so it holds for the synthesized process and for any other process with the same \(\Gamma\).
Define the window’s transform \(\hat w(f) := \int_0^T w(t)\,e^{-i2\pi ft}\,dt\) (closed form in A.3). Substitute \(\Gamma(t-s) = \int_{\mathbb{R}} S^{2s}(f)\,e^{i2\pi f(t-s)}df\) into Link B’s double integral and move the \(f\)-integral outside:
\[\operatorname{Var}(Z) = \int_{\mathbb{R}} S^{2s}(f)\, \underbrace{\left[\int_0^T\! w(t)e^{i2\pi ft}dt\right]}_{=\;\overline{\hat w(f)}} \underbrace{\left[\int_0^T\! w(s)e^{-i2\pi fs}ds\right]}_{=\;\hat w(f)}\;df = \int_{\mathbb{R}} S^{2s}(f)\,|\hat w(f)|^2\,df\]
the first bracket being the complex conjugate of the second because \(w\) is real.
The exchange is Fubini again, and its condition holds: \(\iiint |S^{2s}(f)w(t)w(s)|\,dt\,ds\,df \le \sigma_\varepsilon^2 T^2 < \infty\), since \(S^{2s} \ge 0\) and \(\int S^{2s} = \sigma_\varepsilon^2\). The result is an ordinary integral over \(f\) of the deterministic function \(S^{2s}|\hat w|^2\): the spectrum, weighted by how much of each frequency the window lets through.
Parseval fixes the total weight of the window, which is used as a check below:
\[\int_{\mathbb{R}}|\hat w(f)|^2 df = \int_0^T \sin^2\!\omega t\,dt = \frac{T}{2}\]
If \(S^{2s}\) were constant across the support of \(|\hat w|^2\) it could be taken outside, and Parseval would finish the job:
\[\operatorname{Var}(Z) \;\approx\; S^{2s}(f_1)\int_{\mathbb{R}}|\hat w|^2df = S^{2s}(f_1)\,\frac{T}{2} \;=\; S_\varepsilon(f_1)\,\frac{T}{4} \qquad\text{(valid iff } S \text{ is flat over the lobe)}\]
The condition fails here. \(w\) is one period of a sine, so \(|\hat w|^2\) has its main lobe on \([0, 2f_1]\), a \(100\%\) relative bandwidth, and across that interval \(S_\varepsilon\) falls by a factor of \(S_\varepsilon(0)/S_\varepsilon(2f_1) = 11.8\) at \(T = 150\) s.
Link C’s rule needs a spectrum. This is the one measured for the atmospheric boundary layer, and substituting it finishes the calculation.
One more definition before the model, because it is the only free parameter in it. The normalized autocovariance and the integral time and length scales are
\[\varrho(\tau) := \frac{\Gamma(\tau)}{\Gamma(0)}, \qquad \mathcal{T} := \int_0^{\infty}\!\varrho(\tau)\,d\tau, \qquad L := \bar V\,\mathcal{T}\]
\(\mathcal{T}\) is the lag over which the signal retains memory of itself, and \(L = \bar V\mathcal{T}\) converts it to a length by Taylor’s frozen-turbulence hypothesis: eddies of size \(L\) are carried past the rotor at speed \(\bar V\).
\(L\) is fixed by the spectrum at zero frequency. Since \(\Gamma\) is real and even, \(e^{-i2\pi f\tau} = \cos 2\pi f\tau - i\sin 2\pi f\tau\) contributes only its cosine, and the two half-lines contribute equally: \(S(f) = 2S^{2s}(f) = 2\int_{\mathbb{R}}\Gamma(\tau)\cos(2\pi f\tau)\,d\tau = 4\int_0^\infty\Gamma(\tau)\cos(2\pi f\tau)\,d\tau\). Hence \[S(0) = 4\int_0^{\infty}\! \Gamma(\tau)\,d\tau = 4\sigma_\varepsilon^2\mathcal{T} = \frac{4L}{\bar V}\,\sigma_\varepsilon^2\] so any spectrum with integral scale \(L\) must have that value at \(f = 0\). That is where the prefactor in the next slide comes from.
A specific one-parameter model for \(S\), fitted by Kaimal, Wyngaard, Izumi and Coté [KWIC72] to the 1968 Kansas boundary-layer measurements and adopted by IEC 61400-1 [IEC] as its normal turbulence model. In terms of \(\varepsilon\):
\[\boxed{\;S_\varepsilon(f) = \mathrm{TI}^2\;\frac{4L/\bar V}{\big(1+6fL/\bar V\big)^{5/3}}\;} \qquad f \ge 0,\ \text{one-sided}\]
Every piece is forced or measured, none is free:
\(4L/\bar V\)
The value at \(f = 0\) that the previous slide requires of any spectrum with integral scale \(L\).
exponent \(5/3\)
Kolmogorov’s inertial-subrange law, \(S\propto f^{-5/3}\), which the data follow above the corner.
the \(6\)
The one empirical number: it places the corner, at \(f = \bar V/6L\).
It is correctly normalized: substituting \(x = 6fL/\bar V\), \(\int_0^{\infty}\! S_\varepsilon df = \tfrac{2}{3}\int_0^\infty (1+x)^{-5/3}dx = \tfrac23\cdot\tfrac32\,\mathrm{TI}^2 = \mathrm{TI}^2\), as the definition of \(\mathrm{TI}\) demands.
[IEC] fixes \(L\) from the hub height \(z\) alone: \(L = 8.1\Lambda_1\) with \(\Lambda_1 = 0.7\min(z,60)\) m. For the NREL 5 MW rotor, \(z = 90\) m gives \(\Lambda_1 = 42\) m and \(L = 340\) m.
At \(\bar V = 8\) m/s that puts the corner at \(\bar V/6L = 3.9\times10^{-3}\) Hz. The right panel plots \(fS_\varepsilon\) against \(\ln f\), whose area is the variance (\(S\,df = fS\,d\ln f\)); it peaks at \(\bar V/4L = 5.9\times10^{-3}\) Hz (both shown in A.7). The published dither, \(f_1 = 1/150\,\text{s} = 6.7\times10^{-3}\) Hz, sits directly on that peak. The last part of this deck returns to that.
Evaluating the exact integral numerically against the shortcut, and both against a direct simulation of the turbine under a synthesized Kaimal inflow:
| \(T\) | exact \(\operatorname{Var}(Z)\) | shortcut | \(\sigma(\hat g)\) exact | shortcut | simulated | exact/sim |
|---|---|---|---|---|---|---|
| \(150\) s | \(15.65\) | \(12.18\) | \(5.21{\times}10^{-7}\) | \(4.59{\times}10^{-7}\) | \(5.48{\times}10^{-7}\) | \(0.95\) |
| \(300\) s | \(53.08\) | \(45.73\) | \(4.80{\times}10^{-7}\) | \(4.45{\times}10^{-7}\) | \(5.09{\times}10^{-7}\) | \(0.94\) |
| \(600\) s | \(152.9\) | \(141.3\) | \(4.07{\times}10^{-7}\) | \(3.91{\times}10^{-7}\) | \(3.83{\times}10^{-7}\) | \(1.06\) |
\[\boxed{\;\sigma(\hat g) = \frac{6}{aT}\sqrt{\int_{\mathbb{R}}\tfrac12 S_\varepsilon(f)\,|\hat w(f)|^2\,df}\;}\] Agreement with simulation is within \(\mathbf{6\%}\) across a fourfold range of \(T\), with no fitted parameter. The shortcut under-predicts by \(11\) to \(13\%\), because it samples \(S\) at \(f_1\) while the window also collects the larger \(S\) below \(f_1\).
Each link checked separately against a simulation of the full nonlinear turbine, so a failure can be attributed to one link rather than to the chain.
The turbine is integrated with an adaptive solver under a synthesized Kaimal inflow (How \(\varepsilon\) is synthesized), \(240\) periods of \(T = 150\) s at \(\bar V = 8\) m/s, realized \(\mathrm{TI} = 9.86\%\). The gain is held at \(u^\star\), with no adaptation between periods, so what is measured is the estimator alone.
testing A
Record \(y(t)\) and the \(\varepsilon(t)\) that drove it. Regress one on the other: the slope should be \(3\).
testing C
Form \(Z = \int\varepsilon w\,dt\) each period, take its sample variance, compare with \(\int S^{2s}|\hat w|^2 df\).
testing D
Take the sample standard deviation of \(\hat g\) itself and compare with \(\tfrac{6}{aT}\sqrt{\operatorname{Var}Z}\).
Link B is algebra given A: \(\hat g_{\text{noise}} = \tfrac{6}{aT}Z\) follows from \(y = y_0 + 3\varepsilon + r\) by linearity of the estimator, so it is tested through D, which compares the scatter of \(\hat g\) itself with the prediction.
| link | claim | predicted | measured | ratio |
|---|---|---|---|---|
| A | \(y-\bar y = 3\varepsilon\) | slope \(3\) | slope \(3.083\), \(r = 0.9915\) | \(1.037\) |
| C | \(\operatorname{Var}Z = \int S^{2s}\vert\hat w\vert^2 df\) | \(15.65\) | \(15.01\) | \(0.959\) |
| D | \(\sigma(\hat g) = \tfrac{6}{aT}\sqrt{\operatorname{Var}Z}\) | \(5.21{\times}10^{-7}\) | \(5.23{\times}10^{-7}\) | \(1.005\) |
All three within \(5\%\), and the assembled prediction within \(0.5\%\). The \(3.7\%\) excess on A has two parts, both predicted on Link A, executed, concluded. The slope exceeds \(3\) by \(2.8\%\): a term linear in \(\varepsilon\), which is the \(O(\sigma_\varepsilon^2\varepsilon)\) term, \(\kappa_2\sigma_\varepsilon^2\varepsilon = 0.063\,\varepsilon\) in the frozen-rotor limit (slope \(3.06\)) and \(0\) if the rotor tracks. The rest is the remainder uncorrelated with \(\varepsilon\): \(r = 0.9915\) means a residual of \(\sqrt{1-r^2} = 13\%\) of \(\operatorname{sd}(y)\), adding in quadrature, \(\sqrt{1.028^2 + 0.13^2} = 1.037\). Its predicted size, from \(-\tfrac32\varepsilon^2\) and \(\tfrac{C_P''}{2C_P}\delta\lambda^2 = -\tfrac{\kappa_2}{2}(\delta\lambda/\lambda)^2\), is between \(7\%\) (tracking) and \(22\%\) (frozen) of \(\operatorname{sd}(3\varepsilon)\).
With \(\sigma(\hat g)\) in hand, the three design dependences can be derived. Each uses only what the four links established.
Link A gave \(y - \bar y = 3\varepsilon + O(\varepsilon^2)\) at the optimum, and Link B gave \(\hat g_{\text{noise}} = \tfrac{6}{aT}Z\). So the estimator splits into a part that would be present with no wind and a part the wind adds:
\[\hat g = \underbrace{\frac{2}{aT}\int_0^T J\big(u + a\sin\omega t\big)\sin\omega t\,dt}_{\hat g_{\text{det}},\ \text{deterministic}} \;+\; \underbrace{\frac{6}{aT}Z}_{\hat g_{\text{noise}},\ \text{random}}\]
\[\operatorname{Bias}(\hat g) := \mathbb{E}[\hat g] - J'(u), \qquad \sigma(\hat g) := \sqrt{\operatorname{Var}(\hat g)} = \sqrt{\mathbb{E}\big[(\hat g - \mathbb{E}\hat g)^2\big]}\]
\(\hat g_{\text{det}}\) is a number, and \(\mathbb{E}[Z] = \int_0^T\mathbb{E}[\varepsilon]\,w\,dt = 0\) because \(\varepsilon\) is zero-mean. So the two quantities separate: \[\operatorname{Bias}(\hat g) = \hat g_{\text{det}} - J'(u), \qquad \operatorname{Var}(\hat g) = \Big(\frac{6}{aT}\Big)^2\operatorname{Var}(Z)\] The bias comes only from the probe; the scatter comes only from the wind.
Assume \(J\) is four times differentiable near \(u\) and \(a\) is small enough for the Taylor series to be used. Write \(s := \sin\omega t\) and \(\langle\cdot\rangle := \tfrac1T\int_0^T(\cdot)\,dt\). The moments of a sine over a whole period are
\[\langle s\rangle = 0,\qquad \langle s^2\rangle = \tfrac12,\qquad \langle s^3\rangle = 0,\qquad \langle s^4\rangle = \tfrac38,\qquad \langle s^5\rangle = 0\]
Expand \(J(u + as) = J + J'as + \tfrac{J''}{2}a^2s^2 + \tfrac{J'''}{6}a^3s^3 + O(a^4)\) and multiply by \(\tfrac{2}{a}s\) before averaging:
\[\hat g_{\text{det}} = \frac2a\Big[J\langle s\rangle + J'a\langle s^2\rangle + \tfrac{J''}{2}a^2\langle s^3\rangle + \tfrac{J'''}{6}a^3\langle s^4\rangle\Big] + O(a^4) = J' + \frac{a^2}{8}J''' + O(a^4)\]
\[\operatorname{Bias}(\hat g) = \frac{a^2}{8}\,J'''(u) + O(a^4)\] Every even power of \(a\) is killed by an odd moment of \(s\), which is why the leading term is \(a^2\) and not \(a\). Checked numerically on a cubic \(J\), where \(J'''\) is exact: agreement to six digits at \(a = 0.02\), \(0.05\), \(0.10\).
The \(\tfrac18\) is specific to a sinusoidal dither, through \(\langle s^4\rangle = \tfrac38\). A square-wave dither gives \(\tfrac16\).
From the separation, \(\operatorname{Var}(\hat g) = (6/aT)^2\operatorname{Var}(Z)\) with \(Z = \int_0^T\varepsilon\sin\omega t\,dt\).
\(Z\) is built from the wind fluctuation and the fixed weight \(\sin\omega t\) on \([0,T]\). The amplitude \(a\) does not appear in it. Therefore \[\sigma(\hat g) = \frac{6}{aT}\sqrt{\operatorname{Var}(Z)} \;\propto\; \frac1a\] exactly for \(\hat g_{\text{noise}}\). The full scatter also carries \(\hat g_r\) from the remainder \(r\) of Link A, executed, concluded, with \(\operatorname{sd}(r - \mathbb{E}r) = O(\sigma_\varepsilon^2)\); the validation measures both together.
Why \(1/a\): the wind’s contribution to log-power is \(3\varepsilon(t)\) whatever the gain does, and the estimator divides by \(a\) to turn a power change into a slope. A fixed disturbance divided by a smaller number is a larger result.
The two scalings pull opposite ways. Bias wants \(a\) small; scatter wants \(a\) large. Balancing them needs the constant in the second relation, which is what Links C and D supplied.
Average \(N\) consecutive estimates, \(\bar{\hat g}_N := \tfrac1N\sum_{n=1}^N \hat g_n\). Each has the same variance \(\sigma^2 := \operatorname{Var}(\hat g)\); if they were independent, \(\operatorname{Var}(\bar{\hat g}_N) = \sigma^2/N\). They are not quite, because the same wind spans adjacent periods. The exact statement uses the correlation between estimates \(k\) periods apart, which Link C also gives with the window shifted by \(kT\) (derived in A.8), and the variance of a mean of correlated samples (derived in A.9):
\[\rho_k := \frac{\operatorname{Cov}(Z_0,Z_k)}{\operatorname{Var}(Z)} = \frac{\int S^{2s}(f)\,|\hat w(f)|^2\cos(2\pi fkT)\,df}{\int S^{2s}(f)\,|\hat w(f)|^2\,df}, \qquad \operatorname{Var}(\bar{\hat g}_N) = \frac{\sigma^2}{N}\Big[1 + 2\sum_{k=1}^{N-1}\big(1-\tfrac kN\big)\rho_k\Big]\]
| \(T\) | \(\rho_1\) | \(\rho_2\) | sd reduction at \(N=3\) | at \(N=8\) | at \(N=24\) | if independent |
|---|---|---|---|---|---|---|
| \(150\) s | \(-0.099\) | \(-0.008\) | \(1.87\times\) | \(3.14\times\) | \(5.51\times\) | \(1.73\), \(2.83\), \(4.90\) |
| \(600\) s | \(-0.036\) | \(-0.001\) | \(1.78\times\) | \(2.93\times\) | \(5.09\times\) | same |
Adjacent estimates are slightly negatively correlated, because the half-window that ends one period begins the next with the opposite sign, so averaging does a little better than \(\sqrt N\). Measured lag-1 correlation of \(\hat g\) over \(300\) simulated periods at \(T = 600\) s: \(-0.024\), against the predicted \(-0.036\).
Close the loop with a constant gain \(\kappa > 0\), \(u_{n+1} = u_n + \kappa\hat g_n\) (a step up the gradient). Near the optimum \(J'(u_n) = J''\,\tilde u_n + O(\tilde u_n^2)\) with \(\tilde u_n := u_n - u^\star\), and \(\hat g_n = J'(u_n) + \tfrac{a^2}{8}J''' + \hat g_{\text{noise},n}\) by the bias and noise results. The bias is a constant: it shifts the fixed point to \(\tilde u = -a^2J'''/(8J'')\) and leaves the variance unchanged, so it is dropped here. Then, since \(J'' < 0\):
\[\tilde u_{n+1} = (1-K)\,\tilde u_n + \kappa\,\hat g_{\text{noise},n}, \qquad K := \kappa|J''|\]
a first-order autoregression. Its stationary variance, taking the noise uncorrelated across periods (the \(\rho_k\) above are small):
\[\operatorname{Var}(\tilde u) = \frac{\kappa^2\sigma^2(\hat g)}{1-(1-K)^2} = \frac{K}{2-K}\cdot\frac{\sigma^2(\hat g)}{J''^2} \qquad\Longrightarrow\qquad \sigma(\tilde u) = \sqrt{\frac{K}{2-K}}\;\frac{\sigma(\hat g)}{|J''|}\]
This is the sense in which the terminal error is “\(\sigma(\hat g)\) divided by the curvature”: the ratio \(\sigma(\hat g)/|J''|\), scaled by a factor that depends only on the loop gain \(K\). It is a stationary distribution: running longer leaves its width unchanged.
Checked in closed loop at \(K = 0.015\), \(T = 600\) s: predicted \(\sigma(\tilde u) = 0.106\,u^\star\), measured \(0.082\), ratio \(0.777\). That shortfall is the record, not the formula: with \(\alpha = 1-K = 0.985\) the loop’s correlation time is \(67\) periods, the run’s \(270\) post-transient samples span only four of them, and the sample variance of such a series is biased low by an expected factor of \(0.79\) in standard deviation (Appendix A.6). Prediction and measurement agree once that is accounted for.
One design rule, and one discrepancy the derivation does not remove.
For the trend only, take \(\operatorname{Var}(Z) \approx S_\varepsilon(f_1)\,T/4\) with \(f_1 = 1/T\). Above the corner (short \(T\)), \(S_\varepsilon \propto f^{-5/3} \propto T^{5/3}\), so \(\operatorname{Var}(Z) \propto T^{8/3}\) and \(\sigma(\hat g) = \tfrac{6}{aT}\sqrt{\operatorname{Var}Z} \propto T^{1/3}\): rising with \(T\). Below the corner (long \(T\)), \(S_\varepsilon\) is flat, so \(\operatorname{Var}(Z) \propto T\) and \(\sigma(\hat g) \propto T^{-1/2}\): falling. The turnover is therefore a maximum. The exact integral (figure) puts it at \(T \approx 110\) s, with \(\sigma(\hat g)\) within \(1\%\) of that maximum for \(80 \le T \le 150\) s.
The published \(T = 150\) s sits \(1\%\) below that maximum. Lengthening the period reduces the noise, and it also helps a second estimator this loop can run: \(\hat H\), the curvature read from the second harmonic \(2\omega\) of the same dither (the subject of the matrix-gain deck). The rotor is a low-pass filter with time constant \(\tau_{\text{rotor}} = 6.4\) s at \(8\) m/s (A.0c), and it attenuates that harmonic, so
\[\frac{\hat H}{J''} - 1 \;=\; \frac{1}{1+(2\omega\tau_{\text{rotor}})^2} - 1 \;<\; 0\]
At \(T = 600\) s the gradient noise is \(22\%\) lower (\(4.07\) against \(5.21\times10^{-7}\), the table on The answer) and this bias moves from \(-22\%\) to \(-2\%\).
Feed the published configuration [CLR19] through the closed-loop result: \(T = 150\) s, \(a = 13.6\%\) of \(u^\star\), \(J'' = -1.41\times10^{-13}\), and a loop that settles in about three periods, which for \(\tilde u_{n+1} = (1-K)\tilde u_n\) means \((1-K)^3 \approx 1/8\), \(K = 0.5\), so \(\sqrt{K/(2-K)} = 1/\sqrt3\). With \(\sigma(\tilde u) = \sigma(\hat g)/(\sqrt3\,|J''|)\) and \(d\ln\lambda/d\ln u = -1/3\) (Link A under the dither):
\[\sigma(u) = 0.96\,u^\star \qquad\Longrightarrow\qquad \sigma_\lambda = 2.4 \qquad\text{against}\qquad \sigma_\lambda \lesssim 0.14 \ \text{from the published table}\]
inflow spectrum: eliminated
Reconciling would need \(S_\varepsilon\) smaller by \(292\times\), i.e. \(\mathrm{TI} = 0.58\%\) against the stated \(10\%\).
power signal: eliminated
Demodulating generator power \(u\Omega^3\) rather than aerodynamic \(\tau_{\text{aero}}\Omega\) changes \(\sigma(\hat g)\) by \(2\%\) in simulation.
The factor of \(17\) is now analytic, independent of the solver, and two explanations are gone. What remains: \(|J''|\) wrong by that factor, an effective averaging far longer than the reported settling time permits, or an inflow genuinely far quieter at \(f_1\) than IEC Kaimal at \(10\%\). Figure 3 of [CLR19] plots the inflow PSD; its value at \(6.7\times10^{-3}\) Hz decides among them.
established
\(\sigma(\hat g)\) from the inflow spectrum to \(6\%\), nothing fitted. The \(\lambda\) channel drops out at the optimum and only there.
actionable
\(T = 150\) s is near the worst available dither period. Lengthening it reduces gradient noise and curvature bias together.
open
A factor of \(17\) against the published scatter, with two of four candidate explanations eliminated.
The derivations the main line leaned on without stopping to do.
The rotor is a rigid body of inertia \(I\), driven by aerodynamic torque and braked by the generator: \(I\dot\Omega = \tau_{\text{aero}} - \tau_g\) with \(\tau_g = u\Omega^2\). Power is torque times angular speed, and \(\Omega = \lambda V/R\), so with \(A = \pi R^2\)
\[\tau_{\text{aero}} = \frac{P}{\Omega} = \frac{\tfrac12\rho\pi R^2V^3C_P(\lambda)}{\lambda V/R} = \tfrac12\rho\pi R^3V^2\,\frac{C_P(\lambda)}{\lambda}\]
At rest \(\dot\Omega = 0\), so \(\tau_{\text{aero}} = \tau_g = u\lambda^2V^2/R^2\). The \(V^2\) on the two sides cancels, and dividing through:
\[\boxed{\;\frac{C_P(\lambda)}{\lambda^3} = \frac{2}{\rho\pi R^5}\,u =: c\,u\;}\]
A curve set by the blades meets a line set by the gain at \(\lambda_{\text{eq}}(u)\), and \(V\) is gone. That cancellation is the reason for the \(\Omega^2\) law: any other power of \(\Omega\) leaves a factor of \(V\) behind.
\(C_P/\lambda^3\) is not monotone; it peaks near \(\lambda \approx 4\). The physical root is on the falling branch, the other is unstable, and \(\lambda_{\text{eq}}(u)\) means the falling-branch root throughout.
Three layers, from what is a theorem down to what is a fit.
physics fixes the envelope
\(C_P \ge 0\), and \(C_P \le 16/27 \approx 0.593\) for any rotor: the Betz limit, from momentum conservation on the stream tube alone. At \(\lambda \to 0\) the rotor is stopped and extracts nothing; at large \(\lambda\) the blades run faster than the wind can feed them and drag dominates. So \(C_P\) must rise from zero and fall back, and has at least one maximum.
blade design fixes the curve
For a given blade, \(C_P(\lambda)\) is computed by blade-element momentum theory: slice the blade spanwise, look up each section’s lift and drag against its local angle of attack from wind-tunnel airfoil tables, integrate. The result is empirical in its inputs and deterministic in its arithmetic. For a well-designed blade at fixed pitch it has one peak.
what this deck uses
Heier’s closed-form fit to typical BEM curves [H98], remapped so its peak sits at \((\lambda^\star, C_P^{\max}) = (7.5,\,0.49)\), the design values of the NREL 5 MW rotor from [J09]. A stand-in with the right peak and the right asymmetry, steep on the stall side and gentle above.
So “single maximum” is an empirical property of good blades, and the specific curve here is a fit. Two consequences the main line depends on survive any such curve: \(C_P' = 0\) at the peak, which is what Link A uses, and \(C_P/\lambda^3\) being non-monotone, which is why A.0 must pick a branch.
Write the rotor equation of A.0 at fixed \(u\) as \(I\dot\Omega = F(\Omega,V) := \tau_{\text{aero}}(\Omega,V) - u\Omega^2\), with equilibrium \(F(\Omega_{\text{eq}},\bar V) = 0\). For \(\delta\Omega := \Omega - \Omega_{\text{eq}}\) and \(\delta V := V - \bar V = \bar V\varepsilon\), to first order
\[I\,\dot{\delta\Omega} = F_\Omega\,\delta\Omega + F_V\,\delta V, \qquad F_\Omega := \partial F/\partial\Omega,\ F_V := \partial F/\partial V \ \text{at the equilibrium.}\]
From A.0, \(\tau_{\text{aero}} = \tfrac12\rho\pi R^3V^2\,C_P(\lambda)/\lambda\) with \(\lambda = R\Omega/V\), so \(\partial\lambda/\partial\Omega = R/V\) and
\[\frac{\partial\tau_{\text{aero}}}{\partial\Omega} = \tfrac12\rho\pi R^3V^2\,\frac{\lambda C_P'(\lambda) - C_P(\lambda)}{\lambda^2}\,\frac{R}{V} = \tfrac12\rho\pi R^4V\,\frac{\lambda C_P' - C_P}{\lambda^2}, \qquad 2u\Omega_{\text{eq}} = \frac{2\tau_{\text{aero}}}{\Omega_{\text{eq}}} = \rho\pi R^4V\,\frac{C_P}{\lambda^2}\]
the second using \(u\Omega_{\text{eq}}^2 = \tau_{\text{aero}}\) at equilibrium. Therefore
\[F_\Omega = -\tfrac12\rho\pi R^4\bar V\,\frac{3C_P - \lambda C_P'}{\lambda^2} < 0, \qquad \tau_{\text{rotor}} := -\frac{I}{F_\Omega} = \frac{2I\lambda^2}{\rho\pi R^4\bar V\,\big(3C_P(\lambda) - \lambda C_P'(\lambda)\big)}, \qquad b := \frac{F_V\bar V}{I}\]
At the peak \(C_P' = 0\), so \(\tau_{\text{rotor}} = 2I\lambda^{\star2}/(3\rho\pi R^4\bar V C_P^{\max}) = 6.4\) s for \(I = 4.05\times10^{7}\) kg m\(^2\) (rotor \(3.54\times10^{7}\) plus \(97^2\times534\) from the generator through the gearbox, [J09]) and \(\bar V = 8\) m/s. Dividing the linearized equation by \(I\) gives \(\dot{\delta\Omega} + \delta\Omega/\tau_{\text{rotor}} = b\,\varepsilon(t)\), the form on Link A, standing assumptions. The full equation is stable about the same equilibrium and forgets \(\Omega(0)\) in the same way; the linearization makes the rate explicit.
For a single-frequency input \(\varepsilon(t) = \cos(2\pi f t)\) the steady-state solution of \(\dot{\delta\Omega} + \delta\Omega/\tau_{\text{rotor}} = b\,\varepsilon\) is
\[\delta\Omega(t) = \frac{b\,\tau_{\text{rotor}}}{\sqrt{1+(2\pi f\tau_{\text{rotor}})^2}} \cos\big(2\pi f t - \varphi\big), \qquad \varphi = \arctan(2\pi f\tau_{\text{rotor}})\]
a first-order low-pass with corner frequency \(1/(2\pi\tau_{\text{rotor}}) = 0.025\) Hz.
Below the corner, \(\Omega\) follows the wind and \(\lambda\) stays near \(\lambda_{\text{eq}}(u)\); above it, \(\Omega\) barely moves and \(\lambda\) follows \(1/V\). These are the two limits bracketing \(\delta\lambda\) on Link A, executed, continued. A harmonic of the dither at frequency \(f\) is attenuated by \(1/\sqrt{1+(2\pi f\tau_{\text{rotor}})^2}\) and delayed by \(\varphi\); demodulating it in phase with the dither projects onto \(\cos\varphi = 1/\sqrt{1+(2\pi f\tau_{\text{rotor}})^2}\) a second time. The product at the second harmonic \(2\omega\) is \(1/(1+(2\omega\tau_{\text{rotor}})^2)\), the factor on The dither period has a worst case.
Under the standing assumptions \(\lambda(t)\) is a functional of the wind path, and the next slide derives its expansion in powers of \(\varepsilon\) about \(\varepsilon \equiv 0\), where \(\lambda = \lambda_{\text{eq}}(u)\):
\[\lambda(t) = \lambda_{\text{eq}}(u) + \Lambda_1[\varepsilon](t) + \Lambda_2[\varepsilon](t) + O(\varepsilon^3)\]
\[\Lambda_1[\varepsilon](t) = \int_0^\infty h(s)\,\varepsilon(t-s)\,ds, \qquad \Lambda_2[\varepsilon](t) = \iint_0^\infty k(s_1,s_2)\,\varepsilon(t-s_1)\,\varepsilon(t-s_2)\,ds_1\,ds_2\]
with \(h\) and \(k\) fixed kernels set by the rotor equation. Taking expectations,
\[\mathbb{E}\,\Lambda_1 = \int_0^\infty h(s)\,\mathbb{E}[\varepsilon(t-s)]\,ds = 0, \qquad \big|\mathbb{E}\,\Lambda_2\big| = \Big|\iint k(s_1,s_2)\,\Gamma(s_1-s_2)\,ds_1ds_2\Big| \le \|k\|_{1}\,\Gamma(0) = \|k\|_{1}\,\sigma_\varepsilon^2\]
the first because \(\mathbb{E}[\varepsilon] = 0\), the second because \(|\Gamma(\tau)| \le \Gamma(0)\) (Cauchy-Schwarz). At \(u = u^\star\), \(\lambda_{\text{eq}}(u^\star) = \lambda^\star\), so \(\bar\lambda - \lambda^\star = \mathbb{E}\,\Lambda_2 + O(\mathbb{E}|\varepsilon|^3) = O(\sigma_\varepsilon^2)\).
In the two rotor limits. Frozen \(\Omega\): \(\lambda = \lambda^\star/(1+\varepsilon) = \lambda^\star(1 - \varepsilon + \varepsilon^2 - \dots)\), so \(\Lambda_1 = -\lambda^\star\varepsilon\) has mean zero and \(\Lambda_2 = \lambda^\star\varepsilon^2\) has mean \(\lambda^\star\sigma_\varepsilon^2 = 0.01\,\lambda^\star\). Tracking \(\Omega\): \(\lambda = \lambda^\star\) and the difference is zero. With the linearized rotor of A.0c, \(\lambda = \lambda^\star(1 + \delta\Omega/\Omega_{\text{eq}})(1 - \varepsilon + \varepsilon^2 - \dots)\); the first-order part \(\delta\Omega/\Omega_{\text{eq}} - \varepsilon\) has mean zero, and the second-order part \(\varepsilon^2 - \varepsilon\,\delta\Omega/\Omega_{\text{eq}}\) has mean \(\sigma_\varepsilon^2 - \mathbb{E}[\varepsilon\,\delta\Omega]/\Omega_{\text{eq}}\) with \(|\mathbb{E}[\varepsilon\,\delta\Omega]| = \big|b\int_0^\infty e^{-s/\tau_{\text{rotor}}}\Gamma(s)\,ds\big| \le b\,\tau_{\text{rotor}}\,\sigma_\varepsilon^2\).
\(\Omega(t)\) solves \(I\dot\Omega = F(\Omega,V)\), \(F := \tau_{\text{aero}} - u\Omega^2\), driven by \(V = \bar V(1+\varepsilon)\), with \(F\) smooth and the equilibrium stable (\(F_\Omega < 0\), A.0c). Seek the solution ordered by powers of \(\varepsilon\), \(\Omega = \Omega_{\text{eq}} + \Omega_1 + \Omega_2 + \dots\) with \(\Omega_n\) of order \(n\), expand \(F\) about \((\Omega_{\text{eq}},\bar V)\), and collect equal orders:
Time invariance of \(F\) makes the kernels depend on lags only; causality puts the integrals on \(s \ge 0\); stability makes \(e^{-s/\tau_{\text{rotor}}}\) integrable, so each \(\Omega_n\) is bounded by a constant times \(\max|\varepsilon|^n\) over the filter’s memory.
With \(R\Omega_{\text{eq}}/\bar V = \lambda_{\text{eq}}(u)\) and \(1/(1+\varepsilon) = 1 - \varepsilon + \varepsilon^2 - \dots\), \[\lambda = \frac{R\Omega}{\bar V(1+\varepsilon)} = \lambda_{\text{eq}}\Big(1 + \frac{\Omega_1}{\Omega_{\text{eq}}} + \frac{\Omega_2}{\Omega_{\text{eq}}} + \dots\Big)\big(1 - \varepsilon + \varepsilon^2 - \dots\big)\] \[\Lambda_1 = \lambda_{\text{eq}}\Big(\frac{\Omega_1}{\Omega_{\text{eq}}} - \varepsilon\Big), \qquad \Lambda_2 = \lambda_{\text{eq}}\Big(\frac{\Omega_2}{\Omega_{\text{eq}}} - \varepsilon\frac{\Omega_1}{\Omega_{\text{eq}}} + \varepsilon^2\Big)\]
These are the functionals \(\Lambda_1\), \(\Lambda_2\) of A.0d: \(\Lambda_1\) is linear in the path because \(\Omega_1\) is; \(\Lambda_2\) is quadratic because \(\Omega_2\), \(\varepsilon\Omega_1\) and \(\varepsilon^2\) are. The frozen rotor is the case \(\Omega_1 = \Omega_2 = 0\), which gives \(\Lambda_1 = -\lambda_{\text{eq}}\varepsilon\) and \(\Lambda_2 = \lambda_{\text{eq}}\varepsilon^2\) as on A.0d.
Let \(y\) be \(T\)-periodic with Fourier series \(y = \tfrac{a_0}{2} + \sum_{k\ge1}(a_k\cos k\omega t + b_k\sin k\omega t)\), \(\omega := 2\pi/T\). Multiply by \(\sin\omega t\), integrate over one period, and use three product-to-sum identities:
\[\int_0^T\!\sin\omega t\,dt = 0, \qquad \int_0^T\!\cos k\omega t\,\sin\omega t\,dt = \tfrac12\!\int_0^T\!\big[\sin(k{+}1)\omega t - \sin(k{-}1)\omega t\big]dt = 0,\] \[\int_0^T\!\sin k\omega t\,\sin\omega t\,dt = \tfrac12\!\int_0^T\!\big[\cos(k{-}1)\omega t - \cos(k{+}1)\omega t\big]dt = \begin{cases} T/2, & k = 1\\ 0, & k \ne 1\end{cases}\]
because a non-constant sinusoid integrates to zero over whole periods, while for \(k = 1\) the first cosine is \(\cos0 = 1\). Every term dies except one:
\[\int_0^T y(t)\sin\omega t\,dt = b_1\cdot\frac{T}{2} \qquad\Longrightarrow\qquad b_1 = \frac{2}{T}\int_0^T y(t)\sin\omega t\,dt\]
Now the estimator, with the constants pulled out of the integral: \[\hat g = \frac{1}{T}\int_0^T y(t)\,\frac{2}{a}\sin\omega t\,dt = \frac{1}{a}\cdot\underbrace{\frac{2}{T}\int_0^T y(t)\sin\omega t\,dt}_{=\;b_1} = \frac{b_1}{a}\] The estimator is the first sine coefficient of the measured log-power, divided by the probe amplitude. Its \(2/a\) is the Fourier \(2/T\) times the \(1/a\) that turns a power swing into a slope.
Two idealizations, both stated: \(\varepsilon \equiv 0\), so \(V = \bar V\) is constant; and the rotor sits at its equilibrium at every instant, so \(\lambda(t) = \lambda_{\text{eq}}(u(t))\) with \(u(t) = u + a\sin\omega t\). From What we need from the turbine, \(P = \tfrac12\rho A\bar V^3C_P(\lambda)\) and \(J(u) := \ln C_P(\lambda_{\text{eq}}(u))\). Therefore
\[y(t) = \ln P(t) = \ln\big(\tfrac12\rho A\bar V^3\big) + \ln C_P\big(\lambda_{\text{eq}}(u(t))\big) = \underbrace{\ln\big(\tfrac12\rho A\bar V^3\big)}_{\text{a constant}} + J\big(u + a\sin\omega t\big)\]
The constant contributes nothing to \(b_1\), because \(\int_0^T\sin\omega t\,dt = 0\) (A.1). So for the purpose of computing \(b_1\), \(y\) may be replaced by \(J(u + a\sin\omega t)\), which is what the next slide expands. Both idealizations are relaxed in the main line: the first by Links A through D, the second by the rotor-dynamics correction on The dither period has a worst case.
Taylor-expand \(J(u + a\sin\omega t)\) in \(a\):
\[J(u + a\sin\omega t) = J + J'a\sin\omega t + \frac{J''}{2}a^2\sin^2\omega t + \frac{J'''}{6}a^3\sin^3\omega t + O(a^4)\]
To read off \(b_1\), each power of \(\sin\omega t\) must be rewritten as a sum of harmonics. Two identities, the second from \(\sin3\theta = 3\sin\theta - 4\sin^3\theta\) rearranged:
\[\sin^2\theta = \tfrac12 - \tfrac12\cos2\theta, \qquad \sin^3\theta = \tfrac34\sin\theta - \tfrac14\sin3\theta\]
Now collect the coefficient of \(\sin\omega t\) term by term:
| term | its \(\sin\omega t\) content | contribution to \(b_1\) |
|---|---|---|
| \(J\) | none | \(0\) |
| \(J'a\sin\omega t\) | itself | \(J'a\) |
| \(\tfrac{J''}{2}a^2\sin^2\omega t\) | constant and \(\cos2\omega t\) only | \(0\) |
| \(\tfrac{J'''}{6}a^3\sin^3\omega t\) | \(\tfrac34\sin\omega t\) | \(\tfrac{J'''}{6}\cdot\tfrac34\,a^3 = \tfrac{a^3}{8}J'''\) |
\[b_1 = aJ' + \frac{a^3}{8}J''' + O(a^5) \qquad\Longrightarrow\qquad \hat g = \frac{b_1}{a} = J' + \frac{a^2}{8}J''' + O(a^4)\] Every even power of \(\sin\) is a constant plus cosines (A.2), so only odd powers of \(a\) reach \(b_1\), and after the division only even powers reach \(\hat g\). Same \(a^2/8\) as on The bias grows as \(a^2\), by a different route.
With \(s = \sin\omega t\) and \(\langle\cdot\rangle = \tfrac1T\int_0^T(\cdot)\,dt\) over one period:
\[\langle s^{2m+1}\rangle = 0 \quad\text{for every } m \ge 0\]
because \(\sin\omega t\) is odd about \(t = T/2\) and the interval is symmetric about that point, so the two halves cancel. For the even moments,
\[\langle s^2\rangle = \Big\langle\tfrac{1-\cos2\omega t}{2}\Big\rangle = \tfrac12, \qquad \langle s^4\rangle = \Big\langle\tfrac{3 - 4\cos2\omega t + \cos4\omega t}{8}\Big\rangle = \tfrac38\]
using \(\sin^4\theta = \tfrac18(3 - 4\cos2\theta + \cos4\theta)\) and that every non-constant cosine averages to zero over a whole period. These are the only moments the bias derivation uses.
The window is \(w(t) = \sin\omega_1 t\) on \([0,T]\) with \(\omega_1 = 2\pi/T\), and zero elsewhere. Write \(\beta := 2\pi f\) and \(\sin\omega_1 t = (e^{i\omega_1 t} - e^{-i\omega_1 t})/2i\):
\[\hat w(f) = \int_0^T \sin\omega_1 t\,e^{-i\beta t}\,dt = \frac{1}{2i}\left[\frac{e^{i(\omega_1-\beta)T}-1}{i(\omega_1-\beta)} + \frac{e^{-i(\omega_1+\beta)T}-1}{i(\omega_1+\beta)}\right]\]
Since \(\omega_1T = 2\pi\), both exponentials equal \(e^{-i\beta T}\) and the fractions combine:
\[\boxed{\;\hat w(f) = \frac{\omega_1\big(1 - e^{-i2\pi fT}\big)}{\omega_1^2 - (2\pi f)^2}\;} \qquad\Longrightarrow\qquad |\hat w(f)|^2 = \frac{4\omega_1^2\sin^2(\pi fT)}{\big(\omega_1^2 - 4\pi^2f^2\big)^2}\]
At \(f = f_1 = 1/T\) numerator and denominator both vanish; the limit is \(|\hat w(f_1)|^2 = T^2/4\). The main lobe lies between the first two zeros of \(\sin^2(\pi fT)\), at \(f = 0\) and \(f = 2f_1\), which is the \([0, 2f_1]\) quoted on A shortcut that does not apply here. Checked against a numerical transform at four frequencies to all printed digits.
Parseval’s identity for square-integrable \(w\) states \(\int_{\mathbb{R}}|\hat w(f)|^2\,df = \int_{\mathbb{R}}|w(t)|^2\,dt\). The right side is elementary:
\[\int_{\mathbb{R}}|\hat w(f)|^2\,df = \int_0^T\sin^2\omega_1 t\,dt = \int_0^T\frac{1-\cos2\omega_1 t}{2}\,dt = \frac{T}{2}\]
the cosine integrating to zero over the two full cycles it completes on \([0,T]\). This fixes the total weight the window places on the spectrum, and it is what the narrowband shortcut in Link C uses when it pulls \(S\) outside the integral.
Let \(x_{n+1} = \alpha x_n + e_n\) with \(|\alpha| < 1\), \(e_n\) zero-mean with variance \(\sigma_e^2\) and uncorrelated with \(x_n\). If \(x\) is stationary then \(\operatorname{Var}(x_{n+1}) = \operatorname{Var}(x_n) =: \Sigma\), and taking variances of both sides,
\[\Sigma = \alpha^2\Sigma + \sigma_e^2 \qquad\Longrightarrow\qquad \Sigma = \frac{\sigma_e^2}{1-\alpha^2}\]
On The terminal error of the closed loop, \(\alpha = 1 - K\) and \(e_n = \kappa\hat g_{\text{noise},n}\), so \(\sigma_e^2 = \kappa^2\sigma^2(\hat g)\) and \(1-\alpha^2 = 1-(1-K)^2 = K(2-K)\). Substituting \(\kappa = K/|J''|\) gives the boxed result there. Stationarity requires \(|1-K| < 1\), that is \(0 < K < 2\), which is the loop’s stability condition.
Take \(N\) consecutive samples of a stationary process with variance \(\sigma^2\) and autocorrelations \(\rho_k\), and form the sample variance \(s^2 := \tfrac1N\sum_{n=1}^N(x_n - \bar x)^2\) with \(\bar x := \tfrac1N\sum_n x_n\) the sample mean. Take the process zero-mean (subtract the mean otherwise). Expanding the square, \(\sum_n(x_n-\bar x)^2 = \sum_n x_n^2 - 2\bar x\sum_n x_n + N\bar x^2 = \sum_n x_n^2 - N\bar x^2\), so
\[\mathbb{E}[s^2] = \frac1N\sum_{n=1}^N\mathbb{E}[x_n^2] - \mathbb{E}[\bar x^2] = \sigma^2 - \operatorname{Var}(\bar x), \qquad \operatorname{Var}(\bar x) = \frac{\sigma^2}{N}\Big[1 + 2\sum_{k=1}^{N-1}\big(1-\tfrac kN\big)\rho_k\Big]\ \text{(A.9)}\]
For an AR(1), \(\rho_k = \alpha^k\). With \(\alpha = 0.985\) and \(N = 270\) the bracket is \(170\), so \(\mathbb{E}[s^2] = 0.628\,\sigma^2\) and the expected sample standard deviation is \(0.79\,\sigma\). A persistent series sampled for only a few correlation times has not had room to wander as far as it eventually will, and the sample variance records that. The measured/predicted ratio of \(0.777\) on the terminal-error slide is this effect, not a failure of the formula.
Variance per decade. With \(u := \ln f\), \(df = f\,du\), so \[\sigma_\varepsilon^2 = \int_0^\infty S(f)\,df = \int_{-\infty}^{\infty} f\,S(f)\,d(\ln f)\] On a logarithmic frequency axis the area under \(fS\) is the variance; the contribution of one decade is the area of \(fS\) over that decade.
The peak. Write \(c := 6L/\bar V\), so \(S_\varepsilon = \mathrm{TI}^2(4L/\bar V)(1+cf)^{-5/3}\) and \(fS_\varepsilon \propto f(1+cf)^{-5/3}\). Differentiate: \[\frac{d}{df}\Big[f(1+cf)^{-5/3}\Big] = (1+cf)^{-5/3} - \tfrac53\,cf\,(1+cf)^{-8/3} = (1+cf)^{-8/3}\Big[(1+cf) - \tfrac53 cf\Big] = (1+cf)^{-8/3}\Big[1 - \tfrac23 cf\Big]\] which vanishes at \(cf = 3/2\), that is \(f = \tfrac{3}{2c} = \tfrac{3\bar V}{12L} = \tfrac{\bar V}{4L}\), and changes sign from positive to negative there: a maximum. At \(\bar V = 8\) m/s, \(L = 340\) m this is \(5.9\times10^{-3}\) Hz, against the corner \(\bar V/6L = 3.9\times10^{-3}\) Hz.
The estimate from period \(k\) uses the window shifted by \(kT\), \(w_k(t) := w(t-kT)\), so \(Z_k := \int_{\mathbb{R}}\varepsilon(t)\,w_k(t)\,dt\). Substituting \(t' = t - kT\), the shift becomes a phase on the transform: \(\hat w_k(f) = \int w(t-kT)\,e^{-i2\pi ft}dt = e^{-i2\pi fkT}\int w(t')\,e^{-i2\pi ft'}dt' = e^{-i2\pi fkT}\,\hat w(f)\). Repeating Link C’s calculation with the two windows \(w\) and \(w_k\),
\[\operatorname{Cov}(Z_0,Z_k) = \iint w(t)\,w(s-kT)\,\Gamma(t-s)\,dt\,ds = \int_{\mathbb{R}} S^{2s}(f)\,\overline{\hat w(f)}\,e^{-i2\pi fkT}\hat w(f)\,df = \int_{\mathbb{R}} S^{2s}(f)\,|\hat w(f)|^2\,e^{-i2\pi fkT}\,df\]
\(S^{2s}|\hat w|^2\) is even in \(f\), so the sine part of \(e^{-i2\pi fkT}\) integrates to zero and \[\rho_k := \frac{\operatorname{Cov}(Z_0,Z_k)}{\operatorname{Var}(Z)} = \frac{\int S^{2s}(f)\,|\hat w(f)|^2\cos(2\pi fkT)\,df}{\int S^{2s}(f)\,|\hat w(f)|^2\,df}\] the formula on Averaging over \(N\) periods. Dividing by \(6/aT\) on both sides leaves the ratio unchanged, so \(\rho_k\) is also the correlation of \(\hat g_{\text{noise}}\) across periods.
Let \(x_1,\dots,x_N\) have common variance \(\sigma^2\) and correlations \(\operatorname{Corr}(x_n,x_m) = \rho_{|n-m|}\), and \(\bar x := \tfrac1N\sum_n x_n\). Variance of a sum is the sum of all covariances:
\[\operatorname{Var}(\bar x) = \frac1{N^2}\sum_{n=1}^N\sum_{m=1}^N\operatorname{Cov}(x_n,x_m) = \frac{\sigma^2}{N^2}\sum_{n=1}^N\sum_{m=1}^N\rho_{|n-m|}\]
Count the pairs by lag \(k := |n-m|\): there are \(N\) pairs with \(k = 0\) and \(2(N-k)\) pairs with lag \(k \ge 1\) (each unordered pair twice). Hence
\[\operatorname{Var}(\bar x) = \frac{\sigma^2}{N^2}\Big[N + 2\sum_{k=1}^{N-1}(N-k)\rho_k\Big] = \frac{\sigma^2}{N}\Big[1 + 2\sum_{k=1}^{N-1}\Big(1-\frac kN\Big)\rho_k\Big]\]
With all \(\rho_k = 0\) the bracket is \(1\) and \(\operatorname{Var}(\bar x) = \sigma^2/N\), the independent case. Applied to \(\hat g_n\) with the \(\rho_k\) of A.8 this is the formula on Averaging over \(N\) periods; applied to the closed-loop iterates with \(\rho_k = \alpha^k\) it is the bracket in A.6.
[R17] M. A. Rotea, Logarithmic power feedback for extremum seeking control of wind turbines, IFAC-PapersOnLine 50(1) (2017) 4504–4509. doi:10.1016/j.ifacol.2017.08.381
[CLR19] U. Ciri, S. Leonardi & M. A. Rotea, Evaluation of log-of-power extremum seeking control for wind turbines using large eddy simulations, Wind Energy 22 (2019) 992–1002. doi:10.1002/we.2336
[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
[KR24] D. Kumar & M. A. Rotea, Optimal tip-speed ratio for degraded blades, Wind Energy Science 9 (2024) 2133–2146. doi:10.5194/wes-9-2133-2024
[RKAJ24] M. A. Rotea, D. Kumar, E. J. Aju & Y. Jin, Multi-row extremum seeking for wind farm power maximization, J. Phys. Conf. Ser. 2767 (2024) 032043. doi:10.1088/1742-6596/2767/3/032043
[MGR24] S. P. Mulders, N. Gallo & M. A. Rotea, Analysis of extremum seeking control for wind turbine torque controller optimization by aerodynamic and generator power objectives, ACC (2024). arXiv:2407.08059
[GKN12] A. Ghaffari, M. Krstić & D. Nešić, Multivariable Newton-based extremum seeking, Automatica 48 (2012) 1759–1767. doi:10.1016/j.automatica.2012.05.059
[S00] J. C. Spall, Adaptive stochastic approximation by the simultaneous perturbation method, IEEE Trans. Automat. Contr. 45 (2000) 1839–1853. PDF
[LM23] C. Lauand & S. Meyn, Quasi-stochastic approximation: design principles with applications to extremum seeking control, IEEE Control Systems Magazine 43 (2023). doi:10.1109/MCS.2023.3291884
[A22] N. J. Abbas et al., A reference open-source controller for fixed and floating offshore wind turbines, Wind Energy Science 7 (2022) 53–73. doi:10.5194/wes-7-53-2022
[H98] S. Heier, Grid Integration of Wind Energy Conversion Systems, Wiley (1998). Source of the analytic \(C_P(\lambda,\beta)\) fit.
[J09] J. Jonkman, S. Butterfield, W. Musial & G. Scott, Definition of a 5-MW reference wind turbine, NREL/TP-500-38060 (2009). PDF · [IEC] IEC 61400-1 ed. 3, Wind turbines, Part 1: Design requirements, normal turbulence model (2005). IEC
[KWIC72] J. C. Kaimal, J. C. Wyngaard, Y. Izumi & O. R. Coté, Spectral characteristics of surface-layer turbulence, Q. J. R. Meteorol. Soc. 98, 563–589 (1972). DOI
Companion to Extremum Seeking Control of Wind Turbines.
← Wind Turbine Control · The Wind as a Process