Open ulikoehler opened 8 years ago
In some of my projects I'm using the Kaiser Window as a DPSS window approximation. In some cases I was able to improve the SNR by using Kaiser windows instead of .
In https://github.com/zsiciarz/aquila/pull/51 I added some extra window functions. However, I couldn't add the Kaiser function because the formula depends on the modified Bessel function of the first kind.
My implementation (which is hereby released under CC0 1.0 Universal) depends on boost::math which provides Bessel functions:
boost::math
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr> void kaiserWindow(T* out, size_t n, T alpha = 2.0) { using namespace boost::math; const T denom = (T)n - 1.0; const T piAlpha = boost::math::constants::pi<T>() * alpha; for (size_t i = 0; i < n; ++i) { T term1 = (2.0 * i / denom) - 1.0; out[i] = cyl_bessel_i(0, piAlpha * std::sqrt(1.0 - term1 * term1)) / cyl_bessel_i(0, piAlpha); } }
However, boost::math is a huge template library. I'd like to avoid introducing it as a aquila dependency just because of a single window function.
Do you see any alternative to using boost::math for this?
C++17 now has bessel functions in the standard library
In some of my projects I'm using the Kaiser Window as a DPSS window approximation. In some cases I was able to improve the SNR by using Kaiser windows instead of .
In https://github.com/zsiciarz/aquila/pull/51 I added some extra window functions. However, I couldn't add the Kaiser function because the formula depends on the modified Bessel function of the first kind.
My implementation (which is hereby released under CC0 1.0 Universal) depends on
boost::math
which provides Bessel functions:However, boost::math is a huge template library. I'd like to avoid introducing it as a aquila dependency just because of a single window function.
Do you see any alternative to using boost::math for this?