⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.txt

📁 多种数组滤波技术
💻 TXT
字号:
const int FIR_Window24[24] = { 17, 93, -482,-1797,-3768,-5356,-4854, -786, 6965,16589, 24865, 28618,
26326,18923, 9306, 844,-4207,-5497,-4261,-2253, -729, -38, 93, 17};
void FIR_Calculate(struct _Virtual_Value_ *Virtual_Value)
{
unsigned int i,j;
long FIR_Table;
long FIR_Temp;
for(i=0;i<64;i++)
{
FIR_Temp=0;
for(j=0;j<24;j++,i++)
{
FIR_Table = FIR_Window24[j];
FIR_Temp = FIR_Temp + FIR_Table * (*Virtual_Value).SamplingBuff[i];
}
i=i-24;
(*Virtual_Value).CalculateBuff[i]=FIR_Temp>>15;
}
}





***************************** 数字滤波C程 *************************/


/////////////////////////////////限副滤波///////////////////
/*滤波程序返回有效的实际值*/

#define A 10      //A值可根据实际情况调整
char value;       //value为有效值
char filter()
{
char new_value;   //new value为当前采样值
new value=get_ad();
if ((new_value-value>A)‖(value-new_value> A)
return value;
return new_value;
}

/////////////////////////中位值滤波/////////////////////////

#define N 11      //N值可根据实际情况调整
char filter()
{
char value_buf[N];
char count,i,j,temp;
for (count=0;count<N;count++)
{
value_buf[count]=get_ad();  //获取采样值
delay();
}
for (j=0;j<N-1;j++)   //采样值由小到大排列,排序采用冒泡法
{
for (i=0;i<N-j;i++)
{
if(value_buf[i]>value_buf[i+1])
{
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}
}
return value_buf[(N-1)/2];   //取中间值
}

/////////////////////////算术平均滤波//////////////////////

#define N 12
char filter()
{
int sum=0;
for(count=0;count<N;count++)
{
sum+=get_ad();
delay();
}
return (char)(sum/N);
}


///////////////////去极值平均滤波  //////////////////////

#define N 11      //N值可根据实际情况调整
int sum=0;

char filter()
{
char value_buf[N];
char count,i,j,temp;
for (count=0;count<N;count++)
{
value_buf[count]=get_ad();    //获取采样值
delay();
}
for (j=0;j<N-1;j++)  //采样值由小到大排列,排序采用冒泡法
{
for (i=0;i<N-j;i++)
{
if(value_buf[i]>value_buf[i+1])
{
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}
}

for(count=1;count<(N-1);count++)    //去掉第一个和末一个数
{
sum+=value_buf[count];
delay();
}
return (char)(sum/(N-2));
}

///////////////////移动平均滤波(递推平均滤波)///////////

#define N 12
char value_buf[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buf[i++]=get_ad();
if(i=N) i=0;
for (count=0;count<N;count++)
sum+=value_buf[count];
return (char)(sum/N)

}


//////////////////////加权平均滤波///////////////////////
#define N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加权系数表
char code sum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buf[N];
int sum=0;
for (count=0;count<N;count++)
{value_buf[count]=get_ad();    //获取采样值
delay();
}
for (count=0;count<N;count++)
sum+=value_buf[count]*jq[count];
return (char)(sum/sum_jq);
}


/////////////////////////低通滤波////////////////////////

#define a  0.25
char value;       //value为已有值
char filter()
{
char new_value;   //new value为当前采样值
new_value=get_ad();
return (a*new_value+(1-a)*value);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -