ADC过采样代码例子,拿来就用。

#include 
#include 
#include 
 
//此处进行一次采样
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
    {
        Sampling_frequency=4*Sampling_frequency;
    }
    //计算移位数
    for(i=0;i
    {
        shift=2*shift;//这里其实不应该使用移位做除法,但是除数的计算差不多,不过是增加一位ADC就要除2^n次方

//比如增加一位精度是除2^1=2 增加两就是2^2=4

}

    //采样
    for(i=0;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();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(C,算法)