36 double nyquist = fsmp / 2.;
44 double f_stop = (f_high < f_low) ? 1. : 0.;
53 alpha = 0.1102 * (
a_gibbs - 8.7);
56 alpha = 0.5842 * std::pow(
a_gibbs - 21.0, 0.4) + 0.07886 * (
a_gibbs - 21.0);
60 Eigen::VectorXd arg = Eigen::VectorXd::LinSpaced(
n_terms, 1,
n_terms);
61 arg = alpha * (1.0 - (arg /
n_terms).cwiseAbs2().array()).sqrt();
64 double i_0_alpha = boost::math::cyl_bessel_i(0, alpha);
66 Eigen::VectorXd coef = arg.unaryExpr([i_0_alpha](
double x) {
67 return boost::math::cyl_bessel_i(0, x) / i_0_alpha;
74 coef = coef.array()*(sin(t.array()*f_high) - sin(t.array()*f_low)) /
90 for (Eigen::Index i=0; i<
w0s.size(); i++) {
103 double gb = 1/sqrt(2);
107 double beta = (sqrt(1.0-pow(gb,2.0))/gb)*tan(bw/2.0);
115 double gain = 1.0/(1.0+beta);
121 Eigen::VectorXd b(3);
122 b << 1.0, -2.0*cos(w0), 1.0;
127 Eigen::VectorXd a(3);
128 a << 1.0, -2.0*gain*cos(w0), (2.0*gain-1.0);
139 Eigen::array<ptrdiff_t, 1> dims{0};
143 Eigen::TensorMap<Eigen::Tensor<double, 2>> in_tensor(in.derived().data(),
144 in.rows(), in.cols());
145 Eigen::TensorMap<Eigen::Tensor<double, 1>> filter_tensor(
filter.data(),
148 Eigen::Tensor<double, 2> out_tensor(
149 in_tensor.dimension(0) - filter_tensor.dimension(0) + 1, in.cols());
152 out_tensor = in_tensor.convolve(filter_tensor, dims);
156 in.block(
n_terms, 0, out_tensor.dimension(0),
158 Eigen::Map<Eigen::MatrixXd>(out_tensor.data(), out_tensor.dimension(0),
159 out_tensor.dimension(1));