As wind energy plays a growing role in the energy sector, new methods for controlling wind turbines and wind farms to maximize performance are garnering industry interest. A developing body of research treats the entire wind farm as a control system, with individual turbines acting as agents in a network, allowing farm-level objectives to be considered. Two promising developments in this research are wake steering control, which seeks to increase the power generated at a wind farm by directing the wakes of upstream turbines away from downstream ones, and communication-based spatial filtering, which seeks to improve the quality of information used by turbine- and farm-level controllers by combining measurements of the wind field collected at the individual turbines. The latter method has been shown to improve the estimates of wind direction at the turbines; however, the resulting potential for increased power capture warrants further investigation. With this paper, we begin to address this gap by combining wake steering with wind direction spatial filtering. To do so, we present a preliminary method for assessing the power capture of dynamic controllers using wind farm codes designed for time-averaged simulation. This allows us to generate results much more rapidly than would be possible using high-fidelity wind farm simulators and may be useful in many wind farm control design applications.

## I. INTRODUCTION

As wind energy has increased its market share in electricity production, there has been a shift in thinking from treating individual turbines as generators to considering the wind farm as a power plant made up of a collection of generating devices. While research into the control of individual turbines is still very much an active field, especially as turbine designs become larger^{1–3} and the prospect of floating offshore turbines gains momentum,^{4} a new field of research is focused on controlling wind turbines within a farm to optimize farm-wide objectives. From a mathematical perspective, the farm can be considered as a network of interconnected agents, with each turbine a node in the representative graph. Connections (or graph edges) may then be constructed as electrical connections,^{5} lines of communication,^{6,7} or atmospheric interactions,^{8,9} depending on the problem at hand.

One of the most promising developments in the field of wind farm control is wake steering control. In the wake steering approach, the total power generated along a row of turbines in a farm is considered, rather than individual turbine power production. Simulation studies have shown that, by intentionally yawing upstream turbines slightly away from the wind, a radial aerodynamic force is generated that can push (or steer) the wake away from downstream turbines.^{10} The downstream turbines then experience freer, higher velocity inflow and are able to generate more power than when they are in waked conditions. While the intentional yawing results in a gross power loss at the upstream turbines, the recovery of higher wind speeds at the downstream turbines can result in a net gain in power across a row.^{11} This potential has since been realized using both wind tunnel testing^{12,13} and in field tests.^{14–17}

Most wake steering controllers in the literature are designed by optimizing the yaw misalignments of the wind turbines under steady inflow conditions; however, an alternative approach is to consider variations in the wind experienced at the turbines and to determine optimal misalignments under uncertainty about the true underlying wind direction.^{18,19} When considering wake steering control in this work, we will follow the robust approach of Simley *et al.*,^{19} which explicitly accounts for wind direction uncertainty.

A related field of work considers estimation of the wind field within a farm.^{7,20–22} Motivated by the presence of noise and potentially bias in measurements taken at individual turbine locations, the goal of these studies is to provide wind turbine or wind farm controllers with an estimate of the wind condition encountered at each turbine, and in some cases to estimate what is happening between turbine locations^{20,22} based on the data collected from sensors on groups of turbines. This sharing of data among turbines can help to both reduce noise via spatial filtering and also to identify sensors that appear faulty when compared to the other measurements.^{7} Of these works, Doekemeijer *et al.*^{20} present a nonlinear Kalman filtering approach based on a medium-fidelity physical wind farm model, while Sinner *et al.*^{22} use a simplified parametric model and employ a linear Kalman filter for estimating model parameters. On the other hand, Annoni *et al.*^{7} present several non-parametric methods for estimating the wind directions at the turbines, the most complex of which also identifies biased turbine measurements using a consensus-based optimization approach. Annoni *et al.*^{7} further propose a static weighted averaging method, also used by Bossanyi,^{21} which we will employ in the present work for simplicity. Taken as a whole, the results from Annoni *et al.*;^{7} Bossanyi;^{21} Doekemeijer *et al.*;^{20} and Sinner *et al.*^{22} suggest that errors in measuring the wind condition, and, in particular, the wind direction, at each turbine may indeed be reduced using communication-based estimation approaches.

Annoni *et al.*^{7} and Sinner *et al.*^{22} present results in terms of reducing the error between the estimated wind direction and the true wind direction at each turbine, and Annoni *et al.*^{7} predict an improvement in power using the turbine power curve. Although this is a useful step, the question of whether this error reduction actually leads to improved performance remains open, in part due to a lack of a simulation environment where dynamic, wind farm-level controllers can be rapidly tested. We are aware of only one other work that addresses this question,^{21} and we aim to reinforce those results and extend them to the case where wake steering is included. Wake steering has a significant impact on the flow, and that impact would be ignored using only a turbine power curve for evaluation. Instead, we describe a method of using the FLOw Redirection and Induction in Steady State (FLORIS) tool, a wind farm simulation tool designed for steady wind conditions,^{23,24} in dynamic conditions under the assumption of a steady mean inflow direction and speed. This allows us to evaluate the energy production of wind farm controllers without requiring expensive computational fluid dynamics simulations.

As such, the contributions of this work are twofold: we propose a methodology for using steady or time-averaged wind farm solvers to simulate dynamic wind farm behavior, which can be seen as an extension to a previously published method for a single turbine,^{19} and we demonstrate the potential for power improvements with the combined use of spatial filtering and wake steering. Although the results are certainly case-specific, we hope that they will encourage further research into and testing of spatial filtering approaches.

