unwrap delta

This commit is contained in:
Ahmet Inan 2019-02-07 14:08:50 +01:00
commit 6fc424dca6

9
fmd.hh
View file

@ -15,6 +15,14 @@ class FMD1
typedef typename complex_type::value_type value_type; typedef typename complex_type::value_type value_type;
value_type prev; value_type prev;
value_type scale; value_type scale;
value_type unwrap(value_type angle)
{
if (angle < -DSP::Const<value_type>::Pi())
return angle + DSP::Const<value_type>::TwoPi();
if (angle > DSP::Const<value_type>::Pi())
return angle - DSP::Const<value_type>::TwoPi();
return angle;
}
public: public:
constexpr FMD1() : prev(0), scale(0) constexpr FMD1() : prev(0), scale(0)
{ {
@ -27,6 +35,7 @@ public:
{ {
value_type phase = arg(input); value_type phase = arg(input);
value_type delta = phase - prev; value_type delta = phase - prev;
delta = unwrap(delta);
prev = phase; prev = phase;
return scale * delta; return scale * delta;
} }