1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*!
@file tf.h
@brief transfer function
*/
#ifndef LIBA_TF_H
#define LIBA_TF_H
#include "a.h"
/*!
@ingroup liba
@addtogroup a_tf transfer function
@{
*/
typedef struct a_tf a_tf;
#if defined(__cplusplus)
namespace a
{
typedef struct a_tf tf;
} /* namespace a */
extern "C" {
#endif /* __cplusplus */
/*!
@brief set numerator for transfer function
@param[in,out] ctx points to an instance of transfer function
@param[in] num_n numerator number
@param[in] num_p numerator
@param[in] input input
*/
A_EXTERN void a_tf_set_num(a_tf *ctx, unsigned int num_n, a_float const *num_p, a_float *input);
/*!
@brief set denominator for transfer function
@param[in,out] ctx points to an instance of transfer function
@param[in] den_n denominator number
@param[in] den_p denominator
@param[in] output output
*/
A_EXTERN void a_tf_set_den(a_tf *ctx, unsigned int den_n, a_float const *den_p, a_float *output);
/*!
@brief initialize for transfer function
@param[in,out] ctx points to an instance of transfer function
@param[in] num_n numerator number
@param[in] num_p numerator
@param[in] input input
@param[in] den_n denominator number
@param[in] den_p denominator
@param[in] output output
*/
A_EXTERN void a_tf_init(a_tf *ctx,
unsigned int num_n, a_float const *num_p, a_float *input,
unsigned int den_n, a_float const *den_p, a_float *output);
/*!
@brief calculate for transfer function
@param[in] ctx points to an instance of transfer function
@param[in] x transfer function input
@return transfer function output
*/
A_EXTERN a_float a_tf_iter(a_tf const *ctx, a_float x);
/*!
@brief zeroing for transfer function
@param[in] ctx points to an instance of transfer function
*/
A_EXTERN void a_tf_zero(a_tf const *ctx);
#if defined(__cplusplus)
} /* extern "C" */
#endif /* __cplusplus */
/*!
@brief instance structure for transfer function
*/
struct a_tf
{
a_float *input; //!< input
a_float *output; //!< output
a_float const *num_p; //!< numerator
a_float const *den_p; //!< denominator
unsigned int num_n; //!< numerator number
unsigned int den_n; //!< denominator number
#if defined(__cplusplus)
A_INLINE void init(unsigned int num_n_, a_float const *num_p_, a_float *input_,
unsigned int den_n_, a_float const *den_p_, a_float *output_)
{
a_tf_init(this, num_n_, num_p_, input_, den_n_, den_p_, output_);
}
A_INLINE void set_num(unsigned int num_n_, a_float const *num_p_, a_float *input_)
{
a_tf_set_num(this, num_n_, num_p_, input_);
}
A_INLINE void set_den(unsigned int den_n_, a_float const *den_p_, a_float *output_)
{
a_tf_set_den(this, den_n_, den_p_, output_);
}
A_INLINE a_float operator()(a_float x) const
{
return a_tf_iter(this, x);
}
A_INLINE void zero() const { a_tf_zero(this); }
#endif /* __cplusplus */
};
/*! @} a_tf */
#endif /* a/tf.h */