The rest of this paper is organized as follows: In Sec. II, we provide an overview of the turbine yaw controller (based on Simley *et al.*^{19}) and the averaging approach (from Annoni *et al.*^{7}) used in this study. We also describe a modification to the averaging method to encourage anticipative yaw actions.^{21} In Sec. III, we describe how we use FLORIS in a dynamic setting to evaluate the performance of wind farm controllers. The various combinations of yaw control with wind direction estimation that we test, as well as the farm layout we use for simulation, are presented in Sec. IV. Results from testing are discussed in Sec. V. Finally, we provide conclusions and comments on areas for further study in Sec. VI.

## II. CONTROLLERS TESTED

The focus of this work is to investigate the potential for increased wind farm power production using spatial filtering methods. In particular, the spatially filtered wind direction estimate may be used for turbine yaw control with the aim of reducing turbine yaw error. On the other hand, recent simulation,^{11} wind tunnel,^{12,13} and field test^{14–17} results have shown that the overall power production of a farm may be increased using wake steering. We therefore look at power improvements using spatial filtering in two settings: the “greedy” case, where the yaw controller for each turbine attempts to drive yaw misalignment to zero to maximize its own power production, and the wake steering case, where the yaw actions follow a prescribed offset schedule to maximize farm-wide power production. Some results on the former case have been presented by Bossanyi,^{21} but we consider the extension to include wake steering to be an important area for investigation. The control architecture used in this work is given in Fig. 1 and will be elaborated on in the next subsections.

### A. Yaw control

The performance of both greedy yaw control and wake steering depends strongly on the turbine yaw controller. The yaw mechanics are described by a simple state machine, with the turbine either yawing at a fixed rate in the positive direction, yawing at the same rate in the negative direction, or not yawing.

The yaw control acts on an estimate of the turbine's yaw error

where $\varphi $ is the wind direction and *θ* is the turbine yaw position (see Figs. 1 and 2). If the error exceeds the deadband amount (positive or negative), the turbine begins to yaw in the appropriate direction to drive the error toward zero and stops yawing once the error crosses zero. Consistent with the work of Simley *et al.*,^{19} we use the yaw system settings provided by Bossanyi,^{25} namely, a deadband of 8 deg and a yaw rate of 0.3 deg/s. In the standard case, the yaw error estimate is produced by low-pass filtering the wind turbine vane measurement. A first-order filter with a time constant of 35 s is used for this.^{19}

As mentioned above, there has been considerable interest recently in altering the yaw actions of upstream turbines to steer the wake away from downstream ones. In an ideal setting, the yaw position *θ* of the upstream turbine would be controlled directly to bypass the vane filter,^{25} but without reworking the turbine yaw controller, the yaw position can be manipulated by providing an offset to the vane measurement and tricking” the turbine into driving an altered error

to zero (see Figs. 1 and 2). Here, *γ* is the desired turbine misalignment for wake steering purposes. The (unaltered) yaw control logic still attempts to drive *ε* to zero, but now this results in a yaw position $\theta =\varphi \u2212\gamma $. The standard, greedy yaw controller is recovered by setting $\gamma \u22610$. We emphasize that this approach allows us to implement wake steering without needing to redesign the turbine yaw controller; however, overhauling the turbine yaw control to provide direct yaw access would likely lead to better performance.^{25}

Much of the effort in designing such wake steering controllers goes into the selection of appropriate reference misalignments *γ*. Although dynamic selection of the references may be useful in some cases,^{17} field tests have shown that a simple lookup table for offsets may suffice.^{14} In this method, for each wind direction and wind speed, the optimal power-producing misalignments are determined based on simulations of the wind farm and tabulated. During operation, the wake steering controller then simply queries the table at the current measured wind speed and wind direction to determine the appropriate reference for each turbine.

Consistent with the method presented in Simley *et al.*,^{19} the determination of the optimal yaw misalignments considers wind direction uncertainty and is limited to positive yawing. The robust method takes into account both the unsteady nature of the wind and the lag in achieving the desired offsets resulting from both the inherent yaw controller rate limits and the indirect access to yaw actions. Yaw offsets for a given wind direction are found by maximizing the wind farm power assuming a normal distribution of possible wind directions, as opposed to assuming a steady, deterministic wind direction. This optimization is carried out using FLORIS to model the wind farm power output. Moreover, wake steering using positive and negative misalignments can lead to challenging scenarios near the crossover zone, where rapid transitions between a large positive and large negative misalignment are needed.^{18} Due to asymmetries in the wake caused by the direction of rotation of the turbine, positive misalignments produce a larger wake deflection and are thus preferred over negative misalignments;^{26} further, turbine structural loads appear to decrease under positive yaw misalignments and increase under negative ones.^{27} We therefore use only positive misalignments in this study. This agrees with precedents set in early field campaigns for wake steering.^{14} An example of the optimal offsets for the two-turbine farm shown in Fig. 3 and for a wind speed of 8 m/s is given in Fig. 4. For full details of the robust wake steering controller, please refer to Simley *et al.*^{19}

### B. Averaging

The input to the turbine yaw controller is generally taken as the wind vane measurement, which measures the difference $\varphi \u2212\theta $ between the current wind direction and the turbine yaw position (which may not be known precisely);^{19} however, wind vanes are notoriously noisy because they are usually located on the turbine nacelle directly behind the rotor and experience high turbulence. This results in a relatively poor instantaneous wind direction estimate, and the vane measurement is usually passed through a (rather slow) filter^{25} before being used for yaw control.

