|
请教一下,这个滤波器的代码在下面,是根据什么公式写出的代码?滤波器是什么类型的滤波器?原理是什么?
typedef struct
{
double PrevOut;
double PrevIn;
double Frequency;
double delta;
double par;
}FIRST_ORDER_FILTER;
typedef struct
{
double PreIn1;
double PreIn2;
double PreOut1;
double PreOut2;
double fWn;
double fKesai;
double k, k1, k2, k3, k4, k5, k6;
}SECOND_ORDER_FILTER;
void ResetFirstOrderFilter(FIRST_ORDER_FILTER *pFilter, double Frequency)
{
double delta, par;
delta = 1.0/(2.0*PI*Frequency);
par = 1.0/(2.0*delta + Ts);
pFilter->Frequency = Frequency;
pFilter->delta = delta;
pFilter->par = par;
pFilter->PrevIn = 0.0;
pFilter->PrevOut = 0.0;
}
void ResetSecondOrderFilter(SECOND_ORDER_FILTER *pFilter, double ffWn, double ffKesai)
{
double k;
pFilter->PreIn1 = 0.0;
pFilter->PreIn2 = 0.0;
pFilter->PreOut1 = 0.0;
pFilter->PreOut2 = 0.0;
pFilter->fWn = ffWn;
pFilter->fKesai = ffKesai;
k = ffWn * ffWn;
pFilter->k = k;
pFilter->k1 = 4.0 - 4.0*ffWn*Ts*ffKesai + Ts*Ts*ffWn*ffWn;
pFilter->k2 = 2.0*Ts*Ts*ffWn*ffWn - 8.0;
pFilter->k3 = 4.0 + 4.0*ffWn*Ts*ffKesai + Ts*Ts*ffWn*ffWn;
pFilter->k4 = k*Ts*Ts;
pFilter->k5 = 2.0*k*Ts*Ts;
pFilter->k6 = k*Ts*Ts;
}
double FirstOrderFilterOutput(FIRST_ORDER_FILTER *pFilter, double fIn)
{
double fPrevOut, fPrevIn;
double delt, par;
double fOut;
delt = pFilter->delta;
par = pFilter->par;
fPrevIn = pFilter->PrevIn;
fPrevOut = pFilter->PrevOut;
fOut = par*((2.0*delt - Ts)*fPrevOut + Ts*fPrevIn + Ts*fIn);
pFilter->PrevIn = fIn;
pFilter->PrevOut = fOut;
return fOut;
}
double SecondOrderFilterOutput(SECOND_ORDER_FILTER *pFilter, double fIn)
{
double mfOut;
mfOut = (pFilter->k4 * pFilter->PreIn2 +
pFilter->k5 * pFilter->PreIn1 +
pFilter->k6 * fIn -
pFilter->k1 * pFilter->PreOut2 -
pFilter->k2 * pFilter->PreOut1)/pFilter->k3;
pFilter->PreOut2 = pFilter->PreOut1;
pFilter->PreOut1 = mfOut;
pFilter->PreIn2 = pFilter->PreIn1;
pFilter->PreIn1 = fIn;
return mfOut;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|