uint16_t isqrt32(uint32_t x)
{
uint32_t m, y, b;
m = 0x40000000;
y = 0;
while (m != 0) {
b = y | m;
y = y >> 1;
if (x >= b) {
x = x - b;
y = y | m;
}
m >>= 2;
}
return y;
}
uint16_t rms(uint16_t * ptr)
{
uint64_t t = 0;
uint16_t i;
for (i = 0; i < BUF_SIZE; i++){
t += (uint32_t) * ptr * (uint32_t) * ptr;
ptr++;}
return (isqrt32(t / BUF_SIZE));
}
在Cortex-M3 @56MHz上面实测,输入数据流1Msps的情况下,该运算CPU负载率约65%。
死太惨没试过。 |