<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">WES</journal-id><journal-title-group>
    <journal-title>Wind Energy Science</journal-title>
    <abbrev-journal-title abbrev-type="publisher">WES</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Wind Energ. Sci.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">2366-7451</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/wes-7-1605-2022</article-id><title-group><article-title>Lidar-assisted model predictive control of wind turbine fatigue via online rainflow counting <?xmltex \hack{\break}?>considering stress history</article-title><alt-title>Lidar-assisted model predictive control of wind turbine fatigue</alt-title>
      </title-group><?xmltex \runningtitle{Lidar-assisted model predictive control of wind turbine fatigue}?><?xmltex \runningauthor{S. Loew and C. L. Bottasso}?>
      <contrib-group>
        <contrib contrib-type="author" corresp="no">
          <name><surname>Loew</surname><given-names>Stefan</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-3342-6548</ext-link></contrib>
        <contrib contrib-type="author" corresp="yes">
          <name><surname>Bottasso</surname><given-names>Carlo L.</given-names></name>
          <email>carlo.bottasso@tum.de</email>
        <ext-link>https://orcid.org/0000-0002-9931-4389</ext-link></contrib>
        <aff id="aff1"><institution>Wind Energy Institute, Technical University of Munich, 85748
Garching b. München, Germany</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Carlo L. Bottasso (carlo.bottasso@tum.de)</corresp></author-notes><pub-date><day>3</day><month>August</month><year>2022</year></pub-date>
      
      <volume>7</volume>
      <issue>4</issue>
      <fpage>1605</fpage><lpage>1625</lpage>
      <history>
        <date date-type="received"><day>14</day><month>October</month><year>2021</year></date>
           <date date-type="rev-request"><day>25</day><month>October</month><year>2021</year></date>
           <date date-type="rev-recd"><day>2</day><month>June</month><year>2022</year></date>
           <date date-type="accepted"><day>23</day><month>June</month><year>2022</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2022 Stefan Loew</copyright-statement>
        <copyright-year>2022</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022.html">This article is available from https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022.html</self-uri><self-uri xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022.pdf">The full text article is available as a PDF file from https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d1e89">The formulation of parametric online rainflow counting implements the standard fatigue estimation process and a stress history in the cost function of a model predictive controller. The formulation is tested in realistic simulation scenarios in which the states are estimated by a moving horizon estimator and the wind is predicted by a lidar simulator. The tuning procedure for the controller toolchain is carefully explained. In comparison to a conventional model predictive controller (MPC) in a turbulent wind setting, the novel formulation is especially superior with low lidar quality, benefits more from the availability of wind prediction, and exhibits a more robust performance with shorter prediction horizons.
A simulation excerpt with the novel formulation provides deeper insight into the update of the stress history and the fatigue cost parameters.
Finally, in a deterministic gust setting, both the conventional and the novel MPC – despite their completely different fatigue costs – exhibit similar pitch behavior and tower oscillations.</p>
  </abstract>
    </article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d1e101">Fatigue is damage of a material caused by cyclic application of mechanical stress. For wind turbines, fatigue has a large impact on lifetime, for example, of tower, blades, and drivetrain and is a main design driver.
Model predictive controllers (MPCs) enable optimal control of turbines by utilizing predictions of the incoming wind by a light detection and ranging (lidar) device <xref ref-type="bibr" rid="bib1.bibx7 bib1.bibx41" id="paren.1"/>.
Based on these input predictions, stress time series at crucial spots in the turbine structure can be predicted.
Rainflow counting (RFC) is the standard method for the decomposition of stress time series for fatigue estimation. Until recently, RFC could not be implemented in MPCs <xref ref-type="bibr" rid="bib1.bibx5" id="paren.2"/> and could only be used for post-processing of measured and simulated data.
In <xref ref-type="bibr" rid="bib1.bibx29" id="text.3"/>, an MPC formulation was presented that externalizes the RFC evaluation and includes its results back into the MPC via time-varying parameters. Therefore, this formulation is referred to as “parametric online rainflow counting” (PORFC). PORFC allows for the direct and rigorous incorporation of  fatigue in the cost function or constraints of MPCs.</p>
      <p id="d1e113">In PORFC, fatigue is calculated based on stress information from the prediction horizon of the MPC, which is in the order of a few seconds.
However, fatigue is a long-term effect in which stress cycles are usually defined on much longer time spans.
Therefore, in <xref ref-type="bibr" rid="bib1.bibx30" id="text.4"/> PORFC was combined with a systematic incorporation of historic stress samples (“residue”).
In the same work, this formulation was simulated in an idealized setting in which only a few degrees of freedom (DOF) in the plant turbine model were activated and in which full information about the incoming wind and the turbine states was assumed.</p>
      <p id="d1e119">The main goal of the present work is to thoroughly assess the formulation in a more realistic simulation scenario.
Particularly, a mismatch is introduced between the MPC-internal and the plant models, a moving horizon estimator provides initial state estimates for the MPC, and a lidar simulator is utilized to generate a realistically imperfect wind estimate.
The assessment is performed in several turbulent as well as deterministic gust scenarios.</p>
      <p id="d1e122">This paper is organized as follows.
In Sect. <xref ref-type="sec" rid="Ch1.S2"/>, the phenomenon of fatigue and cycle identification are reviewed. This analysis is the basis for an application-focused description of PORFC in Sect. <xref ref-type="sec" rid="Ch1.S3"/>.
In Sect. <xref ref-type="sec" rid="Ch1.S4"/>, a moving horizon estimator is formulated.
In Sect. <xref ref-type="sec" rid="Ch1.S5"/>, the controller toolchain and the tuning of each of its elements are presented.
Finally, PORFC is compared to a conventional MPC and to a conventional proportional integral derivative (PID) controller in the above-mentioned simulation scenarios.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Review of fatigue estimation</title>
      <p id="d1e141">In the following, fatigue is defined, cycle identification is explained, and the concept of <italic>residue</italic> is presented.</p>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Definition of fatigue</title>
      <p id="d1e154">In the following, the phenomenon of fatigue is defined for conditions and assumptions that apply to the wind energy domain: namely mechanical fatigue, normal ambient temperatures, neglection of irreversible strain effects, and invariance with respect to time.
In this setting,
fatigue is damage of a material caused by cyclic application of mechanical stress.
Without loss of information, the fatigue impact of a given stress-trajectory can be analyzed solely based on its extrema or “reversals”. This implies that the shape and contained frequencies of the original continuous stress trajectory are considered to be irrelevant for fatigue estimation <xref ref-type="bibr" rid="bib1.bibx4" id="paren.5"/>.
Therefore, the fatigue impact of a reversal sequence is fully determined by its contained individual stress cycles.
Each stress cycle can be represented by a cosine function.
A stress trajectory typically contains full cycles, which are cosines of a full period, and half cycles, which are cosines of only a half period. Half cycles therefore represent either a rising or falling transient.
Instead of storing three (full cycle) or two (half cycle) stress samples, it is common to store two stress samples and a weight, which is valued <inline-formula><mml:math id="M1" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> (full cycle) or <inline-formula><mml:math id="M2" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula> (half cycle).
The two stress samples can be the cycle stress maximum and minimum or the stress amplitude <inline-formula><mml:math id="M3" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and mean <inline-formula><mml:math id="M4" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">m</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. Instead of stress amplitude, stress range <inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">r</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is frequently used as well.</p>
      <p id="d1e257">Typically, fatigue impact of a stress cycle mainly correlates with its stress amplitude: a positive stress mean increases whereas a negative stress mean decreases fatigue impact. Quantitatively, this <italic>mean stress effect</italic> is expressed by the Goodman equation <xref ref-type="bibr" rid="bib1.bibx17" id="paren.6"/> (p. 184), which leads to the equivalent stress <inline-formula><mml:math id="M6" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">eq</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>.
Consequently, equivalent stress is used to calculate the number of cycles to failure,
            <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M7" display="block"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mi>f</mml:mi><mml:mi mathvariant="normal">SN</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">eq</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          via the inverse S–N or “Woehler” curve, which typically has a piecewise definition over the stress axis.
Fatigue damage of a given stress cycle,
            <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M8" display="block"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>c</mml:mi></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          is obtained by the reciprocal of the number of cycles to failure.
Total damage of the given stress trajectory is obtained by linear accumulation
<inline-formula><mml:math id="M9" display="inline"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>c</mml:mi></mml:msub><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>
of damages of individual stress cycles according to the Miner–Palmgren rule <xref ref-type="bibr" rid="bib1.bibx34" id="paren.7"/>.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Cycle identification via the rainflow algorithm</title>
      <p id="d1e394">Cycle identification is straightforward if, for example, a simple sinusoid is analyzed. There, amplitudes, mean values, and number of cycles are obvious. However, realistic stress trajectories usually are highly complex and contain stress cycles that can be nested (“nested cycles”). Additionally, half and full cycles can be present, as stated above. The most widely accepted algorithm for cycle identification from complex trajectories is the rainflow(-counting) algorithm (RFC) <xref ref-type="bibr" rid="bib1.bibx3" id="paren.8"/>. A flowchart of the rainflow algorithm is displayed in Fig. <xref ref-type="fig" rid="Ch1.F1"/>.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F1" specific-use="star"><?xmltex \currentcnt{1}?><?xmltex \def\figurename{Figure}?><label>Figure 1</label><caption><p id="d1e404">Flowchart of the MATLAB implementation <monospace>rainflow()</monospace> of the <italic>three-point algorithm</italic> (simplified from <xref ref-type="bibr" rid="bib1.bibx46" id="altparen.9"/>). Stress extrema are called “reversals”. The range <inline-formula><mml:math id="M10" display="inline"><mml:mrow><mml:mi>r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">X</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo>|</mml:mo><mml:mi>X</mml:mi><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi>X</mml:mi><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>)</mml:mo><mml:mo>|</mml:mo></mml:mrow></mml:math></inline-formula> of a stress value pair <inline-formula><mml:math id="M11" display="inline"><mml:mi mathvariant="bold-italic">X</mml:mi></mml:math></inline-formula> is the absolute value of the difference between both stresses.</p></caption>
          <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f01.png"/>

        </fig>

      <p id="d1e468">At the beginning of the algorithm, RFC receives as input a stress trajectory and extracts its reversals (extrema).
Throughout the algorithm, reversals are read consecutively from left to right. Each new reversal is stored in an operational memory. From this memory, cycles are identified based on a triplet of reversals.
The Rainflow algorithm contains four main loops.
<italic>Loop 1</italic> initiates the reading of a new reversal sample if fewer than three reversals are in the operational memory.
<italic>Loop 2</italic> initiates the reading of a new reversal if, based on the current operational memory, no cycle could be identified.
<italic>Loop 3</italic> and <italic>Loop 4</italic> initiate the subsequent check for a cycle in the current operational memory and are triggered after identification of a half or full cycle, respectively.
A more comprehensive explanation of the algorithm can be found in <xref ref-type="bibr" rid="bib1.bibx46" id="text.10"/>.</p>
      <p id="d1e487">As shown above, the Rainflow algorithm contains algorithmic branches and loops. Thus, a crucial property of the Rainflow algorithm is its discontinuous output behavior. Furthermore, the number <inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> of identified cycles is not known before execution but bounded by the number of extrema.</p>
      <p id="d1e501">The characteristics of the identified cycles that are output by RFC for each cycle <inline-formula><mml:math id="M13" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> are stress range <inline-formula><mml:math id="M14" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">r</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [Pa], stress mean <inline-formula><mml:math id="M15" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">m</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [Pa], sample index of cycle start <inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">start</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [–], sample index of cycle end <inline-formula><mml:math id="M17" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">end</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [–], and cycle weight <inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> [–].
In the present work, these characteristics will be used in a converted form of stress amplitude <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">a</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [Pa], stress mean <inline-formula><mml:math id="M20" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">m</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [Pa], sample index of cycle maximum <inline-formula><mml:math id="M21" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">max</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [–], sample index of cycle minimum <inline-formula><mml:math id="M22" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">min</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> [–], and cycle weight <inline-formula><mml:math id="M23" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> [–].</p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Batchwise cycle identification and residue</title>
      <p id="d1e678">As shown in <xref ref-type="bibr" rid="bib1.bibx30" id="text.11"/>, wind turbine stress trajectories can contain long-term cycles. Thus, the Rainflow analysis has to be carried out over the entire length of an available stress trajectory.
For offline purposes, this mode is perfectly adequate.
However, for online monitoring and control, a complete Rainflow analysis for each newly measured stress sample is computationally infeasible.
As a solution, <xref ref-type="bibr" rid="bib1.bibx19" id="text.12"/> showed that Rainflow analysis can be performed batchwise if a so-called “residue” is used for carrying along the half-cycle stress samples. Residue, therefore, denotes a set of stress samples that occurred in the past and have not formed full cycles as yet.</p>
      <p id="d1e687">Depending on the stress signal, a high number of samples can be accumulated in the residue. The maximum possible length of the residue vector results from diverging and converging stress time series because they generate a large number of half cycles <xref ref-type="bibr" rid="bib1.bibx24" id="paren.13"/>. However, long-term diverging series are unrealistic because unstable machine behavior typically is counteracted by the controller or an emergency shutdown. Long-term converging series are irrelevant since very low-amplitude cycles can be discarded without significant errors in fatigue estimation. To conclude, the length of the residue vector is finite and remained well below <inline-formula><mml:math id="M24" display="inline"><mml:mn mathvariant="normal">100</mml:mn></mml:math></inline-formula> in practical tests <xref ref-type="bibr" rid="bib1.bibx27" id="paren.14"/>.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Fatigue in model predictive control of wind turbines</title>
      <p id="d1e712">Wind turbine fatigue is usually implemented in MPC within the cost function. Common cost types in MPC are <italic>stage cost</italic> and <italic>terminal cost</italic>. Stage costs comprise a summation of state samples or a time integral of state trajectories over the prediction horizon and are preferred for the present application. Terminal costs are defined as a function of the sole state samples at the end of the prediction horizon <xref ref-type="bibr" rid="bib1.bibx16" id="paren.15"/>. Alternatively, fatigue can also be used as a constraint, for example, to express a desired lifetime goal.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Indirect fatigue metrics in MPC</title>
      <p id="d1e731">Several approaches reported in the literature involve indirect fatigue metrics <xref ref-type="bibr" rid="bib1.bibx5 bib1.bibx14 bib1.bibx12" id="paren.16"/>. However, indirect fatigue metrics have two main disadvantages:
<list list-type="bullet"><list-item>
      <p id="d1e739">Instead of actual damage, only a damage-related value is obtained and optimized.</p></list-item><list-item>
      <p id="d1e743">Indirect fatigue terms have different units from harvested energy. Thus, weighting both terms in the cost function is not straightforward.</p></list-item></list>
When considering tower fatigue, the most common approach involves the quadratic penalization of tower tip deflection rate <inline-formula><mml:math id="M25" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.
This also can be interpreted as a penalization of kinetic energy of the lumped tower mass <inline-formula><mml:math id="M26" display="inline"><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, averaged over the prediction horizon <inline-formula><mml:math id="M27" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.
In the present work, therefore, the stage cost,
            <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M28" display="block"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">TTVP</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">end</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:msub><mml:mi>P</mml:mi><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">max</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:msub><mml:mi>m</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:msubsup><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          is used for comparison and referred to as “tower tip velocity penalization” (TTVP). An additional division by rated power <inline-formula><mml:math id="M29" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">max</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is used for scaling the cost, which is beneficial for optimization.</p>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Direct fatigue metrics in MPC</title>
      <p id="d1e887">In contrast to indirect fatigue metrics, direct fatigue metrics return actual damage.
As shown in Sect. <xref ref-type="sec" rid="Ch1.S2"/>, direct fatigue estimation involves the Rainflow algorithm. Implementation of RFC within a gradient-based optimization seemed impossible until now due to the following obstacles:
<list list-type="bullet"><list-item>
      <p id="d1e894">RFC is a function of all stress samples. Therefore, the concept of neither stage nor terminal cost applies.</p></list-item><list-item>
      <p id="d1e898">RFC contains branches. Therefore, it exhibits discontinuous outputs and is not continuously differentiable.</p></list-item><list-item>
      <p id="d1e902">RFC contains “while” loops, which lead to a changing function execution structure depending on the stress input.</p></list-item></list></p>
      <p id="d1e905">Thus, in all known references, the Rainflow algorithm is approximated to some extent. In <xref ref-type="bibr" rid="bib1.bibx38" id="text.17"/>, a version of <italic>simple range counting</italic> is applied, which is standardized in <xref ref-type="bibr" rid="bib1.bibx3" id="text.18"/>. In <xref ref-type="bibr" rid="bib1.bibx4" id="text.19"/>, hysteresis operators are used to adapt parameters of a cost function in MPC. This cost function penalizes deflection rates, comparable to TTVP. In <xref ref-type="bibr" rid="bib1.bibx32" id="text.20"/>, damage estimation including standard RFC is performed on a large number of stress time series, which are used to train a surrogate artificial neural network (ANN). The latter seems to be very promising in terms of correct damage estimation. However, the approach involves a high a priori effort in setting up the ANN, as well as a significantly increased computational load in the MPC <xref ref-type="bibr" rid="bib1.bibx32" id="paren.21"/>.</p>
      <p id="d1e927">Stress history is not included in any of these approaches. In <xref ref-type="bibr" rid="bib1.bibx4" id="text.22"/>, the hysteresis operators only have memory of damage evolution. Similarly, in <xref ref-type="bibr" rid="bib1.bibx32" id="text.23"/>, only the previous fatigue rate output of the ANN is memorized until the next evaluation.</p>
