36 const Eigen::MatrixBase<Derived1> & v1,
37 const Eigen::MatrixBase<Derived2> & v2,
43 static_assert(Derived1::IsVectorAtCompileTime,
"Error: v1 is not vector.");
44 static_assert(Derived2::IsVectorAtCompileTime,
"Error: v2 is not vector.");
46 int length, start_index, max_size, min_size;
47 typename Derived1::PlainObject result;
49 max_size = std::max(v1.size(), v2.size());
50 min_size = std::min(v1.size(), v2.size());
52 length = v1.size() + v2.size() - 1;
54 result = Derived1::PlainObject::Zero(length);
56 for(
int j = 0; j < v2.size(); j++) {
57 for(
int i = 0; i < v1.size(); i++) {
58 result(i + j) += v1(i) * v2(j);
63 length = max_size - min_size + 1;
64 start_index = min_size - 1;
68 start_index = (int)(min_size / 2.0 + 0.5) - 1;
71 if(result.rows() == 1) {
72 return result.block(0, start_index, 1, length);
75 return result.block(start_index, 0, length, 1);
const Derived1::PlainObject Convolve(const Eigen::MatrixBase< Derived1 > &v1, const Eigen::MatrixBase< Derived2 > &v2, const ConvolveMode mode=ConvolveMode::Full)
Returns the discrete, linear convolution of two one-dimensional sequences.