kopia lustrzana https://github.com/vsamy/DiFipp
Fix naming.
rodzic
60c0b5c11f
commit
a7b8bdb8fa
|
@ -57,7 +57,7 @@ public:
|
||||||
void resetFilter() noexcept { derived().resetFilter(); };
|
void resetFilter() noexcept { derived().resetFilter(); };
|
||||||
|
|
||||||
/*!< \brief Return the filter type */
|
/*!< \brief Return the filter type */
|
||||||
FilterType type() const noexcept { return (m_center == 0 ? FilterType::Forward : FilterType::Centered); }
|
FilterType type() const noexcept { return (m_center == 0 ? FilterType::Backward : FilterType::Centered); }
|
||||||
/*! \brief Get digital filter coefficients.
|
/*! \brief Get digital filter coefficients.
|
||||||
*
|
*
|
||||||
* It will automatically resize the given vectors.
|
* It will automatically resize the given vectors.
|
||||||
|
@ -110,7 +110,7 @@ private:
|
||||||
* \param bCoeff Numerator coefficients of the filter in decreasing order.
|
* \param bCoeff Numerator coefficients of the filter in decreasing order.
|
||||||
* \param center
|
* \param center
|
||||||
*/
|
*/
|
||||||
BaseFilter(const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Forward);
|
BaseFilter(const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Backward);
|
||||||
/*! \brief Default destructor. */
|
/*! \brief Default destructor. */
|
||||||
virtual ~BaseFilter() = default;
|
virtual ~BaseFilter() = default;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ template <typename T, typename Derived>
|
||||||
void BaseFilter<T, Derived>::setType(FilterType type)
|
void BaseFilter<T, Derived>::setType(FilterType type)
|
||||||
{
|
{
|
||||||
Expects(type == FilterType::Centered ? m_bCoeff.size() > 2 && m_bCoeff.size() % 2 == 1 : true);
|
Expects(type == FilterType::Centered ? m_bCoeff.size() > 2 && m_bCoeff.size() % 2 == 1 : true);
|
||||||
m_center = (type == FilterType::Forward ? 0 : (m_bCoeff.size() - 1) / 2);
|
m_center = (type == FilterType::Backward ? 0 : (m_bCoeff.size() - 1) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename Derived>
|
template <typename T, typename Derived>
|
||||||
|
@ -44,7 +44,7 @@ void BaseFilter<T, Derived>::setCoeffs(T2&& aCoeff, T2&& bCoeff)
|
||||||
{
|
{
|
||||||
static_assert(std::is_convertible_v<T2, vectX_t<T>>, "The coefficients types should be convertible to vectX_t<T>");
|
static_assert(std::is_convertible_v<T2, vectX_t<T>>, "The coefficients types should be convertible to vectX_t<T>");
|
||||||
|
|
||||||
Expects(checkCoeffs(aCoeff, bCoeff, (m_center == 0 ? FilterType::Forward : FilterType::Centered)));
|
Expects(checkCoeffs(aCoeff, bCoeff, (m_center == 0 ? FilterType::Backward : FilterType::Centered)));
|
||||||
m_aCoeff = aCoeff;
|
m_aCoeff = aCoeff;
|
||||||
m_bCoeff = bCoeff;
|
m_bCoeff = bCoeff;
|
||||||
normalizeCoeffs();
|
normalizeCoeffs();
|
||||||
|
@ -69,7 +69,7 @@ BaseFilter<T, Derived>::BaseFilter(const vectX_t<T>& aCoeff, const vectX_t<T>& b
|
||||||
, m_rawData(bCoeff.size())
|
, m_rawData(bCoeff.size())
|
||||||
{
|
{
|
||||||
Expects(checkCoeffs(aCoeff, bCoeff, type));
|
Expects(checkCoeffs(aCoeff, bCoeff, type));
|
||||||
m_center = (type == FilterType::Forward ? 0 : (bCoeff.size() - 1) / 2);
|
m_center = (type == FilterType::Backward ? 0 : (bCoeff.size() - 1) / 2);
|
||||||
normalizeCoeffs();
|
normalizeCoeffs();
|
||||||
resetFilter();
|
resetFilter();
|
||||||
m_isInitialized = true;
|
m_isInitialized = true;
|
||||||
|
|
|
@ -53,7 +53,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
GenericFilter() = default;
|
GenericFilter() = default;
|
||||||
GenericFilter(const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Forward)
|
GenericFilter(const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Backward)
|
||||||
: BaseFilter(aCoeff, bCoeff, type)
|
: BaseFilter(aCoeff, bCoeff, type)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
@ -80,7 +80,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TVGenericFilter() = default;
|
TVGenericFilter() = default;
|
||||||
TVGenericFilter(int order, const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Forward)
|
TVGenericFilter(int order, const vectX_t<T>& aCoeff, const vectX_t<T>& bCoeff, FilterType type = FilterType::Backward)
|
||||||
: BaseFilter(aCoeff, bCoeff, type)
|
: BaseFilter(aCoeff, bCoeff, type)
|
||||||
, m_order(order)
|
, m_order(order)
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,7 +72,7 @@ template <typename T> vectN_t<T, 7> GetSLNLCoeffs() { return vectN_t<T, 7>{ T(-2
|
||||||
template <typename T> vectN_t<T, 9> GetSLNLCoeffs() { return vectN_t<T, 9>{ T(-86), T(142), T(193), T(126), T(0), T(-126), T(-193), T(-142), T(86) } / T(1188); }
|
template <typename T> vectN_t<T, 9> GetSLNLCoeffs() { return vectN_t<T, 9>{ T(-86), T(142), T(193), T(126), T(0), T(-126), T(-193), T(-142), T(86) } / T(1188); }
|
||||||
template <typename T> vectN_t<T, 11> GetSLNLCoeffs() { return vectN_t<T, 11>{ T(-300), T(294), T(532), T(503), T(296), T(0), T(-296), T(-503), T(-532), T(-294), T(300) } / T(5148); }
|
template <typename T> vectN_t<T, 11> GetSLNLCoeffs() { return vectN_t<T, 11>{ T(-300), T(294), T(532), T(503), T(296), T(0), T(-296), T(-503), T(-532), T(-294), T(300) } / T(5148); }
|
||||||
|
|
||||||
// Forward Noise-Robust differentiators; http://www.holoborodko.com/pavel/wp-content/uploads/OneSidedNoiseRobustDifferentiators.pdf
|
// Backward Noise-Robust differentiators; http://www.holoborodko.com/pavel/wp-content/uploads/OneSidedNoiseRobustDifferentiators.pdf
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
vectN_t<T, N> GetFNRCoeffs()
|
vectN_t<T, N> GetFNRCoeffs()
|
||||||
{
|
{
|
||||||
|
@ -95,7 +95,7 @@ template <typename T> vectN_t<T, 9> GetFNRCoeffs() { return vectN_t<T, 9>{ T(1),
|
||||||
template <typename T> vectN_t<T, 10> GetFNRCoeffs() { return vectN_t<T, 10>{ T(1), T(7), T(20), T(28), T(14), T(-14), T(-28), T(-20), T(-7), T(-1) } / T(256); }
|
template <typename T> vectN_t<T, 10> GetFNRCoeffs() { return vectN_t<T, 10>{ T(1), T(7), T(20), T(28), T(14), T(-14), T(-28), T(-20), T(-7), T(-1) } / T(256); }
|
||||||
template <typename T> vectN_t<T, 11> GetFNRCoeffs() { return vectN_t<T, 11>{ T(1), T(8), T(27), T(48), T(42), T(0), T(-42), T(-48), T(-27), T(-8), T(-1) } / T(512); }
|
template <typename T> vectN_t<T, 11> GetFNRCoeffs() { return vectN_t<T, 11>{ T(1), T(8), T(27), T(48), T(42), T(0), T(-42), T(-48), T(-27), T(-8), T(-1) } / T(512); }
|
||||||
|
|
||||||
// Forward Hybrid Noise-Robust differentiators; http://www.holoborodko.com/pavel/wp-content/uploads/OneSidedNoiseRobustDifferentiators.pdf
|
// Backward Hybrid Noise-Robust differentiators; http://www.holoborodko.com/pavel/wp-content/uploads/OneSidedNoiseRobustDifferentiators.pdf
|
||||||
template <typename T, size_t N> vectN_t<T, N> GetFHNRCoeffs();
|
template <typename T, size_t N> vectN_t<T, N> GetFHNRCoeffs();
|
||||||
template <typename T> vectN_t<T, 4> GetFHNRCoeffs() { return vectN_t<T, 4>{ T(2), T(-1), T(-2), T(1) } / T(2); }
|
template <typename T> vectN_t<T, 4> GetFHNRCoeffs() { return vectN_t<T, 4>{ T(2), T(-1), T(-2), T(1) } / T(2); }
|
||||||
template <typename T> vectN_t<T, 5> GetFHNRCoeffs() { return vectN_t<T, 5>{ T(7), T(1), T(-10), T(-1), T(3) } / T(10); }
|
template <typename T> vectN_t<T, 5> GetFHNRCoeffs() { return vectN_t<T, 5>{ T(7), T(1), T(-10), T(-1), T(3) } / T(10); }
|
||||||
|
@ -114,9 +114,9 @@ template <typename T, size_t N, template<class, class> typename Foo> vectN_t<T,
|
||||||
v(k) = k * v0(k);
|
v(k) = k * v0(k);
|
||||||
return v(k);
|
return v(k);
|
||||||
}
|
}
|
||||||
// Forward Noise-Robust differentiators for irregular space data
|
// Backward Noise-Robust differentiators for irregular space data
|
||||||
template <typename T, size_t N> vectN_t<T, N> GetFNRISDCoeffs() { return GetForwardISDCoeffs<T, N, GetFNRCoeffs>(); }
|
template <typename T, size_t N> vectN_t<T, N> GetFNRISDCoeffs() { return GetForwardISDCoeffs<T, N, GetFNRCoeffs>(); }
|
||||||
// Forward Hybrid Noise-Robust differentiators for irregular space data
|
// Backward Hybrid Noise-Robust differentiators for irregular space data
|
||||||
template <typename T, size_t N> vectN_t<T, N> GetFHNRISDCoeffs() { return GetForwardISDCoeffs<T, N, GetFHNRCoeffs>(); }
|
template <typename T, size_t N> vectN_t<T, N> GetFHNRISDCoeffs() { return GetForwardISDCoeffs<T, N, GetFHNRCoeffs>(); }
|
||||||
|
|
||||||
// Centered Noise-Robust differentiators (tangency at 2nd order): http://www.holoborodko.com/pavel/numerical-methods/numerical-derivative/smooth-low-noise-differentiators/
|
// Centered Noise-Robust differentiators (tangency at 2nd order): http://www.holoborodko.com/pavel/numerical-methods/numerical-derivative/smooth-low-noise-differentiators/
|
||||||
|
@ -197,7 +197,7 @@ vectN_t<T, N> GetSOCNRCoeffs()
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Second-Order Forward Noise-Robust differentiator: http://www.holoborodko.com/pavel/downloads/NoiseRobustSecondDerivative.pdf
|
// Second-Order Backward Noise-Robust differentiator: http://www.holoborodko.com/pavel/downloads/NoiseRobustSecondDerivative.pdf
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
vectN_t<T, N> GetSOFNRCoeffs() { return GetSOCNRCoeffs<T, N>(); } // Coefficients are the same.
|
vectN_t<T, N> GetSOFNRCoeffs() { return GetSOCNRCoeffs<T, N>(); } // Coefficients are the same.
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ vectN_t<T, N> GetSOCNRISDCoeffs()
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Second-Order Forward Noise-Robust Irregular Space Data differentiator: http://www.holoborodko.com/pavel/downloads/NoiseRobustSecondDerivative.pdf
|
// Second-Order Backward Noise-Robust Irregular Space Data differentiator: http://www.holoborodko.com/pavel/downloads/NoiseRobustSecondDerivative.pdf
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
vectN_t<T, N> GetSOFNRISDCoeffs() { return GetSOCNRISDCoeffs<T, N>(); } // Same coefficients
|
vectN_t<T, N> GetSOFNRISDCoeffs() { return GetSOCNRISDCoeffs<T, N>(); } // Same coefficients
|
||||||
|
|
||||||
|
@ -279,10 +279,10 @@ public:
|
||||||
|
|
||||||
} // namespace details
|
} // namespace details
|
||||||
|
|
||||||
// Forward differentiators
|
// Backward differentiators
|
||||||
template <typename T, size_t N> using ForwardNoiseRobustDiff = ForwardDifferentiator<T, N, 1, details::GetFNRCoeffs>;
|
template <typename T, size_t N> using ForwardNoiseRobustDiff = ForwardDifferentiator<T, N, 1, details::GetFNRCoeffs>;
|
||||||
template <typename T, size_t N> using ForwardHybridNoiseRobustDiff = ForwardDifferentiator<T, N, 1, details::GetFHNRCoeffs>;
|
template <typename T, size_t N> using ForwardHybridNoiseRobustDiff = ForwardDifferentiator<T, N, 1, details::GetFHNRCoeffs>;
|
||||||
// Time-Varying forward differentiators
|
// Time-Varying backward differentiators
|
||||||
template <typename T, size_t N> using TVForwardNoiseRobustDiff = TVForwardDifferentiator<T, N, 1, details::GetFNRISDCoeffs>;
|
template <typename T, size_t N> using TVForwardNoiseRobustDiff = TVForwardDifferentiator<T, N, 1, details::GetFNRISDCoeffs>;
|
||||||
template <typename T, size_t N> using TVForwardHybridNoiseRobustDiff = TVForwardDifferentiator<T, N, 1, details::GetFHNRISDCoeffs>;
|
template <typename T, size_t N> using TVForwardHybridNoiseRobustDiff = TVForwardDifferentiator<T, N, 1, details::GetFHNRISDCoeffs>;
|
||||||
|
|
||||||
|
@ -297,14 +297,14 @@ template <typename T, size_t N> using TVCenteredNoiseRobust2Diff = TVCentralDiff
|
||||||
template <typename T, size_t N> using TVCenteredNoiseRobust4Diff = TVCentralDifferentiator<T, N, 1, details::GetCNR4ISDCoeffs>;
|
template <typename T, size_t N> using TVCenteredNoiseRobust4Diff = TVCentralDifferentiator<T, N, 1, details::GetCNR4ISDCoeffs>;
|
||||||
|
|
||||||
|
|
||||||
// Second-order forward differentiators
|
// Second-order backward differentiators
|
||||||
template <typename T, size_t N> using ForwardSecondOrderDiff = ForwardDifferentiator<T, N, 2, details::GetSOFNRCoeffs>;
|
template <typename T, size_t N> using ForwardSecondOrderDiff = ForwardDifferentiator<T, N, 2, details::GetSOFNRCoeffs>;
|
||||||
// Second-order Time-Varying forward differentiators
|
// Second-order Time-Varying backward differentiators
|
||||||
template <typename T, size_t N> using TVForwardSecondOrderDiff = TVForwardDifferentiator<T, N, 2, details::GetSOFNRISDCoeffs>;
|
template <typename T, size_t N> using TVForwardSecondOrderDiff = TVForwardDifferentiator<T, N, 2, details::GetSOFNRISDCoeffs>;
|
||||||
|
|
||||||
// Second-order central differentiators
|
// Second-order central differentiators
|
||||||
template <typename T, size_t N> using CenteredSecondOrderDiff = CentralDifferentiator<T, N, 2, details::GetSOCNRCoeffs>;
|
template <typename T, size_t N> using CenteredSecondOrderDiff = CentralDifferentiator<T, N, 2, details::GetSOCNRCoeffs>;
|
||||||
// Second-order Time-Varying forward differentiators
|
// Second-order Time-Varying backward differentiators
|
||||||
template <typename T, size_t N> using TVCenteredSecondOrderDiff = TVCentralDifferentiator<T, N, 2, details::GetSOCNRISDCoeffs>;
|
template <typename T, size_t N> using TVCenteredSecondOrderDiff = TVCentralDifferentiator<T, N, 2, details::GetSOCNRISDCoeffs>;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ template <typename T>
|
||||||
using vectXc_t = vectX_t<std::complex<T>>; /*!< Eigen complex column-vector */
|
using vectXc_t = vectX_t<std::complex<T>>; /*!< Eigen complex column-vector */
|
||||||
|
|
||||||
enum class FilterType {
|
enum class FilterType {
|
||||||
Forward,
|
Backward,
|
||||||
Centered
|
Centered
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue