10 #ifndef __SOT_FIRFILTER_HH__ 11 #define __SOT_FIRFILTER_HH__ 19 #include <dynamic-graph/all-signals.h> 20 #include <dynamic-graph/command-getter.h> 21 #include <dynamic-graph/command-setter.h> 22 #include <dynamic-graph/entity.h> 39 start = buf.size() - 1;
42 if (numel < buf.size()) {
58 assert((i < numel) &&
"Youre accessing an empty buffer");
59 size_t index = (start + i) % buf.size();
62 size_t size()
const {
return numel; }
74 using ::dynamicgraph::command::Command;
75 using ::dynamicgraph::command::Value;
77 template <
class sigT,
class coefT>
class SetElement :
public Command {
83 template <
class sigT,
class coefT>
class GetElement :
public Command {
90 using ::dynamicgraph::command::Getter;
91 using ::dynamicgraph::command::Setter;
93 template <
class sigT,
class coefT>
class FIRFilter :
public Entity {
96 return Entity::getClassName();
102 return "Finite impulse response filter\n" 104 " Provide the following sum in output signal:\n" 107 " y (n) = \\ c s (n-i) \n" 112 " - c_i are coefficients stored in an array\n" 113 " - N is the size of the array\n" 114 " - s is the input signal.\n";
119 : Entity(name), SIN(NULL,
"sotFIRFilter(" + name +
")::input(T)::sin"),
120 SOUT(boost::bind(&
FIRFilter::compute, this, _1, _2), SIN,
121 "sotFIRFilter(" + name +
")::output(T)::sout") {
122 signalRegistration(SIN << SOUT);
123 std::string docstring =
" Set element at rank in array of coefficients\n" 126 " - positive int: rank\n" 128 addCommand(
"setElement",
130 docstring =
" Get element at rank in array of coefficients\n" 133 " - positive int: rank\n" 136 addCommand(
"getElement",
138 docstring =
" Set number of coefficients\n" 141 " - positive int: size\n";
142 addCommand(
"setSize",
new Setter<FIRFilter, unsigned>(
145 docstring =
" Get Number of coefficients\n" 148 " - positive int: size\n";
149 addCommand(
"getSize",
new Getter<FIRFilter, unsigned>(
156 const sigT &in = SIN.access(time);
157 reset_signal(res, in);
160 size_t SIZE = std::min(data.size(), coefs.size());
161 for (
size_t i = 0; i < SIZE; ++i) {
162 res += coefs[i] * data[i];
169 size_t s =
static_cast<size_t>(
size);
170 data.reset_capacity(s);
175 return static_cast<unsigned int>(coefs.size());
178 void setElement(
const unsigned int &rank,
const coefT &coef) {
182 coefT
getElement(
const unsigned int &rank)
const {
return coefs[rank]; }
188 SignalTimeDependent<sigT, int>
SOUT;
191 std::vector<coefT> coefs;
196 using ::dynamicgraph::command::Command;
197 using ::dynamicgraph::command::Value;
198 using ::dynamicgraph::command::ValueHelper;
200 template <
class sigT,
class coefT>
202 const std::string &docstring)
205 boost::assign::list_of(Value::UNSIGNED)(ValueHelper<coefT>::TypeID),
211 std::vector<Value> values = getParameterValues();
212 unsigned int rank = values[0].value();
213 coefT coef = values[1].value();
218 template <
class sigT,
class coefT>
220 const std::string &docstring)
221 : Command(entity, boost::assign::list_of(Value::UNSIGNED), docstring) {}
226 std::vector<Value> values = getParameterValues();
227 unsigned int rank = values[0].value();
coefT getElement(const unsigned int &rank) const
Definition: fir-filter.hh:182
virtual sigT & compute(sigT &res, int time)
Definition: fir-filter.hh:155
Value doExecute()
Definition: fir-filter.hh:208
unsigned int getBufferSize() const
Definition: fir-filter.hh:174
size_t size() const
Definition: fir-filter.hh:62
virtual const std::string & getClassName() const
Definition: fir-filter.hh:95
Definition: fir-filter.hh:77
FIRFilter(const std::string &name)
Definition: fir-filter.hh:118
Definition: fir-filter.hh:83
SignalPtr< sigT, int > SIN
Definition: fir-filter.hh:187
void resizeBuffer(const unsigned int &size)
Definition: fir-filter.hh:168
static void reset_signal(sigT &, const sigT &)
Definition: fir-filter.hh:184
void push_front(const T &data)
Definition: fir-filter.hh:35
void reset_capacity(size_t n)
Definition: fir-filter.hh:46
static std::string getTypeName(void)
Definition: fir-filter.hh:98
Definition: fir-filter.hh:32
void reset_capacity(size_t n, const T &el)
Definition: fir-filter.hh:51
circular_buffer()
Definition: fir-filter.hh:34
Definition: fir-filter.hh:71
virtual ~FIRFilter()
Definition: fir-filter.hh:153
SignalTimeDependent< sigT, int > SOUT
Definition: fir-filter.hh:188
static const std::string CLASS_NAME
Definition: fir-filter.hh:99
void setElement(const unsigned int &rank, const coefT &coef)
Definition: fir-filter.hh:178
GetElement(FIRFilter< sigT, coefT > &entity, const std::string &docstring)
Definition: fir-filter.hh:219
std::string getDocString() const
Definition: fir-filter.hh:101
Value doExecute()
Definition: fir-filter.hh:223
Definition: abstract-sot-external-interface.hh:17
T & operator[](size_t i)
Definition: fir-filter.hh:57