An alternative methodology has been proposed recently, whereby the vane-measured wind direction is replaced with an estimate based on the measurements from multiple turbines.^{7,22} By combining the wind direction measurements from turbines across the farm, communication-based approaches generate an estimated wind direction that utilizes spatial filtering to smooth the individual vane measurements. This filtering is represented by the left-hand block in Fig. 1.

#### 1. Weighted average filter

Several spatial filtering approaches have been proposed in the literature, ranging from taking a simple average across the turbines,^{7} to fitting and updating a polynomial surface,^{22} or running a distributed optimization to help identify biased turbines.^{7} For the purpose of this study, where we are combining spatial filtering with wake steering control, we use the relatively simple approach from Annoni *et al.*^{7} and Bossanyi^{21} of taking each turbine's estimated wind direction as a weighted average of the measurements from all turbines, where the weighting function depends on the distance between the turbine in question and the other turbines. We will refer to this method from here on as “spatial averaging” or simply “averaging.”

To take the weighted average of a circular quantity, we let the estimated wind direction $\varphi \u0302$ at turbine *T* be constructed according to

where *N* is the total number of turbines in the farm, $\varphi meas(i)$ is the measured wind direction at turbine *i* (based on the vane measurement and current yaw position) in radians, and ${wTi:\u2211i=1NwTi=1,wTi\u22650\u2200i}$ are the weights for turbine *T*. Here, we use *j* to denote the imaginary unit. Letting $ej\Phi \u0302\u2208\u2102N$ be the vector with $ej\varphi \u0302(T)$ the *T*th entry and $ej\Phi meas\u2208\u2102N$ the vector with $ej\varphi meas(i)$ the *i*th entry, the vector of estimates $\Phi \u0302\u2208\mathbb{R}N$ can be expressed in terms of the vector of all turbine measurements $\Phi meas$ as

where $W\u2208\u2102N\xd7N$ is a row-stochastic matrix^{28} with *T*, *i*th entry $wTi+j0$.

As suggested by Annoni *et al.*^{7} (Section 4.2), we use a normal distribution to determine the *w _{Ti}*. We let

#### 2. Preview modification

The use of preview information for control has received considerable attention in the wind energy literature. Turbines are large with slow dynamics, meaning that there are significant delays associated with using feedback control alone. While there has been considerable research into the use of feedforward additions to turbine blade pitch and torque controllers,^{29} the use of preview information for yaw control is an area that deserves further attention.

To investigate the use of preview information for yaw control, we propose a minor modification to the choice of averaging weights (5) to bias the wind direction estimate toward upstream turbines. Instead of centering the normal distribution on the turbine in question, we center the distribution on a point *μ* upstream. The upstream distance $\mu =\tau U$ is chosen to approximately compensate for the delay *τ* between the turbine wind direction $\varphi \u0302$ and the turbine yaw position *θ* at a given mean wind speed *U*. We understand that this is similar to the method presented by Bossanyi^{21} although a precise mathematical formulation is not provided in that work. The delay *τ* should be chosen to approximately compensate for the combined effects of low-pass filtering, reaching the deadband threshold, and subsequent (relatively slow) yawing action. The choice of *τ* will be discussed in Sec. IV.

The modified weights can then be computed as

where $dTi,prev$ is the Euclidean distance between the distribution center point (*μ* upstream of turbine *T*) and turbine *i*, and $\sigma T,prev$ is the standard deviation of the distances from the distribution center point to all other turbines. We have added the subscript $prev$ to denote the preview modification. Under this paradigm, the collection of wind direction estimates is denoted

where $Wprev$ is constructed in the same manner as *W* but using $wTi,prev$ in place of *w _{Ti}*.

## III. SIMULATION ENVIRONMENT

To evaluate the performance of the controllers described in Sec. II, we simulate their behavior using a combination of the methods described by Simley *et al.*^{19,30} There are several tools available for simulating wind farm behavior, broadly divided into large-eddy simulations, which are computational fluid dynamics codes capable of high-fidelity simulation, and lighter, faster codes that represent quantities in lower fidelity and may not follow the conservation laws laid out by the Navier–Stokes equations.

FLORIS^{23} is a control-oriented code developed by the National Renewable Energy Laboratory (NREL) that falls into the latter category and simulates time-averaged flow within a wind farm.^{24} Since it considers only time-averaged behavior, it is not directly useable for evaluating controller behavior in the time domain. We now describe a method for using FLORIS (or other time-averaged codes) for (average) time-domain simulation, under some important assumptions.

### A. Wind direction signal

We consider the atmosphere interacting with the wind farm to have frequency content in three bands: the very low frequency band ($M$), which contains the mean underlying wind speed and direction; low frequency ($LF$), which includes content from large turbulent eddies and is used as the input to FLORIS (see Sec. III C); and high frequency ($HF$), which includes content from small eddies that evolve as they move through the farm and therefore differs considerably across turbines. The very low frequency component is treated as constant during simulation. Note also that our notation here differs from Simley *et al.*:^{19} we are using subscripts $LF$ and $HF$ in place of $l$ and $t$, respectively.

The wind direction $\varphi $ at a given location is modeled as having a spectrum

where *f* is the frequency in Hz and *C* is a scaling constant, based on meteorological mast measurements representing neutral atmospheric conditions over 1-hour periods.^{19} A different model may be needed for data from a different site. The wind direction is split into its low- and high-frequency components as

