Example #1
0
		inline SPROUT_CONSTEXPR T
		triangle_value_impl(T const& t) {
			typedef double elem_type;
			using sprout::sin;
			using sprout::asin;
			return T(sprout::math::two_div_pi<elem_type>()) * asin(sin(T(sprout::math::two_pi<elem_type>()) * t));
		}
Example #2
0
		inline SPROUT_CONSTEXPR typename std::iterator_traits<RandomAccessIterator>::value_type
		dft_element_gen_impl_ra(
			RandomAccessIterator first, RandomAccessIterator last,
			typename std::iterator_traits<RandomAccessIterator>::value_type::value_type arg,
			typename std::iterator_traits<RandomAccessIterator>::difference_type pivot,
			typename std::iterator_traits<RandomAccessIterator>::difference_type k = 0
			)
		{
			typedef typename std::iterator_traits<RandomAccessIterator>::value_type value_type;
			using sprout::cos;
			using sprout::sin;
			return pivot == 0 ? *first * value_type(cos(arg * k), sin(arg * k))
				: sprout::detail::dft_element_gen_impl_ra(
					first, sprout::next(first, pivot), arg, pivot / 2, k
					)
					+ sprout::detail::dft_element_gen_impl_ra(
						sprout::next(first, pivot), last, arg, (sprout::distance(first, last) - pivot) / 2, k + pivot
						)
				;
		}
Example #3
0
			inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Result>::type
			phase_spectrum_impl(
				InputIterator first, InputIterator last, Result const& result,
				sprout::index_tuple<Indexes...>,
				typename sprout::container_traits<Result>::difference_type offset,
				typename sprout::container_traits<Result>::size_type size,
				typename sprout::container_traits<Result>::size_type input_size
				)
			{
				using sprout::real;
				using sprout::imag;
				return sprout::remake<Result>(
					result,
					size,
					(Indexes >= offset && Indexes < offset + size && Indexes < offset + input_size
						? sprout::atan2(
							sprout::llround(imag(*sprout::next(first, Indexes))),
							sprout::llround(real(*sprout::next(first, Indexes)))
							)
						: *sprout::next(sprout::internal_begin(result), Indexes)
						)...
					);
			}
Example #4
0
		inline SPROUT_CONSTEXPR typename std::iterator_traits<InputIterator>::value_type
		dft_element_gen_impl_1(
			InputIterator first, InputIterator last,
			typename std::iterator_traits<InputIterator>::value_type::value_type arg,
			typename std::iterator_traits<InputIterator>::difference_type k = 0,
			typename std::iterator_traits<InputIterator>::value_type value
				= typename std::iterator_traits<InputIterator>::value_type(),
			typename std::iterator_traits<InputIterator>::value_type::value_type theta
				= typename std::iterator_traits<InputIterator>::value_type::value_type()
			)
		{
			typedef typename std::iterator_traits<InputIterator>::value_type value_type;
			using sprout::cos;
			using sprout::sin;
			return first == last ? value
				: value + sprout::detail::dft_element_gen_impl_1(
					sprout::next(first), last,
					arg,
					k + 1,
					*first * value_type(cos(theta), sin(theta)),
					arg * (k + 1)
					)
				;
		}
Example #5
0
			inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm<Container>::type
			sinusoid_impl(
				Container const& cont,
				typename sprout::container_traits<Container>::value_type const& d,
				typename sprout::container_traits<Container>::value_type const& amplitude,
				typename sprout::container_traits<Container>::value_type const& phase,
				sprout::index_tuple<Indexes...>,
				typename sprout::container_traits<Container>::difference_type offset,
				typename sprout::container_traits<Container>::size_type size
				)
			{
				typedef typename sprout::container_traits<Container>::value_type value_type;
				using sprout::sin;
				return sprout::remake<Container>(
					cont, size,
					(Indexes >= offset && Indexes < offset + size
						? amplitude * sin(d * value_type(Indexes) + phase)
						: *sprout::next(sprout::internal_begin(cont), Indexes)
						)...
					);
			}
Example #6
0
	inline SPROUT_CONSTEXPR typename T::value_type
	phase_spectrum_value(T const& x) {
		using sprout::real;
		using sprout::imag;
		return sprout::atan2(sprout::llround(imag(x)), sprout::llround(real(x)));
	}
	inline SPROUT_CONSTEXPR typename T::value_type
	amplitude_spectrum_value(T const& x) {
		using sprout::real;
		using sprout::imag;
		return sprout::sqrt(real(x) * real(x) + imag(x) * imag(x));
	}
Example #8
0
	inline SPROUT_CONSTEXPR std::size_t
	to_hash(T&& v) {
		using sprout::hash_value;
		using sprout_adl::hash_value;
		return hash_value(SPROUT_FORWARD(T, v));
	}
Example #9
0
		inline SPROUT_CONSTEXPR T
		sinusoid_value(T const& amplitude, T const& phase, T const& d, Index i) {
			using sprout::sin;
			return amplitude * sin(d * T(i) + phase);
		}
Example #10
0
		SPROUT_CONSTEXPR typename sprout::float_promote<ArithmeticType1, ArithmeticType2>::type
		equal_temperament_value(ArithmeticType1 i, ArithmeticType2 div) {
			typedef typename sprout::float_promote<ArithmeticType1, ArithmeticType2>::type type;
			using sprout::pow;
			return pow(type(2), type(i) / type(div));
		}
Example #11
0
	inline SPROUT_CONSTEXPR std::size_t
	to_hash(T&& v) {
		using sprout::hash_value;
		using sprout_adl::hash_value;
		return hash_value(sprout::forward<T>(v));
	}
Example #12
0
	inline SPROUT_CONSTEXPR std::size_t
	call_hash_value(T const& v) {
		using sprout::hash_value;
		using sprout_adl::hash_value;
		return hash_value(v);
	}
Example #13
0
		inline SPROUT_CONSTEXPR T
		sawtooth_value_impl(T const& t) {
			using sprout::floor;
			return 2 * (t - floor(t + T(0.5)));
		}