由用户输入一个长度为5的队列,前5个数据存储在前5个,输入第6个数据时挤出第一个,
要求输入一组含毛刺的数据,削平毛刺,即输出削平波动过大的数据(两个相邻的一阶导数之差不能太大)
通过数组或链表实现
程序为死循环(while)
急求!!!!!
谢谢大佬的帮助,急求
问题描述清楚一点,这样别人才能回答你的问题
如果不想自己做,就报个价吧。
给你提供一下解决思路.
void delHead();//专门删掉队首,当输入的时候,队列计数器为6的时候,删掉队首.
void delException();//专门删掉新新数字添加到队列后,两个相邻的一阶导数之差太大的数
#define DN 5
static int filter_buff[DN] = {0};
static int currdata_ptr = 0;
int Filter(int din)
{
int i, j, temp;
long sum = 0;
// currdata_ptr指向最旧的数据,并且需要卷回
if(currdata_ptr >= DN) {
currdata_ptr = 0;
}
filter_buff[currdata_ptr++] = din;
// 进行排序,filter_buff[0]为最小值,filter_buff[DN-1]为最大值;
for (j=0;j<DN-1;j++)
{
for (i=0;i<DN-j;i++)
{
if(filter_buff[i]>filter_buff[i+1]) {
temp =filter_buff[i];
filter_buff[i] =filter_buff[i+1];
filter_buff[i+1] = temp;
}
}
sum += filter_buff[j];
}
// 去除最小值(最大值没有参与求和)
// 中位值平均滤波
sum -= filter_buff[0];
return (sum/(DN-2));
}
// 上面是进行滤波的算法,去掉5个数中的最大值和最小值,输出平均值。
// 估计楼主应该是对系统的某个输入数据进行滤波处理,输入数据带有噪声,因此输入数据需要从其他软件构件传递过来。
// 楼主说的死循环是指嵌入式软件main程序里面的“超级大循环”吗?
// 这个大循环在每一个用这种前台/后台处理方式的嵌入式软件都有,应该没有必要在这里写出来。