所以这里有一个小代码,我需要计算一些 rssi 值的平均值:
#include <stdio.h>
#include <math.h>
int main (void)
{
int8_t rssi_linear_sum;
int8_t rssi_val;
int8_t rssi_avg;
int8_t rssi_num = 0;
int8_t get_rssi(int8_t i)
{
return i;
}
/* rssi_get() in my actual code is a function that gets rssi
values through a bluetooth service, it returns an int8_t value, for the
sake of concision, I replaced it with a loop that
would return similar values to what I get.*/
for (int8_t i = -100; i <-10; i+=10)
{
rssi_val= get_rssi(i);
rssi_linear_sum += powf(10, (float)rssi_val / 20);
rssi_num ++;
}
rssi_avg = 20 * log10f(rssi_linear_sum / rssi_num);
printf("%d",rssi_avg );
}
所以我知道要获得分贝值的精确平均值,您必须先将它们线性化,然后再获得平均值。我只是不确定我的代码是否完美地表达了这一点。这更像是一个逻辑问题而不是代码问题,但也许你可以向我介绍一个执行此操作的函数,或者验证我的逻辑确实让我得到了平均值。