From 1797dedfcb3d8aeebc0c1bf1624f68dc764de699 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 24 Feb 2021 16:46:09 +0100 Subject: [PATCH 01/14] Update section 1.3 and 1.8 --- description.tex | 107 ++++++++++++++++++++++++++++++++++-------------- ref.bib | 18 ++++++-- report.tex | 11 +++-- 3 files changed, 98 insertions(+), 38 deletions(-) diff --git a/description.tex b/description.tex index a4a7898..7a1f428 100644 --- a/description.tex +++ b/description.tex @@ -65,7 +65,7 @@ Figure~\ref{f:torque_limits} shows the torque limits in partial load operation o \subsection{Full load operation} -In full load operation, the torque limits are closed around the torque given by the selected power control strategy. It can be constant power $P_0/\Omega_k$ or constant torque $P_0/\Omega_0$, where $P_0$ is the rated power. In the new version, the user can specify any intermediate strategy where the toque limits in full load operation are set to +In full load operation, the torque limits are closed around the torque given by the selected power control strategy. It can be constant power ($P_0/\Omega_k = \min(P_0/\Omega_k,Q_{g,max})$) or constant torque ($P_0/\Omega_0$), where $P_0$ is the rated power and $Q_{g,max}$ is the maximum allowable generator torque. In the new version, the user can specify any intermediate strategy where the toque limits in full load operation are set to \begin{equation} Q_{g,ref,k}^{full} = \left(1-\alpha_g \right) P_0/\Omega_0 + \alpha_g P_0/\Omega_k \end{equation} @@ -184,20 +184,21 @@ The controller includes also a feature for regulation above the standard cut-out %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage -\section{Parameters} +\section{Initialization Parameters} \label{s:par} -All parameters of the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2 DLL \cite{Larsen12}. Details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 75 parameters, where the first 52 are identical to those of \verb|init_regulation|. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. +All initialization parameters of the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2\_dll \cite{Larsen12}. Details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters are used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 82 parameters, where the first 52 are identical to those of \verb|init_regulation|. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. -\begin{table}[t] +\begin{table}[ht] \begin{center} \begin{tabular}{r|c|p{11.5cm}} -Input & & Additional explanation \\ \hline -1 & $P_0$ & Rated power [kW]\\ -2 & $\Omega_{min}$& Minimum rotor (LSS) speed [rad/s]\\ +Input & Symbol & Additional explanation \\ \hline +1 & $P_0$ & Rated power [kW]\\ +2 & $\Omega_{min}$ & Minimum rotor (LSS) speed [rad/s]\\ 3 & $\Omega_0$ & Rated rotor (LSS) speed [rad/s] \\ -4 & - & Maximum allowable generator torque [Nm]. An upper limit set on the torque reference signal. \\ -5 & $\theta_{min}$& Minimum pitch angle [deg] if this input is less than 90~deg. Otherwise, the init routine will search for a file with the name ``wptable.n'', where ``n'' is a character string obtained from the integer value of the input. In the shown example, this file is therefore ``wptable.100''. The file format is first line contains an integer with the number of subsequent lines, which contain two numbers each, wind speed and minimum pitch angle in degrees. An example is shown in Table~\ref{t:wptable}.\\ +4 & $Q_{g,max}$ & Maximum allowable generator torque [Nm]. An upper limit set on the torque reference signal. \\ +5 & $\theta_{min}$ & Minimum pitch angle [deg] If this input is less than 90~deg.\\ + & & Otherwise, the init routine will search for a file with the name ``wptable.n'', where ``n'' is a character string obtained from the integer value of the input. In the shown example, this file is therefore ``wptable.100''. The file format is first line contains an integer with the number of subsequent lines, which contain two numbers each, wind speed and minimum pitch angle in degrees. An example is shown in Table~\ref{t:wptable}.\\ 6 & $\theta_{max}$ & Maximum pitch angle [deg] \\ 7 & - & Maximum pitch velocity operation [deg/s]. An upper limit set on the rate of change of the pitch reference signal\\ \hline @@ -271,7 +272,6 @@ Input & & Additional explanation \\ \hline - \begin{table}[t!] \begin{center} \begin{tabular}{r|c|p{11.5cm}} @@ -319,24 +319,31 @@ Input & & Additional explanation \\ \hline \begin{tabular}{r|c|p{11.5cm}} Input & & Additional explanation \\ \hline -77 &- & Frequency of notch filter [Hz] applied on the rotor speed before computing torque above rated (constant power), if zero no notch filter used.\\ +77 &- & Frequency of notch filter [Hz] applied on the rotor speed before computing torque above rated (constant power), if zero no notch filter used.\\ 78 &- & Damping of notch filter [-] applied on the rotor speed before computing torque above rated (constant power), (Default 0.01 used if zero).\\ \hline -79 &- & Choice of derating strategy. 0 = No Derating, 1 = constant rotation, 2 = max rotation (default 0 used if zero).\\ +79 &- & Choice of derating strategy. 0 = No Derating, 1 = constant rotation, 2 = max rotation, 3 = minimum Ct \cite{Meng_2020} (default 0 used if zero).\\ 80 &- & Derate percentage (eg. 70 means 70\% of nominal power).\\ +81 &- & Rotor inertia (if $>$ 0, rotor effective wind speed estimator is activated; Set this value to zero for deactivating it)\\ +82 &- & Rated wind speed (Only used when constant 79 = 3)\\ +\hline +83 & - & Gain for the loop mapping from tower velocity to pitch [rad/(m/s)]\\ +84 & - & Gain for the loop mapping from tower velocity to GenTorque [Nm/(m/s)]\\ +85 & - & Time to switch on the floating control loop [s] \\ +86 & - & Frequency of tower-top fore-aft velocity lowpass filter [Hz]\\ +87 & - & Damping ratio of tower-top fore-aft velocity lowpass filter [-] \\ \end{tabular} \caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, derating, and additional filters. \label{t:par2}} \end{center} \end{table} - - - +% +% \begin{table}[t] \begin{center} \begin{verbatim} -7 + 7 0.0 3.0 4.0 3.0 5.0 2.5 @@ -349,6 +356,8 @@ Input & & Additional explanation \\ \hline \end{center} \end{table} +\clearpage + \section{Cut-in procedure - start up at any wind speed} The blades are initially pitched out to maximum pitch and then at a given time in the simulation (input 24), the start-up procedure is started. First, the low-pass filtered wind speed and the measured rotational speed pitch reference are used to track approximately 6~deg angle of attack at the section of 75~\% blade radius. This pitch angle will therefore decrease as the rotor speeds up. The generator is still cut-out until the rotor speed is sufficient high, where both the torque and pitch controllers become active, unless the speed-up has taken less then the time delay defined in input 25; in such case there will be a soft cut-in of the generator torque. During the initial rotor speed-up, the speed error PID terms of both torque and pitch controllers are active and the set-point of it is the rated rotor speed. The controllers are therefore ready to take over when the speed is high enough. The controller should thereafter be operating normally, and this start-up will take less than 100~s for the DTU 10~MW RWT. @@ -385,33 +394,70 @@ the different statuses are: \item 7: deviation of pitch signals. Input 75 set a running average time and threshold on the largest allowable deviation from the reference. \end{itemize} -\section{Dynamic inputs and outputs} +\section{Input and output signals of the controller} \label{s:ctrlio} +\subsection{Dynamic input signals to controller} \label{ss:ctrlin} +During simulations, the controller dll requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those inputs can be found and explained in Table \ref{t:dyn_in_par}. -As input during simulations, the controller requires the time [s], the generator LSS speed [rad/s], the pitch angles of three blades [rad], the three components of the wind speed at hub height [m/s] (the first and second of these three components must be the two horizontal components that are used internally to compute the horizontal vector sum), the electrical power [W], the status flag of the grid connection [0/1], and the two horizontal accelerations of the tower top. Table~\ref{t:input} shows the HAWC2 commands that provide these eight controller inputs for the DTU 10~MW RWT. Note that if the rotor only has two blades, then the controller may still be used by repeating a blade pitch angle output to the controller. However, this trick is only valid if there is no additional cycle, or individual pitch controller appended to this controller. +\begin{table}[t!] + \begin{center} + \begin{tabular}{c|c|p{11.5cm}} + Channel & Units & Description \\ + \hline + 1 & s & Current simulation time \\ + 2 & rad/s & The generator LSS speed \\ + 3 & rad & The pitch angles of blade 1 \\ + 4 & rad & The pitch angles of blade 2 \\ + 5 & rad & The pitch angles of blade 3 \\ + 6 & m/s & The x-components of wind speed at hub height (the first and second of these three components must be the two horizontal components that are used internally to compute the horizontal vector sum)\\ + 7 & m/s & The y-components of wind speed at hub height\\ + 8 & m/s & The z-components of wind speed at hub height\\ + 9 & W & The electrical power from the generator servo dll\\ + 10 & - & The status flag of the grid connection [0/1] from the generator servo dll\\ + 11 & m/s$^2$ & Tower top x-acceleration (side-to-side)\\ + 12 & m/s$^2$ & Tower top y-acceleration (fore-aft)\\ + \hline + 13 & rad & The additional individual pitch angles of blade 1 (Set to zero if no IPC function is appended to this controller. e.g.: \verb|general constant 0;|) \\ + 14 & rad & The additional individual pitch angles of blade 2 (Set to zero if no IPC function is appended to this controller. e.g.: \verb|general constant 0;|) \\ + 15 & rad & The additional individual pitch angles of blade 3 (Set to zero if no IPC function is appended to this controller. e.g.: \verb|general constant 0;|) \\ + \hline + 16 & m/s & Tower top y-velocity (fore-aft). This is needed by the tower-top velocity feedback loop used by off-shore turbine controller. Set to zero if tower top velocity feedback is not activated. \\ + \end{tabular} + \caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, derating, and additional filters. \label{t:dyn_in_par}} + \end{center} +\end{table} +%the time [s], the generator LSS speed [rad/s], the pitch angles of three blades [rad], the three components of the wind speed at hub height [m/s] (the first and second of these three components must be the two horizontal components that are used internally to compute the horizontal vector sum), the electrical power [W], the status flag of the grid connection [0/1], and the two horizontal accelerations of the tower top. +Table~\ref{t:input} shows an example of the HAWC2 input commands inside the \texttt{"begin type2\_dll; ... end type2\_dll;"} block of the HAWC2 \verb|htc| input file, which provides these 16 controller inputs for the DTU 10~MW RWT. Note that if the rotor only has two blades, then the controller may still be used by repeating a blade pitch angle output to the controller. However, this trick is only valid if there is no additional cycle, or individual pitch controller appended to this controller. \begin{table}[t] \center \begin{verbatim} -general time ; [s] -constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed [rad/s] -constraint bearing2 pitch1 1 only 1; [rad] -constraint bearing2 pitch2 1 only 1; [rad] -constraint bearing2 pitch3 1 only 1; [rad] -wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height -dll inpvec 2 2 ; Elec. power from generator servo .dll -dll inpvec 2 8 ; Grid state flag from generator servo .dll -mbdy state acc towertop 1 1.0 global only 1 ; Tower top x-acceleration [m/s^2] -mbdy state acc towertop 1 1.0 global only 2 ; Tower top y-acceleration [m/s^2] +begin output ; + general time ; [s] + constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed [rad/s] + constraint bearing2 pitch1 1 only 1 ; [rad] + constraint bearing2 pitch2 1 only 1 ; [rad] + constraint bearing2 pitch3 1 only 1 ; [rad] + wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height + dll inpvec 2 2 ; Elec. power from generator servo .dll + dll inpvec 2 8 ; Grid state flag from generator servo .dll + mbdy state acc towertop 1 1.0 global only 1; Tower top x-acceleration [m/s^2] + mbdy state acc towertop 1 1.0 global only 2; Tower top y-acceleration [m/s^2] + general constant 0; IPC + general constant 0; IPC + general constant 0; IPC + mbdy state vel towertop 1 1.0 global only 2; Tower top y-velocity [m/s] +end output; \end{verbatim} -\caption{HAWC2 commands that define the input to the controller DLL. Note that the command ``wind free\_wind 1 x y z'' will give all three components of the free wind at the point x,y,z, both in global coordinates \cite{Larsen12}. \label{t:input}} +\caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:input}} \end{table} +\subsection{Output signals from controller}\label{ss:ctrlout} Table~\ref{t:output} contains a list of the controller outputs to the simulation, where the generator torque reference and pitch angle references for three blades are the main outputs of the controller. The remaining outputs can be used for checking the functionalities of the controller. It is always recommended to write out the status flag in channel 22. \begin{table}[t] \center \begin{tabular}{r|ll} -Channel & Description \\ \hline +Channel & Description & Units\\ \hline 1& Generator torque reference, $Q_{ref,k}$ &[Nm]\\ % 1: Generator torque reference [Nm] 2& Pitch angle reference of blade 1, $\theta_{ref,k}$ &[rad]\\ % 2: Pitch angle reference of blade 1 [rad] 3& Pitch angle reference of blade 2, $\theta_{ref,k}$ &[rad]\\ % 3: Pitch angle reference of blade 2 [rad] @@ -448,6 +494,7 @@ Channel & Description \\ \hline \caption{Outputs from the controller DLL, where only the first two are needed. The rest are for analysis of controller behaviour. \label{t:output}} \end{table} +\clearpage \section{Programming} diff --git a/ref.bib b/ref.bib index 9db8ce8..a56cd13 100644 --- a/ref.bib +++ b/ref.bib @@ -16,12 +16,12 @@ author = {T. J. Larsen and A. M. Hansen}, organization = {DTU Wind Energy}, address = {Roskilde, Denmark}, - edition = {4.3}, - month = {April}, - year = {2012}, + edition = {12.8}, + month = {May}, + year = {2019}, note = {Ris{\o}-R-1597}, owner = {mhha}, - timestamp = {2013.01.13} + timestamp = {2019.05.13} } @BOOK{Nayfeh95, @@ -55,3 +55,13 @@ timestamp = {2013.01.13} } +@article{Meng_2020, + year = 2020, + month = {sep}, + publisher = {{IOP} Publishing}, + volume = {1618}, + pages = {022009}, + author = {F. Meng and W. H. Lio and T. Barlas}, + title = {{DTUWEC}: an open-source {DTU} Wind Energy Controller with advanced industrial features}, + journal = {Journal of Physics: Conference Series}, +}; \ No newline at end of file diff --git a/report.tex b/report.tex index 166f8e0..068945e 100644 --- a/report.tex +++ b/report.tex @@ -25,10 +25,12 @@ open=any % New chapter may begin on any page \usepackage{url} \urlstyle{sf} \usepackage{rotating} +\usepackage[numbers,square]{natbib} +\bibliographystyle{unsrtnat} -\usepackage[autostyle]{csquotes} -\usepackage[backend=biber, natbib=true]{biblatex} -\addbibresource{ref.bib} +%\usepackage[autostyle]{csquotes} +%\usepackage[backend=biber, natbib=true]{biblatex} +%\addbibresource{ref.bib} \setcounter{page}{2} % Page one is added manually, start counting at 2. \usepackage{scrlayer-scrpage} @@ -62,7 +64,8 @@ open=any % New chapter may begin on any page % \include{summary} \include{description} \include{test} - \printbibliography[heading=bibintoc] + \bibliography{ref} +% \printbibliography[heading=bibintoc] \include{appendix} % \include{acknowledgements} \end{document} -- GitLab From d5fb48082c5e85a6448886282c1747be7a71de05 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 24 Feb 2021 22:45:10 +0100 Subject: [PATCH 02/14] test build pdf --- .gitlab-ci.yml | 11 ++++++----- description.tex | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0c9c60f..ae37895 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,13 @@ compile_pdf: - image: aergus/latex + image: hawc2_manual_ubuntu20.04:latest script: - latexmk -pdf report.tex artifacts: expire_in: 1 mins paths: - report.pdf + tags: # only runners with this tag can do the job [3] + - ci-ubuntu pages: stage: deploy script: @@ -16,7 +18,6 @@ pages: artifacts: paths: - public - only: - - master - - test_docs - - tags + only: + - test_docs + - tags diff --git a/description.tex b/description.tex index 7a1f428..24c55c4 100644 --- a/description.tex +++ b/description.tex @@ -183,10 +183,10 @@ The controller includes also a feature for regulation above the standard cut-out %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage - -\section{Initialization Parameters} -\label{s:par} - +\section{Controller interface: HAWC2 type2\_dll}\label{s:type2dll} +The DTU Wind Energy Controller DLLs, for example, \verb|dtu_we_controller.dll| are connected to HAWC2 via the type2\_dll interface as it has been describled in HAWC2 manual~\cite{Larsen12}. The initialization routine \verb|init_regulation| or \texttt{init\_regulation\_advanced} defined in the controller DLL is called using HAWC2 command \verb|dll_subroutine_init| only once before the time simulation begins. The update routine named \verb|update_regulation| defined in the controller DLL is called using HAWC2 command \verb|dll_subroutine_update| in every time steps. The users need to provide an additional input file when the derating control or effective wind speed estimator function is activated using HAWC2 command \verb|init_string|. +% +\subsection{Initialization Parameters}\label{ss:par} All initialization parameters of the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2\_dll \cite{Larsen12}. Details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters are used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 82 parameters, where the first 52 are identical to those of \verb|init_regulation|. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. \begin{table}[ht] -- GitLab From b38452a7864016989fa01d6788ba2e1d3173e2a9 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 24 Feb 2021 22:53:20 +0100 Subject: [PATCH 03/14] fix syntax error in .gitlab-ci.yml --- .gitlab-ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae37895..7aad952 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,8 +6,8 @@ compile_pdf: expire_in: 1 mins paths: - report.pdf - tags: # only runners with this tag can do the job [3] - - ci-ubuntu + #tags: # only runners with this tag can do the job [3] + # - ci-ubuntu pages: stage: deploy script: @@ -18,6 +18,7 @@ pages: artifacts: paths: - public - only: - - test_docs - - tags + only: + - master + - updata_manual + #- tags -- GitLab From 133f537006c412616bcfb1df33f479b9fc87ee9a Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 24 Feb 2021 23:07:40 +0100 Subject: [PATCH 04/14] fix typos in .gitlab-ci.yml --- .gitlab-ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7aad952..0545900 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,8 +6,8 @@ compile_pdf: expire_in: 1 mins paths: - report.pdf - #tags: # only runners with this tag can do the job [3] - # - ci-ubuntu + tags: # only runners with this tag can do the job [3] + - ci-ubuntu pages: stage: deploy script: @@ -20,5 +20,5 @@ pages: - public only: - master - - updata_manual - #- tags + - update_manual + - tags -- GitLab From 456d04c83fb405b0cb435d2ab8201d70f715ab3b Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 10:35:12 +0100 Subject: [PATCH 05/14] update ci image to: openlac_manual_ubuntu20.04:latest --- .gitlab-ci.yml | 2 +- description.tex | 63 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0545900..ec07cf5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,5 @@ compile_pdf: - image: hawc2_manual_ubuntu20.04:latest + image: openlac_manual_ubuntu20.04:latest script: - latexmk -pdf report.tex artifacts: diff --git a/description.tex b/description.tex index 24c55c4..892cde0 100644 --- a/description.tex +++ b/description.tex @@ -184,15 +184,37 @@ The controller includes also a feature for regulation above the standard cut-out %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Controller interface: HAWC2 type2\_dll}\label{s:type2dll} -The DTU Wind Energy Controller DLLs, for example, \verb|dtu_we_controller.dll| are connected to HAWC2 via the type2\_dll interface as it has been describled in HAWC2 manual~\cite{Larsen12}. The initialization routine \verb|init_regulation| or \texttt{init\_regulation\_advanced} defined in the controller DLL is called using HAWC2 command \verb|dll_subroutine_init| only once before the time simulation begins. The update routine named \verb|update_regulation| defined in the controller DLL is called using HAWC2 command \verb|dll_subroutine_update| in every time steps. The users need to provide an additional input file when the derating control or effective wind speed estimator function is activated using HAWC2 command \verb|init_string|. +The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are connected to HAWC2 via the type2\_dll interface that is describled in HAWC2 manual~\cite{Larsen12}. First, the initialization routine \verb|init_regulation| or \verb|init_regulation_advanced| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_init| once before the time simulation begins. Afterward, the update routine \verb|update_regulation| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_update| in every simulation time steps. The users need to provide an additional input file when the derating control or effective wind speed estimator function is activated using HAWC2 command \verb|init_string|. +% +\begin{table}[h] + \center + \begin{verbatim} + begin type2_dll; main control dll + name dtu_we_controller ; + filename ./control/dtu_we_controller_win32.dll ; + dll_subroutine_init init_regulation_advanced ; + dll_subroutine_update update_regulation ; + init_string ./control/additional_control_parameters.txt; + arraysizes_init 100 1 ; + arraysizes_update 100 100 ; + begin init; initialization parameters + ... + end init; + begin output; input signals to the controller + ... + end output; + end type2_dll; + \end{verbatim} + \caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:type2dll_1}} +\end{table} % \subsection{Initialization Parameters}\label{ss:par} -All initialization parameters of the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2\_dll \cite{Larsen12}. Details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters are used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 82 parameters, where the first 52 are identical to those of \verb|init_regulation|. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. +All initialization parameters used by the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2\_dll \cite{Larsen12}. The details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters are used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 87 parameters, where the first 52 are identical to those in Table~\ref{t:par}. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. \begin{table}[ht] \begin{center} \begin{tabular}{r|c|p{11.5cm}} -Input & Symbol & Additional explanation \\ \hline +Input & Symbols & Additional explanation \\ \hline 1 & $P_0$ & Rated power [kW]\\ 2 & $\Omega_{min}$ & Minimum rotor (LSS) speed [rad/s]\\ 3 & $\Omega_0$ & Rated rotor (LSS) speed [rad/s] \\ @@ -236,7 +258,7 @@ Input & Symbol & Additional explanation \\ \hline \begin{table}[t!] \begin{center} \begin{tabular}{r|c|p{11.5cm}} -Input & & Additional explanation \\ \hline +Input & Symbols & Additional explanation \\ \hline 33 & $\tau_{g}$ & Time for the maximum torque rate = Maximum allowable generator torque/(constant 33 + 0.01s) [s] \\ 34 & $\theta_{f_1}$ & Angle above lowest minimum pitch angle for switch to full load [deg] \\ 35 & $\gamma$ & Percentage of the rated speed when the torque limits are fully opened [\%] \\ @@ -271,11 +293,10 @@ Input & & Additional explanation \\ \hline \end{table} - \begin{table}[t!] \begin{center} \begin{tabular}{r|c|p{11.5cm}} -Input & & Additional explanation \\ \hline +Input & Symbols & Additional explanation \\ \hline 53 & $\Omega_L$ & Exclusion zone: Lower speed limit [rad/s] (Default 0 used if zero)\\ 54 & $Q_{g\Omega L}$ & Exclusion zone: Generator torque at lower limit [Nm] (Default 0 used if zero)\\ 55 & $\Omega_H$ & Exclusion zone: Upper speed limit [rad/s] (if $\le 0$ then exclusion zone functionality is inactive)\\ @@ -317,7 +338,7 @@ Input & & Additional explanation \\ \hline \begin{table}[t!] \begin{center} \begin{tabular}{r|c|p{11.5cm}} -Input & & Additional explanation \\ \hline +Input & Symbols & Additional explanation \\ \hline 77 &- & Frequency of notch filter [Hz] applied on the rotor speed before computing torque above rated (constant power), if zero no notch filter used.\\ 78 &- & Damping of notch filter [-] applied on the rotor speed before computing torque above rated (constant power), (Default 0.01 used if zero).\\ @@ -327,30 +348,28 @@ Input & & Additional explanation \\ \hline 81 &- & Rotor inertia (if $>$ 0, rotor effective wind speed estimator is activated; Set this value to zero for deactivating it)\\ 82 &- & Rated wind speed (Only used when constant 79 = 3)\\ \hline -83 & - & Gain for the loop mapping from tower velocity to pitch [rad/(m/s)]\\ -84 & - & Gain for the loop mapping from tower velocity to GenTorque [Nm/(m/s)]\\ +83 & - & Gain for the loop mapping from tower velocity to blade pitch [rad/(m/s)]\\ +84 & - & Gain for the loop mapping from tower velocity to Generator Torque [Nm/(m/s)]\\ 85 & - & Time to switch on the floating control loop [s] \\ -86 & - & Frequency of tower-top fore-aft velocity lowpass filter [Hz]\\ -87 & - & Damping ratio of tower-top fore-aft velocity lowpass filter [-] \\ +86 & - & Frequency of tower top fore-aft velocity lowpass filter [Hz]\\ +87 & - & Damping ratio of tower top fore-aft velocity lowpass filter [-] \\ \end{tabular} -\caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, derating, and additional filters. \label{t:par2}} +\caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, additional filters derating, effective wind speed estimator and tower top velocity feedback loop for floating turbine. \label{t:par2}} \end{center} \end{table} - % % - \begin{table}[t] \begin{center} \begin{verbatim} - 7 - 0.0 3.0 - 4.0 3.0 - 5.0 2.5 - 6.0 1.7 - 7.0 0.8 - 8.0 0.0 -50.0 0.0 + 7 + 0.0 3.0 + 4.0 3.0 + 5.0 2.5 + 6.0 1.7 + 7.0 0.8 + 8.0 0.0 + 50.0 0.0 \end{verbatim} \caption{Example of a ``wptable.n'' file. First line contains an integer with the number of subsequent lines, which contain two numbers each, wind speed and minimum pitch angle in degrees.\label{t:wptable}} \end{center} -- GitLab From c4e4d5897ff0ddf340e9fb305bdd97e492dd5bb4 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 11:03:23 +0100 Subject: [PATCH 06/14] add path to store converted tmp pdfs when invoking latexmk command --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ec07cf5..9bdcc6e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ compile_pdf: image: openlac_manual_ubuntu20.04:latest script: - - latexmk -pdf report.tex + - latexmk -outdir=./figure/ -pdf report.tex artifacts: expire_in: 1 mins paths: -- GitLab From 839dc0ce5e5f5a75cdd570e4acc309895f4612b8 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 11:40:25 +0100 Subject: [PATCH 07/14] try with 'pdflatex' on ci-runner --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9bdcc6e..4646598 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ compile_pdf: image: openlac_manual_ubuntu20.04:latest script: - - latexmk -outdir=./figure/ -pdf report.tex + - pdflatex report.tex artifacts: expire_in: 1 mins paths: -- GitLab From e9d2cfd4247f8e631b82d4ff8a9e0114a1269a00 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 13:21:54 +0100 Subject: [PATCH 08/14] change the .gitlab-ci.yml script back to use latexmk; --- .gitlab-ci.yml | 2 +- description.tex | 8 ++++---- report.tex | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4646598..ec07cf5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ compile_pdf: image: openlac_manual_ubuntu20.04:latest script: - - pdflatex report.tex + - latexmk -pdf report.tex artifacts: expire_in: 1 mins paths: diff --git a/description.tex b/description.tex index 892cde0..0704c7d 100644 --- a/description.tex +++ b/description.tex @@ -189,10 +189,10 @@ The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are c \begin{table}[h] \center \begin{verbatim} - begin type2_dll; main control dll - name dtu_we_controller ; - filename ./control/dtu_we_controller_win32.dll ; - dll_subroutine_init init_regulation_advanced ; + begin type2_dll; + name dtu_we_controller; + filename ./control/dtu_we_controller.dll; The file name of control dll + dll_subroutine_init init_regulation_advanced; dll_subroutine_update update_regulation ; init_string ./control/additional_control_parameters.txt; arraysizes_init 100 1 ; diff --git a/report.tex b/report.tex index 068945e..44fec0a 100644 --- a/report.tex +++ b/report.tex @@ -19,6 +19,7 @@ open=any % New chapter may begin on any page \usepackage{amssymb} \usepackage{amsmath} \usepackage{graphicx} +%\usepackage[outdir=./figure/]{epstopdf} %\usepackage{draftwatermark} %\SetWatermarkScale{2} %\usepackage{siunitx} -- GitLab From 9d38b57bbd57db77fa32b20314080bcd649db748 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 16:20:53 +0100 Subject: [PATCH 09/14] debug broken table and figure references --- description.tex | 249 +++++++++++++++++++++++++++--------------------- report.tex | 2 +- 2 files changed, 140 insertions(+), 111 deletions(-) diff --git a/description.tex b/description.tex index 0704c7d..c9a10e1 100644 --- a/description.tex +++ b/description.tex @@ -183,8 +183,9 @@ The controller includes also a feature for regulation above the standard cut-out %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage + \section{Controller interface: HAWC2 type2\_dll}\label{s:type2dll} -The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are connected to HAWC2 via the type2\_dll interface that is describled in HAWC2 manual~\cite{Larsen12}. First, the initialization routine \verb|init_regulation| or \verb|init_regulation_advanced| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_init| once before the time simulation begins. Afterward, the update routine \verb|update_regulation| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_update| in every simulation time steps. The users need to provide an additional input file when the derating control or effective wind speed estimator function is activated using HAWC2 command \verb|init_string|. +The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are connected to HAWC2 via the type2\_dll interface that is describled in HAWC2 manual~\cite{Larsen12}. First, the initialization routine \verb|init_regulation| or \verb|init_regulation_advanced| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_init| once before the time simulation begins. Afterward, the update routine \verb|update_regulation| implemented in the controller DLL is called using HAWC2 command \verb|dll_subroutine_update| in every simulation time steps. The users need to provide an additional input file when the derating control or effective wind speed estimator function is activated using HAWC2 command \verb|init_string|. The HAWC2 input commands for interfacing the control can be found in Table~\ref{t:type2dll_1}. % \begin{table}[h] \center @@ -193,24 +194,52 @@ The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are c name dtu_we_controller; filename ./control/dtu_we_controller.dll; The file name of control dll dll_subroutine_init init_regulation_advanced; - dll_subroutine_update update_regulation ; + dll_subroutine_update update_regulation; init_string ./control/additional_control_parameters.txt; - arraysizes_init 100 1 ; - arraysizes_update 100 100 ; - begin init; initialization parameters + arraysizes_init 100 1; + arraysizes_update 100 100; + begin init; Setup initialization parameters ... end init; - begin output; input signals to the controller + begin output; Input signals to the controller ... end output; end type2_dll; \end{verbatim} - \caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:type2dll_1}} + \caption{HAWC2 commands that define the interface to the controller. Noticed that the command \texttt{init\_string ./control/additional\_control\_parameters.txt;} is needed when the derating control or effective wind speed estimator function is activated. \label{t:type2dll_1}} \end{table} % \subsection{Initialization Parameters}\label{ss:par} -All initialization parameters used by the controller are transferred to the DLL using HAWC2 commands for the \verb|init_regulation| routine of the type2\_dll \cite{Larsen12}. The details of all 52 parameters are given in Table~\ref{t:par}, where the notation of the parameters are used in the diagram of Figure~\ref{f:diagram} and some additional notations can also be seen. Additional features can be enabled by using the \verb|init_regulation_advanced| instead, this routine requires 87 parameters, where the first 52 are identical to those in Table~\ref{t:par}. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive, except for the drivetrain damper which will be active if the input parameters 10 and 38 are non-zero. - +The initialization parameters for the basic features used by the controller are transferred to the DLL by calling \verb|init_regulation| subroutine using HAWC2 command \verb|dll_subroutine_init| together with HAWC2 command block \texttt{"begin init; ... end init;"} shown in Table~\ref{t:type2dll_1}. The details of 52 parameters needed by the basic features are given in Table~\ref{t:par}, where the notation of each parameters are the same as they were used in the diagram of Figure~\ref{f:diagram} and in the equations. Additional explanation of those parameters can also be seen in the table. Advanced control features can be enabled and initialized by calling the \verb|init_regulation_advanced| subroutine using the HAWC2 command \verb|dll_subroutine_init| and HAWC2 command block \texttt{"begin init; ... end init;"} to provide the initialization parameters. The \verb|init_regulation_advanced| subroutine requires in total 87 parameters, where the first 52 are identical to those in Table~\ref{t:par}. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive. Noticed that the drivetrain damper can be actived if the input parameters 10 and 38 are both non-zero values. A more detailed example of setting up the initialization parameters can be found in Table~\ref{t:type2dll_2}. +% +\begin{table}[h] + \center + \begin{verbatim} + begin type2_dll; + name dtu_we_controller; + filename ./control/dtu_we_controller.dll; + dll_subroutine_init init_regulation_advanced; + dll_subroutine_update update_regulation; + init_string ./control/additional_control_parameters.txt; + arraysizes_init 100 1; + arraysizes_update 100 100; + begin init; Setup initialization parameters + constant 1 10000.0 ; Rated power [kW] + constant 2 0.628 ; Minimum rotor (LSS) speed [rad/s] + constant 3 1.005 ; Rated rotor (LSS) speed [rad/s] + ... + constant 52 0.0 ; stop at here for basic features + ... + constant 87 0.0 ; continue to here for additional features + end init; + begin output; Input signals to the controller + ... + end output; + end type2_dll; + \end{verbatim} + \caption{HAWC2 commands that define the main controller. If the \texttt{init\_regualtion\_advanced} subroutine is used and the user needs to provide 87 parameters. If the \texttt{init\_regualtion\_advanced} subroutine is used and the user needs to provide only 52 parameters. \label{t:type2dll_2}} +\end{table} +% \begin{table}[ht] \begin{center} \begin{tabular}{r|c|p{11.5cm}} @@ -288,11 +317,11 @@ Input & Symbols & Additional explanation \\ \hline 51 & $K_{\Omega 1}$ & Coefficient of linear term in aerodynamic DT damping scheduling, KK1 [deg] \\ 52 & $K_{\Omega 2}$ & Coefficient of quadratic term in aerodynamic DT damping scheduling, KK2 [deg${}^2$] \\ \end{tabular} -\caption{All parameters of the controller related to the parameters shown in the diagram in Figure~\ref{f:diagram} . \label{t:par}} +\caption{All parameters of the controller related to the basic features shown in the controller diagram in Figure~\ref{f:diagram}. \label{t:par}} \end{center} \end{table} - +% \begin{table}[t!] \begin{center} \begin{tabular}{r|c|p{11.5cm}} @@ -354,22 +383,22 @@ Input & Symbols & Additional explanation \\ \hline 86 & - & Frequency of tower top fore-aft velocity lowpass filter [Hz]\\ 87 & - & Damping ratio of tower top fore-aft velocity lowpass filter [-] \\ \end{tabular} -\caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, additional filters derating, effective wind speed estimator and tower top velocity feedback loop for floating turbine. \label{t:par2}} +\caption{All the parameters of the controller related to the advanced features such as exclusion zone, drivetrain damper, tower vibration damper, additional filters, derating control, effective wind speed estimator and tower top velocity feedback loop for floating turbine. \label{t:par2}} \end{center} \end{table} % % -\begin{table}[t] +\begin{table}[ht] \begin{center} \begin{verbatim} 7 0.0 3.0 4.0 3.0 - 5.0 2.5 + 5.0 2.5 6.0 1.7 7.0 0.8 8.0 0.0 - 50.0 0.0 + 50.0 0.0 \end{verbatim} \caption{Example of a ``wptable.n'' file. First line contains an integer with the number of subsequent lines, which contain two numbers each, wind speed and minimum pitch angle in degrees.\label{t:wptable}} \end{center} @@ -377,47 +406,11 @@ Input & Symbols & Additional explanation \\ \hline \clearpage -\section{Cut-in procedure - start up at any wind speed} - -The blades are initially pitched out to maximum pitch and then at a given time in the simulation (input 24), the start-up procedure is started. First, the low-pass filtered wind speed and the measured rotational speed pitch reference are used to track approximately 6~deg angle of attack at the section of 75~\% blade radius. This pitch angle will therefore decrease as the rotor speeds up. The generator is still cut-out until the rotor speed is sufficient high, where both the torque and pitch controllers become active, unless the speed-up has taken less then the time delay defined in input 25; in such case there will be a soft cut-in of the generator torque. During the initial rotor speed-up, the speed error PID terms of both torque and pitch controllers are active and the set-point of it is the rated rotor speed. The controllers are therefore ready to take over when the speed is high enough. The controller should thereafter be operating normally, and this start-up will take less than 100~s for the DTU 10~MW RWT. - -There should be no need for wind ramping for the controller to start up; however, caution should be made on not to start high wind speed (above rated) simulations with too high initial rotational speed. Too high initial rotor speed may cause the pitch and torque controllers to overreact and they may enter a state of competition. If the user can allow long start-up periods then the most stable way is set a late cut-in time to let the rotor slow down to idling before the cut-in starts. However, at low wind speeds, the start-up will then take some time, and a very early cut-in (e.g. 0.1~s) is recommended, combined with an initial rotational speed is set to a value 50-75~\% of the minimum speed. - - -\section{Shut-down procedures} \label{s:cutout} - -The user may specify a time in the simulation for a normal shut-down in input 26, and which time the generator torque reference is linearly decreased to zero using a user-defined time constant (input 27). At the cut-out time plus the first user-defined time delay in input 29, the blades will start to pitch out by setting the reference pitch angle to the maximum pitch angle. The pitching is linear with two different constant speeds, first the pitch velocity specified in input 30, and then after the additional time specified in input 31 the pitch velocity is defined by input 32. - -\section{System monitoring} - -Two different levels of system monitoring are implemented in the controller. The first level is inside the wind turbine controller and it deals with grid failure, generator overspeed, tower-top acceleration, and reverse generator speed. When one of these monitoring alarms is triggered the wind turbine will shut-down with a normal procedure. The thresholds for the overspeed and the tower-top acceleration can be set in inputs 39 and 46. When using the extra input parameters of \verb|init_regulation_advanced|, the user can also activate a monitoring of the pitch angles to detect a deviation from the reference signal. Input 75 contains two parameters: a time period of a running average and a threshold on the deviation angle; a normal shut-down is commenced if one of the differences between running averages of the actual and reference pitch angles exceeds the threshold. - -The second level of monitoring is outside the wind turbine controller and it acts as a safety system overriding all the signals coming from the controller. This system monitors the overspeed and the tower-top acceleration, and if activated, it leads to an emergency stop. The threshold on the safety system overspeed monitor can be set in input 45, whereas the threshold on the tower-top acceleration by default is set to 1.1 times the first level threshold. If the user wants to set a different safety system threshold on the tower accelerations then it is done by input 73. - -\clearpage - - -\section{Operational status} \label{s:status} -The controller operation is divided into different statuses. Each status correspond to a specific conditions. The status of the controller can be seen from the output number 22. -the different statuses are: -\begin{itemize} -\item -2: stand-still. -\item -1: start-up procedure. -\item 0: normal operation. -\item 1: overspeed monitoring. An overspeed has been detected and the turbine will shut-down. Threshold value in input 45. -\item 2: grid failure. A grid failure has been triggered and the turbine will shut-down. -\item 3: tower-top acceleration monitoring. An excessive tower top acceleration has been detected and the turbine will shut-down. Threshold value in input 46. -\item 4: shut-down procedure with normal stop. -\item 5: shut-down procedure with emergency stop. -\item 6: reverse speed. A reverse speed of the generator rotational speed has been detected and the turbine will shut-down. -\item 7: deviation of pitch signals. Input 75 set a running average time and threshold on the largest allowable deviation from the reference. -\end{itemize} - -\section{Input and output signals of the controller} \label{s:ctrlio} +% \section{Input and output signals of the controller} \label{s:ctrlio} \subsection{Dynamic input signals to controller} \label{ss:ctrlin} During simulations, the controller dll requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those inputs can be found and explained in Table \ref{t:dyn_in_par}. -\begin{table}[t!] +\begin{table}[h!] \begin{center} \begin{tabular}{c|c|p{11.5cm}} Channel & Units & Description \\ @@ -448,73 +441,109 @@ During simulations, the controller dll requires 16 input signals coming from aer Table~\ref{t:input} shows an example of the HAWC2 input commands inside the \texttt{"begin type2\_dll; ... end type2\_dll;"} block of the HAWC2 \verb|htc| input file, which provides these 16 controller inputs for the DTU 10~MW RWT. Note that if the rotor only has two blades, then the controller may still be used by repeating a blade pitch angle output to the controller. However, this trick is only valid if there is no additional cycle, or individual pitch controller appended to this controller. \begin{table}[t] -\center -\begin{verbatim} -begin output ; - general time ; [s] - constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed [rad/s] - constraint bearing2 pitch1 1 only 1 ; [rad] - constraint bearing2 pitch2 1 only 1 ; [rad] - constraint bearing2 pitch3 1 only 1 ; [rad] - wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height - dll inpvec 2 2 ; Elec. power from generator servo .dll - dll inpvec 2 8 ; Grid state flag from generator servo .dll - mbdy state acc towertop 1 1.0 global only 1; Tower top x-acceleration [m/s^2] - mbdy state acc towertop 1 1.0 global only 2; Tower top y-acceleration [m/s^2] - general constant 0; IPC - general constant 0; IPC - general constant 0; IPC - mbdy state vel towertop 1 1.0 global only 2; Tower top y-velocity [m/s] -end output; -\end{verbatim} -\caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:input}} + \center + \begin{verbatim} + begin output ; + general time ; [s] + constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed [rad/s] + constraint bearing2 pitch1 1 only 1 ; [rad] + constraint bearing2 pitch2 1 only 1 ; [rad] + constraint bearing2 pitch3 1 only 1 ; [rad] + wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height + dll inpvec 2 2 ; Elec. power from generator servo .dll + dll inpvec 2 8 ; Grid state flag from generator servo .dll + mbdy state acc towertop 1 1.0 global only 1; Tower top x-acceleration [m/s^2] + mbdy state acc towertop 1 1.0 global only 2; Tower top y-acceleration [m/s^2] + general constant 0; IPC + general constant 0; IPC + general constant 0; IPC + mbdy state vel towertop 1 1.0 global only 2; Tower top y-velocity [m/s] + end output; + \end{verbatim} + \caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:input}} \end{table} \subsection{Output signals from controller}\label{ss:ctrlout} Table~\ref{t:output} contains a list of the controller outputs to the simulation, where the generator torque reference and pitch angle references for three blades are the main outputs of the controller. The remaining outputs can be used for checking the functionalities of the controller. It is always recommended to write out the status flag in channel 22. \begin{table}[t] -\center -\begin{tabular}{r|ll} -Channel & Description & Units\\ \hline - 1& Generator torque reference, $Q_{ref,k}$ &[Nm]\\ % 1: Generator torque reference [Nm] - 2& Pitch angle reference of blade 1, $\theta_{ref,k}$ &[rad]\\ % 2: Pitch angle reference of blade 1 [rad] - 3& Pitch angle reference of blade 2, $\theta_{ref,k}$ &[rad]\\ % 3: Pitch angle reference of blade 2 [rad] - 4& Pitch angle reference of blade 3, $\theta_{ref,k}$ &[rad]\\ % 4: Pitch angle reference of blade 3 [rad] - 5& Power reference, $P_{ref,k}$ &[W]\\ % 5: Power reference [W] - 6& Filtered wind speed, $\bar V_k$ &[m/s]\\ % 6: Filtered wind speed [m/s] - 7& Filtered rotor speed, $\bar \Omega_k$ &[rad/s]\\ % 7: Filtered rotor speed [rad/s] - 8& Filtered rotor speed error for torque, $e_{Q,k}$ &[rad/s]\\ % 8: Filtered rotor speed error for torque [rad/s] - 9& Band-pass filtered rotor speed, $\Omega_{d,k}$ &[rad/s]\\ % 9: Bandpass filtered rotor speed [rad/s] -10& Proportional term of torque controller, $Q_{P,k}$ &[Nm]\\ % 10: Proportional term of torque contr. [Nm] -11& Integral term of torque controller, $Q_{I,k}$ &[Nm]\\ % 11: Integral term of torque controller [Nm] -12& Minimum limit of torque, $Q_{g,min,k}$ &[Nm]\\ % 12: Minimum limit of torque [Nm] -13& Maximum limit of torque, $Q_{g,max,k}$ &[Nm]\\ % 13: Maximum limit of torque [Nm] -14& Torque limit switch based on pitch, $\sigma_{\theta,k}$ &[-]\\ % 14: Torque limit switch based on pitch [-] -15& Filtered rotor speed error for pitch controller, $\bar e_{\Omega,k}$ &[rad/s]\\ % 15: Filtered rotor speed error for pitch [rad/s] -16& Filtered power error for pitch controller, $\bar e_{P,k}$ &[W]\\ % 16: Power error for pitch [W] -17& Proportional term of pitch controller, $\theta_{P,k}$ &[rad]\\ % 17: Proportional term of pitch controller [rad] -18& Integral term of pitch controller, $\theta_{I,k}$ &[rad]\\ % 18: Integral term of pitch controller [rad] -19& Minimum limit of pitch, $\theta_{min,k}$ &[rad]\\ % 19: Minimum limit of pitch [rad] -20& Maximum limit of pitch, $\theta_{max}$ &[rad]\\ % 20: Maximum limit of pitch [rad] -21& Torque reference from DT damper, $Q_{dmp,k}$ &[Nm] \\ % 21: Torque reference from DT damper [Nm] -22& Status signal, &[-] \\ % 22: Status signal [-] -23& Pitch rate to be added to pitch controller, &[rad/s]\\ % 23: Total added pitch rate [rad/s] -24& Filtered pitch angle & [rad]\\ % 24: Filtered pitch angle [rad] -25& Flag for mechanical brake & [0=off/1=on]\\ % 25: Flag for mechnical brake [0=off/1=on] -26& Flag for emergency pitch stop & [0=off/1=on]\\ % 26: Flag for emergency pitch stop [0=off/1=on] -27& LP filtered acceleration level & [m/s${}^2$]\\ % 27: LP filtered acceleration level [m/s^2] -28& Rotor speed exclusion zone region & [-]\\ % 28: Rotor speed exlusion zone region [-] -29& Filtered tower top acc. for tower damper &[m/s${}^2$]\\ % 29: Filtered tower top acc. for tower damper [m/s^2] -30& Reference pitch from tower damper & [rad]\\ % 30: Reference pitch from tower damper [rad] -31& Monitored average of reference pitch & [rad] \\ % 31: Monitored average of reference pitch [rad] -32& Monitored ave. of actual pitch (blade 1) & [rad] % 32: Monitored ave. of actual pitch (blade 1) [rad] -\end{tabular} -\caption{Outputs from the controller DLL, where only the first two are needed. The rest are for analysis of controller behaviour. \label{t:output}} + \center + \begin{tabular}{r|ll} + Channel & Description & Units\\ \hline + 1& Generator torque reference, $Q_{ref,k}$ &[Nm]\\ % 1: Generator torque reference [Nm] + 2& Pitch angle reference of blade 1, $\theta_{ref,k}$ &[rad]\\ % 2: Pitch angle reference of blade 1 [rad] + 3& Pitch angle reference of blade 2, $\theta_{ref,k}$ &[rad]\\ % 3: Pitch angle reference of blade 2 [rad] + 4& Pitch angle reference of blade 3, $\theta_{ref,k}$ &[rad]\\ % 4: Pitch angle reference of blade 3 [rad] + 5& Power reference, $P_{ref,k}$ &[W]\\ % 5: Power reference [W] + 6& Filtered wind speed, $\bar V_k$ &[m/s]\\ % 6: Filtered wind speed [m/s] + 7& Filtered rotor speed, $\bar \Omega_k$ &[rad/s]\\ % 7: Filtered rotor speed [rad/s] + 8& Filtered rotor speed error for torque, $e_{Q,k}$ &[rad/s]\\ % 8: Filtered rotor speed error for torque [rad/s] + 9& Band-pass filtered rotor speed, $\Omega_{d,k}$ &[rad/s]\\ % 9: Bandpass filtered rotor speed [rad/s] + 10& Proportional term of torque controller, $Q_{P,k}$ &[Nm]\\ % 10: Proportional term of torque contr. [Nm] + 11& Integral term of torque controller, $Q_{I,k}$ &[Nm]\\ % 11: Integral term of torque controller [Nm] + 12& Minimum limit of torque, $Q_{g,min,k}$ &[Nm]\\ % 12: Minimum limit of torque [Nm] + 13& Maximum limit of torque, $Q_{g,max,k}$ &[Nm]\\ % 13: Maximum limit of torque [Nm] + 14& Torque limit switch based on pitch, $\sigma_{\theta,k}$ &[-]\\ % 14: Torque limit switch based on pitch [-] + 15& Filtered rotor speed error for pitch controller, $\bar e_{\Omega,k}$ &[rad/s]\\ % 15: Filtered rotor speed error for pitch [rad/s] + 16& Filtered power error for pitch controller, $\bar e_{P,k}$ &[W]\\ % 16: Power error for pitch [W] + 17& Proportional term of pitch controller, $\theta_{P,k}$ &[rad]\\ % 17: Proportional term of pitch controller [rad] + 18& Integral term of pitch controller, $\theta_{I,k}$ &[rad]\\ % 18: Integral term of pitch controller [rad] + 19& Minimum limit of pitch, $\theta_{min,k}$ &[rad]\\ % 19: Minimum limit of pitch [rad] + 20& Maximum limit of pitch, $\theta_{max}$ &[rad]\\ % 20: Maximum limit of pitch [rad] + 21& Torque reference from DT damper, $Q_{dmp,k}$ &[Nm] \\ % 21: Torque reference from DT damper [Nm] + 22& Status signal, &[-] \\ % 22: Status signal [-] + 23& Pitch rate to be added to pitch controller, &[rad/s]\\ % 23: Total added pitch rate [rad/s] + 24& Filtered pitch angle & [rad]\\ % 24: Filtered pitch angle [rad] + 25& Flag for mechanical brake & [0=off/1=on]\\ % 25: Flag for mechnical brake [0=off/1=on] + 26& Flag for emergency pitch stop & [0=off/1=on]\\ % 26: Flag for emergency pitch stop [0=off/1=on] + 27& LP filtered acceleration level & [m/s${}^2$]\\ % 27: LP filtered acceleration level [m/s^2] + 28& Rotor speed exclusion zone region & [-]\\ % 28: Rotor speed exlusion zone region [-] + 29& Filtered tower top acc. for tower damper &[m/s${}^2$]\\ % 29: Filtered tower top acc. for tower damper [m/s^2] + 30& Reference pitch from tower damper & [rad]\\ % 30: Reference pitch from tower damper [rad] + 31& Monitored average of reference pitch & [rad] \\ % 31: Monitored average of reference pitch [rad] + 32& Monitored ave. of actual pitch (blade 1) & [rad] % 32: Monitored ave. of actual pitch (blade 1) [rad] + \end{tabular} + \caption{Outputs from the controller DLL, where only the first two are needed. The rest are for analysis of controller behaviour. \label{t:output}} \end{table} \clearpage +\section{Cut-in procedure - start up at any wind speed} + +The blades are initially pitched out to maximum pitch and then at a given time in the simulation (input 24), the start-up procedure is started. First, the low-pass filtered wind speed and the measured rotational speed pitch reference are used to track approximately 6~deg angle of attack at the section of 75~\% blade radius. This pitch angle will therefore decrease as the rotor speeds up. The generator is still cut-out until the rotor speed is sufficient high, where both the torque and pitch controllers become active, unless the speed-up has taken less then the time delay defined in input 25; in such case there will be a soft cut-in of the generator torque. During the initial rotor speed-up, the speed error PID terms of both torque and pitch controllers are active and the set-point of it is the rated rotor speed. The controllers are therefore ready to take over when the speed is high enough. The controller should thereafter be operating normally, and this start-up will take less than 100~s for the DTU 10~MW RWT. + +There should be no need for wind ramping for the controller to start up; however, caution should be made on not to start high wind speed (above rated) simulations with too high initial rotational speed. Too high initial rotor speed may cause the pitch and torque controllers to overreact and they may enter a state of competition. If the user can allow long start-up periods then the most stable way is set a late cut-in time to let the rotor slow down to idling before the cut-in starts. However, at low wind speeds, the start-up will then take some time, and a very early cut-in (e.g. 0.1~s) is recommended, combined with an initial rotational speed is set to a value 50-75~\% of the minimum speed. + + +\section{Shut-down procedures} \label{s:cutout} + +The user may specify a time in the simulation for a normal shut-down in input 26, and which time the generator torque reference is linearly decreased to zero using a user-defined time constant (input 27). At the cut-out time plus the first user-defined time delay in input 29, the blades will start to pitch out by setting the reference pitch angle to the maximum pitch angle. The pitching is linear with two different constant speeds, first the pitch velocity specified in input 30, and then after the additional time specified in input 31 the pitch velocity is defined by input 32. + +\section{System monitoring} + +Two different levels of system monitoring are implemented in the controller. The first level is inside the wind turbine controller and it deals with grid failure, generator overspeed, tower-top acceleration, and reverse generator speed. When one of these monitoring alarms is triggered the wind turbine will shut-down with a normal procedure. The thresholds for the overspeed and the tower-top acceleration can be set in inputs 39 and 46. When using the extra input parameters of \verb|init_regulation_advanced|, the user can also activate a monitoring of the pitch angles to detect a deviation from the reference signal. Input 75 contains two parameters: a time period of a running average and a threshold on the deviation angle; a normal shut-down is commenced if one of the differences between running averages of the actual and reference pitch angles exceeds the threshold. + +The second level of monitoring is outside the wind turbine controller and it acts as a safety system overriding all the signals coming from the controller. This system monitors the overspeed and the tower-top acceleration, and if activated, it leads to an emergency stop. The threshold on the safety system overspeed monitor can be set in input 45, whereas the threshold on the tower-top acceleration by default is set to 1.1 times the first level threshold. If the user wants to set a different safety system threshold on the tower accelerations then it is done by input 73. + +\clearpage + + +\section{Operational status} \label{s:status} +The controller operation is divided into different statuses. Each status correspond to a specific conditions. The status of the controller can be seen from the output number 22. +the different statuses are: +\begin{itemize} +\item -2: stand-still. +\item -1: start-up procedure. +\item 0: normal operation. +\item 1: overspeed monitoring. An overspeed has been detected and the turbine will shut-down. Threshold value in input 45. +\item 2: grid failure. A grid failure has been triggered and the turbine will shut-down. +\item 3: tower-top acceleration monitoring. An excessive tower top acceleration has been detected and the turbine will shut-down. Threshold value in input 46. +\item 4: shut-down procedure with normal stop. +\item 5: shut-down procedure with emergency stop. +\item 6: reverse speed. A reverse speed of the generator rotational speed has been detected and the turbine will shut-down. +\item 7: deviation of pitch signals. Input 75 set a running average time and threshold on the largest allowable deviation from the reference. +\end{itemize} + \section{Programming} The controller is programmed in Fortran90 using the format of the \emph{type2 DLL interface for HAWC2} \cite{Larsen12}. The source code of the Basic DTU Wind Energy controller can be found in the GitHub repository: diff --git a/report.tex b/report.tex index 44fec0a..d352529 100644 --- a/report.tex +++ b/report.tex @@ -1,5 +1,5 @@ %==================================================================== -% 10 MW LIGHT ROTOR REFERENCE TURBINE - MAIN DOCUMENT +% DTU Wind Energy Controller User Manual - MAIN DOCUMENT %==================================================================== \documentclass[ -- GitLab From e15482ffc7ebbec67f6480a12615ba94a1c7ee87 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Thu, 25 Feb 2021 17:13:07 +0100 Subject: [PATCH 10/14] remove "babel" package which cause problems on missing some figures --- description.tex | 2 +- report.tex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/description.tex b/description.tex index c9a10e1..4207930 100644 --- a/description.tex +++ b/description.tex @@ -408,7 +408,7 @@ Input & Symbols & Additional explanation \\ \hline % \section{Input and output signals of the controller} \label{s:ctrlio} \subsection{Dynamic input signals to controller} \label{ss:ctrlin} -During simulations, the controller dll requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those inputs can be found and explained in Table \ref{t:dyn_in_par}. +During simulations, the controller dll requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those input signals need to be specified Those inputs can be found and explained in Table \ref{t:dyn_in_par}. \begin{table}[h!] \begin{center} diff --git a/report.tex b/report.tex index d352529..51f8ef2 100644 --- a/report.tex +++ b/report.tex @@ -14,7 +14,7 @@ open=any % New chapter may begin on any page ]{scrbook} \usepackage[utf8]{inputenc} -\usepackage[american]{babel} +%\usepackage[american]{babel} \usepackage{epsfig} \usepackage{amssymb} \usepackage{amsmath} -- GitLab From 8135c65bfbdbaacf5762881d341cbf1aab8aeee5 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 3 Mar 2021 15:15:34 +0100 Subject: [PATCH 11/14] updated the output sensor description --- description.tex | 120 ++++++++++++++++++++++++++++++------------------ frontpage.tex | 6 +-- ref.bib | 12 ++++- 3 files changed, 90 insertions(+), 48 deletions(-) diff --git a/description.tex b/description.tex index 4207930..ac3016f 100644 --- a/description.tex +++ b/description.tex @@ -3,11 +3,11 @@ This chapter contains a description of the baseline controller, the additional features, the parameters, the dynamic inputs and outputs, and the monitors. The first version of the controller \cite{Hansen13} was a further development of a previous controller used at DTU Wind Energy with new developments inspired by Bossanyi's controller for the 5MW NREL reference turbine \cite{Bossanyi09}. Especially the power error feedback in the pitch controller that keeps the pitch at its minimum below rated power operation represented the most significant change. The current release of the Basic DTU Wind Energy Controller consist of a restructuring of the source code itself and includes the following new features: \begin{itemize} - \item{new optional partial load strategy for optimal tip-speed ratio tracking} + \item{new optional partial load strategy for optimal tip-speed ratio tracking} \item{exclusion zone on the rotor speed} \item{active tower damping by pitch feedback from tower top acceleration} \item{smooth power down for operation in storm conditions} - \item{de-rating functionalities [please add Mahmood]} + \item{de-rating functionalities} \end{itemize} Note that the controller is only considering low speed shaft (LSS) measures of rotational speeds and torques, i.e., there is no gearbox on the drivetrain. The controller can still be used for turbines with a gearbox, when the user transforms torques and speeds between the LSS and high-speed shaft (HSS) using the gear ratio (cf. Table~\ref{t:par2}). @@ -93,12 +93,12 @@ An additional term of the gain-scheduling can be activated to take into account \end{equation} A detailed description of this scheme is described by Tibaldi~et~al.~\cite{tibaldi_effects_2014}. -Figure~\ref{f:gainsch} shows the aerodynamic torque gradients obtained from HAWCStab2 for the DTU 10~MW RWT together with the fit of the quadratic expressions \eqref{e:gainsch} and \eqref{e:gainsch_omega}. The fitted parameters are shown as inputs number 21, 22, 51, and 52 in Table~\ref{t:par} of Section~\ref{s:par}. Often, a linear fit is sufficient and it is assumed when the user enters $K_2=0$ (note that $K_1$ then is the angle where the aerodynamic gain is doubled). The gain scheduling factor based on the filtered mean pitch angle $\eta_{A,k}$ is the inverse of the expression in the parenthesis of \eqref{e:gainsch}. A nonlinear gain factor $\eta_{nl,k}$ based on the generator speed error is also added for increased sensitivity of the pitch PID controller by large speed excursions. +Figure~\ref{f:gainsch} shows the aerodynamic torque gradients obtained from HAWCStab2 for the DTU 10~MW RWT together with the fit of the quadratic expressions \eqref{e:gainsch} and \eqref{e:gainsch_omega}. The fitted parameters are shown as inputs number 21, 22, 51, and 52 in Table~\ref{t:par} of Section~\ref{ss:par}. Often, a linear fit is sufficient and it is assumed when the user enters $K_2=0$ (note that $K_1$ then is the angle where the aerodynamic gain is doubled). The gain scheduling factor based on the filtered mean pitch angle $\eta_{A,k}$ is the inverse of the expression in the parenthesis of \eqref{e:gainsch}. A nonlinear gain factor $\eta_{nl,k}$ based on the generator speed error is also added for increased sensitivity of the pitch PID controller by large speed excursions. \begin{figure}[!t] \begin{center} -\parbox{0.45\columnwidth}{\mbox{\includegraphics[keepaspectratio=true,width=0.45\columnwidth]{AG}}\center{\textit{a) Aerodynamic gainl}}}\quad +\parbox{0.45\columnwidth}{\mbox{\includegraphics[keepaspectratio=true,width=0.45\columnwidth]{AG}}\center{\textit{a) Aerodynamic gain}}}\quad \parbox{0.5\columnwidth}{\mbox{\includegraphics[keepaspectratio=true,width=0.45\columnwidth]{AD}}\center{\textit{b) Aerodynamic damping}}} \caption{Aerodynamic gain and aerodynamic damping for the DTU 10~MW RWT. Queasi-steady values computed with HAWCStab2 and quadratic fitting.}\label{f:gainsch} \end{center} @@ -210,7 +210,7 @@ The DTU Wind Energy Controller DLLs, such as \verb|dtu_we_controller.dll|, are c \end{table} % \subsection{Initialization Parameters}\label{ss:par} -The initialization parameters for the basic features used by the controller are transferred to the DLL by calling \verb|init_regulation| subroutine using HAWC2 command \verb|dll_subroutine_init| together with HAWC2 command block \texttt{"begin init; ... end init;"} shown in Table~\ref{t:type2dll_1}. The details of 52 parameters needed by the basic features are given in Table~\ref{t:par}, where the notation of each parameters are the same as they were used in the diagram of Figure~\ref{f:diagram} and in the equations. Additional explanation of those parameters can also be seen in the table. Advanced control features can be enabled and initialized by calling the \verb|init_regulation_advanced| subroutine using the HAWC2 command \verb|dll_subroutine_init| and HAWC2 command block \texttt{"begin init; ... end init;"} to provide the initialization parameters. The \verb|init_regulation_advanced| subroutine requires in total 87 parameters, where the first 52 are identical to those in Table~\ref{t:par}. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive. Noticed that the drivetrain damper can be actived if the input parameters 10 and 38 are both non-zero values. A more detailed example of setting up the initialization parameters can be found in Table~\ref{t:type2dll_2}. +The initialization parameters of the controller for initializing the basic features of the controller are transferred to the DLL by calling \verb|init_regulation| subroutine using HAWC2 command \verb|dll_subroutine_init| together with HAWC2 command block \texttt{"begin init; ... end init;"} shown in Table~\ref{t:type2dll_1}. The details of 52 parameters needed by the basic features are given in Table~\ref{t:par}, where the notation of each parameters are the same as they were used in the diagram of Figure~\ref{f:diagram} and in the equations. Additional explanation of those parameters can also be seen in the table. Advanced control features can be enabled and initialized by calling the \verb|init_regulation_advanced| subroutine using the HAWC2 command \verb|dll_subroutine_init| and HAWC2 command block \texttt{"begin init; ... end init;"} to provide the initialization parameters. The \verb|init_regulation_advanced| subroutine requires in total 87 parameters, where the first 52 are identical to those in Table~\ref{t:par}. The additional parameters can be found in Table~\ref{t:par2}. If any of these parameters are set to zero they are not read and their default value will be used. If all parameters of a particular feature are zero then this feature is inactive. Noticed that the drivetrain damper can be actived if the input parameters 10 and 38 are both non-zero values. A more detailed example of setting up the initialization parameters can be found in Table~\ref{t:type2dll_2}. % \begin{table}[h] \center @@ -408,8 +408,44 @@ Input & Symbols & Additional explanation \\ \hline % \section{Input and output signals of the controller} \label{s:ctrlio} \subsection{Dynamic input signals to controller} \label{ss:ctrlin} -During simulations, the controller dll requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those input signals need to be specified Those inputs can be found and explained in Table \ref{t:dyn_in_par}. +During the simulation, the controller requires 16 input signals coming from aero-elastic simulation tool (eg. HAWC2). Those input signals need to be specified using HAWC2 command block \texttt{"begin output; ... end output;"} inside \verb|type2_dll| command block. Table~\ref{t:type2dll_3} shows an example of passing the input signal to HAWC2 for the DTU 10~MW RWT. +\begin{table}[h] + \center + \begin{verbatim} + begin type2_dll; + name dtu_we_controller; + filename ./control/dtu_we_controller.dll; + dll_subroutine_init init_regulation_advanced; + dll_subroutine_update update_regulation; + init_string ./control/additional_control_parameters.txt; + arraysizes_init 100 1; + arraysizes_update 100 100; + begin init; Setup initialization parameters + ... + end init; + begin output; Input signals to the controller + general time ; [s] + constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed + constraint bearing2 pitch1 1 only 1 ; + constraint bearing2 pitch2 1 only 1 ; + constraint bearing2 pitch3 1 only 1 ; + wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height + dll inpvec 2 2 ; Elec. power from generator servo dll + dll inpvec 2 8 ; Grid status from generator servo dll + mbdy state acc towertop 1 1.0 global only 1; Tower top x-acceleration + mbdy state acc towertop 1 1.0 global only 2; Tower top y-acceleration + general constant 0; IPC + general constant 0; IPC + general constant 0; IPC + mbdy state vel towertop 1 1.0 global only 2; Tower top y-velocity + end output; + end type2_dll; + \end{verbatim} + \caption{HAWC2 commands that define the inputs to the controller DLL. Noticed that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}.\label{t:type2dll_3}} +\end{table} + +Those controller input signals can be found and explained in Table \ref{t:dyn_in_par}. Note that if the rotor only has two blades, then the controller may still be used by repeating one blade pitch angle output (e.g. blade 1 pitch angle) to the controller.. \begin{table}[h!] \begin{center} \begin{tabular}{c|c|p{11.5cm}} @@ -434,37 +470,12 @@ During simulations, the controller dll requires 16 input signals coming from aer \hline 16 & m/s & Tower top y-velocity (fore-aft). This is needed by the tower-top velocity feedback loop used by off-shore turbine controller. Set to zero if tower top velocity feedback is not activated. \\ \end{tabular} - \caption{All the advanced parameters of the controller related to the exclusion zone, drivetrain damper, tower damper, derating, and additional filters. \label{t:dyn_in_par}} + \caption{All the input signals from the simulation tool (e.g. HAWC2) to the controller.\label{t:dyn_in_par}} \end{center} \end{table} -%the time [s], the generator LSS speed [rad/s], the pitch angles of three blades [rad], the three components of the wind speed at hub height [m/s] (the first and second of these three components must be the two horizontal components that are used internally to compute the horizontal vector sum), the electrical power [W], the status flag of the grid connection [0/1], and the two horizontal accelerations of the tower top. -Table~\ref{t:input} shows an example of the HAWC2 input commands inside the \texttt{"begin type2\_dll; ... end type2\_dll;"} block of the HAWC2 \verb|htc| input file, which provides these 16 controller inputs for the DTU 10~MW RWT. Note that if the rotor only has two blades, then the controller may still be used by repeating a blade pitch angle output to the controller. However, this trick is only valid if there is no additional cycle, or individual pitch controller appended to this controller. - -\begin{table}[t] - \center - \begin{verbatim} - begin output ; - general time ; [s] - constraint bearing1 shaft_rot 1 only 2 ; Drivetrain speed [rad/s] - constraint bearing2 pitch1 1 only 1 ; [rad] - constraint bearing2 pitch2 1 only 1 ; [rad] - constraint bearing2 pitch3 1 only 1 ; [rad] - wind free_wind 1 0.0 0.0 -119 ; Global coordinates at hub height - dll inpvec 2 2 ; Elec. power from generator servo .dll - dll inpvec 2 8 ; Grid state flag from generator servo .dll - mbdy state acc towertop 1 1.0 global only 1; Tower top x-acceleration [m/s^2] - mbdy state acc towertop 1 1.0 global only 2; Tower top y-acceleration [m/s^2] - general constant 0; IPC - general constant 0; IPC - general constant 0; IPC - mbdy state vel towertop 1 1.0 global only 2; Tower top y-velocity [m/s] - end output; - \end{verbatim} - \caption{HAWC2 commands that define the inputs to the controller DLL. Note that the command \texttt{wind free\_wind 1 x y z;} will give all three components of the free wind at a point x,y,z, in global coordinates \cite{Larsen12}. \label{t:input}} -\end{table} \subsection{Output signals from controller}\label{ss:ctrlout} -Table~\ref{t:output} contains a list of the controller outputs to the simulation, where the generator torque reference and pitch angle references for three blades are the main outputs of the controller. The remaining outputs can be used for checking the functionalities of the controller. It is always recommended to write out the status flag in channel 22. +Table~\ref{t:output} contains a list of the controller output signals, in which the generator torque reference and pitch angle references for three blades are the main signals of the controller that HAWC2 receives to close the simulation loop. The other outputs can be used for checking the functionalities of the controller and analyzing the simulation results. It is always recommended to write out the status flag in channel 22. \begin{table}[t] \center @@ -498,17 +509,39 @@ Table~\ref{t:output} contains a list of the controller outputs to the simulation 26& Flag for emergency pitch stop & [0=off/1=on]\\ % 26: Flag for emergency pitch stop [0=off/1=on] 27& LP filtered acceleration level & [m/s${}^2$]\\ % 27: LP filtered acceleration level [m/s^2] 28& Rotor speed exclusion zone region & [-]\\ % 28: Rotor speed exlusion zone region [-] - 29& Filtered tower top acc. for tower damper &[m/s${}^2$]\\ % 29: Filtered tower top acc. for tower damper [m/s^2] + 29& Filtered tower top acc. for tower damper & [m/s${}^2$]\\ % 29: Filtered tower top acc. for tower damper [m/s^2] 30& Reference pitch from tower damper & [rad]\\ % 30: Reference pitch from tower damper [rad] 31& Monitored average of reference pitch & [rad] \\ % 31: Monitored average of reference pitch [rad] - 32& Monitored ave. of actual pitch (blade 1) & [rad] % 32: Monitored ave. of actual pitch (blade 1) [rad] + 32& Monitored ave. of actual pitch (blade 1) & [rad]\\ % 32: Monitored ave. of actual pitch (blade 1) [rad] + 33& Estimated aerodynamic torque & [kNm]\\ % 33: Estimated aerodynamic torque [kNm] + 34& Generator constant $K_{opt}$ &[Nms$^2$/rad$^2$] \\ + 35& Tip-speed-ratio at minimum $C_t$ &[-] \\ + 36& Generator rated speed when derating &[rad/s] \\ + 37& Required pitch angle when tracking minimum $C_t$ &[rad] \\ + 38& Thrust coefficient at the derated operational point &[-] \\ + 39& Power coefficient at the derated operational point &[-] \\ + 40& Generator torque at the derated operational point &[w] \\ + \end{tabular} +\end{table} +\begin{table} + \center + \begin{tabular}{r|ll} + Channel & Description & Units\\ \hline + 41& 95\% of Generator speed in region 2.5 when derating &[rad/s] \\ + 42& Generator torque limit in region 2.5 when derating &[Nm] \\ + 43& Estimated Tip-speed ratio (lambda) &[-] \\ + 44& Estimated rotor-effecitve wind speed &[m/s] \\ + 45& switch factor for floating turbine &[-] \\ + 46& Filtered tower-top fore-aft velocity &[m/s] \\ + 47& Generator Torque from additional loop &[Nm] \\ + 48& Blade pitch angle from additional loop &[rad] \\ \end{tabular} - \caption{Outputs from the controller DLL, where only the first two are needed. The rest are for analysis of controller behaviour. \label{t:output}} + \caption{List of output signals from the controller DLL, where only the first two are needed by the simulation tool. The rest are for analysis of controller behaviour. \label{t:output}} \end{table} \clearpage -\section{Cut-in procedure - start up at any wind speed} +\section{Cut-in procedure: start up at any wind speed}\label{s:cutin} The blades are initially pitched out to maximum pitch and then at a given time in the simulation (input 24), the start-up procedure is started. First, the low-pass filtered wind speed and the measured rotational speed pitch reference are used to track approximately 6~deg angle of attack at the section of 75~\% blade radius. This pitch angle will therefore decrease as the rotor speeds up. The generator is still cut-out until the rotor speed is sufficient high, where both the torque and pitch controllers become active, unless the speed-up has taken less then the time delay defined in input 25; in such case there will be a soft cut-in of the generator torque. During the initial rotor speed-up, the speed error PID terms of both torque and pitch controllers are active and the set-point of it is the rated rotor speed. The controllers are therefore ready to take over when the speed is high enough. The controller should thereafter be operating normally, and this start-up will take less than 100~s for the DTU 10~MW RWT. @@ -519,17 +552,16 @@ There should be no need for wind ramping for the controller to start up; however The user may specify a time in the simulation for a normal shut-down in input 26, and which time the generator torque reference is linearly decreased to zero using a user-defined time constant (input 27). At the cut-out time plus the first user-defined time delay in input 29, the blades will start to pitch out by setting the reference pitch angle to the maximum pitch angle. The pitching is linear with two different constant speeds, first the pitch velocity specified in input 30, and then after the additional time specified in input 31 the pitch velocity is defined by input 32. -\section{System monitoring} +\section{System monitoring} \label{s:monitor} -Two different levels of system monitoring are implemented in the controller. The first level is inside the wind turbine controller and it deals with grid failure, generator overspeed, tower-top acceleration, and reverse generator speed. When one of these monitoring alarms is triggered the wind turbine will shut-down with a normal procedure. The thresholds for the overspeed and the tower-top acceleration can be set in inputs 39 and 46. When using the extra input parameters of \verb|init_regulation_advanced|, the user can also activate a monitoring of the pitch angles to detect a deviation from the reference signal. Input 75 contains two parameters: a time period of a running average and a threshold on the deviation angle; a normal shut-down is commenced if one of the differences between running averages of the actual and reference pitch angles exceeds the threshold. +Two different levels of system monitoring are implemented in the controller. The first level is inside the wind turbine controller and it deals with grid failure, generator overspeed, tower-top acceleration, and reverse generator speed. When one of these monitoring alarms is triggered the wind turbine will shut-down with a normal procedure. The thresholds for the overspeed and the tower-top acceleration can be set in inputs 39 and 46. When using the extra input parameters of \verb|init_regulation_advanced|, the user can also activate a monitoring of the pitch angles to detect a deviation from the reference signal. The inital input constant 75 contains two parameters: a time period of a running average and a threshold on the deviation angle that have been explained in Table~\ref{t:par2}. a normal shut-down is commenced if one of the differences between running averages of the actual and reference pitch angles exceeds the threshold. This is an experimental feature which need to be further tested. During the simulation if wind turbine shuts down and the controller output channel 22 equals 7 the user should deactivate the function of monitoring of the deviation of pitch signal by setting the initial input constant 75 to zero. The second level of monitoring is outside the wind turbine controller and it acts as a safety system overriding all the signals coming from the controller. This system monitors the overspeed and the tower-top acceleration, and if activated, it leads to an emergency stop. The threshold on the safety system overspeed monitor can be set in input 45, whereas the threshold on the tower-top acceleration by default is set to 1.1 times the first level threshold. If the user wants to set a different safety system threshold on the tower accelerations then it is done by input 73. \clearpage - \section{Operational status} \label{s:status} -The controller operation is divided into different statuses. Each status correspond to a specific conditions. The status of the controller can be seen from the output number 22. +The controller operation is divided into different statuses. Each status correspond to a specific conditions. The status of the controller can be seen from the output channel number 22. the different statuses are: \begin{itemize} \item -2: stand-still. @@ -546,11 +578,11 @@ the different statuses are: \section{Programming} -The controller is programmed in Fortran90 using the format of the \emph{type2 DLL interface for HAWC2} \cite{Larsen12}. The source code of the Basic DTU Wind Energy controller can be found in the GitHub repository: +The controller is programmed in Fortran90 using the format of the \verb|type2_dll| interface for HAWC2 \cite{Larsen12}. The source code of the DTU Wind Energy controller can be found in the GitLab repository: \begin{verbatim} -https://github.com/DTUWindEnergy/BasicDTUController +https://gitlab.windenergy.dtu.dk/OpenLAC/BasicDTUController \end{verbatim} -The Basic DTU Wind Energy controller is distributed under the GNU General Public License v3.0. See more here: +The DTU Wind Energy controller is distributed under the GNU General Public License v3.0. See more here: \begin{verbatim} http://en.wikipedia.org/wiki/GNU_General_Public_License \end{verbatim} diff --git a/frontpage.tex b/frontpage.tex index 7d019a1..e3d5922 100644 --- a/frontpage.tex +++ b/frontpage.tex @@ -5,8 +5,8 @@ % \begin{minipage}[t][22cm][t]{9cm} \raggedright - \textbf{Author(s):} Mahmood Mirzaei, Morten Hartvig Hansen, Carlo Tibaldi, Lars Christian Henriksen, Tomas Hanis\\ - \textbf{Title:} Basic DTU Wind Energy controller - ver. 02\\ + \textbf{Author(s):} Fanzhong Meng, Mahmood Mirzaei, Morten Hartvig Hansen, Carlo Tibaldi, Lars Christian Henriksen and Tomas Hanis\\ + \textbf{Title:} DTU Wind Energy Controller - ver. 00\\ \textbf{Institute:} Department of Wind Energy \\[2em] \textbf{Summary:} \\ This report contains a description and documentation of the basic DTU Wind Energy controller applicable for pitch-regulated, variable speed wind turbines. The controller features both partial and full load operation capabilities as well as switching mechanisms ensuring smooth transition between the two modes of operation. The partial and full load controllers are both based on classical proportional-integral control theory as well as on additional features such as drivetrain and tower dampers, a rotor speed exclusion zone, and different curtailment features. The controller relies on generator speed as the primary feedback sensor. Additionally, the actual generator power is used as a feedback term to smoothen the switching between partial and full load operation. Optionally, a low-pass filtered wind speed measurement can be used for wind speed dependent minimum blade pitch in partial load operation. The controller uses the collective blade pitch angle and electromagnetic generator torque to control the wind turbine. In full load operation a feedback term from the collective blade pitch angle is used to schedule the gains of the proportional-integral controller to counter the effects of changing dynamics of the wind turbine for different wind speeds. Modelling of the blade pitch actuators and the converter-generator system are not included in the controller and must be modelled separately, if they are to be included in the simulations. @@ -34,7 +34,7 @@ This report contains a description and documentation of the basic DTU Wind Energ Frederiksborgvej 399 \\ 4000 Roskilde \\ Denmark \\ - Telephone +45 4677 5085 +% Telephone +45 4677 5085 \end{minipage} % \end{tabular} diff --git a/ref.bib b/ref.bib index a56cd13..587de95 100644 --- a/ref.bib +++ b/ref.bib @@ -40,7 +40,6 @@ publisher = {American Institute of Aeronautics and Astronautics}, author = {Tibaldi, Carlo and Henriksen, Lars Christian and Hansen, Morten H. and Bak, Christian}, year = {2014}, - file = {AIAA Full Text PDF:C\:\\Users\\tlbl\\AppData\\Roaming\\Zotero\\Zotero\\Profiles\\ag0fi3fp.default\\zotero\\storage\\4I75Z23V\\Tibaldi et al. - Effects of gain-scheduling methods in a classical .pdf:application/pdf;AIAA Snapshot:C\:\\Users\\tlbl\\AppData\\Roaming\\Zotero\\Zotero\\Profiles\\ag0fi3fp.default\\zotero\\storage\\M6PP3K7P\\6.html:text/html} } @TECHREPORT{Hansen13, @@ -55,6 +54,17 @@ timestamp = {2013.01.13} } +@article{Meng_2019_J, + year = 2019, + month = {Oct}, + publisher = {{IOP} Publishing}, + volume = {}, + pages = {}, + author = {Fanzhong Meng and Alan Wai Hou Lio and Jaime Liew}, + title = {The effect of minimum thrust coefficient control strategy on power output and loads of a wind farm}, + journal = {Journal of Physics: Conference Series}, +}; + @article{Meng_2020, year = 2020, month = {sep}, -- GitLab From cf4550648c223510165e617c5f97423d7115ff19 Mon Sep 17 00:00:00 2001 From: Fanzhong Meng <famen@dtu.dk> Date: Wed, 5 May 2021 19:32:18 +0200 Subject: [PATCH 12/14] update manual frontpage.tex --- frontpage.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontpage.tex b/frontpage.tex index e3d5922..f1860c3 100644 --- a/frontpage.tex +++ b/frontpage.tex @@ -5,7 +5,7 @@ % \begin{minipage}[t][22cm][t]{9cm} \raggedright - \textbf{Author(s):} Fanzhong Meng, Mahmood Mirzaei, Morten Hartvig Hansen, Carlo Tibaldi, Lars Christian Henriksen and Tomas Hanis\\ + \textbf{Author(s):} Fanzhong Meng, Alan Wai Hou Lio, Mahmood Mirzaei, Morten Hartvig Hansen, Carlo Tibaldi, Lars Christian Henriksen and Tomas Hanis\\ \textbf{Title:} DTU Wind Energy Controller - ver. 00\\ \textbf{Institute:} Department of Wind Energy \\[2em] \textbf{Summary:} \\ -- GitLab From 66352804aa4c9072dc8a93543cb50397c8eebd9f Mon Sep 17 00:00:00 2001 From: Alan Wai Hou Lio <wali@dtu.dk> Date: Thu, 2 Sep 2021 16:01:20 +0200 Subject: [PATCH 13/14] corrected 1st order low pass filter section and added high pass filter --- appendix.tex | 265 ++--- figure/f_hp_1st.eps | 2254 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2399 insertions(+), 120 deletions(-) create mode 100644 figure/f_hp_1st.eps diff --git a/appendix.tex b/appendix.tex index 3fe30a2..f5e5f8c 100644 --- a/appendix.tex +++ b/appendix.tex @@ -1,120 +1,145 @@ -\appendix - -\chapter{Discrete filters} \label{ch:filters} - -This appendix contains the derivations of the discrete filters and a test of their validity. Some of the parameters of the filters are hardcoded in the current implementation as shown in the previous appendix. The values of these hardcoded parameters are repeated herein. - -\section{First order filter} - -In continuous form the first order low-pass filter can be written as -\begin{equation}\label{e:f1cont} -\dot{\bar x} + \tau \bar x = \tau x -\end{equation} -where $x=x(t)$ is the original signal, $\bar x(t)$ is the filtered signal, $\tau$ is the user-defined time constant of the filter, and $\dot{(\,)}=d/dt$ denotes the time derivative. The discrete first order low-pass filter used in the controller is derived from this continuous formulation by approximating the states and their time derivatives as an average based on the previous and current step: -\begin{equation}\label{e:1storder} -x(t)\approx \frac{x_k+x_{k-1}}2 \;\;\;\;\mbox{and} \;\;\;\;\dot x(t)\approx \frac{x_k-x_{k-1}}{\Delta t} -\end{equation} -where $k$ is the index of the current time step, and $\Delta t$ is the time step length. Substitution into \eqref{e:f1cont} and rearranging the terms, the $f_1$-function is obtained as -\begin{equation} -\label{e:f1} -f_1 \left(\tau; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} -\end{equation} -where -\begin{equation} -\label{e:f1coef} -a_1=\frac {2\tau-\Delta t}{2\tau+\Delta t} , \;\;\;\; b_0 = \frac {\Delta t}{2\tau+\Delta t}, \;\;\;\; b_1 = b_0 -\end{equation} - -To test this discrete filter, the Finite-Difference Method for constructing periodic solutions \cite{Nayfeh95} has been used to obtain the period solutions to harmonic excitation of the filter with a large number of different excitation frequencies. Figure~\ref{f:f1} shows the amplitude and phase of these solutions (red circles) compared to the transfer function obtained by transformation of the continuous formulation \eqref{e:f1cont} into the frequency domain. - -\begin{figure}[t] -\centerline{\epsfig{figure=f1.eps,width=0.95\textwidth} } -\caption{Test of the first order low-pass filter function \eqref{e:f1} with a time constant of $\tau=1$~s and a time step of $\Delta t = 0.125$~s. \label{f:f1}} -\end{figure} - - -\section{Second order filters} - -The discrete second filters used in the controller are derived from the continuous formulations by approximating the states and their time derivatives as an average based on the two previous and current step: -\begin{align}\label{e:2ndorder} -x(t) \approx \frac{x_k+x_{k-1}+x_{k-2}}3, \;\;\;\;\dot x(t)\approx \frac{x_k-x_{k-2}}{2\Delta t} \;\;\;\;\mbox{and} \;\;\;\;\ddot x(t)\approx \frac{x_k-2 x_{k-1}+ x_{k-2}}{\Delta t^2} -\end{align} -The continuous form of the second order low-pass filter is -\begin{equation} -\label{e:f2cont} -\ddot{\bar x} + 2 \zeta \omega \dot{\bar x} + \omega^2\bar x = \omega^2 x -\end{equation} -where again $x=x(t)$ and $\bar x(t)$ are the original and filtered signals, respectively. The parameters $\zeta$ and $\omega$ are the user-defined damping ratio and frequency of the filter. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order low-pass filter function: -\begin{equation} -\label{e:f2} -f_2 \left(\zeta, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} -\end{equation} -where -\begin{gather}\nonumber -a_1=\frac {6-\omega^2 \Delta t^2}{d}, -\;\;\;\; -a_2=\frac {-3+3\,\zeta\,\omega\,\Delta t-\omega^2\Delta t^2}{d}, \\ -\label{e:f2coef} -b_0= \frac {\omega^2\Delta t^2}{d}, \;\;\;\; b_1 = b_0\;\;\;\; b_2 = b_0 -\end{gather} -where the common denominator is $d=3+3 \zeta \omega \Delta t+\omega^2 \Delta t^2$. - -The continuous form of the second order notch filter is -\begin{equation} -\label{e:fncont} -\ddot{\bar x} + 2 \zeta_1 \omega \dot{\bar x} + \omega^2\bar x = \ddot{x} + 2 \zeta_2 \omega \dot{x} + \omega^2 x -\end{equation} -where $\zeta_1=0.1$, $\zeta_2=0.001$ and $\omega$ are the hardcoded damping ratios and the user-defined frequency of the notch filter, respectively. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order notch filter function: -\begin{equation} -\label{e:fn} -f_n \left(\zeta_{1}, \zeta_{2}, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} -\end{equation} -where -\begin{gather}\nonumber -a_1=-{\frac {-6+{\omega}^{2}{\Delta t}^{2}}{d}}, -\;\;\;\; -a_2=-{\frac {3-3\,\zeta_{1}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \\ -\label{e:fncoef} -b_0 = {\frac {3+3\,\zeta_{2}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \;\;\;\; -b_1 = -a_1,\;\;\;\; -b_2 = {\frac {3-3\,\zeta_{2}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}} -\end{gather} -where the common denominator is $d=3+3\,\zeta_{1}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}$. - -The continuous form of the second order band-pass filter used in the controller is -\begin{equation} -\label{e:fpcont} -\ddot{\bar x} + 2 \zeta \omega \dot{\bar x} + \omega^2\bar x = 2 \zeta \omega \left(\dot{x} + \tau \ddot{x}\right) -\end{equation} -where $\zeta=0.02$ and $\omega$ are the hardcoded damping ratio and the user-defined frequency of the band-pass filter, respectively. The additional parameter $\tau$ is a time constant which in the current implementation is hardcoded to zero. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order band-pass filter function: -\begin{equation} -\label{e:fp} -f_p \left(\zeta, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} -\end{equation} -where -\begin{gather}\nonumber -a_1 =-{\frac {-6+{\omega}^{2}{\Delta t}^{2}}{d}},\;\;\;\; -a_2 =-{\frac {3-3\,\zeta\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \\ -\label{e:fpcoef} -b_0 =3\,{\frac {\zeta\,\omega\, \left( \Delta t+2\,\tau \right) }{d}},\;\;\;\; -b_1 =-12\,{\frac {\zeta\,\omega\,\tau}{d}},\;\;\;\; -b_2 =-3\,{\frac {\zeta\,\omega\, \left( \Delta t-2\,\tau \right) }{d}} -\end{gather} -where the common denominator is $d=3+3 \zeta \omega \Delta t+\omega^2 \Delta t^2$. Notice that the hardcoded parameter $\tau$ is not included in the list of parameters in the function call. - -Test and validation of these second order filters are shown in Figures~\ref{f:f2}~--~\ref{f:fp}. - -\begin{figure}[b!] -\centerline{\epsfig{figure=f2.eps,width=0.95\textwidth} } -\caption{Test of the second order low-pass filter function \eqref{e:f2} with a damping ratio of $\zeta=0.7$, a frequency of $\omega=0.15$~Hz and a time step of $\Delta t = 0.125$~s. \label{f:f2}} -\end{figure} - -\begin{figure}[t] -\centerline{\epsfig{figure=fn.eps,width=0.95\textwidth} } -\caption{Test of the second order notch filter function \eqref{e:fn} with a frequency of $\omega=0.625$~Hz and a time step of $\Delta t = 0.04$~s. \label{f:fn}} -\end{figure} - -\begin{figure}[t] -\centerline{\epsfig{figure=fp.eps,width=0.95\textwidth} } -\caption{Test of the second order band-pass filter function \eqref{e:fp} with a frequency of $\omega=0.625$~Hz and a time step of $\Delta t = 0.04$~s. \label{f:fp}} -\end{figure} +\appendix + +\chapter{Discrete filters} \label{ch:filters} + +This appendix contains the derivations of the discrete filters and a test of their validity. Some of the parameters of the filters are hardcoded in the current implementation as shown in the previous appendix. The values of these hardcoded parameters are repeated herein. + +\section{First order filter} +\subsection{Low pass filter} +In continuous form the first order low-pass filter can be written as +\begin{equation}\label{e:f1cont} +\dot{\bar x} + \omega \bar x = \omega x +\end{equation} +where $x=x(t)$ is the original signal, $\bar x(t)$ is the filtered signal, $\omega$ is the user-defined cut-off frequency of the filter in radian per second, and $\dot{(\,)}=d/dt$ denotes the time derivative. The discrete first order low-pass filter used in the controller is derived from this continuous formulation by approximating the states and their time derivatives as an average based on the previous and current step: +\begin{equation}\label{e:1storder} +x(t)\approx \frac{x_k+x_{k-1}}2 \;\;\;\;\mbox{and} \;\;\;\;\dot x(t)\approx \frac{x_k-x_{k-1}}{\Delta t} +\end{equation} +where $k$ is the index of the current time step, and $\Delta t$ is the time step length. Substitution into \eqref{e:f1cont} and rearranging the terms, the $f_1$-function is obtained as +\begin{equation} +\label{e:f1} +f_1 \left(\omega; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} +\end{equation} +where +\begin{equation} +\label{e:f1coef} +a_1=\frac {2\omega-\Delta t}{2\omega+\Delta t} , \;\;\;\; b_0 = \frac {\Delta t}{2\omega+\Delta t}, \;\;\;\; b_1 = b_0 +\end{equation} + +To test this discrete filter, the Finite-Difference Method for constructing periodic solutions \cite{Nayfeh95} has been used to obtain the period solutions to harmonic excitation of the filter with a large number of different excitation frequencies. Figure~\ref{f:f1} shows the amplitude and phase of these solutions (red circles) compared to the transfer function obtained by transformation of the continuous formulation \eqref{e:f1cont} into the frequency domain. + +\begin{figure}[t] +\centerline{\epsfig{figure=f1.eps,width=0.95\textwidth} } +\caption{Test of the first order low-pass filter function \eqref{e:f1} with a cut-off frequency of $\omega=1~\mathrm{rad/s} \approx 0.159~\mathrm{Hz}$ and a time step of $\Delta t = 0.125$~s. \label{f:f1}} +\end{figure} + +\subsection{First order high pass filter} + +The continuous-time representation of the first order high pass filter can be written as follows: +\begin{align}\label{eq:highpass} + \dot{\bar{x}} + \omega \bar{x} = \dot{x}, +\end{align} +where $x = x(t)$ and $\bar{x}$ are the original and filtered signals, respectively. The user-defined cut-off frequency of the filter in radian per second is denoted as $\omega$ and $\dot{(\, )} = d/dt$ denotes the time derivative. Substituting the approximation of the states and their time derivatives~\eqref{e:1storder} into~\eqref{eq:highpass}, the discrete-time form of the first order high pass filter can be written as follows: +\begin{align}\label{eq:f_1,hp} + f_{1,hp} \left(\omega; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} +\end{align} +where +\begin{align} + a_1 = \frac{2-\omega\Delta t}{2+\omega\Delta t}, \quad b_0 = \frac{2}{2 +\omega \Delta t}, \quad b_1 = -b_0 +\end{align} + +Test and validation of the filter are shown in Figure~\ref{f:f_hp_1st}. + +\begin{figure}[t] +\centerline{\epsfig{figure=f_hp_1st.eps,width=0.95\textwidth} } +\caption{Test of the first order high-pass filter function \eqref{eq:f_1,hp} with a cut-off frequency of $\omega=1~\mathrm{rad/s} \approx 0.159~\mathrm{Hz}$ and a time step of $\Delta t = 0.125$~s. \label{f:f_hp_1st}} +\end{figure} + +\section{Second order filters} + +The discrete second filters used in the controller are derived from the continuous formulations by approximating the states and their time derivatives as an average based on the two previous and current step: +\begin{align}\label{e:2ndorder} +x(t) \approx \frac{x_k+x_{k-1}+x_{k-2}}3, \;\;\;\;\dot x(t)\approx \frac{x_k-x_{k-2}}{2\Delta t} \;\;\;\;\mbox{and} \;\;\;\;\ddot x(t)\approx \frac{x_k-2 x_{k-1}+ x_{k-2}}{\Delta t^2} +\end{align} + +\subsection{Second order low pass filter} +The continuous form of the second order low-pass filter is +\begin{equation} +\label{e:f2cont} +\ddot{\bar x} + 2 \zeta \omega \dot{\bar x} + \omega^2\bar x = \omega^2 x +\end{equation} +where again $x=x(t)$ and $\bar x(t)$ are the original and filtered signals, respectively. The parameters $\zeta$ and $\omega$ are the user-defined damping ratio and frequency of the filter. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order low-pass filter function: +\begin{equation} +\label{e:f2} +f_2 \left(\zeta, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} +\end{equation} +where +\begin{gather}\nonumber +a_1=\frac {6-\omega^2 \Delta t^2}{d}, +\;\;\;\; +a_2=\frac {-3+3\,\zeta\,\omega\,\Delta t-\omega^2\Delta t^2}{d}, \\ +\label{e:f2coef} +b_0= \frac {\omega^2\Delta t^2}{d}, \;\;\;\; b_1 = b_0\;\;\;\; b_2 = b_0 +\end{gather} +where the common denominator is $d=3+3 \zeta \omega \Delta t+\omega^2 \Delta t^2$. + +\subsection{Second order notch filter} +The continuous form of the second order notch filter is +\begin{equation} +\label{e:fncont} +\ddot{\bar x} + 2 \zeta_1 \omega \dot{\bar x} + \omega^2\bar x = \ddot{x} + 2 \zeta_2 \omega \dot{x} + \omega^2 x +\end{equation} +where $\zeta_1=0.1$, $\zeta_2=0.001$ and $\omega$ are the hardcoded damping ratios and the user-defined frequency of the notch filter, respectively. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order notch filter function: +\begin{equation} +\label{e:fn} +f_n \left(\zeta_{1}, \zeta_{2}, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} +\end{equation} +where +\begin{gather}\nonumber +a_1=-{\frac {-6+{\omega}^{2}{\Delta t}^{2}}{d}}, +\;\;\;\; +a_2=-{\frac {3-3\,\zeta_{1}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \\ +\label{e:fncoef} +b_0 = {\frac {3+3\,\zeta_{2}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \;\;\;\; +b_1 = -a_1,\;\;\;\; +b_2 = {\frac {3-3\,\zeta_{2}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}} +\end{gather} +where the common denominator is $d=3+3\,\zeta_{1}\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}$. + +\subsection{Second order band-pass filter} +The continuous form of the second order band-pass filter used in the controller is +\begin{equation} +\label{e:fpcont} +\ddot{\bar x} + 2 \zeta \omega \dot{\bar x} + \omega^2\bar x = 2 \zeta \omega \left(\dot{x} + \tau \ddot{x}\right) +\end{equation} +where $\zeta=0.02$ and $\omega$ are the hardcoded damping ratio and the user-defined frequency of the band-pass filter, respectively. The additional parameter $\tau$ is a time constant which in the current implementation is hardcoded to zero. Substitution of \eqref{e:2ndorder} into this equations yields the discrete second order band-pass filter function: +\begin{equation} +\label{e:fp} +f_p \left(\zeta, \omega; \bar x_{k-1} , \bar x_{k-2} , x_{k} , x_{k-1} , x_{k-2} \right) = a_1 \bar x_{k-1} + a_2 \bar x_{k-2} + b_0 x_k + b_1 x_{k-1}+ b_2 x_{k-2} +\end{equation} +where +\begin{gather}\nonumber +a_1 =-{\frac {-6+{\omega}^{2}{\Delta t}^{2}}{d}},\;\;\;\; +a_2 =-{\frac {3-3\,\zeta\,\omega\,\Delta t+{\omega}^{2}{\Delta t}^{2}}{d}}, \\ +\label{e:fpcoef} +b_0 =3\,{\frac {\zeta\,\omega\, \left( \Delta t+2\,\tau \right) }{d}},\;\;\;\; +b_1 =-12\,{\frac {\zeta\,\omega\,\tau}{d}},\;\;\;\; +b_2 =-3\,{\frac {\zeta\,\omega\, \left( \Delta t-2\,\tau \right) }{d}} +\end{gather} +where the common denominator is $d=3+3 \zeta \omega \Delta t+\omega^2 \Delta t^2$. Notice that the hardcoded parameter $\tau$ is not included in the list of parameters in the function call. + +Test and validation of these second order filters are shown in Figures~\ref{f:f2}~--~\ref{f:fp}. + +\begin{figure}[b!] +\centerline{\epsfig{figure=f2.eps,width=0.95\textwidth} } +\caption{Test of the second order low-pass filter function \eqref{e:f2} with a damping ratio of $\zeta=0.7$, a frequency of $\omega=0.15$~Hz and a time step of $\Delta t = 0.125$~s. \label{f:f2}} +\end{figure} + +\begin{figure}[t] +\centerline{\epsfig{figure=fn.eps,width=0.95\textwidth} } +\caption{Test of the second order notch filter function \eqref{e:fn} with a frequency of $\omega=0.625$~Hz and a time step of $\Delta t = 0.04$~s. \label{f:fn}} +\end{figure} + +\begin{figure}[t] +\centerline{\epsfig{figure=fp.eps,width=0.95\textwidth} } +\caption{Test of the second order band-pass filter function \eqref{e:fp} with a frequency of $\omega=0.625$~Hz and a time step of $\Delta t = 0.04$~s. \label{f:fp}} +\end{figure} diff --git a/figure/f_hp_1st.eps b/figure/f_hp_1st.eps new file mode 100644 index 0000000..9e8d5ac --- /dev/null +++ b/figure/f_hp_1st.eps @@ -0,0 +1,2254 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (MATLAB, The Mathworks, Inc. Version 9.7.0.1216025 \(R2019b\) Update 1. Operating System: Windows 10) +%%Title: ./f_hp_1st.eps +%%CreationDate: 2021-09-01T22:47:08 +%%Pages: (atend) +%%BoundingBox: 29 0 389 186 +%%LanguageLevel: 3 +%%EndComments +%%BeginProlog +%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 +%%Version: 1.2 0 +%%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) +/bd{bind def}bind def +/ld{load def}bd +/GR/grestore ld +/GS/gsave ld +/RM/rmoveto ld +/C/curveto ld +/t/show ld +/L/lineto ld +/ML/setmiterlimit ld +/CT/concat ld +/f/fill ld +/N/newpath ld +/S/stroke ld +/CC/setcmykcolor ld +/A/ashow ld +/cp/closepath ld +/RC/setrgbcolor ld +/LJ/setlinejoin ld +/GC/setgray ld +/LW/setlinewidth ld +/M/moveto ld +/re {4 2 roll M +1 index 0 rlineto +0 exch rlineto +neg 0 rlineto +cp } bd +/_ctm matrix def +/_tm matrix def +/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd +/ET { _ctm setmatrix } bd +/iTm { _ctm setmatrix _tm concat } bd +/Tm { _tm astore pop iTm 0 0 moveto } bd +/ux 0.0 def +/uy 0.0 def +/F { + /Tp exch def + /Tf exch def + Tf findfont Tp scalefont setfont + /cf Tf def /cs Tp def +} bd +/ULS {currentpoint /uy exch def /ux exch def} bd +/ULE { + /Tcx currentpoint pop def + gsave + newpath + cf findfont cs scalefont dup + /FontMatrix get 0 get /Ts exch def /FontInfo get dup + /UnderlinePosition get Ts mul /To exch def + /UnderlineThickness get Ts mul /Tt exch def + ux uy To add moveto Tcx uy To add lineto + Tt setlinewidth stroke + grestore +} bd +/OLE { + /Tcx currentpoint pop def + gsave + newpath + cf findfont cs scalefont dup + /FontMatrix get 0 get /Ts exch def /FontInfo get dup + /UnderlinePosition get Ts mul /To exch def + /UnderlineThickness get Ts mul /Tt exch def + ux uy To add cs add moveto Tcx uy To add cs add lineto + Tt setlinewidth stroke + grestore +} bd +/SOE { + /Tcx currentpoint pop def + gsave + newpath + cf findfont cs scalefont dup + /FontMatrix get 0 get /Ts exch def /FontInfo get dup + /UnderlinePosition get Ts mul /To exch def + /UnderlineThickness get Ts mul /Tt exch def + ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto + Tt setlinewidth stroke + grestore +} bd +/QT { +/Y22 exch store +/X22 exch store +/Y21 exch store +/X21 exch store +currentpoint +/Y21 load 2 mul add 3 div exch +/X21 load 2 mul add 3 div exch +/X21 load 2 mul /X22 load add 3 div +/Y21 load 2 mul /Y22 load add 3 div +/X22 load /Y22 load curveto +} bd +/SSPD { +dup length /d exch dict def +{ +/v exch def +/k exch def +currentpagedevice k known { +/cpdv currentpagedevice k get def +v cpdv ne { +/upd false def +/nullv v type /nulltype eq def +/nullcpdv cpdv type /nulltype eq def +nullv nullcpdv or +{ +/upd true def +} { +/sametype v type cpdv type eq def +sametype { +v type /arraytype eq { +/vlen v length def +/cpdvlen cpdv length def +vlen cpdvlen eq { +0 1 vlen 1 sub { +/i exch def +/obj v i get def +/cpdobj cpdv i get def +obj cpdobj ne { +/upd true def +exit +} if +} for +} { +/upd true def +} ifelse +} { +v type /dicttype eq { +v { +/dv exch def +/dk exch def +/cpddv cpdv dk get def +dv cpddv ne { +/upd true def +exit +} if +} forall +} { +/upd true def +} ifelse +} ifelse +} if +} ifelse +upd true eq { +d k v put +} if +} if +} if +} forall +d length 0 gt { +d setpagedevice +} if +} bd +/RE { % /NewFontName [NewEncodingArray] /FontName RE - + findfont dup length dict begin + { + 1 index /FID ne + {def} {pop pop} ifelse + } forall + /Encoding exch def + /FontName 1 index def + currentdict definefont pop + end +} bind def +%%EndResource +%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 +%%Version: 1.0 0 +%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) +/BeginEPSF { %def +/b4_Inc_state save def % Save state for cleanup +/dict_count countdictstack def % Count objects on dict stack +/op_count count 1 sub def % Count objects on operand stack +userdict begin % Push userdict on dict stack +/showpage { } def % Redefine showpage, { } = null proc +0 setgray 0 setlinecap % Prepare graphics state +1 setlinewidth 0 setlinejoin +10 setmiterlimit [ ] 0 setdash newpath +/languagelevel where % If level not equal to 1 then +{pop languagelevel % set strokeadjust and +1 ne % overprint to their defaults. +{false setstrokeadjust false setoverprint +} if +} if +} bd +/EndEPSF { %def +count op_count sub {pop} repeat % Clean up stacks +countdictstack dict_count sub {end} repeat +b4_Inc_state restore +} bd +%%EndResource +%FOPBeginFontDict +%%IncludeResource: font Courier-Oblique +%%IncludeResource: font Courier-BoldOblique +%%IncludeResource: font Courier-Bold +%%IncludeResource: font ZapfDingbats +%%IncludeResource: font Symbol +%%IncludeResource: font Helvetica +%%IncludeResource: font Helvetica-Oblique +%%IncludeResource: font Helvetica-Bold +%%IncludeResource: font Helvetica-BoldOblique +%%IncludeResource: font Times-Roman +%%IncludeResource: font Times-Italic +%%IncludeResource: font Times-Bold +%%IncludeResource: font Times-BoldItalic +%%IncludeResource: font Courier +%FOPEndFontDict +%%BeginResource: encoding WinAnsiEncoding +/WinAnsiEncoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl +/numbersign /dollar /percent /ampersand /quotesingle +/parenleft /parenright /asterisk /plus /comma +/hyphen /period /slash /zero /one +/two /three /four /five /six +/seven /eight /nine /colon /semicolon +/less /equal /greater /question /at +/A /B /C /D /E +/F /G /H /I /J +/K /L /M /N /O +/P /Q /R /S /T +/U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum +/underscore /quoteleft /a /b /c +/d /e /f /g /h +/i /j /k /l /m +/n /o /p /q /r +/s /t /u /v /w +/x /y /z /braceleft /bar +/braceright /asciitilde /bullet /Euro /bullet +/quotesinglbase /florin /quotedblbase /ellipsis /dagger +/daggerdbl /circumflex /perthousand /Scaron /guilsinglleft +/OE /bullet /Zcaron /bullet /bullet +/quoteleft /quoteright /quotedblleft /quotedblright /bullet +/endash /emdash /asciitilde /trademark /scaron +/guilsinglright /oe /bullet /zcaron /Ydieresis +/space /exclamdown /cent /sterling /currency +/yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /sfthyphen /registered +/macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /middot /cedilla +/onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex +/Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave +/Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis +/multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave +/aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex +/edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex +/otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn +/ydieresis +] def +%%EndResource +%FOPBeginFontReencode +/Courier-Oblique findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Courier-Oblique exch definefont pop +/Courier-BoldOblique findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Courier-BoldOblique exch definefont pop +/Courier-Bold findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Courier-Bold exch definefont pop +/Helvetica findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Helvetica exch definefont pop +/Helvetica-Oblique findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Helvetica-Oblique exch definefont pop +/Helvetica-Bold findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Helvetica-Bold exch definefont pop +/Helvetica-BoldOblique findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Helvetica-BoldOblique exch definefont pop +/Times-Roman findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Times-Roman exch definefont pop +/Times-Italic findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Times-Italic exch definefont pop +/Times-Bold findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Times-Bold exch definefont pop +/Times-BoldItalic findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Times-BoldItalic exch definefont pop +/Courier findfont +dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding WinAnsiEncoding def + currentdict +end +/Courier exch definefont pop +%FOPEndFontReencode +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 425 198 +%%BeginPageSetup +[1 0 0 -1 0 198] CT +%%EndPageSetup +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +N +0 0 M +708 0 L +708 331 L +0 331 L +0 0 L +cp +clip +1 GC +N +0 0 708 331 re +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +1 GC +N +0 0 708 331 re +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +1 GC +N +92 137 M +642 137 L +642 25 L +92 25 L +cp +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 137 M +642 137 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 25 M +642 25 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 137 M +92 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +202 137 M +202 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +312 137 M +312 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +422 137 M +422 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +532 137 M +532 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 137 M +642 131.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 25 M +92 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +202 25 M +202 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +312 25 M +312 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +422 25 M +422 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +532 25 M +532 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 25 M +642 30.5 L +S +GR +GS +[0.60056 0 0 0.59947 55.25157 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-4 14 moveto +1 -1 scale +(0) t +GR +GR +GS +[0.60056 0 0 0.59947 121.31322 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.2) t +GR +GR +GS +[0.60056 0 0 0.59947 187.37488 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.4) t +GR +GR +GS +[0.60056 0 0 0.59947 253.43653 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.6) t +GR +GR +GS +[0.60056 0 0 0.59947 319.49819 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.8) t +GR +GR +GS +[0.60056 0 0 0.59947 385.55984 83.30104] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-4 14 moveto +1 -1 scale +(1) t +GR +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 137 M +92 25 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 137 M +642 25 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 137 M +97.5 137 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 125.8 M +97.5 125.8 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 114.6 M +97.5 114.6 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 103.4 M +97.5 103.4 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 92.2 M +97.5 92.2 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 81 M +97.5 81 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 69.8 M +97.5 69.8 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 58.6 M +97.5 58.6 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 47.4 M +97.5 47.4 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 36.2 M +97.5 36.2 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 25 M +97.5 25 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 137 M +636.5 137 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 125.8 M +636.5 125.8 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 114.6 M +636.5 114.6 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 103.4 M +636.5 103.4 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 92.2 M +636.5 92.2 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 81 M +636.5 81 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 69.8 M +636.5 69.8 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 58.6 M +636.5 58.6 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 47.4 M +636.5 47.4 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 36.2 M +636.5 36.2 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 25 M +636.5 25 L +S +GR +GS +[0.60056 0 0 0.59947 53.65007 81.70245] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-8 5.5 moveto +1 -1 scale +(0) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 74.98837] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.1) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 68.27428] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.2) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 61.56019] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.3) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 54.84611] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.4) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 48.13202] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.5) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 41.41793] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.6) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 34.70385] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.7) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 27.98977] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.8) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 21.27568] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.9) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 14.5616] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-8 5.5 moveto +1 -1 scale +(1) t +GR +GR +GS +[0 -0.59947 0.60056 0 41.23849 48.13199] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-39 -3 moveto +1 -1 scale +(Magnitude [-]) t +GR +GR +GS +[0.60056 0 0 0.59947 58.55465 77.49215] CT +1 0 0 RC +N +0 -4.583 M +2.531 -4.583 4.583 -2.531 4.583 0 C +4.583 0 L +4.583 2.531 2.531 4.583 0 4.583 C +-2.531 4.583 -4.583 2.531 -4.583 0 C +-4.583 -2.531 -2.531 -4.583 0 -4.583 C +cp +0 -5.417 M +-2.992 -5.417 -5.417 -2.992 -5.417 0 C +-5.417 2.992 -2.992 5.417 0 5.417 C +2.992 5.417 5.417 2.992 5.417 0 C +5.417 0 L +5.417 -2.992 2.992 -5.417 0 -5.417 C +cp +f +GR +GS +[0.60056 0 0 0.59947 58.95788 76.98057] CT +1 0 0 RC +N +/f1395082454{0 -4.583 M +2.531 -4.583 4.583 -2.531 4.583 0 C +4.583 0 L +4.583 2.531 2.531 4.583 0 4.583 C +-2.531 4.583 -4.583 2.531 -4.583 0 C +-4.583 -2.531 -2.531 -4.583 0 -4.583 C +cp +0 -5.417 M +-2.992 -5.417 -5.417 -2.992 -5.417 0 C +-5.417 2.992 -2.992 5.417 0 5.417 C +2.992 5.417 5.417 2.992 5.417 0 C +5.417 0 L +5.417 -2.992 2.992 -5.417 0 -5.417 C +cp}def +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 59.41033 76.40752] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 59.91802 75.7659] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 60.48768 75.04791] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 61.12688 74.245] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 61.84412 73.34793] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 62.64892 72.34674] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 63.55196 71.23086] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 64.56524 69.98928] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 65.70222 68.61075] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 66.978 67.0842] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 68.40951 65.39919] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 70.01579 63.54673] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 71.81815 61.52011] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 73.84054 59.31614] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 76.10981 56.93648] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 78.65611 54.38911] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 81.51325 51.68975] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 84.71918 48.86298] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 88.31647 45.9427] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 92.35291 42.97157] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 96.88211 39.99932] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 101.96422 37.07962] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 107.66672 34.26607] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 114.06537 31.60779] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 121.24514 29.1453] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 129.30139 26.90771] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 138.34112 24.91138] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 148.48438 23.16033] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 159.8659 21.64793] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 172.63682 20.35947] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 186.96679 19.27485] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 203.0461 18.37118] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 221.0883 17.62481] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 241.33304 17.01287] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 264.0492 16.51418] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 289.53843 16.10982] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 318.1393 15.78331] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 350.23168 15.52056] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 385.55984 15.31309] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0 1 0 RC +1 LJ +0.833 LW +N +97.5 129.977 M +98.189 129.101 L +98.965 128.116 L +99.838 127.011 L +100.82 125.771 L +101.926 124.381 L +103.17 122.823 L +104.57 121.08 L +106.146 119.133 L +107.918 116.961 L +109.914 114.545 L +112.159 111.865 L +114.685 108.903 L +117.529 105.643 L +120.728 102.075 L +124.329 98.197 L +128.381 94.016 L +132.941 89.55 L +138.072 84.835 L +143.847 79.923 L +150.345 74.882 L +157.658 69.796 L +165.887 64.758 L +175.148 59.865 L +185.569 55.211 L +197.297 50.874 L +210.494 46.915 L +225.345 43.371 L +242.058 40.257 L +260.866 37.565 L +282.031 35.274 L +305.849 33.348 L +332.651 31.747 L +362.814 30.429 L +396.756 29.353 L +434.953 28.479 L +477.937 27.774 L +526.309 27.208 L +580.743 26.754 L +642 26.392 L +S +GR +GS +[0.60056 0 0 0.59947 298.97547 25.84755] CT +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +0 5.5 moveto +1 -1 scale +(Discrete-time filter) t +GR +GR +GS +[0.60056 0 0 0.59947 281.68661 25.84755] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 298.97547 36.24659] CT +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +0 5.5 moveto +1 -1 scale +(Continuous-time filter) t +GR +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0 1 0 RC +1 LJ +0.833 LW +N +444.007 61.174 M +494.072 61.174 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +1 GC +N +92 294 M +642 294 L +642 182 L +92 182 L +cp +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 294 M +642 294 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 182 M +642 182 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 294 M +92 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +202 294 M +202 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +312 294 M +312 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +422 294 M +422 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +532 294 M +532 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 294 M +642 288.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 182 M +92 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +202 182 M +202 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +312 182 M +312 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +422 182 M +422 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +532 182 M +532 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 182 M +642 187.5 L +S +GR +GS +[0.60056 0 0 0.59947 55.25157 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-4 14 moveto +1 -1 scale +(0) t +GR +GR +GS +[0.60056 0 0 0.59947 121.31322 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.2) t +GR +GR +GS +[0.60056 0 0 0.59947 187.37488 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.4) t +GR +GR +GS +[0.60056 0 0 0.59947 253.43653 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.6) t +GR +GR +GS +[0.60056 0 0 0.59947 319.49819 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-9.5 14 moveto +1 -1 scale +(0.8) t +GR +GR +GS +[0.60056 0 0 0.59947 385.55984 177.41813] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-4 14 moveto +1 -1 scale +(1) t +GR +GR +GS +[0.60056 0 0 0.59947 220.40587 187.60915] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-45.5 14 moveto +1 -1 scale +(Frequency [Hz]) t +GR +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 294 M +92 182 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 294 M +642 182 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 294 M +97.5 294 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 275.433 M +97.5 275.433 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 256.866 M +97.5 256.866 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 238.299 M +97.5 238.299 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 219.732 M +97.5 219.732 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 201.165 M +97.5 201.165 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +92 182.598 M +97.5 182.598 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 294 M +636.5 294 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 275.433 M +636.5 275.433 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 256.866 M +636.5 256.866 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 238.299 M +636.5 238.299 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 219.732 M +636.5 219.732 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 201.165 M +636.5 201.165 L +S +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0.149 GC +2 setlinecap +1 LJ +0.833 LW +N +642 182.598 M +636.5 182.598 L +S +GR +GS +[0.60056 0 0 0.59947 53.65007 175.81954] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-8 5.5 moveto +1 -1 scale +(0) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 164.68912] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-26 5.5 moveto +1 -1 scale +(0.25) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 153.55867] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(0.5) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 142.42824] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-26 5.5 moveto +1 -1 scale +(0.75) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 131.29781] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-8 5.5 moveto +1 -1 scale +(1) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 120.16738] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-26 5.5 moveto +1 -1 scale +(1.25) t +GR +GR +GS +[0.60056 0 0 0.59947 53.65007 109.03695] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-19 5.5 moveto +1 -1 scale +(1.5) t +GR +GR +GS +[0 -0.59947 0.60056 0 37.03457 142.24908] CT +0.149 GC +/Helvetica 13.333 F +GS +[1 0 0 1 0 0] CT +-34.5 -3 moveto +1 -1 scale +(Phase [rad]) t +GR +GR +GS +[0.60056 0 0 0.59947 58.55465 108.6787] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 58.95788 109.01869] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 59.41033 109.39974] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 59.91802 109.82671] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 60.48768 110.30492] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 61.12688 110.8403] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 61.84412 111.43933] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 62.64892 112.10908] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 63.55196 112.85724] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 64.56524 113.69204] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 65.70222 114.62217] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 66.978 115.65674] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 68.40951 116.80498] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 70.01579 118.07598] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 71.81815 119.47828] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 73.84054 121.01934] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 76.10981 122.70477] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 78.65611 124.53761] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 81.51325 126.51728] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 84.71918 128.63881] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 88.31647 130.89189] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 92.35291 133.26047] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 96.88211 135.72266] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 101.96422 138.25132] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 107.66672 140.81535] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 114.06537 143.38139] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 121.24514 145.91606] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 129.30139 148.388] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 138.34112 150.76982] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 148.48438 153.03928] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 159.8659 155.17998] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 172.63682 157.18136] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 186.96679 159.03815] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 203.0461 160.74974] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 221.0883 162.31911] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 241.33304 163.75198] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 264.0492 165.05597] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 289.53843 166.23992] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 318.1393 167.31327] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 350.23168 168.28578] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 385.55984 169.15202] CT +1 0 0 RC +N +f1395082454 +f +GR +GS +[0.60056 0 0 0.59947 0 -0.4252] CT +0 1 0 RC +1 LJ +0.833 LW +N +97.5 182 M +98.189 182.582 L +98.965 183.237 L +99.838 183.972 L +100.82 184.798 L +101.926 185.725 L +103.17 186.766 L +104.57 187.932 L +106.146 189.238 L +107.918 190.7 L +109.914 192.331 L +112.159 194.15 L +114.685 196.173 L +117.529 198.415 L +120.728 200.891 L +124.329 203.615 L +128.381 206.594 L +132.941 209.831 L +138.072 213.322 L +143.847 217.054 L +150.345 221.003 L +157.658 225.135 L +165.887 229.405 L +175.148 233.761 L +185.569 238.143 L +197.297 242.491 L +210.494 246.747 L +225.345 250.858 L +242.058 254.78 L +260.866 258.482 L +282.031 261.941 L +305.849 265.145 L +332.651 268.09 L +362.814 270.781 L +396.756 273.227 L +434.953 275.44 L +477.937 277.435 L +526.309 279.229 L +580.743 280.838 L +642 282.278 L +S +GR +%%Trailer +%%Pages: 1 +%%EOF -- GitLab From 2d43bf8c2d1ce333fedb5e86a8f1b23d1f11c397 Mon Sep 17 00:00:00 2001 From: Alan Wai Hou Lio <wali@dtu.dk> Date: Mon, 6 Sep 2021 17:25:05 +0200 Subject: [PATCH 14/14] corrected: first-order filter and time constant --- appendix.tex | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/appendix.tex b/appendix.tex index f5e5f8c..6131d88 100644 --- a/appendix.tex +++ b/appendix.tex @@ -8,50 +8,50 @@ This appendix contains the derivations of the discrete filters and a test of the \subsection{Low pass filter} In continuous form the first order low-pass filter can be written as \begin{equation}\label{e:f1cont} -\dot{\bar x} + \omega \bar x = \omega x +\tau\dot{\bar x} + \bar x = x \end{equation} -where $x=x(t)$ is the original signal, $\bar x(t)$ is the filtered signal, $\omega$ is the user-defined cut-off frequency of the filter in radian per second, and $\dot{(\,)}=d/dt$ denotes the time derivative. The discrete first order low-pass filter used in the controller is derived from this continuous formulation by approximating the states and their time derivatives as an average based on the previous and current step: +where $x=x(t)$ is the original signal, $\bar x(t)$ is the filtered signal, $\tau$ is the user-defined time constant of the filter, and $\dot{(\,)}=d/dt$ denotes the time derivative. The discrete first order low-pass filter used in the controller is derived from this continuous formulation by approximating the states and their time derivatives as an average based on the previous and current step: \begin{equation}\label{e:1storder} x(t)\approx \frac{x_k+x_{k-1}}2 \;\;\;\;\mbox{and} \;\;\;\;\dot x(t)\approx \frac{x_k-x_{k-1}}{\Delta t} \end{equation} where $k$ is the index of the current time step, and $\Delta t$ is the time step length. Substitution into \eqref{e:f1cont} and rearranging the terms, the $f_1$-function is obtained as \begin{equation} \label{e:f1} -f_1 \left(\omega; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} +f_1 \left(\tau; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} \end{equation} where \begin{equation} \label{e:f1coef} -a_1=\frac {2\omega-\Delta t}{2\omega+\Delta t} , \;\;\;\; b_0 = \frac {\Delta t}{2\omega+\Delta t}, \;\;\;\; b_1 = b_0 +a_1=\frac {2\tau-\Delta t}{2\tau+\Delta t} , \;\;\;\; b_0 = \frac {\Delta t}{2\tau+\Delta t}, \;\;\;\; b_1 = b_0 \end{equation} To test this discrete filter, the Finite-Difference Method for constructing periodic solutions \cite{Nayfeh95} has been used to obtain the period solutions to harmonic excitation of the filter with a large number of different excitation frequencies. Figure~\ref{f:f1} shows the amplitude and phase of these solutions (red circles) compared to the transfer function obtained by transformation of the continuous formulation \eqref{e:f1cont} into the frequency domain. \begin{figure}[t] \centerline{\epsfig{figure=f1.eps,width=0.95\textwidth} } -\caption{Test of the first order low-pass filter function \eqref{e:f1} with a cut-off frequency of $\omega=1~\mathrm{rad/s} \approx 0.159~\mathrm{Hz}$ and a time step of $\Delta t = 0.125$~s. \label{f:f1}} +\caption{Test of the first order low-pass filter function \eqref{e:f1} with a time constant $\tau=1~\mathrm{s}$ and a time step of $\Delta t = 0.125$~s. \label{f:f1}} \end{figure} \subsection{First order high pass filter} The continuous-time representation of the first order high pass filter can be written as follows: \begin{align}\label{eq:highpass} - \dot{\bar{x}} + \omega \bar{x} = \dot{x}, + \tau \dot{\bar{x}} + \bar{x} = \tau \dot{x}, \end{align} -where $x = x(t)$ and $\bar{x}$ are the original and filtered signals, respectively. The user-defined cut-off frequency of the filter in radian per second is denoted as $\omega$ and $\dot{(\, )} = d/dt$ denotes the time derivative. Substituting the approximation of the states and their time derivatives~\eqref{e:1storder} into~\eqref{eq:highpass}, the discrete-time form of the first order high pass filter can be written as follows: +where $x = x(t)$ and $\bar{x}$ are the original and filtered signals, respectively. The user-defined time constant of the filter is denoted as $\omega$ and $\dot{(\, )} = d/dt$ denotes the time derivative. Substituting the approximation of the states and their time derivatives~\eqref{e:1storder} into~\eqref{eq:highpass}, the discrete-time form of the first order high pass filter can be written as follows: \begin{align}\label{eq:f_1,hp} - f_{1,hp} \left(\omega; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} + f_{1,hp} \left(\tau; \bar x_{k-1} , x_{k} , x_{k-1} \right) = a_1 \bar x_{k-1} + b_0 x_k + b_1 x_{k-1} \end{align} where \begin{align} - a_1 = \frac{2-\omega\Delta t}{2+\omega\Delta t}, \quad b_0 = \frac{2}{2 +\omega \Delta t}, \quad b_1 = -b_0 + a_1 = \frac{2\tau -\Delta t}{2\tau + \Delta t}, \quad b_0 = \frac{2\tau }{2 \tau+ \Delta t}, \quad b_1 = -b_0 \end{align} Test and validation of the filter are shown in Figure~\ref{f:f_hp_1st}. \begin{figure}[t] \centerline{\epsfig{figure=f_hp_1st.eps,width=0.95\textwidth} } -\caption{Test of the first order high-pass filter function \eqref{eq:f_1,hp} with a cut-off frequency of $\omega=1~\mathrm{rad/s} \approx 0.159~\mathrm{Hz}$ and a time step of $\Delta t = 0.125$~s. \label{f:f_hp_1st}} +\caption{Test of the first order high-pass filter function \eqref{eq:f_1,hp} with a time constant of $\tau=1~\mathrm{s}$ and a time step of $\Delta t = 0.125$~s. \label{f:f_hp_1st}} \end{figure} \section{Second order filters} -- GitLab