Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint32_t CountRmsValueX100(int16_t* values, int16_t size)
- {
- uint64_t buffer = 0;
- int32_t tmp = 0;
- for (int i = 0; i < size; i++)
- {
- tmp = values[i];
- tmp = tmp * tmp;
- buffer += (uint64_t)(tmp);
- }
- buffer *= 100;
- buffer /= size;
- return math_sqrt((uint32_t)buffer);
- }
- uint32_t math_sqrt(register uint32_t value)
- {
- register uint32_t d = 0, ax = 0;
- __asm volatile(
- "CLZ %[A], %[VALUE]" "\n\t"
- "RSB %[A], %[A], 0x1F" : [A]"=&r" (ax) : [VALUE]"r" (value));
- d = value >> (ax >> 1);
- ax = (d + value / d) >> 1;
- d = (ax + value / ax) >> 1;
- ax = (d + value / d) >> 1;
- value = (ax + value / ax) >> 1;
- return value;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement