diff options
author | Martin Braun <martin.braun@ettus.com> | 2020-03-12 11:44:43 -0700 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-03-18 12:53:50 -0500 |
commit | 07b85b6dcc6e84f42da3579b65692a3d4ba04e38 (patch) | |
tree | d17b5ce4f5f70c994f7e5fe41342802bb8adad60 /host/include | |
parent | dfefce2876eac37a91f9ad99e062005ce030eb88 (diff) | |
download | uhd-07b85b6dcc6e84f42da3579b65692a3d4ba04e38.tar.gz uhd-07b85b6dcc6e84f42da3579b65692a3d4ba04e38.tar.bz2 uhd-07b85b6dcc6e84f42da3579b65692a3d4ba04e38.zip |
uhd: math: Add linear_interp()
This lets you linearly interpolate between two points.
Diffstat (limited to 'host/include')
-rw-r--r-- | host/include/uhd/utils/math.hpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/host/include/uhd/utils/math.hpp b/host/include/uhd/utils/math.hpp index 60b34bef0..bb721d3af 100644 --- a/host/include/uhd/utils/math.hpp +++ b/host/include/uhd/utils/math.hpp @@ -1,14 +1,10 @@ -// -// Copyright 2014-2015 Ettus Research LLC -// Copyright 2018 Ettus Research, a National Instruments Company -// -// SPDX-License-Identifier: GPL-3.0-or-later -// + #ifndef INCLUDED_UHD_UTILS_MATH_HPP #define INCLUDED_UHD_UTILS_MATH_HPP #include <uhd/config.hpp> +#include <uhd/exception.hpp> #include <stdint.h> #include <boost/numeric/conversion/bounds.hpp> #include <cmath> @@ -250,6 +246,24 @@ inline IntegerType gcd(IntegerType x, IntegerType y) return _bmint::gcd<IntegerType>(x, y); } +//! Linearly interpolate f(x) given f(x0) = y0 and f(x1) = y1 +// +// This draws a line through the coordinates x0/y0 and x1/y1, and then returns +// the y-value for the given x-value on said line. +// +// \throws uhd::runtime_error if x0 == x1, since that doesn't allow us to +// interpolate. +template <typename InterpType> +inline InterpType linear_interp( + InterpType x, InterpType x0, InterpType y0, InterpType x1, InterpType y1) +{ + if (x0 == x1) { + throw uhd::runtime_error("linear_interp(): x0 and x1 must differ!"); + } + return y0 + (x - x0) * (y1 - y0) / (x1 - x0); +} + + } // namespace math } // namespace uhd |