Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.66 KB | None | 0 0
  1. uint32_t CountRmsValueX100(int16_t* values, int16_t size)
  2. {
  3.     uint64_t buffer = 0;
  4.     int32_t tmp = 0;
  5.     for (int i = 0; i < size; i++)
  6.     {
  7.         tmp = values[i];
  8.         tmp = tmp * tmp;
  9.         buffer += (uint64_t)(tmp);
  10.     }
  11.     buffer *= 100;
  12.     buffer /= size;
  13.     return math_sqrt((uint32_t)buffer);
  14. }
  15.  
  16. uint32_t math_sqrt(register uint32_t value)
  17. {
  18.     register uint32_t d = 0, ax = 0;
  19.     __asm volatile(
  20.         "CLZ    %[A], %[VALUE]"           "\n\t"
  21.         "RSB    %[A], %[A], 0x1F" : [A]"=&r" (ax) : [VALUE]"r" (value));
  22.     d = value >> (ax >> 1);
  23.     ax = (d + value / d) >> 1;
  24.     d = (ax + value / ax) >> 1;
  25.     ax = (d + value / d) >> 1;
  26.     value = (ax + value / ax) >> 1;
  27.     return value;
  28. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement