关于软件数字滤波的疑问
我用单片机采集热电偶温度,由于采集到的数据不稳定,就编写了一个中位值平均滤波程序,程序如下,但在KEIL C 51中编译不能生成HEX文件,提示“Target not created”,如果不加入该滤波程序,编译正常,求高手指点。
if(readtempflag==1) // 計時器中斷到
{
readtempflag=0; // 計時器標誌清0
tempnum[number]=readtemp(); // 讀取1个溫度數據
//*對一維數組tempnum[10]排序*//
for(j=0;j<9;j++)
for(k=0;k<9-j;k++)
{
if(tempnum[k]>tempnum[k+1])
{
count=tempnum[k];
tempnum[k]=tempnum[k+1];
tempnum[k+1]=tempnum[k];
}
}
//*選取排好序的數組中的中間6個值求平均*//
for(n=2;n<8;n++)
{
sum=sum+tempnum[n];
sum=sum/(n-1);
}
number++;
if(number==10)
{
number=0;
}
照你的程序流程,每读一次AD值就要排一次序,并计算一次平均值。
改下流程:先读完10次值,再数字滤波。
是这样的;
但是采样10次再滤波温度就会出现跳变啊,我需要每次采集一个数据放在队尾,把队首的温度丢掉,
我将里面的一段程序改了还是一样的效果;
for(n=2;n<8;n++)
{
sum=sum+tempnum[n];
sum=sum/(n-1);
}
改为
mean=(tempnum[2]+tempnum[3]+tempnum[4]+tempnum[5]+tempnum[6]+tempnum[7]+)/6;
但还是和原来一样的提示 Target not....
顶 加油 我也是新手
你贴的程序是放在主函数中吗?
并且你是用定时中断来确定读取数据的时间,如果每次先读10个值,再滤波,效果应该也差不多吧
没有其他的错误提示吗?只有一个target not created?
你说采样10次在滤波温度会跳变,是测试过确实这样,还是你自己想当然的?
你程序里采集数据是根据定时器定时时间的,这个定时时间有多长?在定时器未溢出的过程中,你要测试的温度会不会跳变?
谢谢你,我刚刚试出来什么原因了,是由于RAM不足导致的。定义了太多的浮点数。
