156 lines
2.4 KiB
C
156 lines
2.4 KiB
C
|
|
|
|||
|
|
#define _IN_FILTER_C
|
|||
|
|
#include "filter.h"
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
// һ<><D2BB><EFBFBD>ͺ<EFBFBD><CDBA>˲<EFBFBD><CBB2><EFBFBD>
|
|||
|
|
#if (1)
|
|||
|
|
|
|||
|
|
int LPF1st(LPF1stData * pLpf1st, int newData)
|
|||
|
|
{
|
|||
|
|
int data = 0;
|
|||
|
|
if (pLpf1st != NULL)
|
|||
|
|
{
|
|||
|
|
if (pLpf1st->f1value < 0)
|
|||
|
|
{
|
|||
|
|
pLpf1st->f1value = newData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// һ<><D2BB><EFBFBD>ͺ<EFBFBD><CDBA>˲<EFBFBD>
|
|||
|
|
pLpf1st->f1value = newData * pLpf1st->lowpassxs + pLpf1st->f1value * (1-pLpf1st->lowpassxs);
|
|||
|
|
data = pLpf1st->f1value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return data;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>IIR<49>˲<EFBFBD><CBB2><EFBFBD>
|
|||
|
|
#if (1)
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
int LPF2nd(LPF2ndData * pLpf2nd, int newData)
|
|||
|
|
{
|
|||
|
|
int data = 0;
|
|||
|
|
|
|||
|
|
if (pLpf2nd != NULL)
|
|||
|
|
{
|
|||
|
|
if (pLpf2nd->f2value < 0)
|
|||
|
|
{
|
|||
|
|
pLpf2nd->preout = newData;
|
|||
|
|
pLpf2nd->lastout = newData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>IIR<49>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ:Y<><59>n)= b0*xn + b1*xn-1 + b2*xn-2 - (a1*xn-1 + a2*xn-2)
|
|||
|
|
|
|||
|
|
// <20>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b1 * xn-1 + b2 * xn-2 <20><>b1<62><31>b2<62><32>ϵ<EFBFBD><CFB5>Ϊ0
|
|||
|
|
pLpf2nd->f2value = (newData * pLpf2nd->b0)+ (pLpf2nd->lastout * pLpf2nd->a1) - (pLpf2nd->preout * pLpf2nd->a2);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pLpf2nd->preout = pLpf2nd->lastout;
|
|||
|
|
pLpf2nd->lastout = pLpf2nd->f2value;
|
|||
|
|
data = pLpf2nd->lastout;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return data;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
|||
|
|
#if (1)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ȩֵ
|
|||
|
|
int WRAFilter(int * pBuff, int len)
|
|||
|
|
{
|
|||
|
|
float value = 0;
|
|||
|
|
int i;
|
|||
|
|
int coe, coesum;
|
|||
|
|
|
|||
|
|
if (pBuff == NULL || len <= 0)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
coe = 1; // Ȩֵ<C8A8><D6B5>1<EFBFBD><31>ʼ
|
|||
|
|
coesum = 0;
|
|||
|
|
for (i = 0; i < len; i++)
|
|||
|
|
{
|
|||
|
|
value += *pBuff++ * coe; // <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
|
|||
|
|
coesum += coe;
|
|||
|
|
coe++; // Ȩֵ<C8A8><D6B5><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩֵ<C8A8><D6B5>
|
|||
|
|
}
|
|||
|
|
value /= coesum; // <20><>Ȩƽ<C8A8><C6BD>ֵ
|
|||
|
|
|
|||
|
|
return value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><>λֵƽ<D6B5><C6BD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
|||
|
|
#if (1)
|
|||
|
|
|
|||
|
|
int MAFilter(int * pBuff, int len)
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
s32 value = 0;
|
|||
|
|
|
|||
|
|
if (pBuff == NULL || len <= 0)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (len <= 5) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD>ֱ<EFBFBD><D6B1>ȡƽ<C8A1><C6BD>ֵ
|
|||
|
|
{
|
|||
|
|
// ȡƽ<C8A1><C6BD><EFBFBD><EFBFBD>
|
|||
|
|
for (i = 0; i < len; i++)
|
|||
|
|
{
|
|||
|
|
value += *pBuff++;
|
|||
|
|
}
|
|||
|
|
value /= len;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
s32 min, max, temp;
|
|||
|
|
min = max = *pBuff; // <20><>һ<EFBFBD><D2BB>ֵ
|
|||
|
|
|
|||
|
|
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ۼӺͲ<D3BA><CDB2>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
|
|||
|
|
for (i = 0; i < len; i++)
|
|||
|
|
{
|
|||
|
|
temp = *pBuff++;
|
|||
|
|
value += temp; // <20><><EFBFBD>ϵ<EFBFBD>ǰֵ
|
|||
|
|
if (min > temp)
|
|||
|
|
{
|
|||
|
|
min = temp;
|
|||
|
|
}
|
|||
|
|
if (max < temp)
|
|||
|
|
{
|
|||
|
|
max = temp;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ۼӺͼ<D3BA>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
|
|||
|
|
value -= min;
|
|||
|
|
value -= max;
|
|||
|
|
|
|||
|
|
// ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
|||
|
|
value /= (len-2);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return value;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|