- added alternate_impl for gardner
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/radio@991 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
+15
-3
@@ -91,6 +91,7 @@ void LeadLagSetState(lead_lag_filter_t *pObj, radio_float_t state)
|
|||||||
void STRGardnerInit(str_t *pObj)
|
void STRGardnerInit(str_t *pObj)
|
||||||
{
|
{
|
||||||
memset(pObj->d, 0, sizeof(pObj->d));
|
memset(pObj->d, 0, sizeof(pObj->d));
|
||||||
|
pObj->alternate_impl = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
radio_float_t STRGardnerProcess(str_t *pObj, cpx_t x)
|
radio_float_t STRGardnerProcess(str_t *pObj, cpx_t x)
|
||||||
@@ -100,9 +101,20 @@ radio_float_t STRGardnerProcess(str_t *pObj, cpx_t x)
|
|||||||
|
|
||||||
pD = pObj->d;
|
pD = pObj->d;
|
||||||
|
|
||||||
t.real = (pD[1].real - x.real) * pD[0].real;
|
if (pObj->alternate_impl)
|
||||||
t.imag = (pD[1].imag - x.imag) * pD[0].imag;
|
{
|
||||||
Vd = (t.real + t.imag);
|
t.real = (x.real - pD[1].real) * pD[0].real;
|
||||||
|
t.imag = (x.imag - pD[1].imag) * pD[0].imag;
|
||||||
|
|
||||||
|
radio_float_t sign = (t.real*t.imag) < 0 ? -1.0 : 1.0;
|
||||||
|
Vd = sqrt(fabs(t.real) * fabs(t.imag)) * sign;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t.real = (pD[1].real - x.real) * pD[0].real;
|
||||||
|
t.imag = (pD[1].imag - x.imag) * pD[0].imag;
|
||||||
|
Vd = (t.real + t.imag);
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust delay line
|
// Adjust delay line
|
||||||
pD[1] = pD[0];
|
pD[1] = pD[0];
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ typedef struct _lead_lag_coeff_t
|
|||||||
typedef struct _str_t
|
typedef struct _str_t
|
||||||
{
|
{
|
||||||
cpx_t d[2];
|
cpx_t d[2];
|
||||||
|
int alternate_impl;
|
||||||
|
|
||||||
} str_t;
|
} str_t;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user