Использование C ++, как это происходит на микроконтроллере. Мои входы шесть int16_t. Я привел их к int32_t, чтобы я мог сложить их вместе, а затем разделить на 6, а затем сохранить результат в int16_t для передачи. Что-то вроде следующего, и предположим, что someRandomInt - это именно то, случайное 16-битное целое число в каждой строке:
int16_t one = someRandomInt;
int16_t two = someRandomInt;
int16_t three = someRandomInt;
int16_t four = someRandomInt;
int16_t five = someRandomInt;
int16_t six = someRandomInt;
int32_t sum = (int32_t)one + (int32_t)two + (int32_t)three + (int32_t)four + (int32_t)five + (int32_t)six;
int16_t result = (int16_t)(sum / 6);
Я делаю это 16384 раз в секунду, а затем выполняю демодуляцию I / Q для массива результатов.
Играя с этим в Python, я рассчитал, что по всему диапазону возможностей для суммы (от -196601 до 196601), что когда я делю на 6 и беру десятичные части всего, среднее десятичная часть - 0,417 ± 0,285. Моя интуиция заключается в том, что это то, что я теряю , когда делаю математику выше. Это верно? Меня беспокоит, когда значения датчика близки к нулю.