</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Parametric online rainflow counting - concept</title>
      <p id="d1e944">The above-mentioned obstacles for a direct implementation of RFC in MPC are overcome by the method of parametric online rainflow counting (PORFC).
In PORFC, all discontinuous parts of the fatigue estimation procedure are carried out before each execution of the MPC algorithm, as shown in Fig. <xref ref-type="fig" rid="Ch1.F2"/>. Additionally, the stress history is incorporated via a residue, which is inspired by the batchwise cycle identification in Sect. <xref ref-type="sec" rid="Ch1.S2.SS3"/>.
The algorithmic workflow is as follows.
<list list-type="bullet"><list-item>
      <p id="d1e953"><italic>Simulation.</italic> The reduced wind turbine model is simulated over the prediction horizon using the current measured states as initial values to produce a stress prediction, as visualized in Fig. <xref ref-type="fig" rid="Ch1.F3"/>b.</p></list-item><list-item>
      <p id="d1e961"><italic>Merge.</italic> The residue (see Fig. <xref ref-type="fig" rid="Ch1.F3"/>a) is merged with the stress prediction.</p></list-item><list-item>
      <p id="d1e969"><italic>Rainflow.</italic> The rainflow algorithm is used to identify stress cycles over this merged trajectory. Consequently, it is assumed that the structure of identified cycles does not change within the next optimization. The term “structure” denotes here positions (<inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">min</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M31" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi mathvariant="normal">max</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) and weights (<inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) of cycles. As shown in Fig. <xref ref-type="fig" rid="Ch1.F3"/>b, this assumption implies that the controllable extrema in the prediction horizon only can be shifted vertically (i.e., in the values but not in their positions) by the optimization.</p></list-item><list-item>
      <p id="d1e1022"><italic>Residue update.</italic> Stress cycles can be composed by stress samples only from residue or prediction or by a combination of both (“mixed cycle”). However, only the samples within the prediction horizon can be controlled by the optimization. Particularly the measured initial value at prediction step 0 cannot be controlled and, therefore, is added to the residue.
If a full cycle is detected entirely within the residue, both contributing values are discarded from the residue. The reason for this is that also in the future they will never again form a cycle with a sample from the prediction and, therefore, are irrelevant for the MPC.</p></list-item><list-item>
      <p id="d1e1028"><italic>Time-varying parameters.</italic> Information from cycle identification is used to fill vectors of time-varying parameters, which are forwarded to the cost function of the MPC. Details on this step are provided in Sect. <xref ref-type="sec" rid="Ch1.S3.SS4"/>.</p></list-item><list-item>
      <p id="d1e1036"><italic>Optimization/MPC.</italic> In the cost function of the MPC, the parameters are used to time-continuously calculate fatigue cost over the horizon and accumulate it via integration. Finally, the optimization problem is solved, and the resulting control variables are applied to the wind turbine plant.</p></list-item></list></p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F2"><?xmltex \currentcnt{2}?><?xmltex \def\figurename{Figure}?><label>Figure 2</label><caption><p id="d1e1043">Externalization of fatigue estimation (Rainflow algorithm) from the MPC.</p></caption>
          <?xmltex \igopts{width=241.848425pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f02.png"/>

        </fig>

      <?xmltex \floatpos{t}?><fig id="Ch1.F3" specific-use="star"><?xmltex \currentcnt{3}?><?xmltex \def\figurename{Figure}?><label>Figure 3</label><caption><p id="d1e1054">Stress residue from the past <bold>(a)</bold>. Stress prediction into the future <bold>(b)</bold>.</p></caption>
          <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f03.png"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS4">
  <label>3.4</label><title>Parametric online rainflow counting – time-varying parameters and cost function</title>
<sec id="Ch1.S3.SS4.SSS1">
  <label>3.4.1</label><title>Distribution of damage over time</title>
      <p id="d1e1085">Since information from cycle identification is forwarded to the MPC via parameters, which are varying over the prediction horizon, the total fatigue damage has to be distributed over the prediction horizon, as visualized in Fig. <xref ref-type="fig" rid="Ch1.F4"/>b.
Therefore, the damage of each stress cycle is split into two halves, which are allocated to the two contributing stress samples. For example, cycle 4 is formed by samples <inline-formula><mml:math id="M33" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M34" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula>. Their fatigue cost terms therefore are allocated to these samples, as shown by the blocks in Fig. <xref ref-type="fig" rid="Ch1.F4"/>b. This example also shows an important property of the Rainflow algorithm, which identifies cycle 4 even though it is interrupted by the nested cycle 2, as shown in Fig. <xref ref-type="fig" rid="Ch1.F4"/>a. If, for a given stress sample, the complementary stress sample is not controllable (i.e., lies in the residue), all damage is allocated to the given sample. Here, this is the case for cycles 1 and 3, in which all damage is allocated to sample <inline-formula><mml:math id="M35" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M36" display="inline"><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula>, respectively.</p>
</sec>
<sec id="Ch1.S3.SS4.SSS2">
  <label>3.4.2</label><title>Setup of the time-varying parameters</title>
      <p id="d1e1151">Figure <xref ref-type="fig" rid="Ch1.F4"/>a visualizes the generation of the time-varying parameters.
Since each stress extremum belongs to one or two stress cycles <xref ref-type="bibr" rid="bib1.bibx43" id="paren.24"/>, one or two stress references are set per extremum. These stress references are considered as optimization or tracking references for the current MPC step.
If both stress samples of a cycle lie in the prediction, mean stresses (<inline-formula><mml:math id="M37" display="inline"><mml:mi>M</mml:mi></mml:math></inline-formula>2, <inline-formula><mml:math id="M38" display="inline"><mml:mi>M</mml:mi></mml:math></inline-formula>4) become the stress references.
If the complementary stress sample of a cycle lies in the uncontrollable residue (“mixed cycle”), this complementary stress value (<inline-formula><mml:math id="M39" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula>1, <inline-formula><mml:math id="M40" display="inline"><mml:mi>C</mml:mi></mml:math></inline-formula>3) becomes the stress reference for the considered sample in the controllable prediction.
However, in many cases, a mixed cycle is crossing the level of the initial stress <inline-formula><mml:math id="M41" display="inline"><mml:mrow><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. In this case, the best possible tracking reference is this initial stress value itself (<inline-formula><mml:math id="M42" display="inline"><mml:mi>R</mml:mi></mml:math></inline-formula>1, <inline-formula><mml:math id="M43" display="inline"><mml:mi>R</mml:mi></mml:math></inline-formula>3) since zero oscillation in the prediction corresponds to zero fatigue cost.
A more detailed derivation and explanation can be found in <xref ref-type="bibr" rid="bib1.bibx29" id="text.25"/>.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F4" specific-use="star"><?xmltex \currentcnt{4}?><?xmltex \def\figurename{Figure}?><label>Figure 4</label><caption><p id="d1e1224">Stress trajectory (blue), its initial value at <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> (grey circle), its extrema (colored dots), sequence of samples that form a cycle (dash-dotted), generated time-varying reference stresses (solid purple, red, green, yellow), and optimization goals (dotted arrows) for PORFC <bold>(a)</bold>. Corresponding distribution of damage over the prediction horizon <bold>(b)</bold>. Both figures are modified from <xref ref-type="bibr" rid="bib1.bibx2" id="text.26"/>.</p></caption>
            <?xmltex \igopts{width=497.923228pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f04.png"/>

          </fig>

</sec>
<sec id="Ch1.S3.SS4.SSS3">
  <label>3.4.3</label><title>Cost function</title>
      <p id="d1e1261">The fatigue cost function is defined by an integral over two cost terms, each one representing one potential cycle contribution of a stress sample, i.e.,
              <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M45" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">PORFC</mml:mi></mml:mrow></mml:msub><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:mfenced><mml:mo>=</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">cntrl</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">end</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mo mathsize="1.1em">(</mml:mo><mml:msub><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mspace linebreak="nobreak" width="0.25em"/><mml:msub><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo mathsize="1.1em">)</mml:mo><mml:mspace width="0.33em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mspace linebreak="nobreak" width="1em"/><mml:mtext>[EUR]</mml:mtext><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
            The notation <inline-formula><mml:math id="M46" display="inline"><mml:mover accent="true"><mml:mrow><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula> means fixed for one MPC step, while <inline-formula><mml:math id="M47" display="inline"><mml:mover accent="true"><mml:mrow><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula> means sampled on the control intervals of the prediction horizon.
The cost terms are “switched on” by nonzero cycle weights <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>.
Reference stresses <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and cycle weights <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> are collected in the parameter vector,
              <disp-formula id="Ch1.E5" content-type="numbered"><label>5</label><mml:math id="M51" display="block"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
            which is defined as piecewise constant over the control intervals of the prediction horizon. The cost of individual cycles is defined by
              <disp-formula id="Ch1.E6" content-type="numbered"><label>6</label><mml:math id="M52" display="block"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">fatigue</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi>w</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.33em"/><mml:msub><mml:mi>a</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub><mml:mspace width="0.33em" linebreak="nobreak"/><mml:mo>|</mml:mo><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">ref</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msup><mml:mo>|</mml:mo><mml:mi>m</mml:mi></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
            where the fatigue coefficient <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mi mathvariant="normal">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and the fatigue exponent <inline-formula><mml:math id="M54" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> are derived from the damage curve of Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>).</p>
</sec>
</sec>
<sec id="Ch1.S3.SS5">
  <label>3.5</label><title>Optimization problem for TTVP and PORFC</title>
      <p id="d1e1845">The rigorous inclusion of fatigue into an MPC formulation described up to now is completely general and can be used to formulate different cost functions. The same formulation can be readily adjusted to include fatigue damage as an MPC constraint.</p>
      <p id="d1e1848">To exemplify the use of PORFC in a practical case, here the following economic  optimization problem is considered:
            <disp-formula id="Ch1.E7" content-type="numbered"><label>7</label><mml:math id="M55" display="block"><mml:mtable rowspacing="0.2ex" class="split" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:munder><mml:mo movablelimits="false">min⁡</mml:mo><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:mrow></mml:munder><mml:mo mathsize="1.5em">(</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mspace width="0.25em" linebreak="nobreak"/><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi mathvariant="normal">end</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mo mathsize="1.1em">(</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mover accent="true"><mml:mi>T</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup><mml:mspace width="0.33em" linebreak="nobreak"/><mml:msubsup><mml:mover accent="true"><mml:mi>s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="italic">ω</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup><mml:mspace width="0.33em" linebreak="nobreak"/><mml:msubsup><mml:mover accent="true"><mml:mi>s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="normal">P</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo mathsize="1.1em">)</mml:mo><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mo mathsize="1.5em">)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
          The problem seeks the maximization of the revenue <inline-formula><mml:math id="M56" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and the minimization of the fatigue <inline-formula><mml:math id="M57" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, which is represented by Eq. (<xref ref-type="disp-formula" rid="Ch1.E3"/>) for TTVP and Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>) for PORFC. The constants <inline-formula><mml:math id="M58" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are weighting factors.
Instead of generated electrical energy, harvested aerodynamic energy <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is maximized
to avoid a greedy extraction of rotor kinetic energy by the MPC (“turnpike effect”), as suggested by <xref ref-type="bibr" rid="bib1.bibx14" id="text.27"/>. Furthermore, pitch rate <inline-formula><mml:math id="M61" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, torque rate <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>T</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and slack variables for rotational speed <inline-formula><mml:math id="M63" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="italic">ω</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and generator power <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="normal">P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are penalized (see their use in the constraints below).
The optimization variables are the demanded pitch angle and torque rate <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">β</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">b</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">T</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, as well as the slack variables <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="italic">ω</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">s</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mi mathvariant="normal">P</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>.
For both TTVP and PORFC, revenue is weighted by the current electricity price <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">revenue</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi mathvariant="normal">elec</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> [EUR W<inline-formula><mml:math id="M68" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> s<inline-formula><mml:math id="M69" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>] to match the monetary nature of Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>).
The fatigue weight <inline-formula><mml:math id="M70" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> remains free and will be determined later in this work.</p>
      <p id="d1e2274">It should be noted that the balance of revenue and tower fatigue, despite being common in wind turbine MPC research <xref ref-type="bibr" rid="bib1.bibx13 bib1.bibx12 bib1.bibx32" id="paren.28"/>, does not fully reflect the true economic goals of wind turbine operators, nor does it capture the complex interrelations among power capture, damage to the various turbine components, and its effects on operation and maintenance costs, on lifetime, on actuator duty cycle, and others. Therefore, the novelty of the present contribution is on how fatigue is treated in a modern control framework and not on the specific formulation of the cost function. A more realistic industrial application should embed damage into a more complex business-oriented scenario-dependent cost function or constraint. This aspect of the problem is extremely relevant and very interesting, but it is considered as out of the scope of the present work.</p>
      <p id="d1e2280">The optimization problem is subject to
<list list-type="bullet"><list-item>
      <p id="d1e2285">the system dynamics of a reduced turbine model <inline-formula><mml:math id="M71" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, whose six states<disp-formula id="Ch1.E8" content-type="numbered"><label>8</label><mml:math id="M72" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula>are rotational speed of the rotor noted <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, tower tip deflection <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, tower tip velocity <inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, pitch angle <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, pitch rate <inline-formula><mml:math id="M77" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and generator torque <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>; more details about the model are given in <xref ref-type="bibr" rid="bib1.bibx31" id="text.29"/>;</p></list-item><list-item>
      <p id="d1e2521">inequality constraints over the horizon to keep rotational speed, tower deflection (yield strength), pitch angle, pitch rate, generator torque, and generator power within their limits (in order to maintain feasibility of the optimization despite model uncertainties and temporary constraint violations, the constraints on rotational speed and generator power are augmented by slack variables, as suggested by <xref ref-type="bibr" rid="bib1.bibx13" id="altparen.30"/>);</p></list-item><list-item>
      <p id="d1e2528">box constraints on control and slack variables.</p></list-item></list></p>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Moving horizon estimator</title>
      <p id="d1e2540">The MPC-internal system model only comprises the six states defined by Eq. (<xref ref-type="disp-formula" rid="Ch1.E8"/>), while the plant model in <monospace>OpenFAST</monospace> (including the actuators but excluding the yaw mechanism) comprises 33 states (eight tower states, six states for each of the three blades, two states for drive-shaft torsion, two states for rotor rotation, two states for the collective blade pitch actuation, one state for the generator torque actuation) <xref ref-type="bibr" rid="bib1.bibx23" id="paren.31"/>.
Thus, the MPC-internal model is only a reduced representation of the plant model.
Furthermore, both the tower deflection and velocity of the MPC-internal model cannot be measured directly on a real turbine.
Only rotor speed, tower tip fore–aft acceleration <inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, and the actuator states can be measured by onboard sensors.
Consequently, a state estimator is required to provide initial value estimates for the MPC-internal model based on the available measurements from the plant and the lidar system.</p>
      <p id="d1e2571">Kalman filters are widely used for the estimation of structural wind turbine states <xref ref-type="bibr" rid="bib1.bibx6 bib1.bibx37" id="paren.32"/>. However, they have some disadvantages compared to the more sophisticated moving horizon estimators (MHEs). First, Kalman filters are minimum-variance state estimators for linear dynamic systems with Gaussian noise; although assumptions on linearity and Gaussian noise behavior can be relaxed, MHEs are formulated as more general nonlinear optimization problems over a time horizon, which represent a natural complement to the similarly general nonlinear optimization-based formulations behind MPCs. Second, the inclusion of constraints in state estimation problems can be important to prevent non-physical results. The inclusion of state constraints is possible in Kalman filters, but not straightforward, and nonlinear constraints lead to loss of optimality of the filter and may generate different results, depending on the formulation <xref ref-type="bibr" rid="bib1.bibx44" id="paren.33"/>. In contrast, state constraints can be explicitly and readily set in an MHE <xref ref-type="bibr" rid="bib1.bibx36" id="paren.34"/>. Although state constraints are not employed in the estimator used in the present work, this feature may become relevant in future research.
