#include <QCoreApplication>
#include <string.h>
#include <QTime>
//此处进行一次采样
unsigned int mydata()
{
unsigned int data=0;
data=qrand()%65535;
return data;
}
//过采样公式 (4^n)采样次数合 进行(2^n)右移位 n为增加的位数
unsigned int oversampling(unsigned char Places,unsigned int (*p)(void))
{
unsigned int Sampling_frequency=4;
unsigned int shift=2;
unsigned int i=0;
unsigned int sum=0;//这个合其实应该是浮点型的
//计算需要采样的次数
for(i=0;i<Places-1;i++)
{
Sampling_frequency=4*Sampling_frequency;
}
//计算移位数
for(i=0;i<Places-1;i++)
{
shift=2*shift;//这里其实不应该使用移位做除法,但是除数的计算差不多,不过是增加一位ADC就要除2^n次方
//比如增加一位精度是除2^1=2 增加两就是2^2=4
}
//采样
for(i=0;i<Sampling_frequency;i++)
{
sum+=p();
}
sum=(float)sum*1.0/(float)shift;//在这里下一步应该补充一个四舍五入,然后返回结果即可
return (unsigned int)sum;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
printf("%ld\n",oversampling(8,mydata));
return a.exec();
}