using a first-order low-pass filter with a cutoff frequency of 0.001 1 Hz,^{19,30} which results in a gradual transition between the components over a range of frequencies. The cutoff frequency is chosen so that the high-frequency component roughly matches the turbulence seen in large-eddy simulations.^{19} Physically, it may be difficult to determine which parts of the wind direction are “low” and “high” frequency, but this division is convenient for modeling and simulation purposes (see Sec. III C).

We generate the measured wind direction signals $\varphi meas$, which contain both high- and low-frequency content, at each of the turbines using the Veers method for stochastic simulation of correlated time series^{31} with a coherence model based on wind farm data. As presented in Simley *et al.*,^{30} the wind direction coherence for wind speeds around 8 m/s for a pair of upstream/downstream turbines, taking propagation delays into account, may be modeled as

where *d* is the downstream (longitudinal) distance between the turbines. For the present study, we will also use (10) to model the coherence between the wind direction at turbines in cross-stream directions—that is, we will replace *d* with *δ*, the distance between two turbines, downstream or otherwise. We note that this is an extension of the model presented in Simley *et al.*^{30} and may not be realistic. In reality, the cross-stream (lateral) coherence is likely to be lower than the downstream (longitudinal) coherence. In future work, we plan to explore building a wind direction coherence model that is a function of both longitudinal and lateral distances.

This method produces a wind direction signal $\varphi \u2032(T)$ at each turbine *T* that must be shifted in time to model the mass downstream flow at the mean wind speed *U* and in the mean wind direction $\varphi M$. To do so, we calculate a turbine-specific delay $\tau (T)=d(T)/U$, where $d(T)$ is the downstream distance to turbine *T*. The wind direction signal measured by turbine *T* is then

Similarly, the low-frequency wind direction is computed by applying the low-pass filter magnitude function to the full-spectrum Fourier coefficients before applying the inverse Fourier transform to generate $\varphi LF\u2032(T)$. The low frequency signal impacting turbine *T* is again time-shifted according to

### B. Averaging and yaw actions

