Author: Jon S. Berndt
Date started: 4/2000
- ------------- Copyright (C) 2000 Jon S. Berndt jsb@hal-pc.org -------------
+ ------------- Copyright (C) 2000 Jon S. Berndt jon@jsbsim.org -------------
This program is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free Software
+ the terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
- You should have received a copy of the GNU General Public License along with
+ You should have received a copy of the GNU Lesser General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA.
- Further information about the GNU General Public License can also be found on
+ Further information about the GNU Lesser General Public License can also be found on
the world wide web at http://www.gnu.org.
HISTORY
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#include "FGFCSComponent.h"
-#include <input_output/FGXMLElement.h>
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#define ID_FILTER "$Id$"
+#define ID_FILTER "$Id: FGFilter.h,v 1.12 2009/10/24 22:59:30 jberndt Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS
namespace JSBSim {
+class Element;
+class FGPropertyManager;
+class FGFCS;
+
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DOCUMENTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@code
<typename name="name">
<input> property </input>
- <c1> value </c1>
- [<c2> value </c2>]
- [<c3> value </c3>]
- [<c4> value </c4>]
- [<c5> value </c5>]
- [<c6> value </c6>]
+ <c1> value|property </c1>
+ [<c2> value|property </c2>]
+ [<c3> value|property </c3>]
+ [<c4> value|property </c4>]
+ [<c5> value|property </c5>]
+ [<c6> value|property </c6>]
[<clipto>
<min> {[-]property name | value} </min>
<max> {[-]property name | value} </max>
@code
<lag_filter name="name">
<input> property </input>
- <c1> value </c1>
+ <c1> value|property </c1>
[<clipto>
<min> {[-]property name | value} </min>
<max> {[-]property name | value} </max>
@code
<lead_lag_filter name="name">
<input> property </input>
- <c1> value <c/1>
- <c2> value <c/2>
- <c3> value <c/3>
- <c4> value <c/4>
+ <c1> value|property <c/1>
+ <c2> value|property <c/2>
+ <c3> value|property <c/3>
+ <c4> value|property <c/4>
[<clipto>
<min> {[-]property name | value} </min>
<max> {[-]property name | value} </max>
@code
<second_order_filter name="name">
<input> property </input>
- <c1> value </c1>
- <c2> value </c2>
- <c3> value </c3>
- <c4> value </c4>
- <c5> value </c5>
- <c6> value </c6>
+ <c1> value|property </c1>
+ <c2> value|property </c2>
+ <c3> value|property </c3>
+ <c4> value|property </c4>
+ <c5> value|property </c5>
+ <c6> value|property </c6>
[<clipto>
<min> {[-]property name | value} </min>
<max> {[-]property name | value} </max>
@code
<integrator name="name">
<input> property </input>
- <c1> value </c1>
+ <c1> value|property </c1>
[<trigger> property </trigger>]
[<clipto>
<min> {[-]property name | value} </min>
output, such as the elevator, or speedbrake, etc.
@author Jon S. Berndt
-@version $Revision$
+@version $Revision: 1.12 $
*/
/** When true, causes previous values to be set to current values. This
is particularly useful for first pass. */
bool Initialize;
-
+ void ResetPastStates(void) {Input = 0.0; Initialize = true;}
+
enum {eLag, eLeadLag, eOrder2, eWashout, eIntegrator, eUnknown} FilterType;
private:
- double dt;
double ca;
double cb;
double cc;
double cd;
double ce;
- double C1;
- double C2;
- double C3;
- double C4;
- double C5;
- double C6;
+ double C[7]; // There are 6 coefficients, indexing is "1" based.
+ double PropertySign[7];
double PreviousInput1;
double PreviousInput2;
double PreviousOutput1;
double PreviousOutput2;
FGPropertyManager* Trigger;
+ FGPropertyManager* PropertyNode[7];
+ void CalculateDynamicFilters(void);
+ void ReadFilterCoefficients(Element* el, int index);
+ bool DynamicFilter;
void Debug(int from);
};
}