[P][CODE]
//---------------------function name: calc_cycle
void calc_cycle(unsigned int *volt_value)
{ unsigned int i=0; unsigned long hex_value; unsigned int temp_low = 0; unsigned int temp_high = 0; unsigned int temp_seclow = 0; unsigned int number_low = 0; unsigned int number_high = 0; //--------------将16进制数转为10进制数 //10进制数为乘100的数,绕开小数计算 for (i=0;i<Num_of_Results;i++) { hex_value = volt_value; hex_value = (hex_value <<5) + volt_value; // caltmp=Hex_val *33 hex_value = (hex_value << 3) + (hex_value << 1); //caltmp=caltmp*10 hex_value >>=12; volt_value = hex_value; } //---------------寻找第一个最小值 for (i=0;i<Num_of_Results-1;i++) { if (volt_value[i+1]<volt_value && volt_value[i+1]==volt_value[i+2]) { temp_low=i; break; } else continue; } //-----找到第一个最小值后,寻找第一个最大值 for (i=temp_low+1;i<Num_of_Results-1;i++)//locat the first max value { if (volt_value[i+1] >volt_value && volt_value[i+1]==volt_value[i+2]) { temp_high = i+1; break; } else continue; } //---------找到第一个最大值后,寻找第二个最小值 for (i=temp_high+1;i<Num_of_Results-1;i++) // locate the second minimum value { if (volt_value[i+1]<volt_value && volt_value[i+1]==volt_value[i+2]) { temp_seclow=i+1; break; } else continue; } //----------计算两个半周期的样点数 number_high = temp_high-temp_low; ////上半周期采样点数 number_low = temp_seclow-temp_high; ///下半周期采样点数 rate_dc(number_low,number_high,sum); //频率计算子函数
}
void rate_dc(int num_low,int num_high)
{ unsigned int rate=0 ; unsigned int r[3]; rate = 13944/(num_low+num_high); // the SHT0_11 is about 0.004s, the rate in one minute is // 60/((num_low +num_high)*0.004)
}
[/CODE]
以上是我计算处理数据,计算频率的关键函数。[/P][P]计算频率方法使用的是逐步比较法,寻找最先的最低值和最高值。[/P][P]最后计算得到的频率是每分钟内的周期数。[/P][P]我设定的采样周期为0.004s,信号发生器产生的方形波信号周期为0.6s,共采样250个点。[/P][P]我依然得不到正确的频率,求助,哪里有问题?crazy!!![/P] |