Once the wind directions $\varphi $ have been generated for all turbines, they can be used for yaw control, either directly [by passing $\varphi meas(T)$ directly to turbine *T*'s yaw controller] or after spatial filtering. In the latter case, some or all of the $\varphi meas$ are transmitted to a farm-central controller, which computes wind direction estimates $\varphi \u0302$ for each turbine and transmits them back to the turbines. Turbine *T*'s yaw controller then acts on $\varphi \u0302(T)$ rather than the raw measurement $\varphi meas(T)$. Details of both the averaging algorithm and yaw controller are provided in Sec. II. The turbine yaw mechanism follows the reference generated by the yaw controller to produce a time series of yaw positions $\theta (T)(t)$.

### C. Evaluation using FLORIS

FLORIS captures the average flow behavior in a farm, rather than the instantaneous flow behavior. Moreover, FLORIS calculates the flows within a farm assuming that turbine wakes are fully developed and that the wind has been in its current condition indefinitely. This means that it does not make sense to simply simulate FLORIS once for each time step *t* with wind directions defined by $\varphi meas(t)$ and yaw positions defined by $\theta (t)$; this would erroneously imply that the wake of an upstream turbine was fully developed, ignoring the time of propagation of the wake and overlooking the averaging that already takes place in the code.

We demonstrate this using a two-turbine example shown in Fig. 6, with turbine T1 directly upstream of turbine T2. If, for example, we calculate FLORIS using $\theta (t)$ for a fixed value of *t* = 0, the wake resulting from action $\theta (1)(0)$ will already (instantaneously) be impacting turbine T2—that is, there will be no recognition of the time it takes for the wake to move downstream.

We avoid this issue by transforming time according to the mean wind speed using the identity

based on the assumption that the mass flow of air is at the mean wind speed and wind direction. We can now simulate the farm behavior for each value of *s* by providing FLORIS the $\varphi LF(T)(s)$ and $\theta (T)(s)$ utilizing FLORIS's newly added heterogeneous inflow capabilities.^{32} Since the actions of downstream turbines are advanced by this transformation, they are now in the correct position once the wake of the upstream turbine has been propagated. This approach assumes that the wake propagates downstream at the mean ambient wind speed, rather than at a reduced speed. This allows for a straightforward transformation of the signals, which we consider a reasonable simplification for this purpose. The propagation speed of wind turbine wakes is an ongoing area of research. Similarly, vertical shear is assumed not to affect the propagation speed.

Returning again to our example in Fig. 6, we see that the wake resulting from a yaw action $\theta (1)(0)$ impacts turbine T2 75 seconds later. The FLORIS simulation therefore represents a scenario where if turbine T1 has a clock reading *t* = 0 s, turbine T2 should read *t* = 75 s; however, due to their downstream separation, *s* = 0 s for both turbines, so simulating FLORIS for fixed values of *s* overcomes the propagation issue. A FLORIS simulation for fixed *s* can be interpreted as the flow condition that a vertical control plane” would experience as it enters the FLORIS volume from the mean wind direction $\varphi M$ and moves through the volume with mean wind speed *U*. We emphasize that only the low-frequency wind direction component $\varphi LF(s)$ is used as the input to FLORIS, while the vane measurements are treated as the full wind direction signal $\varphi meas$ (which includes the high-frequency component $\varphi HF$). This is consistent with the intention that FLORIS be used to simulate *expected* behavior, which already accounts for some turbulence.

The reader will note that in Sec. III A, we shifted the low-frequency wind direction $\varphi LF\u2032$ when generating the final direction signal for each turbine, essentially applying the inverse of our *s*-transformation. In fact, if there was no communication between turbines, it would be possible to treat all signals as if they existed in the *s*-domain and avoid any transformations; however, the transformation to the true time domain *t* and back must be undertaken to ensure that the averaging approach described in Sec. II B happens in “real” time and does not mix past and future direction measurements as would be the case if it acted on $\varphi meas(s)$ rather than $\varphi meas(t)$.

In this study, we are interested in quantifying the power to be gained using various control and averaging techniques. A standard output of FLORIS is the expected power *P* produced at each turbine for the current flow condition, and the farm power can be calculated, for an *N*-turbine farm, as

However, due to our transformation into the *s*-domain, this calculation cannot be performed for a single FLORIS simulation (which contains varying values of *t*). While we could transform each turbine's power signal back to the *t*-domain and then perform the sum (14), we instead compute the expected energy over the interval of modified time $[s0,sf]$ as

Physically, this represents the energy extracted from a volume of air as it moves through the wind farm, beginning with plane *s* = *s*_{0} and ending with the plane *s* = *s _{f}*.

## IV. TESTING

We evaluate the controllers described in Sec. II using the simulation procedure defined in Sec. III on a six-turbine farm, as depicted in Fig. 7. The turbines used in the farm are NREL 5-MW turbines,^{33} with a rotor diameter of 126 m, a hub height of 90 m, and a rated wind speed of 11.4 m/s. The spacing between turbines is 630 m, which equates to five rotor diameters. We use a steady wind speed of *U* = 8 m/s (specified at the turbine hub height) for all simulations, while the wind directions are generated using the steps described in Sec. III A. FLORIS is used with the Gauss-curl hybrid wake model,^{34} which accounts for the asymmetry that contributed to our preference for positive yaw misalignments. The turbulence intensity is set at 6%, which is on the lower end of values observed in land-based field tests but may be representative of offshore conditions. The vertical shear exponent is set at 0.12. The decrease in power (and thrust) for a yaw misalignment $\varphi \u2212\theta $ is taken as the aligned power (or thrust) scaled by $(cos\u2009(\varphi \u2212\theta ))1.88$. Wakes are superimposed using the ‘sum of squares free-stream superposition’ model of Katić.^{35} FLORIS's heterogeneous inflow functionality allows us to specify a different wind inflow direction $\varphi LF(T)(s)$ for each turbine.^{32}

Based on the yaw and spatial averaging methods described in Sec. II, we test six categories of controller:

C1Standard yaw control without spatial averaging

C2Standard yaw control with standard spatial averaging

C3Standard yaw control with preview spatial averaging

C4Wake steering control without spatial averaging

C5Wake steering control with standard spatial averaging

C6Wake steering control with preview spatial averaging.

Weights for the non-preview averaging cases **C2** and **C5**, and the preview averaging cases **C3** and **C6**, are generated as described in Sec. II B. To establish the preview time constant *τ* for cases **C3** and **C6**, we simulate the preview spatial filtering method using several possible values for *τ*, ranging from *τ* = 10 s to *τ* = 60 s in 10-s increments. This is done over 24 random seeds with mean wind direction $\varphi M=270\xb0$, constant wind speed *U* = 8 m/s, and a duration of 1 hour. The resulting root-mean-square (RMS) wind direction errors, defined as the difference between the low-frequency wind direction $\varphi LF$ and the estimated wind direction $\varphi \u0302$ at each turbine, are shown in Fig. 9. We include the base case **C1**, whose estimate is simply the measurement $\varphi meas$, and the standard spatial averaging case **C2**, which is equivalent to setting *τ* = 0 s. In the box plot and those used in the rest of this paper, the whiskers represent the spread of the data across all seeds (or simulations); the box represents the range between the upper and lower quartiles; and the mean and median for each case are represented by the black dot and white line, respectively.

Unsurprisingly, the standard spatial filter (case **C2**) is the best performer when the delay introduced by the yaw controller filter is not taken into account (top plot in Fig. 9). The reduction in RMS direction error between the base case **C1** and the spatial filtering case **C2**, approximately 36%, is consistent with the trends seen in previous research.^{7,22} On the other hand, the intention of the preview spatial filtering is in part to overcome the delay induced by the yaw controller. The bottom plot in Fig. 9 shows the RMS error between the low-frequency wind direction $\varphi LF$ and the estimated wind direction $\varphi \u0302$ after it has been passed through the yaw controller filter (see Sec. II A). Here, we see that the RMS error stays low for values $\tau \u226430$, above which performance deteriorates presumably due to lower coherence. Because this comparison still does not account for the extra delay in achieving a yaw set point due to the yaw controller deadband and slow yawing action, a high value *τ* is desirable while ideally maintaining a low RMS error. We therefore set *τ* = 30 in cases **C3** and **C6** for all further testing.

The resulting weights for turbine T6 (that is, the sixth row of *W* and $Wprev$) are displayed in Fig. 10. The center point for the normal distribution for the standard case is the location of T6, while the center point for the preview case is 240 m upstream of T6, as shown in Fig. 7. For the standard case, the largest weight is on T6's own measurement, whereas the preview modification makes the wind direction measured at T4 the most significant contribution to T6's wind direction estimate. An example of the estimated wind direction using the non-preview averaging is given in Fig. 11, where at this instant the averaging estimate is closer than the raw measurement to the low-frequency wind direction for most of the turbines.

The wake steering controller cases **C4**–**C6** are further broken down into statically optimal wake steering and robustly optimal. In the robustly optimal case, the standard deviation of the yaw misalignment is taken into account when determining the yaw offset schedule;^{19} however, this standard deviation decreases when spatial averaging is used, since the averaging algorithms provide better estimates of the wind direction. Therefore, to determine the robust optimal offset schedule, we run the standard yaw control with no, standard, and preview spatial averaging, and we use the resulting yaw misalignment standard deviation.

Specifically, we simulate the yaw actions for cases **C1**, **C2**, and **C3** using 24 random seeds with mean wind direction $\varphi M=270\xb0$ and constant wind speed *U* = 8 m/s, each representing 1 hour of operation. An example of the simulated response (for case **C1**) is given in Fig. 8 (blue and black lines). Since in these cases the desired turbine misalignment is zero, the true yaw error (between the low-frequency wind direction and the yaw position) is calculated as

In Fig. 8, this is the difference between the black lines in the upper plot and lower plots. For each random seed, the standard deviation of the yaw error $\sigma \epsilon $ is computed for each turbine. The resulting values are displayed in Fig. 12. Finally, the wind direction uncertainty standard deviation $\sigma \varphi $ is calculated according to

where $\sigma \xaf\epsilon $ is the mean yaw error standard deviation across all random seeds and all turbines, and $\sigma \theta $ is the standard deviation associated with yaw position uncertainty, taken as $\sigma \theta =1.75\xb0$. This value is consistent with that used in Simley *et al.*^{19} and is considered valid here since the same yaw controller is used; however, a new value would need to be determined for a different yaw controller. The resulting wind direction uncertainty values, for cases **C1**–**C3**, are $4.2\xb0,\u20093.8\xb0$, and $3.6\xb0$, respectively, indicating that the use of averaging in cases **C2** and **C3** has indeed reduced the wind direction uncertainty as expected.

We then generate robustly optimal yaw offset schedules for each turbine (see Simley *et al.*,^{19} Sec. 3.2, for details) using the various wind direction uncertainty standard deviations $\sigma \varphi $. These are shown in Fig. 13, along with the optimal schedule for static wind directions (corresponding to $\sigma \varphi =0\xb0$). Notice that, generally, increasing uncertainty (i.e., increasing $\sigma \varphi $) leads to a wider band of wind directions with a yaw offset but a smaller peak offset.

We note that in taking the mean yaw error standard deviations across turbines prior to calculating the wind direction uncertainty variance, we have ignored the trend evident in Fig. 12, which shows that when spatial filtering is used, the yaw error is decreased for turbines that are further downstream (see also Fig. 7). An alternative approach would be to allow different amounts of wind direction uncertainty for each turbine; however, this method is considerably more complicated since the uncertainty would then also be a function of wind direction (we would expect that uncertainty is larger for turbines at the fore of a farm for a particular wind direction and lower for turbines further downstream). While this may present an avenue for further refinement of the robust wake steering approach when spatially filtered wind directions are available, in this work we consider only uncertainty based on mean yaw error.

Cases **C4**, **C5**, and **C6** (the wake steering cases) use the optimal offset schedules presented in Fig. 13. For completeness, we break these cases down into the following subcases based on the assumed wind direction uncertainty (for $X\u2208{4,5,6}$):

**CXa**Statically optimal wake steering.**CXb**Robustly optimal wake steering without assuming spatial averaging.**CXc**Robust wake steering, reoptimized based on spatial averaging method.

That is, **CXa** uses the yaw offset schedule generated assuming zero wind direction uncertainty ($\sigma \varphi =0\xb0$), as shown by the red line in Fig. 13; **CXb** uses the schedule based on the wind direction uncertainty determined without taking averaging into account ($\sigma \varphi =4.2\xb0$, blue line in Fig. 13); and **CXc** uses the schedule based on the wind direction uncertainty determined with the knowledge of the averaging approach applied. This only applies to cases **C5** and **C6** since **C4** uses no averaging (i.e., case **C4c** is identical to case **C4b**). Specifically, case **C5c** assumes $\sigma \varphi =3.8\xb0$ (green line in Fig. 13), while case **C6c** assumes $\sigma \varphi =3.6\xb0$ (yellow line in Fig. 13).

Finally, all cases **C1**–**C6** (including subcases **a**–**c**) are simulated to generate yaw actions akin to those shown in Fig. 8 for each of the turbines using 144 random seeds with a mean wind direction $\varphi M=270\xb0$ and a constant wind speed *U* = 8 m/s. The resulting yaw trajectories are converted into the *s*-domain and the farm is simulated, for each instance *s*, using FLORIS according to the methodology described in Sec. III C. The energy production for the simulation is computed according to Eq. (15) using limits $s0=600$ s (to reject transients) and *s _{f}* = 3400 s (to ensure the final plane has time to travel across the farm). A graphical representation of a FLORIS simulation is shown in Fig. 14 for steady, homogeneous wind conditions and without wake steering (top) and using the statically optimal offset schedule for wake steering (bottom).

## V. RESULTS AND DISCUSSION

Results from testing are displayed in Fig. 15. We present the results as the percentage increase in energy produced compared to the baseline case **C1** for each random seed. The mean increase in energy production is also recorded in the first data column of Table I. We will now discuss in detail the results, first considering the effect of spatial averaging, which is the main focus of this paper, and then considering wake steering; however, we briefly point out that wake steering brings the most significant increase in energy production (on the order of 4%), while spatial averaging adds an energy production increase in around 0.5% on top of this.

Case . | Energy gain (%) . | Yaw travel increase (%) . |
---|---|---|

C1 | 0.0 | 0.0 |

C2 | 0.5 | –46.1 |

C3 | 0.4 | –46.7 |

C4a | 3.7 | 36.9 |

C4b | 4.0 | 28.7 |

C5a | 4.5 | –7.2 |

C5b | 4.7 | –15.0 |

C5c | 4.6 | –19.3 |

C6a | 4.6 | –8.0 |

C6b | 4.8 | –15.1 |

C6c | 4.7 | –17.0 |

Case . | Energy gain (%) . | Yaw travel increase (%) . |
---|---|---|

C1 | 0.0 | 0.0 |

C2 | 0.5 | –46.1 |

C3 | 0.4 | –46.7 |

C4a | 3.7 | 36.9 |

C4b | 4.0 | 28.7 |

C5a | 4.5 | –7.2 |

C5b | 4.7 | –15.0 |

C5c | 4.6 | –19.3 |

C6a | 4.6 | –8.0 |

C6b | 4.8 | –15.1 |

C6c | 4.7 | –17.0 |

We focus first on the impacts of using spatially filtered estimates in place of the raw turbine-measured wind direction. Without wake steering (cases **C2** and **C3**), we observe a small (approximately 0.5%) increase in mean energy production using averaging approaches as compared to case **C1**. Similarly, there appears to be a small uplift of 0.5%–0.8% in energy in cases **C5** and **C6**, which combine averaging with wake steering, over wake steering without spatial filtering (case **C4**). We did not see a significant benefit in using the preview modification to spatial averaging in this study, with comparable energy gains and yaw activity between cases **C2** and **C3**, and **C5** and **C6**. This is likely to be highly sensitive to the coherence in the wind field between turbines (here we used a coherence function based on a data set from a single farm), and we expect that benefits might still be attainable in wind farms with high correlation. We also note that the preview averaging we employ here is rather rudimentary, and a more sophisticated method that employs a parametric^{22} or nonparametric model to predict the wind condition at a future time is a possible avenue for future research. Nonetheless, the results of the preview spatial averaging without wake steering are in line with those reported in the study of Bossanyi.^{21}

The improvements in energy production (Fig. 15) using averaging approaches are relatively small; however, we draw the readers' attention to some important qualifiers for these results. First, we have not considered biased or faulty wind direction measurements. As discussed in Annoni *et al.*^{7} and Sinner *et al.*,^{22} an important benefit of using direction estimates based on a number of turbines' measurements, instead of a single measurement, is the ability to smooth out biases^{22} and even automatically detect and reject abnormalities produced by faulty sensors.^{7} In this study, for simplicity, we simulated each wind direction sensor as behaving “correctly,” which in this case means that the expected wind direction measurement at any time is the true, low-frequency wind direction. Averaging then acts only to provide spatial filtering to remove zero-mean noise. Although not considered in this work, the robustness of spatial filtering against individual sensor biases presents another advantage over the standard disconnected approach and could lead to significant improvements in wind farm energy production by avoiding shutdowns and large yaw errors in turbines with faulty wind vane measurements. On top of this, spatial averaging could provide improved benefits on larger wind farms. Increasing the number of turbines in the weighted spatial average could provide better smoothing, while larger farms are likely to have more rows of downstream turbines that can benefit from both preview averaging and wake steering. We are also interested in cases where there are large shifts in wind direction over a short time, where preview spatial averaging could be especially useful to help inform turbines about oncoming events in advance; however, the simulation method we propose uses a fixed mean wind direction and is not yet capable of handling large direction changes.

Second, although energy production improvements are the main focus of this study, they are not the only metric by which to judge the controllers. Another important consideration is the yaw travel since increased yawing action can increase loads and decrease the life span of the turbine yaw mechanism.^{36} Figure 16 compares the yaw travel across all cases, again using case **C1** as a reference, and mean results are reported in Table I. Here, we see a significant decrease in yaw activity when using averaged wind direction estimates for yaw control, both when wake steering is active (cases **C5** and **C6** compared to case **C4**) and in baseline yaw control (cases **C2** and **C3** compared to case **C1**). The latter again agrees with Bossanyi's findings,^{21} even without modifying the yaw controller. Adjusting the yaw control logic by either reducing the deadband or decreasing the filter time constant to achieve a similar level of yaw activity to the no-averaging case may result in higher power production since the turbine can be more precise in its yaw actions as a result of higher-quality averaged direction estimates. Alternatively, the yaw logic of individual turbines could be replaced by commands provided directly by the wind farm-level controller, making direct use of both spatiallyfiltered wind direction estimates and global knowledge of all turbines' yaw positions. We consider this approach a major avenue for further investigation.

We now consider the impacts of wake steering. As expected based on earlier studies, wake steering (cases **C4**–**C6**) produces a boost in energy production, on the order of 4% over the dynamic, westerly winds considered in our simulations (Fig. 15). In this study, where turbines are spaced five rotor diameters apart, we saw some evidence of an increase in energy production when using robust offset schedules (subcases **b** and **c**) compared to the statically optimal schedule (subcase **a**); however, using the robust wake steering approach has a significant impact on yaw activity (Fig. 16). In general, wake steering control is expected to lead to increased yaw travel,^{18} since upstream turbines must make large yaw adjustments when entering a wake steering sector (see Fig. 13). Part of the reason we used only positive yaw misalignments in the yaw offset schedule for this work (see Sec. II A) is to avoid the large yaw moves that can occur during crossover between positive and negative misalignments. By widening the wake steering sectors and lowering the peak offset, as well as potentially avoiding sectors entirely where there are marginal energy gains, robust wake steering results in fewer large yaw maneuvers and less overall yaw travel. This is particularly evident comparing subcase **C4b** to **C4a** in Fig. 16: the mean yaw distance traveled drops from a 36.9% increase over baseline to 28.7% while producing a small gain in energy production.

This trend continues when averaging is combined with wake steering. Taking case **C5** as an example, we see that combining averaging with statically-optimal wake steering (case **C5a**) drastically reduces the yaw travel compared to statically optimal wake steering alone (case **C4a**), and the modification to the robustly optimal offset schedules (cases **C5b** and **C5c**) results in a second considerable drop. Somewhat surprisingly, reoptimizing the yaw offset schedules with (preview) spatial averaging in mind (cases **C5c** and **C6c**) leads to a small decrease in energy produced compared to the initial robust offset schedule (cases **C5b** and **C6b**) while lowering the yaw activity somewhat; however, the loss in energy is small enough that it may simply be an artifact of the quantization used to generate the robust offset schedules.

## VI. CONCLUSIONS AND FUTURE WORK

In this work, we set out to determine whether using spatial averaging between wind turbines to generate wind direction estimates can improve the energy production of a wind farm. Using a relatively simple weighted average approach and assuming no faulty sensor measurements, we found that estimates employing spatial filtering were able to provide a small increase in wind energy production in a six-turbine farm. When wake steering is implemented together with spatial averaging, the energy production was increased by around 0.7% compared to using wake steering alone (case **C4**). We expect that these values could increase if more sophisticated algorithms and realistic test conditions, including biased sensor measurements, are considered. It may also be possible to increase the energy gain of the preview spatial averaging somewhat with careful tuning of the center point and spread for the normal distribution or by developing methods that actively predict future wind conditions. Although we have only tested a single mean wind speed (8 m/s), it seems reasonable to anticipate that similar increases in energy capture would be attainable for a range of below-rated wind speeds. Once the turbine enters rated operation, yaw misalignments and the presence of wakes may no longer lead to power losses, and energy increases will presumably be less significant.

We also found that the use of averaging resulted in considerably lower overall turbine yaw activity, presumably due to the spatial filtering introduced. We expect that similar reductions in yaw activity would be seen both in below- and above-rated operation. This hints at a direction for future work that considers adjusting the turbine yaw logic, either by lowering the controller deadband^{21} or by decreasing the filter time constant, to raise the yaw activity back to a baseline level. It is conceivable that by making these adjustments, yaw errors could be further reduced and energy production could be boosted with no overall increase in yaw activity simply by better utilizing information already available across the farm.

An alternative is to use a centralized wind farm controller for turbine yaw control. Rather than adjusting individual turbine yaw logic and modifying the wind vane signal to implement wake steering, such a controller would collect relevant information from each turbine (such as wind direction, wind speed, and current yaw position), produce an optimal set of turbine yaw angles based on available information using spatial filtering, as well as constraints on yaw activity, and send those yaw commands directly to the turbine yaw mechanisms. We consider this type of approach an interesting direction for future work.

A contribution of this work is developing a framework for testing farm-level control schemes. We have presented a method of using FLORIS,^{23} a steady-state averaged wind farm simulator, in a dynamic setting by shifting signals appropriately to allow the effects of upstream turbines to develop as the wind field moves downstream. This approach is built upon the methods of Simley *et al.*^{19,30} of splitting the wind direction signal into a low-frequency component, which is used as the true wind direction for FLORIS, and a high-frequency component that is treated as noise at the turbine wind vanes. The method relies on the assumption that both wind direction changes and turbine wakes move downstream at an underlying mean wind speed and in an underlying mean wind direction. A comprehensive study is needed to determine the accuracy of this framework for dynamic simulation. Comparing to wind fields generated in large eddy simulations or measured at a physical wind farm would be useful to quantify the magnitude of the errors incurred by the proposed technique; however, such a comparison is outside the scope of the present work.

We consider the extension of the simulation method proposed to cases where the underlying mean wind speed and direction are not assumed to be constant to be a pressing matter for future research. Such tools^{37} will be highly valuable for the fast evaluation of farm-level control algorithms under varying wind conditions, such as large gusts and frontal passages. In the case of a changing underlying wind condition, careful consideration must be given to the problem of how to superimpose air packets that arrive at a given point simultaneously. While testing control algorithms using expensive computational fluid dynamics codes that include meso-microscale coupling may be necessary for final validation of wind farm control methods, we believe that the development of lighter, simpler tools for fast evaluation is critical to controller design.

## ACKNOWLEDGMENTS

This work was authored by the National Renewable Energy Laboratory, operated by the Alliance for Sustainable Energy, LLC, for the U.S. Department of Energy under Contract No. DE-AC36–08GO28308. Funding was provided by the U.S. Department of Energy Office of Energy Efficiency and Renewable Energy Wind Energy Technologies Office. The views expressed in the article do not necessarily represent the views of the U.S. Department of Energy or the U.S. Government. The U.S. Government retains, and the publisher, by accepting the article for publication, acknowledges that the U.S. Government retains a nonexclusive, paid-up, irrevocable, worldwide license to publish or reproduce the published form of this work, or allow others to do so, for U.S. Government purposes.

## DATA AVAILABILITY

The data that support the findings of this study are available from the corresponding author upon reasonable request.

## References

*, 830-021, IASTED*(