在C中从log转换为线性并取平均值

时间:2012-01-13 23:47:47

标签: c logging floating-point double coercion

我根本不懂C,我正在尝试编辑某人的代码,但在尝试将值从日志转换为线性域时遇到问题。

例如,假设我们有一个数组A,它的日志值等于-100 dB,即

float A[100];
int i;

for( i=0; i<100; i++ )
    A[i] = -100;

我想要做的是找到所有值的平均值(显然是-100),但是取线性而非对数域的平均值,即

float tmp_avg = 0.0;
float avg;
int count = 0;

for( i=0; i<100; i++ ) {
    tmp_avg += pow(10.0, A[i]/10.0);
    count++;
}

avg = 10*log10(tmp_avg / count);

但是,我得到的结果都是0。现在我正在处理的代码要比这复杂得多,但是我想知道是否有任何明显的东西我不知道为什么这不起作用。

我有一个想法是10 ^( - 100/10)是一个非常小的值(1e-10),也许太小而无法准确定义为浮点数。我已经尝试过把它变为双倍,但我仍然得到了所有0的结果。

谢谢!

1 个答案:

答案 0 :(得分:0)

刚刚弄清楚问题是什么:我需要在程序的顶部包含math.h库:

#include <math.h>

没有它,我相信没有log10函数的参考,这反过来导致结果全部为0。我现在包括math.h,一切似乎都运行正常。