Third, Kalman filters are one-step recursive estimation methods and thus have to start operation with only one measurement time sample. In the case of large initial state errors, this can lead to inaccurate estimation and possibly to the divergence of the filter <xref ref-type="bibr" rid="bib1.bibx36" id="paren.35"/>. MHEs are less vulnerable to this danger since, right from the start, they take into account an estimation horizon comprising numerous measurement samples. An advantage of the recursive nature of Kalman filters is their significantly lower computational effort compared to MHEs. However, in the present context, the computational effort of an MHE is low enough if suboptimal optimization methods such as the “real-time iteration” <xref ref-type="bibr" rid="bib1.bibx15" id="paren.36"/> are utilized. Because of these advantages of MHEs over Kalman filters, the former are chosen for the present work.</p>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Formulation of the MHE</title>
      <p id="d1e2596">The cost function of the MHE,<?xmltex \setcounter{equation}{8}?>
            <disp-formula id="Ch1.E9.10" content-type="subnumberedon"><label>9a</label><mml:math id="M80" display="block"><mml:mtable rowspacing="0.2ex" class="split" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:munder><mml:mo movablelimits="false">min⁡</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:munder><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horiz</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:munderover><mml:mo mathsize="2.0em">(</mml:mo><mml:mo>‖</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msubsup><mml:mo>‖</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mo>‖</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi mathvariant="normal">est</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">prev</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msubsup><mml:mo>‖</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:mo>‖</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msubsup><mml:mo>‖</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi>v</mml:mi></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo mathsize="2.0em">)</mml:mo><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
          penalizes differences in the current estimates from the measurements, differences in the current estimates from the previous estimates, and  noise <inline-formula><mml:math id="M81" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx20 bib1.bibx15" id="paren.37"/>.
The term <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi mathvariant="normal">est</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">prev</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> indicates the state trajectories that were estimated at the previous MHE execution, assumed as piece-wise constant and shifted backward in time by one time step. This second term of the cost function penalizes deviations over the course of consecutive MHE steps and has been added to obtain a smoother estimation output. The noise term <inline-formula><mml:math id="M83" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula> is also assumed
to be piece-wise constant.
Within the vectors of estimated
            <disp-formula id="Ch1.E9.11" content-type="numbered"><label>9b</label><mml:math id="M84" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:math></disp-formula>
          and measured variables
            <disp-formula id="Ch1.E9.12" content-type="numbered"><label>9c</label><mml:math id="M85" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfenced open="(" close=")"><mml:mtable class="matrix" columnalign="center" framespacing="0em"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          the states <inline-formula><mml:math id="M86" display="inline"><mml:mi mathvariant="bold-italic">x</mml:mi></mml:math></inline-formula> are defined as in the reduced system given by Eq. <xref ref-type="disp-formula" rid="Ch1.E8"/>.
The estimated tower acceleration <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is obtained by the nonlinear output equation
            <disp-formula id="Ch1.E9.13" content-type="numbered"><label>9d</label><mml:math id="M88" display="block"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mfenced close=")" open="("><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          with lumped tower mass <inline-formula><mml:math id="M89" display="inline"><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, damping <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and stiffness <inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.
The diagonal weighting matrices <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> will be tuned in Sect. <xref ref-type="sec" rid="Ch1.S5.SS2.SSS4"/>.</p>
      <p id="d1e3137">The optimization problem is only subject to the system dynamics,
            <disp-formula id="Ch1.E9.14" content-type="numbered"><label>9e</label><mml:math id="M95" display="block"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
          with the additive optimization variable represented by the process noise <inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx20" id="paren.38"/>.
The external input
            <disp-formula id="Ch1.E9.15" content-type="subnumberedoff"><label>9f</label><mml:math id="M97" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mrow><mml:mi mathvariant="normal">b</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>T</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula>
          comprises the lidar-estimated wind speed <inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, as well as the pitch angle <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mrow><mml:mi mathvariant="normal">b</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and torque rate demands <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>T</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, which have been set by the MPC and thus are fixed for the present MHE step.
Notably, there is no equality constraint for the initial states <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horiz</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, which thus are freely varied by the optimization algorithm.</p>
      <p id="d1e3375">After the execution of the MHE, the terminal states at the end of the MHE estimation horizon become the initial states at the beginning of the MPC prediction horizon:
            <disp-formula id="Ch1.E16" content-type="numbered"><label>10</label><mml:math id="M102" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>
          In the present controller setup, the optimized noise <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">v</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> of the MHE is not utilized in the MPC, and its role is limited to the improvement of the quality of the estimates by taking into account process noise (which, in this context, also includes model errors).</p>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Initialization of the MHE</title>
      <p id="d1e3435">The MHE requires information about the measurements over its entire estimation horizon.
Therefore, the past measurements <inline-formula><mml:math id="M104" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are buffered.</p>
      <p id="d1e3449">As mentioned above, the tower deflection and velocity are not measured.
However, the MHE optimization benefits from meaningful measurement values as tracking reference.
Therefore, a static wind-to-tower deflection mapping is interpolated over the lidar wind estimate in order to generate a proxy tower deflection trajectory <inline-formula><mml:math id="M105" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>. Tower velocity <inline-formula><mml:math id="M106" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi mathvariant="normal">T</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is obtained by the numerical time derivative of the deflection trajectory. These quantities are termed “lidar-based references” in the remainder of this work.</p>
</sec>
</sec>
<sec id="Ch1.S5">
  <label>5</label><title>Simulation setup, tuning, and results</title>
      <p id="d1e3499">In the following, the simulation setup is presented, each element of the controller toolchain is tuned, and the simulation results are discussed.</p>
<sec id="Ch1.S5.SS1">
  <label>5.1</label><title>Simulation setup</title>
<sec id="Ch1.S5.SS1.SSS1">
  <label>5.1.1</label><title>Plant model</title>
      <p id="d1e3516">Various controller formulations are tested with the National Renewable Energy Laboratory (NREL) 5 MW onshore reference turbine <xref ref-type="bibr" rid="bib1.bibx23" id="paren.39"/> in the aeroelastic simulator <monospace>OpenFAST</monospace>.
This turbine has a hub height of 110 m and a rotor diameter <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">126</mml:mn></mml:mrow></mml:math></inline-formula> m.
All mechanical degrees of freedom (DOF) are activated.</p>
</sec>
<sec id="Ch1.S5.SS1.SSS2">
  <label>5.1.2</label><title>Wind model</title>
      <p id="d1e3545">All turbulent results in this work are mean values of 12 simulations (each with a different seed) of 600 s length in DLC 1.2 with category A turbulence.
For the chosen turbine with a hub height of 110 m and coastal onshore setting, a mean annual wind speed of <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">mean</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">7</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M109" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> can be assumed <xref ref-type="bibr" rid="bib1.bibx18" id="paren.40"/>.
Thus, in the turbulent simulations the probability of wind speed is assumed to follow the Rayleigh distribution
              <disp-formula id="Ch1.E17" content-type="numbered"><label>11</label><mml:math id="M110" display="block"><mml:mrow><mml:mi>p</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi mathvariant="italic">π</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle><mml:mfenced close=")" open="("><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msubsup><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">mean</mml:mi></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mi>exp⁡</mml:mi><mml:mfenced close="]" open="["><mml:mrow><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi mathvariant="italic">π</mml:mi><mml:mn mathvariant="normal">4</mml:mn></mml:mfrac></mml:mstyle><mml:msup><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">mean</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
            as shown in Fig. <xref ref-type="fig" rid="Ch1.F5"/>.
The Rayleigh distribution is a variant of the Weibull distribution with the simplification of having only a single parameter <xref ref-type="bibr" rid="bib1.bibx33" id="paren.41"/>.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F5"><?xmltex \currentcnt{5}?><?xmltex \def\figurename{Figure}?><label>Figure 5</label><caption><p id="d1e3676">Rayleigh probability density function for a mean wind speed of <inline-formula><mml:math id="M111" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">mean</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">7</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M112" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.</p></caption>
            <?xmltex \igopts{width=227.622047pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f05.png"/>

          </fig>

</sec>
<sec id="Ch1.S5.SS1.SSS3">
  <label>5.1.3</label><title>Lidar simulator</title>
      <p id="d1e3726">The model of a pulsed lidar with four beams is employed.
The model is implemented in the lidar simulator from sowento GmbH, which generates lidar wind estimates offline, and thus independently from the wind turbine simulation suite <xref ref-type="bibr" rid="bib1.bibx35" id="paren.42"/>.
Considered physical effects are the limitation to line-of-sight wind speeds, spatial averaging via a Gaussian range weighting function, discrete scanning, and “unfrozen” wind evolution.
Particularly the wind evolution can be parameterized by an exponential decay constant; here, a higher value results in higher variation in the wind during its convection towards the rotor.
Finally, the spatially distributed measurements are converted to rotor-effective wind speed by wind field reconstruction.</p>
</sec>
<sec id="Ch1.S5.SS1.SSS4">
  <label>5.1.4</label><title>MHE and MPC framework</title>
      <p id="d1e3740">The MHE and MPC are implemented in the state-of-the-art <monospace>acados</monospace> framework <xref ref-type="bibr" rid="bib1.bibx47" id="paren.43"/>, using the interior-point solver <monospace>HPIPM</monospace> for the underlying quadratic programs (QPs).</p>
</sec>
<sec id="Ch1.S5.SS1.SSS5">
  <label>5.1.5</label><title>Controller variants</title>
      <p id="d1e3761">In the following, the performance of five MPC formulations and the baseline conventional controller (CC) from NREL <xref ref-type="bibr" rid="bib1.bibx23" id="paren.44"/> are compared.
The MPCs involve the conventional formulation of TTVP (see Sect. <xref ref-type="sec" rid="Ch1.S3.SS1"/>) and the novel formulation of PORFC (see Sect. <xref ref-type="sec" rid="Ch1.S3.SS3"/>).
For PORFC, a fatigue exponent of <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> (see Eq. <xref ref-type="disp-formula" rid="Ch1.E6"/>) is utilized that, resulting in quadratic cost functions, is particularly suited for quadratic programming. This case is assessed in combination with (named PORFC-2R) and without (named PORFC-2) the use of residue.
Additionally, a fatigue exponent of <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> is also tested (named PORFC-5) because this value is present at low stress amplitudes in the actual S–N curve of the tower material. However, this parameterization in combination with residue (which would be named PORFC-5R) has not led to satisfactory results and thus is not considered further.</p>
</sec>
<sec id="Ch1.S5.SS1.SSS6">
  <label>5.1.6</label><title>Performance indicators</title>
      <p id="d1e3806">Considered performance indicators are revenue (analogous to energy), fatigue cost derived from damage at tower base (based on tower capital expenditures (CAPEX) and a realistic piecewise S–N curve), a simplified definition of profit (revenue minus fatigue cost), pitch travel, and torque travel.
It should be noted that these definitions of fatigue cost and profit have various limitations:
<list list-type="bullet"><list-item>
      <p id="d1e3811">A change in tower damage can have further implications, e.g., on maintenance costs, which are not considered here.</p></list-item><list-item>
      <p id="d1e3815">Changes in the pitch and torque utilization affect fatigue on other components, such as the blades and drivetrain, an effect that is not considered here.</p></list-item><list-item>
      <p id="d1e3819">The computation of the actual profit of the operator is potentially much more complex and scenario-dependent than the simple model considered here.</p></list-item></list>
However, the focus of the present work is on the demonstration of the rigorous inclusion of fatigue in an MPC framework rather than the solution of a realistic business case. Therefore, the results shown here should not be interpreted as being capable of providing business-critical decision support.</p>
      <p id="d1e3823">Another important remark is that the standard baseline CC is based on a controller design whose major objective has been neither the reduction of fatigue nor the maximization of a profit metric. Therefore, benefits of the MPCs with respect to the CC in regard of these metrics are to be expected  and should not be considered as  key findings of the present work.
This CC is utilized here because it has been used for similar comparisons  in previous publications <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx32" id="paren.45"/> and therefore allows for some cross-comparisons to these other works.
The more sophisticated – and thus relevant – comparison controller formulation is the TTVP MPC, which also has been utilized in other publications <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx15 bib1.bibx32" id="paren.46"/>.</p>
</sec>
</sec>
<sec id="Ch1.S5.SS2">
  <label>5.2</label><title>Tuning</title>
      <p id="d1e3841">Each element of the controller toolchain (lidar simulator, lidar processing, moving horizon estimator, model predictive controller) comprises a set of tunable parameters, which all impact the control performance.
A comprehensive overview of these parameters is provided in <xref ref-type="bibr" rid="bib1.bibx42" id="text.47"/>.
Instead of tuning all parameters at once (monolithic approach), the sequential approach of <xref ref-type="bibr" rid="bib1.bibx42" id="text.48"/> is pursued.
Here, the elements are tuned sequentially according to their individual performance criteria.</p>
<sec id="Ch1.S5.SS2.SSS1">
  <label>5.2.1</label><title>Tuning of lidar simulator</title>
      <p id="d1e3857">In <xref ref-type="bibr" rid="bib1.bibx42" id="text.49"/>, the same wind turbine plant model (NREL 5 MW onshore) and lidar simulator are used as in the present work.
There, the parameters of the lidar simulator are tuned in order to maximize the measurement coherence bandwidth for the rotor-effective wind speed.
In other words, the smallest detectable eddy size is maximized, reaching a value of  <inline-formula><mml:math id="M115" display="inline"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mi mathvariant="normal">eddy</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">min</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.58</mml:mn><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">199</mml:mn></mml:mrow></mml:math></inline-formula> m.
Since control of fatigue – and not lidar tuning – is the focus of the present work, the parameters of the lidar simulator in Table <xref ref-type="table" rid="Ch1.T1"/> are adopted from <xref ref-type="bibr" rid="bib1.bibx42" id="text.50"/>. This “default lidar” scenario with a low decay constant of 0.1 is accompanied by a “high decay lidar” scenario, in which the exponential decay constant is increased to 0.4 <xref ref-type="bibr" rid="bib1.bibx39" id="paren.51"/>.</p>

<?xmltex \floatpos{t}?><table-wrap id="Ch1.T1" specific-use="star"><?xmltex \currentcnt{1}?><label>Table 1</label><caption><p id="d1e3901">Parameters of lidar simulator for the “default lidar” and “high decay lidar” scenarios.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Parameter</oasis:entry>
         <oasis:entry colname="col2">Unit</oasis:entry>
         <oasis:entry colname="col3">Default lidar</oasis:entry>
         <oasis:entry colname="col4">High decay lidar</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Type of lidar</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Pulsed</oasis:entry>
         <oasis:entry colname="col4">Pulsed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Opening angle</oasis:entry>
         <oasis:entry colname="col2">[<inline-formula><mml:math id="M116" display="inline"><mml:msup><mml:mi/><mml:mo>∘</mml:mo></mml:msup></mml:math></inline-formula>]</oasis:entry>
         <oasis:entry colname="col3">11.3</oasis:entry>
         <oasis:entry colname="col4">11.3</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Distance to closest scanning plane <inline-formula><mml:math id="M117" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi mathvariant="normal">scan</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">close</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">[m]</oasis:entry>
         <oasis:entry colname="col3">40</oasis:entry>
         <oasis:entry colname="col4">40</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Distance to farthest scanning plane</oasis:entry>
         <oasis:entry colname="col2">[m]</oasis:entry>
         <oasis:entry colname="col3">280</oasis:entry>
         <oasis:entry colname="col4">280</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Number of scanning planes</oasis:entry>
         <oasis:entry colname="col2">[–]</oasis:entry>
         <oasis:entry colname="col3">10</oasis:entry>
         <oasis:entry colname="col4">10</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Scanning rate <inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">scan</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">[Hz]</oasis:entry>
         <oasis:entry colname="col3">4</oasis:entry>
         <oasis:entry colname="col4">4</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Gaussian – full width at half maximum</oasis:entry>
         <oasis:entry colname="col2">[m]</oasis:entry>
         <oasis:entry colname="col3">20</oasis:entry>
         <oasis:entry colname="col4">20</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Gaussian – evaluation points</oasis:entry>
         <oasis:entry colname="col2">[m]</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula>, 0, 10</oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula>, 0, 10</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Exponential decay constant of turbulent wind</oasis:entry>
         <oasis:entry colname="col2">[–]</oasis:entry>
         <oasis:entry colname="col3">0.1</oasis:entry>
         <oasis:entry colname="col4">0.4</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

</sec>
<sec id="Ch1.S5.SS2.SSS2">
  <label>5.2.2</label><title>Tuning of lidar processing</title>
      <p id="d1e4136">The raw rotor-effective wind speed from the lidar simulator has to be buffered in order to compensate for time delays and filtered to remove uncorrelated high-frequency information.
The buffer and filter parameters have to be tuned.
In <xref ref-type="bibr" rid="bib1.bibx42" id="text.52"/>, the tuning of the lidar processing is performed using the reduced wind turbine model as the plant model for performance reasons.
However, simulations in <xref ref-type="bibr" rid="bib1.bibx28" id="text.53"/> have shown that unrealistically high fatigue reduction is possible if the MPC-internal and the plant models are matching.
Thus, in the present work, the mid-fidelity OpenFAST model is used for tuning the lidar processing in order to benefit from its more realistic fatigue behavior.</p>
</sec>
<sec id="Ch1.S5.SS2.SSSx1" specific-use="unnumbered">
  <title>Buffering</title>
      <p id="d1e4151">Inspired by <xref ref-type="bibr" rid="bib1.bibx39" id="text.54"/>, the raw rotor-effective wind speed is buffered by an adaptive buffer time span of
              <disp-formula id="Ch1.E18" content-type="numbered"><label>12</label><mml:math id="M121" display="block"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">buffer</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">travel</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">scan</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">filter</mml:mi></mml:msub><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>
            Here, the traveling time
<inline-formula><mml:math id="M122" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">travel</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">travel</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>/</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">mean</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>
from the closest scanning plane to the rotor is obtained by the traveling distance <inline-formula><mml:math id="M123" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">travel</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and the current mean wind speed <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">mean</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.
The traveling distance <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">travel</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi mathvariant="normal">scan</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">close</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is the nominal distance corrected by the current tower tip deflection.
The total scan time
<inline-formula><mml:math id="M126" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">scan</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>/</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mi mathvariant="normal">scan</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>
is obtained from the scanning rate.
The filter delay
<inline-formula><mml:math id="M127" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">filter</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>
is zero here since a zero-phase filter is utilized.</p>
</sec>
<sec id="Ch1.S5.SS2.SSSx2" specific-use="unnumbered">
  <title>Filtering</title>
      <p id="d1e4356">Since the lidar correlation varies with wind speed <xref ref-type="bibr" rid="bib1.bibx39" id="paren.55"/>,
the uncorrelated high-frequency information has to be processed by a low-pass filter, which is adaptive as well.
In order to avoid the above-mentioned filter-delay compensation, only zero-phase algorithms have been considered.
Particularly, a zero-phase forward–backward infinite impulse response (IIR) filter based on a first-order Butterworth filter (function <monospace>filtfilt</monospace> in MATLAB) has been compared to a central moving mean filter (function <monospace>movmean</monospace> in MATLAB).
For this purpose, the lidar simulator parameterization from Sect. <xref ref-type="sec" rid="Ch1.S5.SS2.SSS1"/> and a reasonable initial parameterization of the MHE and MPC have been utilized in turbulent simulations.
Despite its simplicity, with different MPC formulations and horizon lengths, the moving mean filter has exhibited superior performance and thus has been chosen for the present application. It should be noted that this superiority of the moving mean filter  has only been observed for the present lidar and wind turbine configuration and cannot be generalized. Thus, for another configuration, the comparison should be repeated.
Beneficially, the moving mean filter only requires tuning of its window length.
The empirical formula
              <disp-formula id="Ch1.E19" content-type="numbered"><label>13</label><mml:math id="M128" display="block"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">movmean</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mi mathvariant="normal">eddy</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">min</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">mean</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>
            which is based on the smallest detectable eddy size and the current mean wind speed,
has led to a very good adaptive tuning for the present setup.</p>
      <p id="d1e4417">Due to its nature, the central moving mean filter requires sufficient information from the past and future.
Except for the beginning of a simulation, the amount of past information is typically sufficient and even growing in the course of the simulation.
In contrast, sufficient future information beyond the prediction horizon is only ensured if the inequality
              <disp-formula id="Ch1.E20" content-type="numbered"><label>14</label><mml:math id="M129" display="block"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">pred</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">movmean</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>≥</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>
            holds, where half the moving mean filter length <inline-formula><mml:math id="M130" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">movmean</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> subtracted from the lidar-predicted  time <inline-formula><mml:math id="M131" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">pred</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> exceeds the MPC horizon length <inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The lidar-predicted time <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">pred</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi mathvariant="normal">scan</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">far</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">mean</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> depends on the distance of the farthest scanning plane to the rotor and the current mean wind speed.
As shown in Fig. <xref ref-type="fig" rid="Ch1.F6"/>, the inequality typically holds and is only slightly violated at <inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">mean</mml:mi></mml:msub><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">22</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M135" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F6"><?xmltex \currentcnt{6}?><?xmltex \def\figurename{Figure}?><label>Figure 6</label><caption><p id="d1e4568">Comparison of the effectively available filtered prediction information (dash-dotted red) to the MPC horizon length (dashed black).</p></caption>
            <?xmltex \igopts{width=213.395669pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f06.png"/>

          </fig>

</sec>
<sec id="Ch1.S5.SS2.SSSx3" specific-use="unnumbered">
  <title>Further scaling of buffer and filter parameters</title>
      <p id="d1e4583">In order to verify the above adaptation formula, simulations have been executed in which these buffer and filter window lengths are increased or decreased.
These results are generated for the “high decay lidar” scenario, in which lidar data quality is lower, and thus correct filtering is more important.
The simulations reveal that the above adaptation laws lead already to high revenue and low fatigue cost.
As shown  for the filter window length in Fig. <xref ref-type="fig" rid="Ch1.F7"/>, for both TTVP and PORFC with scaling factors of 1, a high revenue is maintained while achieving low fatigue cost.
Lower scaling factors (shorter filter windows) have a tendency towards higher actuator usage, while higher scaling factors dramatically increase fatigue cost.
Consequently, scaling of the buffer and filter parameters is not applied in the present work.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F7"><?xmltex \currentcnt{7}?><?xmltex \def\figurename{Figure}?><label>Figure 7</label><caption><p id="d1e4590">Variation in KPIs depending on the scaling of moving mean filter window length.</p></caption>
            <?xmltex \igopts{width=241.848425pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f07.png"/>

          </fig>

<?xmltex \hack{\newpage}?>
</sec>
<sec id="Ch1.S5.SS2.SSS3">
  <label>5.2.3</label><title>Tuning of the MHE algorithm</title>
      <p id="d1e4609">The MHE is set up with an estimation horizon length of 8 s and a sample time of 0.1 s, which are fixed for all MPC configurations.</p>
</sec>
<sec id="Ch1.S5.SS2.SSS4">
  <label>5.2.4</label><title>Tuning of the MHE cost weights</title>
      <p id="d1e4620">Practical experience has shown that the goal of the MHE should not be an accurate reconstruction of the unmeasured true plant states of tower tip deflection and velocity, as shown in Fig. <xref ref-type="fig" rid="Ch1.F8"/>.
In fact, an accurate reconstruction would contain high frequencies from the plant higher-order degrees of freedom that, not being matched by corresponding degrees of freedom of the MPC-internal model, would spill over and pollute its lower-order degrees of freedom.</p>
      <p id="d1e4625">Instead, the MHE should provide low-frequency initial states for the low-frequency MPC-internal model (“estimated initial” states).
Consequently, the MHE is tuned to estimate state trajectories that best fit the behavior of the <italic>reduced model</italic>.
This is achieved by setting low weights for the tower variables in the weighting matrix <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, as shown in Table <xref ref-type="table" rid="Ch1.T2"/>.
These low weights allow for significant deviations from the measured tower acceleration and the lidar-based references and thus for a greater focus on the reduced model dynamics.
For tower deflection and velocity, very low values of <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> are chosen since these quantities are not measured.
For tower acceleration, an intermediate value of <inline-formula><mml:math id="M138" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> is chosen since it is measured, but its trajectory does not need to be tracked carefully.</p>
      <p id="d1e4672">The estimated tower deflection in Fig. <xref ref-type="fig" rid="Ch1.F8"/> exhibits a significant steady-state offset from the unmeasured true tower deflection. This  can be possibly attributed to the inaccurate system model since this offset also pertains in the MPC prediction, which is based on the same system model.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F8" specific-use="star"><?xmltex \currentcnt{8}?><?xmltex \def\figurename{Figure}?><label>Figure 8</label><caption><p id="d1e4680">Wind turbine tower quantities ordered by occurrence in the estimation and control process: measured, unmeasured, lidar-based reference (see Sect. <xref ref-type="sec" rid="Ch1.S4.SS2"/>), estimated, and predicted. Negative time samples are estimation horizon of the MHE; positive time samples are prediction horizon of the MPC.</p></caption>
            <?xmltex \igopts{width=398.338583pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f08.png"/>

          </fig>

      <p id="d1e4691"><?xmltex \hack{\newpage}?>By the intermediate weights in the weighting matrix <inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, the current state trajectories are only loosely tied to the previous ones.</p>
      <p id="d1e4706">In the weighting matrix <inline-formula><mml:math id="M140" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, significant noise is only permitted for the pitch angle and torque rate in order to enable a close match of pitch and torque estimations with their already accurate measurements.</p>

<?xmltex \floatpos{t}?><table-wrap id="Ch1.T2"><?xmltex \currentcnt{2}?><label>Table 2</label><caption><p id="d1e4723">Diagonal elements of the weighting matrices <inline-formula><mml:math id="M141" display="inline"><mml:mi mathvariant="bold-italic">W</mml:mi></mml:math></inline-formula> penalizing the corresponding entries of the estimation <inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and noise <inline-formula><mml:math id="M143" display="inline"><mml:mi mathvariant="bold-italic">v</mml:mi></mml:math></inline-formula> vectors.</p></caption><oasis:table frame="topbot"><?xmltex \begin{scaleboxenv}{0.93}[0.93]?><oasis:tgroup cols="8">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:colspec colnum="7" colname="col7" align="right"/>
     <oasis:colspec colnum="8" colname="col8" align="right"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M146" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M147" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mi mathvariant="normal">T</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M151" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M152" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M155" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M156" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M157" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col8"><inline-formula><mml:math id="M158" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M159" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M160" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M161" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M164" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M165" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M166" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M167" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M168" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M169" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M170" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M171" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col8">–</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup><?xmltex \end{scaleboxenv}?></oasis:table></table-wrap>

</sec>
<sec id="Ch1.S5.SS2.SSS5">
  <label>5.2.5</label><title>Tuning of the MPC algorithm</title>
      <p id="d1e5211">The controller sample time is set to 0.1 s like in <xref ref-type="bibr" rid="bib1.bibx7" id="text.56"/> and <xref ref-type="bibr" rid="bib1.bibx14" id="text.57"/>.
The maximum horizon length of <inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horiz</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">max</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s is chosen based on the findings of <xref ref-type="bibr" rid="bib1.bibx30" id="text.58"/>, which indicate that
a considerable portion of the plant stress cycles will be contained in this prediction horizon.
However, since horizon length has a substantial impact on performance and since, moreover, the longest horizon is not always the best, shorter horizons of <inline-formula><mml:math id="M174" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>;</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>;</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> s will be tested throughout all turbulent studies.</p>
      <p id="d1e5271">One QP is solved per MPC step. The Hessian matrix is automatically convexified to account for possible numerical issues due to the highly non-standard cost formulation of PORFC.
Practical experience has shown that performance is improved if the Newton step length of the QP is reduced from 1 to 0.1.
This can be explained by the frequently changing optimization problems, especially for PORFC. In this case the initialization of the QP might not be sufficiently close to the optimum, and full Newton steps could leave the region of validity of the quadratic approximation of the nonlinear program <xref ref-type="bibr" rid="bib1.bibx10" id="paren.59"/>.</p>
</sec>
<sec id="Ch1.S5.SS2.SSS6">
  <label>5.2.6</label><title>Tuning of the MPC cost weights</title>
      <p id="d1e5285">As shown in Sect. <xref ref-type="sec" rid="Ch1.S3.SS5"/>, all weights in the cost function except for the fatigue weight <inline-formula><mml:math id="M175" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are pre-defined for simplicity. Thus, only the fatigue weight has to be tuned in the following.
Tuning is executed at a single reference wind speed of <inline-formula><mml:math id="M176" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">ref</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M177" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.
This wind speed is chosen since, for the conventional controller CC, the highest profit contribution occurs there, as shown in terms of <italic>profit density</italic> in Fig. <xref ref-type="fig" rid="Ch1.F9"/>.
Profit density represents the incremental contribution to total cumulative profit at a certain wind speed.
Other meaningful criteria for a suitable tuning wind speed would be the wind speed at which half of the total cumulative profit is reached or where the highest revenue contribution occurs.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F9"><?xmltex \currentcnt{9}?><?xmltex \def\figurename{Figure}?><label>Figure 9</label><caption><p id="d1e5342">Normalized profit density and cumulative profit. The latter is normalized with respect to the total profit of the conventional controller.</p></caption>
            <?xmltex \igopts{width=241.848425pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f09.png"/>

          </fig>

      <p id="d1e5351">The variation in important key performance indicators  (KPIs) with fatigue weights is shown in Fig. <xref ref-type="fig" rid="Ch1.F10"/>.
For brevity, only the results for the maximum MPC horizon length of 8 s are shown.
All variants of PORFC are able to maintain high revenue levels while decreasing fatigue cost with increasing fatigue weights. In contrast, the revenue of TTVP declines rapidly above a certain fatigue weight.
Thus, the tuning of PORFC can be considered as less critical than that of TTVP.
Since in most cases torque travel and pitch travel increase with fatigue weight, low fatigue weights should be preferred as long as fatigue cost is not harmed significantly.
Following this strategy, the fatigue weights are determined for all controller formulations and horizon lengths, as shown in Table <xref ref-type="table" rid="Ch1.T3"/>.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F10" specific-use="star"><?xmltex \currentcnt{10}?><?xmltex \def\figurename{Figure}?><label>Figure 10</label><caption><p id="d1e5361">Variation in KPIs for different fatigue weights and a prediction horizon length of <inline-formula><mml:math id="M178" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s.</p></caption>
            <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f10.png"/>

          </fig>

<?xmltex \floatpos{t}?><table-wrap id="Ch1.T3" specific-use="star"><?xmltex \currentcnt{3}?><label>Table 3</label><caption><p id="d1e5388">Optimum fatigue cost weights <inline-formula><mml:math id="M179" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="normal">fatigue</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> for different controller formulations and prediction horizon lengths.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="5">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Controller formulation</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M180" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M181" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> s</oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M182" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> s</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M183" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> s</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">TTVP</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M184" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M185" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M186" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M187" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PORFC-2R</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M188" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M189" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M190" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PORFC-2</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M192" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">3</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PORFC-5</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M196" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4"><inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<?xmltex \hack{\newpage}?>
</sec>
</sec>
<sec id="Ch1.S5.SS3">
  <label>5.3</label><title>Results of turbulent simulations</title>
<sec id="Ch1.S5.SS3.SSS1">
  <label>5.3.1</label><title>Comparison of controller formulations in the “default lidar” scenario</title>
      <p id="d1e5732">As a next step, the optimal tuning weights from Sect. <xref ref-type="sec" rid="Ch1.S5.SS2.SSS6"/> are fixed, and simulations at different reference wind speeds <inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">ref</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">5</mml:mn><mml:mo>;</mml:mo><mml:mn mathvariant="normal">7</mml:mn><mml:mo>;</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">…</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>;</mml:mo><mml:mn mathvariant="normal">25</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M201" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> are performed for each controller formulation and prediction horizon length.
The simulations result in the Weibull-weighted cumulative KPIs shown in Fig. <xref ref-type="fig" rid="Ch1.F11"/>.</p>
      <p id="d1e5790">For all MPCs, revenue is at least slightly below the one of the CC.
However, especially for PORFC-2R and PORFC-5 with a prediction horizon of <inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> s, the revenue losses remain moderate.
In contrast, all MPCs with <inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> s exhibit substantially lower fatigue cost than the CC.
As a rough indication of the combined effect, the changes in revenue and fatigue cost can be assessed in terms of the simplified profit indicator. The highest profit gain is achieved by PORFC-2R at maximum prediction horizon, which surpasses CC by 30 % and the best TTVP by 2.5 %.
At least for the present setting, very short horizons of 1 s cannot be recommended since they significantly decrease revenue and greatly increase fatigue.</p>
      <p id="d1e5823">Over different horizon lengths, PORFC-2R exhibits very stable revenue and fatigue levels.
In contrast, for the PORFC formulations without residue (PORFC-2, PORFC-5), a shorter horizon of <inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> s exhibits higher profit than <inline-formula><mml:math id="M205" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s.
This phenomenon may be explained by a higher influence of the prediction errors: due to model errors and wind evolution, the predicted states at the end 4 s <inline-formula><mml:math id="M206" display="inline"><mml:mrow><mml:mo>&lt;</mml:mo><mml:mi>t</mml:mi><mml:mo>≤</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s of a long horizon may be affected by large errors. Since PORFC-2 and PORFC-5 have to rely solely on the predictions, their performance may suffer from long horizons.</p>
      <p id="d1e5870">For all MPCs, the fatigue reduction with respect to CC comes at the price of a higher pitch travel. Here, TTVP exhibits around 6 times the pitch travel of CC.
Since in the literature more moderate increases (e.g., by a factor of 2) are reported <xref ref-type="bibr" rid="bib1.bibx32" id="paren.60"/>, further studies on pitch penalization should be conducted.
For PORFC, pitch travel is even slightly higher and is somewhat reduced by a reduction in horizon length.
Torque travel exhibits different behavior in that several MPC formulations have a lower torque travel than CC.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F11" specific-use="star"><?xmltex \currentcnt{11}?><?xmltex \def\figurename{Figure}?><label>Figure 11</label><caption><p id="d1e5879">“Default lidar” scenario. Weibull-weighted KPIs for different controller formulations (indicated by edge style) and MPC prediction horizon lengths (indicated by color). The results for the shorter horizons are transparent in order to focus the attention on the more important longer horizons. Results are normalized with respect to the best TTVP configuration with a prediction horizon length of <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s.
Middle row, right: zoomed version of profit plot.</p></caption>
            <?xmltex \igopts{width=469.470472pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f11.png"/>

          </fig>

      <p id="d1e5903">A look at the profit density and cumulative profit in Fig. <xref ref-type="fig" rid="Ch1.F9"/> shows that both MPC formulations (TTVP, PORFC) “earn money” very similarly over wind speed.
Compared to CC, the MPC fatigue reduction strategies lead to profit benefits at very low and at intermediate wind speeds.
With the present tuning, TTVP has a slight extra advantage at very low wind speeds, while PORFC-2R is superior over a broad range of intermediate wind speeds.</p>
</sec>
<sec id="Ch1.S5.SS3.SSS2">
  <label>5.3.2</label><title>Performance in the “high decay lidar” scenario</title>
      <p id="d1e5916">The “default lidar” scenario of the previous sections can be considered as very favorable for lidar-assisted control since the wind does not change very much between the lidar measurement planes and the rotor.
Thus, the lidar provides a fairly good estimate of the true incoming wind.
In order to challenge the MPCs even more, a further assessment is performed for the “high decay lidar” scenario (see Table <xref ref-type="table" rid="Ch1.T1"/>).</p>
      <p id="d1e5921">Despite the significant reduction in lidar signal quality, the profit benefit of the MPCs over CC decreases only slightly, as shown in Fig. <xref ref-type="fig" rid="Ch1.F12"/>.
Particularly, the best-performing PORFC-2R (<inline-formula><mml:math id="M208" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> s) still surpasses CC by 26 % for the “high decay lidar” scenario, in comparison to the above-mentioned 30 % for the “default lidar” scenario.</p>
      <p id="d1e5941">The profit benefit of 5.1 % of the best PORFC-2R (<inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> s) over the best TTVP (<inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s) shows that PORFC-2R is particularly strong in handling situations of low lidar data quality.
In a direct comparison using the same horizon length (<inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:math></inline-formula> s), PORFC-2R is superior by almost 9 %.
Just like in the “default lidar” scenario, PORFC-2R exhibits better revenue stability over the horizon lengths <inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="italic">{</mml:mo><mml:mn mathvariant="normal">8</mml:mn><mml:mo>;</mml:mo><mml:mn mathvariant="normal">4</mml:mn><mml:mo>;</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo mathvariant="italic">}</mml:mo></mml:mrow></mml:math></inline-formula> s but also exhibits excessive fatigue cost at <inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> s.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F12" specific-use="star"><?xmltex \currentcnt{12}?><?xmltex \def\figurename{Figure}?><label>Figure 12</label><caption><p id="d1e6034">“High decay lidar” scenario. Weibull-weighted KPIs for different controller formulations and prediction horizon lengths. Results are normalized with respect to the best TTVP configuration with a prediction horizon length of <inline-formula><mml:math id="M214" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s. Middle row, right: zoomed version of profit plot.</p></caption>
            <?xmltex \igopts{width=469.470472pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f12.png"/>

          </fig>

</sec>
<sec id="Ch1.S5.SS3.SSS3">
  <label>5.3.3</label><title>Performance in the “perfect prediction” scenario</title>
      <p id="d1e6066">The increasing benefit of PORFC-2R with respect to TTVP with lower lidar data quality conversely suggests decreasing benefits with very high lidar data quality.
This hypothesis is actually partially confirmed by the extreme scenario of a perfect wind prediction (without lidar errors).
As shown in Fig. <xref ref-type="fig" rid="Ch1.F13"/>, as expected, fatigue cost can be reduced by TTVP and PORFC-2R even further than in the “default lidar” scenario of Sect. <xref ref-type="sec" rid="Ch1.S5.SS3.SSS1"/>.
However, relative to TTVP, the advantage of PORFC-2R decreases significantly. For the maximum horizon length, the profit of TTVP even slightly surpasses PORFC-2R by 0.4 %. On the other hand, as revenue and fatigue cost of PORFC-2R are more stable for shorter horizons, this formulation retains a significant advantage there.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F13" specific-use="star"><?xmltex \currentcnt{13}?><?xmltex \def\figurename{Figure}?><label>Figure 13</label><caption><p id="d1e6075">“Perfect prediction” scenario. Weibull-weighted KPIs for different controller formulations and prediction horizon lengths. Results are normalized with respect to the best TTVP configuration with a prediction horizon length of <inline-formula><mml:math id="M215" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> s. Middle row, right: zoomed version of profit plot.</p></caption>
            <?xmltex \igopts{width=497.923228pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f13.png"/>

          </fig>

</sec>
<sec id="Ch1.S5.SS3.SSS4">
  <label>5.3.4</label><title>Benefit of “perfect prediction” vs. “perfect persistence”</title>
      <p id="d1e6107">All previous scenarios assumed a wind preview.
However, to date, lidar systems can still account for a significant portion of the capital and operational expenditures of wind turbines <xref ref-type="bibr" rid="bib1.bibx8" id="paren.61"/>.
In order to avoid lidar-related costs or effort, some studies are directed towards predictive control without explicit preview measurement <xref ref-type="bibr" rid="bib1.bibx12 bib1.bibx22" id="paren.62"/>.
In this case, the wind prediction over the MPC horizon can for instance be generated via constant extrapolation of the instantaneous wind estimate at the rotor (persistence).
This motivates an analysis of how the novel PORFC MPC actually benefits from a predictive preview compared to a persistent preview.</p>
      <p id="d1e6116">Since the design of a rotor-effective wind speed estimator is out of scope of the present work, a “perfect persistence” scenario is employed and compared to the above “perfect prediction” scenario.</p>
      <p id="d1e6119">As shown in Fig. <xref ref-type="fig" rid="Ch1.F14"/>, all MPC formulations significantly benefit from prediction (instead of persistence).
For all formulations, this is primarily achieved by high fatigue reduction.
At the same time, actuator usage is moderately decreased or even increased at some horizon lengths for TTVP but is significantly decreased for PORFC-2R if <inline-formula><mml:math id="M216" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horiz</mml:mi></mml:msub><mml:mo>≥</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> s.</p>
      <p id="d1e6139">These results further indicate the technical benefit of lidar-assisted control and motivate further studies comparing the realistic lidar wind preview with a sophisticated wind speed estimator.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F14" specific-use="star"><?xmltex \currentcnt{14}?><?xmltex \def\figurename{Figure}?><label>Figure 14</label><caption><p id="d1e6145">Weibull-weighted KPIs of the “perfect prediction” scenario normalized with respect to the individually corresponding KPIs of the “perfect persistence” scenario with the same MPC formulation and horizon length.</p></caption>
            <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f14.png"/>

          </fig>

</sec>
</sec>
<sec id="Ch1.S5.SS4">
  <label>5.4</label><title>Insights into PORFC</title>
      <p id="d1e6164">In order to gain deeper insight into the behavior of PORFC, short time periods within a turbulent simulation in the “default lidar” scenario are analyzed.</p>
<sec id="Ch1.S5.SS4.SSS1">
  <label>5.4.1</label><title>Evolution of residue</title>
      <p id="d1e6174">Figure <xref ref-type="fig" rid="Ch1.F15"/> shows a situation where the stress prediction at the initial value <inline-formula><mml:math id="M217" display="inline"><mml:mrow><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> turns from a mildly rising slope (MPC step 1) to a mildly falling slope (MPC step 2). Consequently, a new stress maximum is formed and added to the “right-hand side” of the residue set at MPC step 2, as shown in Fig. <xref ref-type="fig" rid="Ch1.F15"/>a.
In the following steps 3 to 5, the size of the residue set remains constant; only the right-hand-side value is updated by the current initial stress value.</p>
</sec>
<sec id="Ch1.S5.SS4.SSS2">
  <label>5.4.2</label><title>Evolution of PORFC parameters</title>
      <p id="d1e6206">As shown in Fig. <xref ref-type="fig" rid="Ch1.F15"/>b, the change in extrema in the stress prediction over the course of MPC steps leads to frequent changes in the PORFC stress references (see Sect. <xref ref-type="sec" rid="Ch1.S3.SS4.SSS2"/>) or, more in general, in the PORFC parameter structure (see bars in Fig. <xref ref-type="fig" rid="Ch1.F15"/>b).
However, since many of the emerging or vanishing stress cycles are small in amplitude, also their corresponding stress reference values are close to the stress prediction trajectory (compare bars to the solid blue line) and thus have low impact on the overall optimization problem.</p>
      <p id="d1e6215">Since by nature of MPC the stress trajectory is shifted to the left-hand side with each simulation step, also the PORFC parameter samples are shifted. This becomes even more clear in Fig. <xref ref-type="fig" rid="Ch1.F16"/>, where stress reference 1 is plotted over the prediction horizon and over MPC steps (simulation time).
Here, over the course of MPC steps, the stress reference pattern is evolving smoothly towards the beginning of the prediction horizon.
While some references emerge within the prediction horizon, many references originate at the end and do not vanish before reaching the beginning of the prediction horizon.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F15" specific-use="star"><?xmltex \currentcnt{15}?><?xmltex \def\figurename{Figure}?><label>Figure 15</label><caption><p id="d1e6222">Stress trajectories for PORFC-2R in turbulent wind 10 s after the start of the simulation. Top-down: five consecutive MPC steps. Residue set of variable size, in which the values of the last stress samples are labeled <bold>(a)</bold>. Stress prediction of the MPC and stress references as part of the PORFC parameter set <bold>(b)</bold>.</p></caption>
            <?xmltex \igopts{width=412.564961pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f15.png"/>

          </fig>

      <?xmltex \floatpos{t}?><fig id="Ch1.F16" specific-use="star"><?xmltex \currentcnt{16}?><?xmltex \def\figurename{Figure}?><label>Figure 16</label><caption><p id="d1e6240">PORFC stress reference over the prediction horizon of 80 samples for 100 consecutive MPC steps.</p></caption>
            <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f16.png"/>

          </fig>

</sec>
</sec>
<sec id="Ch1.S5.SS5">
  <label>5.5</label><title>Results of deterministic gust simulations</title>
      <p id="d1e6258">According to the current standards <xref ref-type="bibr" rid="bib1.bibx21" id="paren.63"/>,
a central qualification criterion for controllers is their reaction to deterministic gusts.
Previous literature already has shown that deterministic gusts are an easy but unrealistic task for predictive controllers like MPCs <xref ref-type="bibr" rid="bib1.bibx40" id="paren.64"/>, resulting in too optimistic conclusions regarding extreme load reduction.
Besides, extreme loads are not even always design-driving for some wind turbine components <xref ref-type="bibr" rid="bib1.bibx8" id="paren.65"/>.
Nonetheless, the study of gust scenarios sheds additional light on the controller dynamic behavior.</p>
      <p id="d1e6270">Thus, in the following, the conventional controller is compared to the MPC formulations of TTVP and PORFC-2R in an “extreme operating gust” scenario <xref ref-type="bibr" rid="bib1.bibx21" id="paren.66"/>, with a duration of 10.5 s
and an initial wind speed that is 2 m s<inline-formula><mml:math id="M218" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> below rated wind speed (<inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">rated</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">11.4</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M220" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>).
In order to test the MPCs with partial knowledge of the gust, a prediction horizon of 4 s is chosen.
Besides this limited horizon, a perfect wind prediction without lidar errors is assumed.</p>
      <p id="d1e6315">As shown in Fig. <xref ref-type="fig" rid="Ch1.F17"/>, even during the gust, for all controllers the rotor speed remains below the rated speed of 1.267 rad s<inline-formula><mml:math id="M221" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.
As a result, the conventional controller remains at the minimum pitch angle, and the tower deflection freely follows the gust wind speed, which leads to a high positive excursion.
After the gust, the tower oscillation quickly vanishes due to aerodynamic damping.</p>
      <p id="d1e6332">In contrast, the MPCs anticipate the incoming gust and react to a significant extent by pitching the blades.
Interestingly, despite their different fatigue cost formulations, the MPCs exhibit very similar pitching behavior.
As expected, the TTVP and the PORFC-2R MPC attenuate very effectively the tower excursion and dampen the oscillation immediately.
However, PORFC-2R puts less priority on the attenuation of the tower excursion.
Since the tower deflection has been flat prior to the gust, the stress residue of PORFC-2R contains only stress values around the steady state.
Consequently, PORFC-2R assumes only a small stress cycle with low damage potential during the gust.
This behavior is changed if the stress residue is initialized with 0 MPa, which corresponds to an undeflected tower prior to operation.
Due to this stress memory, PORFC-2R identifies a large half cycle and consequently tries to further limit the maximum tower excursion by peak shaving, as shown by the purple trajectory in Fig. <xref ref-type="fig" rid="Ch1.F17"/>.</p>
      <p id="d1e6338">Clear differences of PORFC-2R with respect to TTVP can be seen in the rotor speed and generator power dynamics.
At the beginning of the gust, the generator power is reduced in order to achieve a high rotor speed during the gust.
This behavior can be attributed to an attempt at harvesting the energy of the gust and also has been observed for an MPC where 5 QPs (instead of 1 QP) have been solved per MPC step for better convergence.
For the PORFC-2R MPC with the 0 MPa residue, the rotor speed remains at a high level for a longer time frame, which is an unusual behavior and requires more investigation.
Finally, it can be noted that the steady-state rotor speed is slightly higher for the MPCs than for the conventional controller, as seen before the gust.
Assuming perfect tracking of optimal rotor speed by the conventional controller, this difference can be attributed to the MPC plant–model mismatch.
However, as shown in Fig. <xref ref-type="fig" rid="Ch1.F17"/>, the rotor speed difference does not result in significant suboptimality of the steady-state power capture.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F17" specific-use="star"><?xmltex \currentcnt{17}?><?xmltex \def\figurename{Figure}?><label>Figure 17</label><caption><p id="d1e6345">Extreme operating gust at <inline-formula><mml:math id="M222" display="inline"><mml:mrow><mml:mi>V</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">rated</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> m s<inline-formula><mml:math id="M223" display="inline"><mml:msup><mml:mi/><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.</p></caption>
          <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://wes.copernicus.org/articles/7/1605/2022/wes-7-1605-2022-f17.png"/>

        </fig>

</sec>
</sec>
<sec id="Ch1.S6" sec-type="conclusions">
  <label>6</label><title>Conclusions and outlook</title>
<sec id="Ch1.S6.SS1">
  <label>6.1</label><title>Conclusions</title>
      <p id="d1e6401">The present work represents a significant step in assessing the benefits of the MPC formulation of PORFC. For this purpose, the simulation setup of <xref ref-type="bibr" rid="bib1.bibx30" id="text.67"/> has been extended by a realistic lidar simulator, lidar processing, and an MHE.</p>
      <p id="d1e6407">First, the PORFC formulation has been presented in an application-focused way. It has been highlighted how PORFC directly incorporates mechanical fatigue in predictive wind turbine control.
Since fatigue requires long observation windows, stress history has been considered in a consistent manner by carrying along a residue (PORFC-2R).</p>
      <p id="d1e6410">Second, the formulation of the MHE has been explained, in which the lidar wind estimate has been used to generate an initialization for the unmeasured tower states.</p>
      <p id="d1e6413">Third, a sequential tuning approach has been employed for the lidar simulator, lidar processing, MHE, and MPC:
<list list-type="bullet"><list-item>
      <p id="d1e6418">For the lidar simulator, parameters from the literature have been utilized, which maximize the measurement coherence bandwidth.</p></list-item><list-item>
      <p id="d1e6422">For the lidar buffering and filtering, simple adaptive tuning laws have been employed. Simulations have revealed that they result already in good performance and that no further tuning seems to be required.</p></list-item><list-item>
      <p id="d1e6426">For the MHE, instead of accurately reconstructing the plant states, the cost weights have been tuned to estimate only the low-frequency state information that can be handled by the MPC-internal model.</p></list-item><list-item>
      <p id="d1e6430">For the MPC, four different prediction horizon lengths have been employed throughout the study since no single horizon length has led to the best performance in all scenarios.
In the MPC cost function, the fatigue weight has been tuned systematically for each controller formulation and horizon length.</p></list-item></list></p>
      <p id="d1e6434">Finally, extensive economic and dynamic simulation results have been presented for turbulent and gust wind settings:
<list list-type="bullet"><list-item>
      <p id="d1e6439">In the “default lidar” scenario, all MPCs are able to significantly reduce fatigue cost with respect to a conventional PID controller, while PORFC-2R has to sacrifice less revenue than a conventional MPC.
For shorter horizons, especially the PORFC formulation with residue has shown a more robust performance than the conventional MPC.</p></list-item><list-item>
      <p id="d1e6443">In the “high decay lidar” scenario with a lower lidar prediction quality, the advantage of PORFC-2R over the conventional MPC even increases. This suggests that PORFC-2R is a recommended solution especially for lower lidar prediction quality.</p></list-item><list-item>
      <p id="d1e6447">In the “perfect prediction” scenario, both MPCs have exhibited similar results. A comparison with a wind persistence setting has shown that PORFC-2R benefits more from the availability of this high-quality prediction than the conventional MPC.</p></list-item><list-item>
      <p id="d1e6451">In all considered turbulent scenarios, MPCs with a very short prediction horizon of 1 s have obtained only modest results.</p></list-item><list-item>
      <p id="d1e6455">An excerpt of a turbulent simulation with PORFC-2R has demonstrated how the residue is updated and that the parametric stress references evolve smoothly following an expected pattern.</p></list-item><list-item>
      <p id="d1e6459">In an extreme operating gust setting, both MPCs have shown a similar pitching behavior and the effective attenuation of tower excursion. During the gust, PORFC-2R has shown a higher variability in the rotor speed.</p></list-item></list></p>
</sec>
<sec id="Ch1.S6.SS2">
  <label>6.2</label><title>Outlook</title>
      <p id="d1e6470">The MPC formulation of PORFC still has several aspects worth investigating:</p>
      <p id="d1e6473"><list list-type="bullet">
            <list-item>

      <p id="d1e6478">For the MHE tuning, an automated but still computationally tractable approach should be developed.</p>
            </list-item>
            <list-item>

      <p id="d1e6484">The MHE- and MPC-internal system model has a significant error with respect to the plant system. Thus, online model adaptation promises further benefits.</p>
            </list-item>
            <list-item>

      <p id="d1e6490">In the MPC cost function, economic terms for the actuator, blade, and drivetrain damage should be included.</p>
            </list-item>
            <list-item>

      <p id="d1e6496">In certain business cases, the goal may not be to minimize fatigue but simply to keep the fatigue rate on average below certain thresholds or to keep the cumulative damage below a threshold by the end of service. To assist these goals, the PORFC cost function could be modified, and fatigue could be added as a parametric constraint in the MPC. Alternatively, an outer control loop based on structural health monitoring could be added <xref ref-type="bibr" rid="bib1.bibx11" id="paren.68"/> which adapts the MPC cost function weights. More in general, other scenario-based more sophisticated and comprehensive cost functions should be considered to better capture the complex interactions of fatigue damage with the economic utilization of wind assets.</p>
            </list-item>
            <list-item>

      <p id="d1e6505">Instead of the NREL baseline controller <xref ref-type="bibr" rid="bib1.bibx23" id="paren.69"/>, the MPCs could be compared to a more modern reference controller, as for example the one of <xref ref-type="bibr" rid="bib1.bibx1" id="text.70"/>.</p>
            </list-item>
            <list-item>

      <p id="d1e6518">The novel PORFC MPC has been extensively simulated and is ready for application on real systems. Consequently, just like for conventional MPCs in <xref ref-type="bibr" rid="bib1.bibx45" id="text.71"/> and <xref ref-type="bibr" rid="bib1.bibx9" id="text.72"/>, the novel PORFC MPC should be assessed on scaled and full-scale wind turbines.</p>
            </list-item>
          </list></p>
</sec>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <?xmltex \currentcnt{A}?><label>Appendix A</label><title/>

<?xmltex \floatpos{h!}?><table-wrap id="App1.Ch1.S1.T4"><?xmltex \currentcnt{A1}?><label>Table A1</label><caption><p id="d1e6543">Nomenclature.</p></caption><oasis:table frame="topbot"><?xmltex \begin{scaleboxenv}{0.96}[0.96]?><oasis:tgroup cols="3">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Quantity</oasis:entry>
         <oasis:entry colname="col2">Unit</oasis:entry>
         <oasis:entry colname="col3">Explanation</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M224" display="inline"><mml:mover accent="true"><mml:mi>a</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Quantity sampled on the control intervals</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">of the prediction horizon</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M225" display="inline"><mml:mover accent="true"><mml:mi>a</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Quantity fixed for one MPC step</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><inline-formula><mml:math id="M226" display="inline"><mml:mover accent="true"><mml:mi>a</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Quantity estimated from measurements</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Abbreviation</oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">Explanation</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">CC</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Conventional PID controller</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Lidar</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Light detection and ranging</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">MHE</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Moving horizon estimator</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">MPC</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Model predictive controller</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PORFC</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Parametric online rainflow counting</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">QP</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Quadratic programming</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">RFC</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Rainflow counting algorithm</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">TTVP</oasis:entry>
         <oasis:entry colname="col2">–</oasis:entry>
         <oasis:entry colname="col3">Tower tip velocity penalization</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup><?xmltex \end{scaleboxenv}?></oasis:table></table-wrap>

</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d1e6758">MATLAB figure files for the lossless extraction of the results shown can be retrieved via the DOI <ext-link xlink:href="https://doi.org/10.5281/zenodo.6600688" ext-link-type="DOI">10.5281/zenodo.6600688</ext-link> <xref ref-type="bibr" rid="bib1.bibx25" id="paren.73"/>. The MATLAB function and a test script for the PORFC parameter generation and the residue update can be retrieved via the DOI <ext-link xlink:href="https://doi.org/10.5281/zenodo.6600832" ext-link-type="DOI">10.5281/zenodo.6600832</ext-link> <xref ref-type="bibr" rid="bib1.bibx26" id="paren.74"/>. Further data can be provided upon request.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d1e6776">SL developed the controller formulation in collaboration with CLB, implemented all elements of the toolchain, and performed the simulation studies. SL and CLB collaborated on the interpretation and analysis of the results. CLB supervised the work. Both authors provided important input to this research work through discussions, feedback, and by writing the paper.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d1e6782">At least one of the (co-)authors is a member of the editorial board of <italic>Wind Energy Science</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><ack><title>Acknowledgements</title><p id="d1e6791">The authors would like to thank the company sowento GmbH for kindly providing a free license of their lidar simulator.
Furthermore, the close and active support of Martin Koch, David Schlipf, and Steffen Raach of sowento GmbH is gratefully acknowledged.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d1e6796">This work was supported by the German Research Foundation (DFG) and the Technical University of Munich (TUM) in the framework of the Open Access Publishing Program.</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d1e6802">This paper was edited by Amir R. Nejad and reviewed by Valentin Chabaud and Nikhar Abbas.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><?xmltex \def\ref@label{{Abbas et~al.(2022)Abbas, Zalkind, Pao, and
Wright}}?><label>Abbas et al.(2022)Abbas, Zalkind, Pao, and
Wright</label><?label Abbas.Zalkind.Pao.Wright.2022?><mixed-citation>Abbas, N. J., Zalkind, D. S., Pao, L., and Wright, A.: A reference open-source controller for fixed and floating offshore wind turbines, Wind Energ. Sci., 7, 53–73, <ext-link xlink:href="https://doi.org/10.5194/wes-7-53-2022" ext-link-type="DOI">10.5194/wes-7-53-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx2"><?xmltex \def\ref@label{{Anand(2020)}}?><label>Anand(2020)</label><?label Anand.2020?><mixed-citation>
Anand, A.: Optimal Control of Battery Energy Storage System for Grid
Integration of Wind Turbines, Master's thesis, TU Munich, Munich, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx3"><?xmltex \def\ref@label{{{ASTM International}(1985)}}?><label>ASTM International(1985)</label><?label ASTM.1985?><mixed-citation>ASTM International: Standard practices for cycle counting in fatigue analysis
(ASTM 1049-85), <ext-link xlink:href="https://doi.org/10.1520/E1049-85R17" ext-link-type="DOI">10.1520/E1049-85R17</ext-link>, 1985.</mixed-citation></ref>
      <ref id="bib1.bibx4"><?xmltex \def\ref@label{{Barradas-Berglind et~al.(2015)Barradas-Berglind, Wisniewski, and
Soltani}}?><label>Barradas-Berglind et al.(2015)Barradas-Berglind, Wisniewski, and
Soltani</label><?label BarradasBerglind.2015?><mixed-citation>Barradas-Berglind, J. d. J., Wisniewski, R., and Soltani, M.: Fatigue damage
estimation and data-based control for wind turbines, IET Control Theory &amp;
Applications, 9, 1042–1050, <ext-link xlink:href="https://doi.org/10.1049/iet-cta.2014.0730" ext-link-type="DOI">10.1049/iet-cta.2014.0730</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx5"><?xmltex \def\ref@label{{Barradas-Berglind and Wisniewski(2016)}}?><label>Barradas-Berglind and Wisniewski(2016)</label><?label BarradasBerglind.2016c?><mixed-citation>Barradas-Berglind, J. J. and Wisniewski, R.: Representation of fatigue for wind
turbine control, Wind Energy, 19, 2189–2203, <ext-link xlink:href="https://doi.org/10.1002/we.1975" ext-link-type="DOI">10.1002/we.1975</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx6"><?xmltex \def\ref@label{{Bottasso and Croce(2009)}}?><label>Bottasso and Croce(2009)</label><?label Bottasso.Croce.2009?><mixed-citation>Bottasso, C. and Croce, A.: Cascading Kalman observers of structural flexible
and wind states for wind turbine control: Scientific Report DIA-SR 09-02,
Dipartimento di Ingegneria Aerospaziale, Politecnico di Milano, <uri>https://www.researchgate.net/publication/228941698_Cascading_Kalman_observers_of_structural_flexible_and_wind_states_for_wind_turbine_control</uri> (last access: 10 October 2021), 2009.</mixed-citation></ref>
      <ref id="bib1.bibx7"><?xmltex \def\ref@label{{Bottasso et~al.(2014)Bottasso, Pizzinelli, Riboldi, and
Tasca}}?><label>Bottasso et al.(2014)Bottasso, Pizzinelli, Riboldi, and
Tasca</label><?label Bottasso.2014?><mixed-citation>Bottasso, C. L., Pizzinelli, P., Riboldi, C., and Tasca, L.: LiDAR-enabled
model predictive control of wind turbines with real-time capabilities,
Renew. Energ., 71, 442–452, <ext-link xlink:href="https://doi.org/10.1016/j.renene.2014.05.041" ext-link-type="DOI">10.1016/j.renene.2014.05.041</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx8"><?xmltex \def\ref@label{{Canet et~al.(2020)Canet, L{\"{o}}w, and Bottasso}}?><label>Canet et al.(2020)Canet, Löw, and Bottasso</label><?label Canet.2020b?><mixed-citation>Canet, H., Löw, S., and Bottasso, C. L.: Lidar-assisted control in wind
turbine design: Where are the potential benefits?, J. Phys. Conf. Ser., 1618, 042020, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/1618/4/042020" ext-link-type="DOI">10.1088/1742-6596/1618/4/042020</ext-link>,
2020.</mixed-citation></ref>
      <ref id="bib1.bibx9"><?xmltex \def\ref@label{{Dickler et~al.(2021)Dickler, Wintermeyer-Kallen, Zierath, Bockhahn,
Machost, Konrad, and Abel}}?><label>Dickler et al.(2021)Dickler, Wintermeyer-Kallen, Zierath, Bockhahn,
Machost, Konrad, and Abel</label><?label Dickler.Kallen.Zierath.Abel.2021?><mixed-citation>Dickler, S., Wintermeyer-Kallen, T., Zierath, J., Bockhahn, R., Machost, D.,
Konrad, T., and Abel, D.: Full-scale field test of a model predictive control
system for a 3 MW wind turbine, Forsch. Ingenieurwes., 85, 313–323,
<ext-link xlink:href="https://doi.org/10.1007/s10010-021-00467-w" ext-link-type="DOI">10.1007/s10010-021-00467-w</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx10"><?xmltex \def\ref@label{{Diehl and Gros(2020)}}?><label>Diehl and Gros(2020)</label><?label Diehl.Gros.2020?><mixed-citation>Diehl, M. and Gros, S.: Numerical Optimal Control: Lecture manuscript,
University of Freiburg, Freiburg and Gothenburg,
<uri>https://www.syscop.de/files/2020ss/NOC/book-NOCSE.pdf</uri> (last access: 10 October 2021), 2020.</mixed-citation></ref>
      <ref id="bib1.bibx11"><?xmltex \def\ref@label{{Do and S{\"{o}}ffker(2020)}}?><label>Do and Söffker(2020)</label><?label Do.Soeffker.WTC.StructHealth.2020?><mixed-citation>Do, H. and Söffker, D.: Wind Turbine Lifetime Control Using Structural
Health Monitoring and Prognosis, IFAC PapersOnLine, 53, 12669–12674,
<ext-link xlink:href="https://doi.org/10.1016/j.ifacol.2020.12.1847" ext-link-type="DOI">10.1016/j.ifacol.2020.12.1847</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx12"><?xmltex \def\ref@label{{Evans et~al.(2015)Evans, Cannon, and Kouvaritakis}}?><label>Evans et al.(2015)Evans, Cannon, and Kouvaritakis</label><?label Evans.2015?><mixed-citation>Evans, M. A., Cannon, M., and Kouvaritakis, B.: Robust MPC Tower Damping for
Variable Speed Wind Turbines, IEEE T. Contr. Syst. T., 23, 290–296, <ext-link xlink:href="https://doi.org/10.1109/TCST.2014.2310513" ext-link-type="DOI">10.1109/TCST.2014.2310513</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx13"><?xmltex \def\ref@label{{Gros(2013)}}?><label>Gros(2013)</label><?label Gros.2013?><mixed-citation>Gros, S.: An Economic NMPC Formulation for Wind Turbine Control, in: 52nd IEEE
Conference on Decision and Control, 1001–1006, IEEE, Firenze, Italy, 10–13 December 2013, <ext-link xlink:href="https://doi.org/10.1109/CDC.2013.6760013" ext-link-type="DOI">10.1109/CDC.2013.6760013</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx14"><?xmltex \def\ref@label{{Gros and Schild(2017)}}?><label>Gros and Schild(2017)</label><?label Gros.2017?><mixed-citation>Gros, S. and Schild, A.: Real-time economic nonlinear model predictive control
for wind turbine control, Int. J. Control, 90, 2799–2812, 10–13 December 2013, <ext-link xlink:href="https://doi.org/10.1080/00207179.2016.1266514" ext-link-type="DOI">10.1080/00207179.2016.1266514</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx15"><?xmltex \def\ref@label{{Gros et~al.(2013)Gros, Vukov, and Diehl}}?><label>Gros et al.(2013)Gros, Vukov, and Diehl</label><?label Gros.2013b?><mixed-citation>Gros, S., Vukov, M., and Diehl, M.: A real-time MHE and NMPC scheme for wind
turbine control, in: 2013 IEEE 52nd Annual Conference on Decision and Control
(CDC), 1007–1012, IEEE, Piscataway, NJ, USA, <ext-link xlink:href="https://doi.org/10.1109/CDC.2013.6760014" ext-link-type="DOI">10.1109/CDC.2013.6760014</ext-link>,
2013.</mixed-citation></ref>
      <ref id="bib1.bibx16"><?xmltex \def\ref@label{{Gr{\"{u}}ne and Pannek(2017)}}?><label>Grüne and Pannek(2017)</label><?label Grune.2017?><mixed-citation>Grüne, L. and Pannek, J.: Nonlinear Model Predictive Control: Theory and
Algorithms, Communications and Control Engineering, Springer International
Publishing, Cham, Switzerland, 2nd edn.,
<ext-link xlink:href="https://doi.org/10.1007/978-3-319-46024-6" ext-link-type="DOI">10.1007/978-3-319-46024-6</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx17"><?xmltex \def\ref@label{{Haibach(2006)}}?><label>Haibach(2006)</label><?label Haibach.2006?><mixed-citation>Haibach, E.: Betriebsfestigkeit: Verfahren und Daten zur Bauteilberechnung,
VDI-Buch, Springer, Berlin, 3 edn.,   <ext-link xlink:href="https://doi.org/10.1007/3-540-29364-7" ext-link-type="DOI">10.1007/3-540-29364-7</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx18"><?xmltex \def\ref@label{{Hau(2017)}}?><label>Hau(2017)</label><?label Hau.2017?><mixed-citation>Hau, E.: Windkraftanlagen: Grundlagen. Technik. Einsatz. Wirtschaftlichkeit,
Springer Berlin Heidelberg, Berlin, Heidelberg, 6 edn.,
<ext-link xlink:href="https://doi.org/10.1007/978-3-662-53154-9" ext-link-type="DOI">10.1007/978-3-662-53154-9</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx19"><?xmltex \def\ref@label{{Heinrich et~al.(2019)Heinrich, Khalil, Martynov, and
WEVER}}?><label>Heinrich et al.(2019)Heinrich, Khalil, Martynov, and
WEVER</label><?label Heinrich.2019?><mixed-citation>Heinrich, C., Khalil, M., Martynov, K., and WEVER, U.: Online remaining
lifetime estimation for structures, Mech. Syst. Signal Pr.,
119, 312–327, <ext-link xlink:href="https://doi.org/10.1016/j.ymssp.2018.09.028" ext-link-type="DOI">10.1016/j.ymssp.2018.09.028</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx20"><?xmltex \def\ref@label{{Huang et~al.(2010)Huang, Biegler, and Patwardhan}}?><label>Huang et al.(2010)Huang, Biegler, and Patwardhan</label><?label Huang.2010?><mixed-citation>Huang, R., Biegler, L. T., and Patwardhan, S. C.: Fast Offset-Free Nonlinear
Model Predictive Control Based on Moving Horizon Estimation, Ind. Eng. Chem. Res., 49, 7882–7890, <ext-link xlink:href="https://doi.org/10.1021/ie901945y" ext-link-type="DOI">10.1021/ie901945y</ext-link>,
2010.</mixed-citation></ref>
      <ref id="bib1.bibx21"><?xmltex \def\ref@label{{IEC(2005)}}?><label>IEC(2005)</label><?label InternationalElectrotechnicalCommission.2005?><mixed-citation>
IEC: IEC 61400-1 Ed.3: Wind turbines – Part 1: Design requirements,  International Electrotechnical Commission, ISBN 2-8318-8161-7, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx22"><?xmltex \def\ref@label{{Jassmann et~al.(2016)Jassmann, Zierath, Dickler, and
Abel}}?><label>Jassmann et al.(2016)Jassmann, Zierath, Dickler, and
Abel</label><?label Jassmann.2016?><mixed-citation>Jassmann, U., Zierath, J., Dickler, S., and Abel, D.: Model Predictive Wind
Turbine Control for Load Alleviation and Power Leveling in Extreme Operation
conditions, in: 2016 IEEE Conference on Control Applications (CCA), IEEE, 19–22 September 2016, Buenos Aires, Argentina, <ext-link xlink:href="https://doi.org/10.1109/CCA.2016.7587997" ext-link-type="DOI">10.1109/CCA.2016.7587997</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx23"><?xmltex \def\ref@label{{Jonkman et~al.(2009)Jonkman, Butterfield, Musial, and
Scott}}?><label>Jonkman et al.(2009)Jonkman, Butterfield, Musial, and
Scott</label><?label Jonkman.2009?><mixed-citation>Jonkman, J., Butterfield, S., Musial, W., and Scott, G.: Definition of a 5-MW
Reference Wind Turbine for Offshore System Development: Technical Report
NREL/TP-500-38060, National Renewable Energy Laboratory,
<ext-link xlink:href="https://doi.org/10.2172/947422" ext-link-type="DOI">10.2172/947422</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx24"><?xmltex \def\ref@label{{K{\"{o}}hler et~al.(2012)K{\"{o}}hler, Jenne, P{\"{o}}tter, and
Zenner}}?><label>Köhler et al.(2012)Köhler, Jenne, Pötter, and
Zenner</label><?label Kohler.2012?><mixed-citation>Köhler, M., Jenne, S., Pötter, K., and Zenner, H.: Zählverfahren
und Lastannahme in der Betriebsfestigkeit, Springer, Berlin, Heidelberg,
<ext-link xlink:href="https://doi.org/10.1007/978-3-642-13164-6" ext-link-type="DOI">10.1007/978-3-642-13164-6</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx25"><?xmltex \def\ref@label{Loew(2022a)}?><label>Loew(2022a)</label><?label loewmatlab?><mixed-citation>Loew, S.: Matlab figure files for key result plots, <ext-link xlink:href="https://doi.org/10.5281/zenodo.6600688" ext-link-type="DOI">10.5281/zenodo.6600688</ext-link>, Zenodo [data set], 2022a.</mixed-citation></ref>
      <ref id="bib1.bibx26"><?xmltex \def\ref@label{Loew(2022b)}?><label>Loew(2022b)</label><?label loewporfc?><mixed-citation>Loew, S.: MATLAB function and a test script for the PORFC parameter generation, <ext-link xlink:href="https://doi.org/10.5281/zenodo.6600832" ext-link-type="DOI">10.5281/zenodo.6600832</ext-link>, Zenodo [code], 2022b.</mixed-citation></ref>
      <ref id="bib1.bibx27"><?xmltex \def\ref@label{{Loew and Obradovic(2020)}}?><label>Loew and Obradovic(2020)</label><?label Loew.Obradovic.IFAC2020?><mixed-citation>Loew, S. and Obradovic, D.: Formulation of Fatigue Dynamics as Hybrid Dynamical
System for Model Predictive Control, IFAC PapersOnLine, 53, 6616–6623,
<ext-link xlink:href="https://doi.org/10.1016/j.ifacol.2020.12.080" ext-link-type="DOI">10.1016/j.ifacol.2020.12.080</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx28"><?xmltex \def\ref@label{{Loew et~al.(2019)Loew, Obradovic, and Bottasso}}?><label>Loew et al.(2019)Loew, Obradovic, and Bottasso</label><?label Loew.2019?><mixed-citation>Loew, S., Obradovic, D., and Bottasso, C. L.: Direct Online Rainflow-counting
and Indirect Fatigue Penalization Methods for Model Predictive Control, in:
2019 18th European Control Conference (ECC), 3371–3376, IEEE,
25–28 June 2019, Naples, Italy, <ext-link xlink:href="https://doi.org/10.23919/ECC.2019.8795911" ext-link-type="DOI">10.23919/ECC.2019.8795911</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx29"><?xmltex \def\ref@label{{Loew et~al.(2020{\natexlab{a}})Loew, Obradovic, Anand, and
Szabo}}?><label>Loew et al.(2020a)Loew, Obradovic, Anand, and
Szabo</label><?label S.Loew.2020?><mixed-citation>Loew, S., Obradovic, D., Anand, A., and Szabo, A.: Stage Cost Formulations of
Online Rainflow-counting for Model Predictive Control of Fatigue, in: 2020
European Control Conference (ECC), 475–482, 12–15 May 2020, St. Petersburg, Russia, <ext-link xlink:href="https://doi.org/10.23919/ECC51009.2020.9143939" ext-link-type="DOI">10.23919/ECC51009.2020.9143939</ext-link>, 2020a.</mixed-citation></ref>
      <ref id="bib1.bibx30"><?xmltex \def\ref@label{{Loew et~al.(2020{\natexlab{b}})Loew, Obradovic, and
Bottasso}}?><label>Loew et al.(2020b)Loew, Obradovic, and
Bottasso</label><?label Loew.2020c?><mixed-citation>Loew, S., Obradovic, D., and Bottasso, C. L.: Model predictive control of wind
turbine fatigue via online rainflow-counting on stress history and
prediction, J. Phys. Conf. Ser., 1618, 22041,
<ext-link xlink:href="https://doi.org/10.1088/1742-6596/1618/2/022041" ext-link-type="DOI">10.1088/1742-6596/1618/2/022041</ext-link>, 2020b.</mixed-citation></ref>
      <ref id="bib1.bibx31"><?xmltex \def\ref@label{{L{\"{o}}w and Obradovic(2018)}}?><label>Löw and Obradovic(2018)</label><?label Low.2018?><mixed-citation>Löw, S. and Obradovic, D.: Real-time Implementation of Nonlinear Model
Predictive Control for Mechatronic Systems Using a Hybrid Model, atp magazin,
60, 46–53, <ext-link xlink:href="https://doi.org/10.17560/atp.v60i09.2359" ext-link-type="DOI">10.17560/atp.v60i09.2359</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx32"><?xmltex \def\ref@label{{Luna et~al.(2020)Luna, Falkenberg, Gros, and Schild}}?><label>Luna et al.(2020)Luna, Falkenberg, Gros, and Schild</label><?label Luna.2020?><mixed-citation>Luna, J., Falkenberg, O., Gros, S., and Schild, A.: Wind turbine fatigue
reduction based on economic-tracking NMPC with direct ANN fatigue estimation,
Renew. Energ., 147, 1632–1641, <ext-link xlink:href="https://doi.org/10.1016/j.renene.2019.09.092" ext-link-type="DOI">10.1016/j.renene.2019.09.092</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx33"><?xmltex \def\ref@label{{Manwell et~al.(2002)Manwell, McGowan, and Rogers}}?><label>Manwell et al.(2002)Manwell, McGowan, and Rogers</label><?label Manwell.2008?><mixed-citation>Manwell, J. F., McGowan, J. G., and Rogers, A. L.: Wind energy explained:
Theory, design and application, John Wiley &amp; Sons, Chichester, England,
<ext-link xlink:href="https://doi.org/10.1002/0470846127" ext-link-type="DOI">10.1002/0470846127</ext-link>, 2002.</mixed-citation></ref>
      <ref id="bib1.bibx34"><?xmltex \def\ref@label{{Miner(1945)}}?><label>Miner(1945)</label><?label MA.1945?><mixed-citation>Miner, M. A.: Culmulative Damage in Fatigue, J. Appl. Mech., 12,
A159–A164, <ext-link xlink:href="https://doi.org/10.1115/1.4009458" ext-link-type="DOI">10.1115/1.4009458</ext-link>, 1945.</mixed-citation></ref>
      <ref id="bib1.bibx35"><?xmltex \def\ref@label{{Raach and Schlipf(2018)}}?><label>Raach and Schlipf(2018)</label><?label Raach.Schlipf.CrossTool.2018?><mixed-citation>Raach, S. and Schlipf, D.: Cross-tool realistic lidar simulations: Presentation
at the IEA Wind Task 32 workshop on Certification of Lidar-assisted control
applications,
<uri>https://www.ieawindtask32.org/ws08-internal-documents/</uri> (last access: 10 October 2021), 2018.</mixed-citation></ref>
      <ref id="bib1.bibx36"><?xmltex \def\ref@label{{Rawlings et~al.(2017)Rawlings, Mayne, and Diehl}}?><label>Rawlings et al.(2017)Rawlings, Mayne, and Diehl</label><?label Rawlings.2017?><mixed-citation>
Rawlings, J. B., Mayne, D. Q., and Diehl, M. M.: Model predictive control:
Theory, computation, and design, Nob Hill Publishing, Madison, Wisconsin,
2 edition, ISBN 0975937731, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx37"><?xmltex \def\ref@label{{Ritter(2020)}}?><label>Ritter(2020)</label><?label Ritter.Diss.2020?><mixed-citation>Ritter, B.: Nonlinear State Estimation and Noise Adaptive Kalman Filter Design
for Wind Turbines, Dissertation, Technische Universität Darmstadt,
Darmstadt, <ext-link xlink:href="https://doi.org/10.25534/tuprints-00011785" ext-link-type="DOI">10.25534/tuprints-00011785</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx38"><?xmltex \def\ref@label{{Sanchez et~al.(2015)Sanchez, Escobet, Puig, and
Odgaard}}?><label>Sanchez et al.(2015)Sanchez, Escobet, Puig, and
Odgaard</label><?label Sanchez.2015?><mixed-citation>Sanchez, H., Escobet, T., Puig, V., and Odgaard, P. F.: Health-aware Model
Predictive Control of Wind Turbines using Fatigue Prognosis,
IFAC PapersOnLine, 48, 1363–1368, <ext-link xlink:href="https://doi.org/10.1016/j.ifacol.2015.09.715" ext-link-type="DOI">10.1016/j.ifacol.2015.09.715</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx39"><?xmltex \def\ref@label{{Schlipf(2016)}}?><label>Schlipf(2016)</label><?label Schlipf.2016?><mixed-citation>Schlipf, D.: Lidar-assisted control concepts for wind turbines, Dissertation,
University of Stuttgart, Stuttgart, Germany, <ext-link xlink:href="https://doi.org/10.18419/OPUS-8796" ext-link-type="DOI">10.18419/OPUS-8796</ext-link>,
2016.</mixed-citation></ref>
      <ref id="bib1.bibx40"><?xmltex \def\ref@label{{Schlipf and Raach(2016)}}?><label>Schlipf and Raach(2016)</label><?label Schlipf.Raach.TurbEOG.2016b?><mixed-citation>Schlipf, D. and Raach, S.: Turbulent Extreme Event Simulations for
Lidar-Assisted Wind Turbine Control, J. Phys. Conf. Ser.,
753, 052011, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/753/5/052011" ext-link-type="DOI">10.1088/1742-6596/753/5/052011</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx41"><?xmltex \def\ref@label{{Schlipf et~al.(2013)Schlipf, Schlipf, and K{\"{u}}hn}}?><label>Schlipf et al.(2013)Schlipf, Schlipf, and Kühn</label><?label Schlipf.2013?><mixed-citation>Schlipf, D., Schlipf, D. J., and Kühn, M.: Nonlinear model predictive
control of wind turbines using LIDAR, Wind Energy, 16, 1107–1129,
<ext-link xlink:href="https://doi.org/10.1002/we.1533" ext-link-type="DOI">10.1002/we.1533</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx42"><?xmltex \def\ref@label{{Schlipf et~al.(2018)Schlipf, F{\"{u}}rst, Raach, and
Haizmann}}?><label>Schlipf et al.(2018)Schlipf, Fürst, Raach, and
Haizmann</label><?label Schlipf.2018?><mixed-citation>Schlipf, D., Fürst, H., Raach, S., and Haizmann, F.: Systems Engineering
for Lidar-Assisted Control: A Sequential Approach, J. Phys. Conf. Ser., 1102, 012014, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/1102/1/012014" ext-link-type="DOI">10.1088/1742-6596/1102/1/012014</ext-link>,
2018.</mixed-citation></ref>
      <ref id="bib1.bibx43"><?xmltex \def\ref@label{{Shi et~al.(2018)Shi, Xu, Tan, and Zhang}}?><label>Shi et al.(2018)Shi, Xu, Tan, and Zhang</label><?label Shi.2018c?><mixed-citation>Shi, Y., Xu, B., Tan, Y., and Zhang, B.: A Convex Cycle-based Degradation Model
for Battery Energy Storage Planning and Operation, in: 2018 Annual American
Control Conference (ACC), 4590–4596, IEEE, 27–29 June 2018, Milwaukee, WI, USA, <ext-link xlink:href="https://doi.org/10.23919/ACC.2018.8431814" ext-link-type="DOI">10.23919/ACC.2018.8431814</ext-link>, 2018.
</mixed-citation></ref><?xmltex \hack{\newpage}?>
      <ref id="bib1.bibx44"><?xmltex \def\ref@label{{Simon(2010)}}?><label>Simon(2010)</label><?label DSimon.2010?><mixed-citation>Simon, D.: Kalman filtering with state constraints: a survey of linear and
nonlinear algorithms, IET Control Theory A., 4, 1303–1318,
<ext-link xlink:href="https://doi.org/10.1049/iet-cta.2009.0032" ext-link-type="DOI">10.1049/iet-cta.2009.0032</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx45"><?xmltex \def\ref@label{{Sinner et~al.(2021)Sinner, Petrovic, Langidis, Neuhaus, Holling,
Kuhn, and Pao}}?><label>Sinner et al.(2021)Sinner, Petrovic, Langidis, Neuhaus, Holling,
Kuhn, and Pao</label><?label Sinner.Petrovic.Langidis.Kuhn.Pao.2021?><mixed-citation>Sinner, M., Petrovic, V., Langidis, A., Neuhaus, L., Holling, M., Kuhn, M., and
Pao, L. Y.: Experimental Testing of a Preview-Enabled Model Predictive
Controller for Blade Pitch Control of Wind Turbines, IEEE T. Contr. Syst. T., 583–597, <ext-link xlink:href="https://doi.org/10.1109/TCST.2021.3070342" ext-link-type="DOI">10.1109/TCST.2021.3070342</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx46"><?xmltex \def\ref@label{{{The MathWorks Inc.}(2018)}}?><label>The MathWorks Inc.(2018)</label><?label TheMathWorksInc..2018?><mixed-citation>The MathWorks Inc.: Rainflow counts for fatigue analysis,
<uri>https://de.mathworks.com/help/signal/ref/rainflow.html</uri> (last access: 10 October 2021), 2018.</mixed-citation></ref>
      <ref id="bib1.bibx47"><?xmltex \def\ref@label{{Verschueren et~al.(2021)Verschueren, Frison, Kouzoupis, Frey, {van
Duijkeren}, Zanelli, Novoselnik, Albin, Quirynen, and
Diehl}}?><label>Verschueren et al.(2021)Verschueren, Frison, Kouzoupis, Frey, van
Duijkeren, Zanelli, Novoselnik, Albin, Quirynen, and
Diehl</label><?label Verschueren.Frison.Acados.Springer.2021?><mixed-citation>Verschueren, R., Frison, G., Kouzoupis, D., Frey, J., van Duijkeren, N.,
Zanelli, A., Novoselnik, B., Albin, T., Quirynen, R., and Diehl, M.:
acados – a modular open-source framework for fast embedded optimal control,
Mathematical Programming Computation, 14, 147–183, <ext-link xlink:href="https://doi.org/10.1007/s12532-021-00208-8" ext-link-type="DOI">10.1007/s12532-021-00208-8</ext-link>, 2021.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Lidar-assisted model predictive control of wind turbine fatigue via online rainflow counting considering stress history</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Abbas et al.(2022)Abbas, Zalkind, Pao, and
Wright</label><mixed-citation>
Abbas, N. J., Zalkind, D. S., Pao, L., and Wright, A.: A reference open-source controller for fixed and floating offshore wind turbines, Wind Energ. Sci., 7, 53–73, <a href="https://doi.org/10.5194/wes-7-53-2022" target="_blank">https://doi.org/10.5194/wes-7-53-2022</a>, 2022.
</mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Anand(2020)</label><mixed-citation>
Anand, A.: Optimal Control of Battery Energy Storage System for Grid
Integration of Wind Turbines, Master's thesis, TU Munich, Munich, 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>ASTM International(1985)</label><mixed-citation>
ASTM International: Standard practices for cycle counting in fatigue analysis
(ASTM 1049-85), <a href="https://doi.org/10.1520/E1049-85R17" target="_blank">https://doi.org/10.1520/E1049-85R17</a>, 1985.
</mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Barradas-Berglind et al.(2015)Barradas-Berglind, Wisniewski, and
Soltani</label><mixed-citation>
Barradas-Berglind, J. d. J., Wisniewski, R., and Soltani, M.: Fatigue damage
estimation and data-based control for wind turbines, IET Control Theory &amp;
Applications, 9, 1042–1050, <a href="https://doi.org/10.1049/iet-cta.2014.0730" target="_blank">https://doi.org/10.1049/iet-cta.2014.0730</a>, 2015.
</mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Barradas-Berglind and Wisniewski(2016)</label><mixed-citation>
Barradas-Berglind, J. J. and Wisniewski, R.: Representation of fatigue for wind
turbine control, Wind Energy, 19, 2189–2203, <a href="https://doi.org/10.1002/we.1975" target="_blank">https://doi.org/10.1002/we.1975</a>, 2016.
</mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Bottasso and Croce(2009)</label><mixed-citation>
Bottasso, C. and Croce, A.: Cascading Kalman observers of structural flexible
and wind states for wind turbine control: Scientific Report DIA-SR 09-02,
Dipartimento di Ingegneria Aerospaziale, Politecnico di Milano, <a href="https://www.researchgate.net/publication/228941698_Cascading_Kalman_observers_of_structural_flexible_and_wind_states_for_wind_turbine_control" target="_blank"/> (last access: 10 October 2021), 2009.
</mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Bottasso et al.(2014)Bottasso, Pizzinelli, Riboldi, and
Tasca</label><mixed-citation>
Bottasso, C. L., Pizzinelli, P., Riboldi, C., and Tasca, L.: LiDAR-enabled
model predictive control of wind turbines with real-time capabilities,
Renew. Energ., 71, 442–452, <a href="https://doi.org/10.1016/j.renene.2014.05.041" target="_blank">https://doi.org/10.1016/j.renene.2014.05.041</a>, 2014.
</mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Canet et al.(2020)Canet, Löw, and Bottasso</label><mixed-citation>
Canet, H., Löw, S., and Bottasso, C. L.: Lidar-assisted control in wind
turbine design: Where are the potential benefits?, J. Phys. Conf. Ser., 1618, 042020, <a href="https://doi.org/10.1088/1742-6596/1618/4/042020" target="_blank">https://doi.org/10.1088/1742-6596/1618/4/042020</a>,
2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Dickler et al.(2021)Dickler, Wintermeyer-Kallen, Zierath, Bockhahn,
Machost, Konrad, and Abel</label><mixed-citation>
Dickler, S., Wintermeyer-Kallen, T., Zierath, J., Bockhahn, R., Machost, D.,
Konrad, T., and Abel, D.: Full-scale field test of a model predictive control
system for a 3&thinsp;MW wind turbine, Forsch. Ingenieurwes., 85, 313–323,
<a href="https://doi.org/10.1007/s10010-021-00467-w" target="_blank">https://doi.org/10.1007/s10010-021-00467-w</a>, 2021.
</mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Diehl and Gros(2020)</label><mixed-citation>
Diehl, M. and Gros, S.: Numerical Optimal Control: Lecture manuscript,
University of Freiburg, Freiburg and Gothenburg,
<a href="https://www.syscop.de/files/2020ss/NOC/book-NOCSE.pdf" target="_blank"/> (last access: 10 October 2021), 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Do and Söffker(2020)</label><mixed-citation>
Do, H. and Söffker, D.: Wind Turbine Lifetime Control Using Structural
Health Monitoring and Prognosis, IFAC PapersOnLine, 53, 12669–12674,
<a href="https://doi.org/10.1016/j.ifacol.2020.12.1847" target="_blank">https://doi.org/10.1016/j.ifacol.2020.12.1847</a>, 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Evans et al.(2015)Evans, Cannon, and Kouvaritakis</label><mixed-citation>
Evans, M. A., Cannon, M., and Kouvaritakis, B.: Robust MPC Tower Damping for
Variable Speed Wind Turbines, IEEE T. Contr. Syst. T., 23, 290–296, <a href="https://doi.org/10.1109/TCST.2014.2310513" target="_blank">https://doi.org/10.1109/TCST.2014.2310513</a>, 2015.
</mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Gros(2013)</label><mixed-citation>
Gros, S.: An Economic NMPC Formulation for Wind Turbine Control, in: 52nd IEEE
Conference on Decision and Control, 1001–1006, IEEE, Firenze, Italy, 10–13 December 2013, <a href="https://doi.org/10.1109/CDC.2013.6760013" target="_blank">https://doi.org/10.1109/CDC.2013.6760013</a>, 2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Gros and Schild(2017)</label><mixed-citation>
Gros, S. and Schild, A.: Real-time economic nonlinear model predictive control
for wind turbine control, Int. J. Control, 90, 2799–2812, 10–13 December 2013, <a href="https://doi.org/10.1080/00207179.2016.1266514" target="_blank">https://doi.org/10.1080/00207179.2016.1266514</a>, 2017.
</mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Gros et al.(2013)Gros, Vukov, and Diehl</label><mixed-citation>
Gros, S., Vukov, M., and Diehl, M.: A real-time MHE and NMPC scheme for wind
turbine control, in: 2013 IEEE 52nd Annual Conference on Decision and Control
(CDC), 1007–1012, IEEE, Piscataway, NJ, USA, <a href="https://doi.org/10.1109/CDC.2013.6760014" target="_blank">https://doi.org/10.1109/CDC.2013.6760014</a>,
2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Grüne and Pannek(2017)</label><mixed-citation>
Grüne, L. and Pannek, J.: Nonlinear Model Predictive Control: Theory and
Algorithms, Communications and Control Engineering, Springer International
Publishing, Cham, Switzerland, 2nd edn.,
<a href="https://doi.org/10.1007/978-3-319-46024-6" target="_blank">https://doi.org/10.1007/978-3-319-46024-6</a>, 2017.
</mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Haibach(2006)</label><mixed-citation>
Haibach, E.: Betriebsfestigkeit: Verfahren und Daten zur Bauteilberechnung,
VDI-Buch, Springer, Berlin, 3 edn.,   <a href="https://doi.org/10.1007/3-540-29364-7" target="_blank">https://doi.org/10.1007/3-540-29364-7</a>, 2006.
</mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Hau(2017)</label><mixed-citation>
Hau, E.: Windkraftanlagen: Grundlagen. Technik. Einsatz. Wirtschaftlichkeit,
Springer Berlin Heidelberg, Berlin, Heidelberg, 6 edn.,
<a href="https://doi.org/10.1007/978-3-662-53154-9" target="_blank">https://doi.org/10.1007/978-3-662-53154-9</a>, 2017.
</mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Heinrich et al.(2019)Heinrich, Khalil, Martynov, and
WEVER</label><mixed-citation>
Heinrich, C., Khalil, M., Martynov, K., and WEVER, U.: Online remaining
lifetime estimation for structures, Mech. Syst. Signal Pr.,
119, 312–327, <a href="https://doi.org/10.1016/j.ymssp.2018.09.028" target="_blank">https://doi.org/10.1016/j.ymssp.2018.09.028</a>, 2019.
</mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Huang et al.(2010)Huang, Biegler, and Patwardhan</label><mixed-citation>
Huang, R., Biegler, L. T., and Patwardhan, S. C.: Fast Offset-Free Nonlinear
Model Predictive Control Based on Moving Horizon Estimation, Ind. Eng. Chem. Res., 49, 7882–7890, <a href="https://doi.org/10.1021/ie901945y" target="_blank">https://doi.org/10.1021/ie901945y</a>,
2010.
</mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>IEC(2005)</label><mixed-citation>
IEC: IEC 61400-1 Ed.3: Wind turbines – Part 1: Design requirements,  International Electrotechnical Commission, ISBN 2-8318-8161-7, 2005.
</mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Jassmann et al.(2016)Jassmann, Zierath, Dickler, and
Abel</label><mixed-citation>
Jassmann, U., Zierath, J., Dickler, S., and Abel, D.: Model Predictive Wind
Turbine Control for Load Alleviation and Power Leveling in Extreme Operation
conditions, in: 2016 IEEE Conference on Control Applications (CCA), IEEE, 19–22 September 2016, Buenos Aires, Argentina, <a href="https://doi.org/10.1109/CCA.2016.7587997" target="_blank">https://doi.org/10.1109/CCA.2016.7587997</a>, 2016.
</mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Jonkman et al.(2009)Jonkman, Butterfield, Musial, and
Scott</label><mixed-citation>
Jonkman, J., Butterfield, S., Musial, W., and Scott, G.: Definition of a 5-MW
Reference Wind Turbine for Offshore System Development: Technical Report
NREL/TP-500-38060, National Renewable Energy Laboratory,
<a href="https://doi.org/10.2172/947422" target="_blank">https://doi.org/10.2172/947422</a>, 2009.
</mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Köhler et al.(2012)Köhler, Jenne, Pötter, and
Zenner</label><mixed-citation>
Köhler, M., Jenne, S., Pötter, K., and Zenner, H.: Zählverfahren
und Lastannahme in der Betriebsfestigkeit, Springer, Berlin, Heidelberg,
<a href="https://doi.org/10.1007/978-3-642-13164-6" target="_blank">https://doi.org/10.1007/978-3-642-13164-6</a>, 2012.
</mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Loew(2022a)</label><mixed-citation>
Loew, S.: Matlab figure files for key result plots, <a href="https://doi.org/10.5281/zenodo.6600688" target="_blank">https://doi.org/10.5281/zenodo.6600688</a>, Zenodo [data set], 2022a.
</mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Loew(2022b)</label><mixed-citation>
Loew, S.: MATLAB function and a test script for the PORFC parameter generation, <a href="https://doi.org/10.5281/zenodo.6600832" target="_blank">https://doi.org/10.5281/zenodo.6600832</a>, Zenodo [code], 2022b.
</mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Loew and Obradovic(2020)</label><mixed-citation>
Loew, S. and Obradovic, D.: Formulation of Fatigue Dynamics as Hybrid Dynamical
System for Model Predictive Control, IFAC PapersOnLine, 53, 6616–6623,
<a href="https://doi.org/10.1016/j.ifacol.2020.12.080" target="_blank">https://doi.org/10.1016/j.ifacol.2020.12.080</a>, 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Loew et al.(2019)Loew, Obradovic, and Bottasso</label><mixed-citation>
Loew, S., Obradovic, D., and Bottasso, C. L.: Direct Online Rainflow-counting
and Indirect Fatigue Penalization Methods for Model Predictive Control, in:
2019 18th European Control Conference (ECC), 3371–3376, IEEE,
25–28 June 2019, Naples, Italy, <a href="https://doi.org/10.23919/ECC.2019.8795911" target="_blank">https://doi.org/10.23919/ECC.2019.8795911</a>, 2019.
</mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Loew et al.(2020a)Loew, Obradovic, Anand, and
Szabo</label><mixed-citation>
Loew, S., Obradovic, D., Anand, A., and Szabo, A.: Stage Cost Formulations of
Online Rainflow-counting for Model Predictive Control of Fatigue, in: 2020
European Control Conference (ECC), 475–482, 12–15 May 2020, St. Petersburg, Russia, <a href="https://doi.org/10.23919/ECC51009.2020.9143939" target="_blank">https://doi.org/10.23919/ECC51009.2020.9143939</a>, 2020a.
</mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Loew et al.(2020b)Loew, Obradovic, and
Bottasso</label><mixed-citation>
Loew, S., Obradovic, D., and Bottasso, C. L.: Model predictive control of wind
turbine fatigue via online rainflow-counting on stress history and
prediction, J. Phys. Conf. Ser., 1618, 22041,
<a href="https://doi.org/10.1088/1742-6596/1618/2/022041" target="_blank">https://doi.org/10.1088/1742-6596/1618/2/022041</a>, 2020b.
</mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Löw and Obradovic(2018)</label><mixed-citation>
Löw, S. and Obradovic, D.: Real-time Implementation of Nonlinear Model
Predictive Control for Mechatronic Systems Using a Hybrid Model, atp magazin,
60, 46–53, <a href="https://doi.org/10.17560/atp.v60i09.2359" target="_blank">https://doi.org/10.17560/atp.v60i09.2359</a>, 2018.
</mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Luna et al.(2020)Luna, Falkenberg, Gros, and Schild</label><mixed-citation>
Luna, J., Falkenberg, O., Gros, S., and Schild, A.: Wind turbine fatigue
reduction based on economic-tracking NMPC with direct ANN fatigue estimation,
Renew. Energ., 147, 1632–1641, <a href="https://doi.org/10.1016/j.renene.2019.09.092" target="_blank">https://doi.org/10.1016/j.renene.2019.09.092</a>, 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Manwell et al.(2002)Manwell, McGowan, and Rogers</label><mixed-citation>
Manwell, J. F., McGowan, J. G., and Rogers, A. L.: Wind energy explained:
Theory, design and application, John Wiley &amp; Sons, Chichester, England,
<a href="https://doi.org/10.1002/0470846127" target="_blank">https://doi.org/10.1002/0470846127</a>, 2002.
</mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Miner(1945)</label><mixed-citation>
Miner, M. A.: Culmulative Damage in Fatigue, J. Appl. Mech., 12,
A159–A164, <a href="https://doi.org/10.1115/1.4009458" target="_blank">https://doi.org/10.1115/1.4009458</a>, 1945.
</mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Raach and Schlipf(2018)</label><mixed-citation>
Raach, S. and Schlipf, D.: Cross-tool realistic lidar simulations: Presentation
at the IEA Wind Task 32 workshop on Certification of Lidar-assisted control
applications,
<a href="https://www.ieawindtask32.org/ws08-internal-documents/" target="_blank"/> (last access: 10 October 2021), 2018.
</mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Rawlings et al.(2017)Rawlings, Mayne, and Diehl</label><mixed-citation>
Rawlings, J. B., Mayne, D. Q., and Diehl, M. M.: Model predictive control:
Theory, computation, and design, Nob Hill Publishing, Madison, Wisconsin,
2 edition, ISBN 0975937731, 2017.
</mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Ritter(2020)</label><mixed-citation>
Ritter, B.: Nonlinear State Estimation and Noise Adaptive Kalman Filter Design
for Wind Turbines, Dissertation, Technische Universität Darmstadt,
Darmstadt, <a href="https://doi.org/10.25534/tuprints-00011785" target="_blank">https://doi.org/10.25534/tuprints-00011785</a>, 2020.
</mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Sanchez et al.(2015)Sanchez, Escobet, Puig, and
Odgaard</label><mixed-citation>
Sanchez, H., Escobet, T., Puig, V., and Odgaard, P. F.: Health-aware Model
Predictive Control of Wind Turbines using Fatigue Prognosis,
IFAC PapersOnLine, 48, 1363–1368, <a href="https://doi.org/10.1016/j.ifacol.2015.09.715" target="_blank">https://doi.org/10.1016/j.ifacol.2015.09.715</a>, 2015.
</mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Schlipf(2016)</label><mixed-citation>
Schlipf, D.: Lidar-assisted control concepts for wind turbines, Dissertation,
University of Stuttgart, Stuttgart, Germany, <a href="https://doi.org/10.18419/OPUS-8796" target="_blank">https://doi.org/10.18419/OPUS-8796</a>,
2016.
</mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Schlipf and Raach(2016)</label><mixed-citation>
Schlipf, D. and Raach, S.: Turbulent Extreme Event Simulations for
Lidar-Assisted Wind Turbine Control, J. Phys. Conf. Ser.,
753, 052011, <a href="https://doi.org/10.1088/1742-6596/753/5/052011" target="_blank">https://doi.org/10.1088/1742-6596/753/5/052011</a>, 2016.
</mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Schlipf et al.(2013)Schlipf, Schlipf, and Kühn</label><mixed-citation>
Schlipf, D., Schlipf, D. J., and Kühn, M.: Nonlinear model predictive
control of wind turbines using LIDAR, Wind Energy, 16, 1107–1129,
<a href="https://doi.org/10.1002/we.1533" target="_blank">https://doi.org/10.1002/we.1533</a>, 2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Schlipf et al.(2018)Schlipf, Fürst, Raach, and
Haizmann</label><mixed-citation>
Schlipf, D., Fürst, H., Raach, S., and Haizmann, F.: Systems Engineering
for Lidar-Assisted Control: A Sequential Approach, J. Phys. Conf. Ser., 1102, 012014, <a href="https://doi.org/10.1088/1742-6596/1102/1/012014" target="_blank">https://doi.org/10.1088/1742-6596/1102/1/012014</a>,
2018.
</mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Shi et al.(2018)Shi, Xu, Tan, and Zhang</label><mixed-citation>
Shi, Y., Xu, B., Tan, Y., and Zhang, B.: A Convex Cycle-based Degradation Model
for Battery Energy Storage Planning and Operation, in: 2018 Annual American
Control Conference (ACC), 4590–4596, IEEE, 27–29 June 2018, Milwaukee, WI, USA, <a href="https://doi.org/10.23919/ACC.2018.8431814" target="_blank">https://doi.org/10.23919/ACC.2018.8431814</a>, 2018.

</mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Simon(2010)</label><mixed-citation>
Simon, D.: Kalman filtering with state constraints: a survey of linear and
nonlinear algorithms, IET Control Theory A., 4, 1303–1318,
<a href="https://doi.org/10.1049/iet-cta.2009.0032" target="_blank">https://doi.org/10.1049/iet-cta.2009.0032</a>, 2010.
</mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Sinner et al.(2021)Sinner, Petrovic, Langidis, Neuhaus, Holling,
Kuhn, and Pao</label><mixed-citation>
Sinner, M., Petrovic, V., Langidis, A., Neuhaus, L., Holling, M., Kuhn, M., and
Pao, L. Y.: Experimental Testing of a Preview-Enabled Model Predictive
Controller for Blade Pitch Control of Wind Turbines, IEEE T. Contr. Syst. T., 583–597, <a href="https://doi.org/10.1109/TCST.2021.3070342" target="_blank">https://doi.org/10.1109/TCST.2021.3070342</a>, 2021.
</mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>The MathWorks Inc.(2018)</label><mixed-citation>
The MathWorks Inc.: Rainflow counts for fatigue analysis,
<a href="https://de.mathworks.com/help/signal/ref/rainflow.html" target="_blank"/> (last access: 10 October 2021), 2018.
</mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>Verschueren et al.(2021)Verschueren, Frison, Kouzoupis, Frey, van
Duijkeren, Zanelli, Novoselnik, Albin, Quirynen, and
Diehl</label><mixed-citation>
Verschueren, R., Frison, G., Kouzoupis, D., Frey, J., van Duijkeren, N.,
Zanelli, A., Novoselnik, B., Albin, T., Quirynen, R., and Diehl, M.:
acados – a modular open-source framework for fast embedded optimal control,
Mathematical Programming Computation, 14, 147–183, <a href="https://doi.org/10.1007/s12532-021-00208-8" target="_blank">https://doi.org/10.1007/s12532-021-00208-8</a>, 2021.
</mixed-citation></ref-html>--></article>
