- 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%。
死太惨没试过。
|