main.tex (34717B)
1 \documentclass[runningheads]{llncs} 2 3 \usepackage{amsmath} 4 \usepackage{amssymb} 5 \usepackage{booktabs} 6 \usepackage{cite} 7 \usepackage{graphicx} 8 \usepackage{listings} 9 \usepackage{url} 10 \usepackage{textcomp} 11 \usepackage{xcolor} 12 13 \DeclareMathOperator{\Mode}{Mo} 14 \DeclareMathOperator{\Expectation}{E} 15 16 \begin{document} 17 18 \title{Wind simulation using high-frequency velocity component measurements 19 \thanks{Supported by Council for grants of the President of the Russian Federation (grant no.~\mbox{MK-383.2020.9}).}} 20 \author{% 21 Anton Gavrikov\orcidID{0000-0003-2128-8368} \and\\ 22 Ivan Gankevich\textsuperscript{*}\orcidID{0000-0001-7067-6928} 23 } 24 25 \lstdefinelanguage{rrr}{ 26 basicstyle={\rmfamily}, 27 morekeywords={function}, 28 keywordstyle={\bfseries}, 29 showstringspaces=false, 30 texcl=true, 31 escapeinside={LATEX}{END}, 32 otherkeywords={function} 33 } 34 \lstset{ 35 language=rrr, 36 literate={<-}{{$\gets$}}1, 37 } 38 39 \titlerunning{Wind simulation using high-frequency velocity component measurements} 40 \authorrunning{A.\,Gavrikov, I.\,Gankevich} 41 42 \institute{Saint Petersburg State University\\ 43 7-9 Universitetskaya Emb., St Petersburg 199034, Russia\\ 44 \email{st047437@student.spbu.ru},\\ 45 \email{i.gankevich@spbu.ru},\\ 46 \url{https://spbu.ru/}} 47 48 \maketitle 49 50 \begin{abstract} 51 52 Wind simulation in the context of ship motions is used to estimate the 53 effect of the wind on large containerships, sailboats and yachts. Wind 54 models are typically based on a sum of harmonics with random phases and 55 different amplitudes. In this paper we propose to use autoregressive model 56 to simulate the wind. This model is based on autocovariance function that 57 can be estimated from the real-world data collected by anemometers. We 58 have found none of the data that meets our resolution requirements, and 59 decided to produce the dataset ourselves using three-axis anemometer. We 60 built our own anemometer based on load cells, collected the data with the 61 required resolution, verified the data using well-established statistical 62 distributions, estimated autocovariance functions from the data and 63 simulated the wind using autoregressive model. We have found that the load 64 cell anemometer is capable of recording wind speed for statistical studies, 65 but autoregressive model needs further calibration to reproduce the wind 66 with the same statistical properties. 67 68 \keywords{% 69 load cell 70 \and strain gauge 71 \and anemometer 72 \and three-dimensional ACF 73 \and wind velocity PDF 74 \and autoregressive model 75 \and turbulence. 76 } 77 \end{abstract} 78 79 \section{Introduction} 80 81 Wind simulation in the context of ship motion simulation is the topic where 82 multiple mathematical models are possible, and the choice of the model depends 83 on the purpose of the model. In the course of the research where we apply 84 autoregressive model to ocean wave simulation, we decided to investigate 85 whether the same model can be used to simulate wind flow around ship hull. 86 87 Wind simulation is studied at different scales and the closest scale for a ship 88 in the ocean is wind turbine. One of the model that is used to 89 describe air flow around wind turbines~\cite{veers1984modeling} is similar to 90 Longuet---Higgins model which is typically used for ocean wave simulations. 91 This model uses wind velocity frequency spectrum to determine coefficients 92 and use them to generate wind velocity vector components. 93 94 Wind velocity distribution is described by Kaimal 95 spectrum~\cite{kaimal1972spectral,veers1988wind} 96 \begin{equation*} 97 S(f) = \frac {c_1 u_{*}^2 z / U(z)} {1 + c_2 \left(f z / U(z)\right)^{5/3} },\quad 98 u_{*}=\frac{k U(z)}{\ln{(z/z_0)}},\quad c_1=105, \quad c_2=33, 99 \end{equation*} 100 Here \(u_{*}\) is shear velocity, 101 \(k=0.4\) is von Karman constant, \(z_0\) is surface roughness 102 coefficient, \(f\) is frequency, 103 \(z\) is height above ground, \(U(z)\) is mean speed at height \(z\). 104 105 This spectrum is used to simulate each wind velocity vector component at a 106 specified point in space. For each component the same spectrum is used, but the 107 coefficients are different~\cite{veers1984modeling}. 108 %\begin{align*} 109 %& c_1 = 12.3 && c_2 = 192 && \text{for }x,\\ 110 %& c_1 = 4 && c_2 = 70 && \text{for }y,\\ 111 %& c_1 = 0.5 && c_2 = 8 && \text{for }z. 112 %\end{align*} 113 The spectrum describes wind velocity vector in the plane that is perpendicular to 114 the mean wind direction vector and travels in the same direction 115 with mean wind speed. Time series is generated as Fourier series, coefficients 116 of which are determined from the spectrum, and phases are random 117 variables~\cite{veers1984modeling}: 118 \begin{align*} 119 & V(t) = \overline{V} + \sum\limits_{j=1}^{n} 120 \left( A_j \sin\omega_jt + B_j \cos\omega_jt\right), \\ 121 & A_j = \sqrt{\frac{1}{2} S_j \Delta\omega} \sin\phi_j, \quad 122 B_j = \sqrt{\frac{1}{2} S_j \Delta\omega} \cos\phi_j. 123 \end{align*} 124 Here \(S_j\) is spectrum value at frequency \(\omega_j\), 125 \(\phi_j\) is random variable which is uniformly distributed in \([0,2\pi]\). 126 The result is one-dimensional vector-valued time series, each element of 127 which is velocity vector at a specified point in time and space. 128 129 In order to simulate wind velocity vector at multiple points in space, 130 the authors use the function of coherency~--- the amount of correlation between 131 wind speed at two points in space. This function has a form of an exponent and 132 depends on frequency~\cite{veers1988wind}: 133 \begin{equation*} 134 \text{Coh}_{jk}(f) = \exp\left( -\frac {C\Delta r_{jk} f} {U(z)} \right), 135 \end{equation*} 136 where \(\Delta{}r_{jk}\) is the distance between \(i\) and \(j\) points and 137 \(C\) is coherency decrement. Time series for each wind velocity vector 138 component are generated independently and after that their spectra are modified 139 in accordance with coherence function (the formulae are not presented here). 140 141 In order to simulate wind with autoregressive model it is easier to use 142 autocovariance function instead of spectra and coherence function. We can obtain 143 autocovariance function from spectra as inverse Fourier transform using 144 Wiener---Khinchin theorem. The formula that we obtained this way using 145 various computer algebra programmes is too complex, but can be approximated by 146 a decaying exponent: 147 \begin{equation*} 148 \gamma(t) = \sigma^2 \exp\left( -0.1 \frac{c_2^{3/5}}{c_1} t\right), 149 \end{equation*} 150 where \(\sigma^2\) is process variance (area under the spectrum). 151 152 Unfortunately, this autocovariance function is one-dimensional and there is no 153 easy way of obtaining three-dimensional analogue from the spectra. In order 154 to solve this problem we looked into datasets of wind speed measurements 155 available for the research. However, most of them contain either one or two 156 wind velocity vector components (in a form of wind speed and direction), they are difficult 157 to get and their resolution is very small (we found only one paper that 158 deals with three components~\cite{yim2000}). For our purposes we need 159 resolution of at least one sample per second to simulate gusts and some form of 160 turbulence. To summarise, our requirements for the dataset is to provide all 161 three wind velocity vector components and has resolution of at least one sample per 162 second. 163 164 We failed to find such datasets and continued our research into anemometers 165 that can generate the required dataset. One of the anemometers that can record 166 all three components is ultrasonic 167 anemometer~\cite{cosgrove2007ultra,arens2020anemometer,yakunin20173d}. As 168 commercial anemometers are too expensive for this research, we built our own 169 version from the generally available electric components. However, this version 170 failed to capture any meaningful data, and incidentally we decided to build an 171 anemometer from load cells and strain gauges (which were originally intended for different research work). This anemometer is 172 straightforward to construct, the electrical components are inexpensive, and it 173 is easy to protect them from bad weather. This anemometer is able to record 174 all three wind velocity vector components multiple times per second. 175 176 In this paper we describe how load cell anemometer is built, then we collect 177 dataset of all three wind speed components with one-second resolution, verify 178 this anemometer using commercial analogue, verify measurements from the dataset 179 using well-established distributions for wind speed and direction, and 180 estimate autocovariance functions for autoregressive model from our dataset. 181 Finally, we present preliminary wind simulation results using autoregressive model. 182 183 \section{Methods} 184 185 \subsection{Three-axis wind velocity measurements with load cell anemometer} 186 187 In order to generate wind velocity field using four-dimensional (one temporal 188 and three spatial dimensions) autoregressive model, we need to use 189 four-dimensional wind velocity autocovariance function. Using Wiener---Khinchin 190 theorem it is easy to compute the function from the spectrum. Unfortunately, 191 most of the existing wind velocity historical data contains only wind velocity 192 magnitude and direction. We can use them to reconstruct \(x\) and \(y\) 193 spectrum, but there is no way to get spectrum for \(z\) coordinate from this 194 data. Also, resolution of historical data is too small for 195 wind simulation for ship motions. To solve these problems, we decided 196 to build our own three-axis anemometer that measures wind velocity for all 197 three axes at one point in space multiple times per second. 198 199 To measure wind velocity we used resistive foil strain gauges mounted on the 200 arms aligned perpendicular to the axes directions. Inside each arm we placed 201 aluminium load cell with two strain gauges: one on the bending side and another 202 one on the lateral side. Load cells use Wheatstone half-bridge to measure the 203 resistance of the gauges and are connected to the circuit that measures the 204 resistance and transmits it to the microcontroller in digital format. 205 Microcontroller then records the value for each load cell and transmits all of 206 them in textual form to the main computer. The main computer then adds a 207 timestamp and saves it to the database. 3-D anemometer model is shown in 208 figure~\ref{fig-anemometer}. 209 210 \begin{figure} 211 \centering 212 \begin{minipage}{0.55\textwidth} 213 \includegraphics{build/inkscape/anemometer.eps} 214 \end{minipage} 215 \begin{minipage}{0.35\textwidth} 216 Anemometer properties:\phantom{12345} 217 \begin{tabular}{ll} 218 \toprule 219 Load cell capacity & 1 kg \\ 220 Load cell amplifier & HX711 \\ 221 Microcontroller & ATmega328P \\ 222 \bottomrule 223 \end{tabular} 224 \end{minipage} 225 %\includegraphics{build/gnuplot/anemometer.eps} 226 \caption{Three-axis anemometer. Arms are inserted into the housing 227 and fixed using bolts that go through the circular holes. Red, green, blue colours 228 denote load cells for \(x\), \(y\), \(z\) axes respectively.\label{fig-anemometer}} 229 \end{figure} 230 231 Each load cell faces the direction that is perpendicular to the directions of 232 other load cells. When the wind blows in the direction of particular load cell, only 233 this cell bends. When the wind blows in an arbitrary direction which is not 234 perpendicular to any load cell faces, then all load cells bend, but the 235 pressure force is smaller. Pressures of all load cells are recorded 236 simultaneously, and we can use Bernoulli's equation to compute wind velocity 237 from them. 238 239 Bernoulli's equation is written as 240 \begin{equation} 241 \rho\frac{\upsilon^2}{2} + \rho gz = p_0-p. 242 \end{equation} 243 Here \(\upsilon\) is wind velocity magnitude, \(g\) is gravitational acceleration, 244 \(z\) is vertical coordinate, \(\rho\) is air density, \(p\) is pressure on the 245 load cell and \(p_0\) is atmospheric pressure. Pressure force \(\vec{F}\) acting on a load 246 cell is written as 247 \begin{equation} 248 \vec{F} = p S \vec{n}, 249 \end{equation} 250 where \(S\) is area of the side of the load cell on which the force is applied 251 and \(\vec{n}\) is normal vector. Arms in which load cells reside have 252 front and back side with much larger areas than the left and right side, therefore 253 we neglect forces on them. Additionally, on the ground \(\rho{}gz\) term vanishes. 254 255 For all load cells we have a system of three equations 256 \begin{equation} 257 \begin{cases} 258 \upsilon_x^2 \propto F_x \\ 259 \upsilon_y^2 \propto F_y \\ 260 \upsilon_z^2 \propto F_z \\ 261 \end{cases}. 262 \end{equation} 263 Hence \(\upsilon_{x}=\alpha_{x}\sqrt{F_{x}}\), 264 \(\upsilon_{y}=\alpha_{y}\sqrt{F_{y}}\), 265 \(\upsilon_{z}=\alpha_{z}\sqrt{F_{z}}\) where \(\alpha_{x,y,z}\) are constants of 266 proportionality. Therefore, to obtain wind velocity we take \emph{square root} of the 267 value measured by the load cell and multiply it by some coefficient determined 268 empirically during anemometer calibration. 269 270 \subsection{Per-axis probability distribution function for wind velocity} 271 272 Scalar wind velocity is described by Weibull distribution~\cite{justus1976}. 273 Weibull probability distribution function is written as 274 \begin{equation} 275 f\left(\upsilon;b,c\right) = b c \left(b \upsilon\right)^{c-1} 276 \exp\left(-\left(b\upsilon\right)^{c}\right). 277 \end{equation} 278 Here \(\upsilon>0\) is scalar wind velocity, \(b>0\) is scale parameter and \(c>0\) 279 is shape parameter. This function is defined for positive wind velocity, since 280 scalar wind velocity is a length of wind velocity vector 281 \(\upsilon=\sqrt{\smash[b]{\upsilon_x^2+\upsilon_y^2+\upsilon_z^2}}\). However, projection of 282 wind velocity vector on \(x\), \(y\) or \(z\) axis may be negative. 283 Our solution to this problem is to use two Weibull distributions: one for positive and 284 one for negative projection~--- but with different parameters. 285 \begin{equation} 286 f\left(\upsilon_x;b_1,c_1,b_2,c_2\right) = \begin{cases} 287 b_1 c_1 \left(b_1 \left|\upsilon_x\right|\right)^{c_1-1} \exp\left(-\left(b_1\left|\upsilon_x\right|\right)^{c_1}\right). 288 \qquad \text{if } \upsilon_x < 0 \\ 289 b_2 c_2 \left(b_2 \left|\upsilon_x\right|\right)^{c_2-1} \exp\left(-\left(b_2\left|\upsilon_x\right|\right)^{c_2}\right). 290 \qquad \text{if } \upsilon_x \geq 0 \\ 291 292 \end{cases}\label{eq-velocity-distribution}. 293 \end{equation} 294 Here \(b_{1,2}>0\) and \(c_{1,2}>0\) are parameters of the distribution 295 that control the scale and the shape, \(\upsilon_x\) is the projection of the velocity 296 vector on \(x\) axis. The same formula is used for \(y\) and \(z\) axis. 297 298 %We could simply 299 %extend Weibull distribution for negative values, but this may lead to multimodal distribution 300 %because the maximum value may not be located at \(\upsilon=0\). Our solution to 301 %this problem is to make substitution \(\upsilon_x'=\left|\upsilon_x-\Mode\upsilon_x\right|\), 302 %where \(\Mode\upsilon_x\) is the mode of wind velocity projection to the corresponding axis, 303 %and modulus makes the graph symmetric with respect to \(\upsilon_x'=0\). 304 %The substitution yields 305 %\begin{equation} 306 % f\left(\upsilon_x';b,c\right) = b c 307 % \exp\left(-\left|b\upsilon_x'-g\left(c\right)\right|^{c}\right), 308 % \qquad 309 % g\left(c\right) = \left(\frac{c-1}{c}\right)^{1/c}, 310 %\end{equation} 311 %which is the formula for the right side of the distribution. In order to get the 312 %formula for the left side, we have to use an additional set of parameters \(b\), \(c\). 313 %Then the final formula for both sides is written as 314 %\begin{equation} 315 % f\left(\upsilon_x';b_1,c_1,b_2,c_2\right) = \begin{cases} 316 % b_1 c_1 \exp\left(-\left|b_1\upsilon_x'-g\left(c_1\right)\right|^{c_1}\right) 317 % \qquad \text{if } \upsilon_x < \Mode\upsilon_x \\ 318 % b_2 c_2 \exp\left(-\left|b_2\upsilon_x'-g\left(c_2\right)\right|^{c_2}\right) 319 % \qquad \text{if } \upsilon_x \geq \Mode\upsilon_x \\ 320 % 321 % \end{cases}\label{eq-velocity-distribution}. 322 %\end{equation} 323 %Here \(b_{1,2}>0\) and \(c_{1,2}>0\) are parameters of the distribution 324 %that control the scale and the shape. 325 326 \subsection{Three-dimensional ACF of wind velocity} 327 328 Usually, autocovariance is modelled using exponential functions~\cite{box1976time}. 329 In this paper we use one-dimensional autocovariance function written as 330 \begin{equation} 331 K\left(t\right) = a_3 \exp\left(-\left(b_3 t\right)^{c_3} \right). 332 \label{eq-acf-approximation} 333 \end{equation} 334 Here \(a_3>0\), \(b_3>0\) and \(c_3>0\) are parameters of the autocovariance 335 function that control the shape of the exponent. 336 337 In order to construct three-dimensional autocovariance function we assume that 338 one-dimensional autocovariance function is the same for each coordinate and 339 multiply them. 340 \begin{equation} 341 K\left(t,x,y,z\right) = a \exp\left( 342 -\left(b_t t\right)^{c_t} 343 -\left(b_x x\right)^{c_x} 344 -\left(b_y y\right)^{c_y} 345 -\left(b_z z\right)^{c_z} 346 \right). 347 \label{eq-acf} 348 \end{equation} 349 Here \(a>0\), \(b_{t,x,y,z}>0\) and \(c_{t,x,y,z}>0\) are parameters of the autocovariance 350 function. Parameter \(a\) and \(\exp\left(b\right)\) are proportional to wind 351 velocity projection on the corresponding axis. 352 Parameter \(c\) controls the shape of the autocovariance function in 353 the corresponding direction; it does not have simple relationship to the wind 354 velocity statistical parameters. 355 356 \subsection{Data collection and preprocessing} 357 358 We installed anemometer on the tripod and placed it on the balcony. Then we 359 connected load cells to the microcontroller via HX711 load cell amplifiers and 360 programmed the microcontroller to record the output of each sensor every second 361 and print it on the standard output. Then we connected the microcontroller to 362 the computer via USB interface and wrote a script to collect the data coming 363 from the USB and store it in the SQLite database. We decided to store raw 364 sensor values in the range from 0 to 65535 to be able to calibrate anemometer 365 later. 366 367 We calibrated three-axis anemometer using commercial anemometer HP-866A and a 368 fan that rotates with constant speed. First, we measured the wind speed that 369 the fan generates when attached to commercial anemometer. Then we successively 370 placed the fan behind and in front of each arm of our anemometer and measured 371 values that the corresponding load cell reported for each side of the arm with 372 and without the fan. Then we were able to calculate two coefficients for each 373 axis: one for negative and another one for positive wind velocities. The 374 coefficient equals the raw sensor value that is equivalent to the wind speed of 1~m/s 375 (table~\ref{tab-coefficients}). 376 377 \begin{table} 378 \begin{minipage}[t]{0.35\textwidth} 379 \centering 380 \begin{tabular}{lll} 381 \toprule 382 Axis & \(C_1\) & \(C_2\) \\ 383 \midrule 384 X & 11.19 & 12.31 \\ 385 Y & 11.46 & 11.25 \\ 386 Z & 13.55 & 13.90 \\ 387 \bottomrule 388 \end{tabular} 389 \caption{Calibration coefficients for each arm of three-axis anemometer: 390 \(C_1\) is for negative values and \(C_2\) is for positive values. 391 \label{tab-coefficients}} 392 \end{minipage} 393 ~ 394 \begin{minipage}[t]{0.55\textwidth} 395 \centering 396 \begin{tabular}{ll} 397 \toprule 398 Time span & 36 days \\ 399 Size & 122 Mb \\ 400 No. of samples & 3\,157\,234 \\ 401 No. of samples after filtering & 2\,775\,387 \\ 402 Resolution & 1 sample per second \\ 403 \bottomrule 404 \end{tabular} 405 \caption{Dataset properties.\label{tab-dataset}} 406 \end{minipage} 407 \end{table} 408 409 We noticed that ambient temperature affects values reported by our load cells: 410 when the load cell heats up (cools down), it reports values that increase 411 (decrease) linearly in time due to thermal expansion of the material. We 412 removed this linear trend from the measured values using linear regression. The 413 code in R~\cite{r-language} that transforms raw sensor values into wind speed is 414 presented in listing~\ref{lst-sample-to-speed}. 415 416 \begin{lstlisting}[label={lst-sample-to-speed},caption={The code that transforms raw load cell sensor values into wind speed projections to the corresponding axis.}] 417 sampleToSpeed <- function(x, c1, c2) { 418 t <- c(1:length(x)) 419 reg <- lm(x~t) 420 x <- x - reg$fitted.values LATEX{\color{black!70}\textit{\# remove linear trend}}END 421 x <- sign(x)*sqrt(abs(x)) LATEX{\color{black!70}\textit{\# convert from force to velocity}}END 422 x[x<0] = x[x<0] / c1 LATEX{\color{black!70}\textit{\# scale sensor values to wind speed}}END 423 x[x>0] = x[x>0] / c2 LATEX{\color{black!70}\textit{\# using calibration coefficients}}END 424 x 425 } 426 \end{lstlisting} 427 428 Over a period of one month we collected 3.1M samples and filtered out 12\% of 429 them because they had too large unnatural values. We attributed these values to 430 measurement errors as they spread uniformly across all the time span and are 431 surrounded by the values of regular magnitude. 432 %From the remaining data we choose days with wind speeds above the average as 433 %reported by EMERCOM of Russia\footnote{https://en.mchs.gov.ru/} for Saint 434 %Petersburg. 435 After that we divided each day into two-hour intervals over which 436 we collected the statistics individually. 437 %From these intervals we choose the 438 %ones with data distributions close to unimodal, so we could easily fit them 439 %into the model. 440 The statistics for each interval is presented in 441 figure~\ref{fig-intervals}, dataset properties are presented in table~\ref{tab-dataset}. 442 443 Unique feature of three-axis anemometer is that it measures both velocity of 444 incident air flow towards the arms and the turbulent flow that forms behind the 445 arms. Turbulent flow velocity distribution peak is often smaller than the peak 446 of incident flow. To exclude it from the measurements one can choose the side 447 with the largest peak (either positive or negative part 448 of~\eqref{eq-velocity-distribution}), but in this paper we left them as is 449 for the purpose of the research. 450 451 \begin{figure} 452 \centering 453 \includegraphics{build/daily-stats.eps} 454 \caption{The statistics for each interval of the collected data. Here 455 \(\upsilon_x\), \(\upsilon_y\) and \(\upsilon_z\) are mean speeds for 456 each interval for the corresponding axes, \(\upsilon\) is mean scalar wind speed 457 for each interval. The horizontal line shows overall average speed. 458 Yellow rectangles denote days when EMERCOM of Russia (https://en.mchs.gov.ru/) 459 reported wind speeds above average. 460 \label{fig-intervals}} 461 \end{figure} 462 463 \section{Results} 464 465 \subsection{Anemometer verification} 466 467 In order to verify that our anemometer produces correct measurements we 468 calculated wind speed and direction from the collected samples and fitted them 469 into Weibull distribution and von Mises distribution respectively. These are 470 typical models for wind speed and direction~\cite{carta2008,carta2008joint}. 471 Then we found the intervals with the best and the worst fit for these models 472 using normalised root-mean-square error (NRMSE) calculated as 473 \begin{equation} 474 \text{NRMSE} = \frac{\sqrt{\Expectation\left[\left(X_\text{observed}-X_\text{estimated}\right)^2\right]}}{X_\text{max}-X_\text{min}}. 475 \end{equation} 476 Here \(\Expectation\) is statistical mean, \(X_\text{observed}\) and 477 \(X_\text{estimated}\) are observed and estimated values respectively. 478 479 The wind speed data collected with three-axis anemometer was approximated by 480 Weibull distribution using least-squares fitting. Negative and positive wind 481 speed projections to each axis both have this distribution, but with different 482 parameters. Most of the data intervals contain only one prevalent mean wind 483 direction, which means that one of the distributions is for incident wind flow 484 on the arm of the anemometer and another one is for the turbulent flow that 485 forms behind the arm. For \(z\) axis both left and right distributions have 486 similar shapes, for \(x\) and \(y\) axes the distribution for incident flow is 487 taller than the distribution for turbulent flow. The best-fit and worst-fit 488 distributions for each axis are presented in figure~\ref{fig-velocity-distributions}. 489 490 \begin{figure} 491 \centering 492 \includegraphics{build/gnuplot/velocity-dist.eps} 493 \caption{Per-axis wind velocity distributions fitted into Weibull 494 distribution. 495 Data intervals with the largest error (the first row), 496 data intervals with the smallest error (the second row). Red line shows estimated 497 probability density of positive wind speed projections, blue line shows estimated 498 probability density of negative wind speed projections and circles denote observed 499 probability density of wind speed projections. 500 \label{fig-velocity-distributions}} 501 \end{figure} 502 503 Wind direction was approximated by von Mises distribution using least-squares 504 fitting. Following the common 505 practice~\cite{feng2015sectors} we divided direction axis 506 into sectors: from -180\textdegree{} to -90\textdegree{}, from -90\textdegree{} to 507 0\textdegree{}, from 0 to 90\textdegree{} and from 90\textdegree{} to 508 180\textdegree{}~--- and fitted each sector independently. We chose four sector 509 to have one sector for each side of the anemometer. 510 The best-fit and worst-fit distributions for each sector 511 are presented in figure~\ref{fig-direction-distributions}. 512 513 \begin{figure} 514 \centering 515 \begin{minipage}{0.49\textwidth} 516 \centering 517 \includegraphics{build/gnuplot/velocity-xy-dist-max.eps} 518 \end{minipage} 519 \begin{minipage}{0.49\textwidth} 520 \centering 521 \includegraphics{build/gnuplot/velocity-xy-dist-min.eps} 522 \end{minipage} 523 \vskip2\baselineskip 524 \includegraphics{build/gnuplot/direction-dist.eps} 525 \caption{Bivariate \(x\) and \(y\) velocity distribution 526 in polar coordinates (first row), wind direction distributions fitted into 527 von Mises distribution (second row). Data interval with the largest error (left column), data 528 interval with the smallest error (right column). 529 Red line shows estimated 530 probability density of positive direction angles, blue line shows estimated 531 probability density of negative direction angles and circles denote observed 532 probability density of direction angles. 0\textdegree{} is north. 533 \label{fig-direction-distributions}} 534 \end{figure} 535 536 In order to verify that our anemometer produces correct time series we 537 performed synchronous measurements with commercial anemometer HP-866A. Two 538 anemometers were placed in the open field near the shore. The commercial 539 anemometer was directed towards the mean wind direction as it measures the speed 540 only. The data from the two anemometers was recorded synchronously. From the 541 data we selected intervals with wind gusts and compared the measurements of the 542 two anemometers. To compare them we scaled load cell anemometer measurements to 543 minimise NRMSE of the difference between the two time series to compensate for 544 the errors in calibration coefficients. The results showed that there is some 545 correspondence between the measurements of the two anemometers 546 (figure~\ref{fig-hold-peak}). 547 548 \begin{figure} 549 \centering 550 \includegraphics{build/gnuplot/hold-peak.eps} 551 \caption{Comparison of measurements obtained from three-axis and HP-866A 552 anemometers.\label{fig-hold-peak}} 553 \end{figure} 554 555 Finally, we computed autocovariance for each axis as 556 \begin{equation} 557 K(\tau) = \Expectation\left[ \left(X_t-\bar{X}\right)\left(X_{t-\tau}-\bar{X}\right) \right] 558 \end{equation} 559 and fitted it into~\eqref{eq-acf-approximation}. 560 Per-axis ACFs have pronounced peak at nought lag and long tails. 561 The largest NRMSE is 2.3\%. 562 Variances for \(x\) and \(y\) axes are comparable, but ACF for \(z\) axis has 563 much lower variance. 564 Parameters \(a\) and \(b\) from~\eqref{eq-acf-approximation} are positively 565 correlated with wind speed for the corresponding axis. 566 The best-fit and worst-fit ACFs for each axis 567 are presented in figure~\ref{fig-acf}. 568 569 \begin{figure} 570 \centering 571 \includegraphics{build/gnuplot/acf.eps} 572 \caption{Per-axis wind velocity ACF fitted into~\eqref{eq-acf-approximation}. 573 Data intervals with the largest error (the first row), 574 data intervals with the smallest error (the second row). Red line shows estimated 575 ACF of positive wind speed projections, blue line shows estimated 576 ACF of negative wind speed projections and circles denote observed 577 ACF of wind speed projections. Note: graphs use mirrored axes. 578 \label{fig-acf}} 579 \end{figure} 580 581 \subsection{Turbulence coefficient} 582 583 Since our anemometer measures both incident and turbulent flow we took an 584 opportunity to study the speed of the turbulent flow in relation to incident 585 flow. We calculated the absolute mean values of positive and negative wind 586 velocity projections for each time interval of the dataset. We considered the 587 flow with the larger absolute mean value incident, and the other one is 588 turbulent. Then we calculated turbulence coefficient as the ratio of absolute 589 mean speed of turbulent flow to the absolute mean speed of incident flow. We 590 found that the average ratio is close to 60\%. It seems, that the ratio 591 decreases as the wind speed increases for wind speeds of 1--5 m/s, but for 592 higher wind speeds we do not have the data. Turbulence coefficient 593 can be used in wind simulation models to control the magnitude of turbulent 594 flow that forms behind the obstacle~\cite{gavrikov2020wind}. 595 596 \begin{figure} 597 \centering 598 \includegraphics{build/gnuplot/turbulence.eps} 599 \caption{The ratio of absolute mean speed of turbulent flow to the absolute mean 600 speed of incident flow for each axis.\label{fig-turbulence}} 601 \end{figure} 602 603 \subsection{Wind simulation using measured ACFs} 604 605 We simulated three-dimensional wind velocity using autoregressive model 606 implemented in Virtual Testbed~\cite{bogdanov2020vtestbed}~--- a 607 programme for workstations that simulates ship motions in extreme conditions 608 and physical phenomena that causes them (ocean waves, wind, compartment 609 flooding etc.). Using the data obtained with three-axis anemometer on March 28, 610 2021, 01:00-03:00 UTC we approximated four-dimensional autocovariance function 611 using~\eqref{eq-acf} by setting the corresponding parameters from 612 one-dimensional autocovariance functions estimated from the data obtained with 613 anemometer, all other parameters were set close to nought. Non-nought 614 parameters are listed in table~\ref{tab-arma-parameters}. We found that 615 velocity and direction distributions and ACFs of each axis of simulated wind 616 and real wind are similar in shape, but are too far away from each other 617 (see~figure~\ref{fig-vtestbed}). We consider these results preliminary and 618 will investigate them further in future work. 619 620 \begin{table} 621 \centering 622 \caption{Input parameters for AR model that were used to simulate wind velocity. 623 \label{tab-arma-parameters}} 624 \begin{tabular}{lllll} 625 \toprule 626 Axis & ACF \(a\) & \phantom{0}ACF \(b\) & \phantom{0}ACF \(c\) & \phantom{0}Mean velocity, m/s \\ 627 \midrule 628 \(x\) & 1.793 & \phantom{0}0.0214 & \phantom{0}0.2603 & \phantom{0}-2.439 \\ 629 \(y\) & 1.423 & \phantom{0}0.01429 & \phantom{0}0.2852 & \phantom{0}-2.158 \\ 630 \(z\) & 0.9075 & \phantom{0}0.06322 & \phantom{0}0.3349 & \phantom{0}-1.367 \\ 631 \bottomrule 632 \end{tabular} 633 \end{table} 634 635 \begin{figure} 636 \centering 637 \includegraphics{build/gnuplot/vtestbed.eps} 638 \caption{Comparison of simulated wind velocity and direction distributions 639 and per-axis ACFs 640 between the data from the anemometer and the data from Virtual Testbed 641 (2021, March 28, 01:00--03:00, UTC).\label{fig-vtestbed}} 642 \end{figure} 643 644 \section{Discussion} 645 646 NRMSE of wind speed distribution approximation has positive correlation with 647 wind speed: the larger the wind speed, the larger the error and vice versa. 648 Larger error for low wind speeds is caused by larger skewness and kurtosis (see 649 the first row of figure~\ref{fig-velocity-distributions}). Similar 650 approximation errors can be found in~\cite{carta2008joint} where the authors 651 improve approximation accuracy using joint wind speed and direction 652 distributions. Such studies are outside of the scope of this paper, because 653 here we verify anemometer measurements using well-established mathematical 654 models, but the future work may include the study of these improvements. 655 656 NRMSE of wind direction distribution approximation has negative correlation with 657 wind speed: the larger the wind speed, the smaller the error and vice versa. 658 This is in agreement with physical laws: the faster the flow is the more 659 determinate its mean direction becomes, and the slower the flow is the more 660 indeterminate its mean direction is. 661 662 Three-axis anemometer disadvantages are the following. 663 The arm for the \(z\) axis is horizontal, and snow and rain put additional load 664 on this cell distorting the measurements. 665 Also, thermal expansion and contraction of the material changes 666 the resistance of load cells and distorts the measurements. 667 Pressure force on the arm is exerted by individual air particles and 668 is represented by choppy time series, as opposed to real physical signal 669 that is represented by smooth graph. 670 The first two defficiences can be compensated in software by removing linear trend 671 from the corresponding interval. The last one make anemometer useful only for 672 offline studies, i.e.~it is useful to gather statistics, but is unable to measure 673 immediate wind speed and direction. 674 675 We used a balcony for long-term measurements and open field for verification 676 and calibration. We found no clues that the balcony affected the distributions 677 and ACFs of wind speed. The only visible effect is that the wind direction is 678 always parallel to the wall which agrees with physical laws. Since we measure 679 pressure force directly, the mean wind direction does not affect the form 680 of the distributions, but only their parameters. 681 682 \section{Conclusion} 683 684 In this paper we proposed three-axis anemometer that measures wind speed for 685 each axis independently. We analysed the data collected by this anemometer and 686 verified that per-axis wind speeds fit into Weibull distribution with the 687 largest NRMSE of 6.7\% and wind directions fit into von Mises distribution with 688 the largest NRMSE of 11\%. We estimated autocovariance functions for wind speed 689 for each axis of the anemometer and used this approximations to simulate wind 690 flow in Virtual Testbed. The parameters of these functions allow to control 691 both wind speed and mean direction. The future work is to construct an array of 692 anemometers that is able to measure spatial autocovariance using the proposed 693 anemometer as the base. 694 695 \subsubsection*{Acknowledgements.} 696 Research work is supported by Council for grants of the President of the 697 Russian Federation (grant no.~MK-383.2020.9). 698 699 \bibliographystyle{splncs04} 700 \bibliography{main.bib} 701 702 \end{document}