2

我根本不太了解 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 的结果。

谢谢!

4

1 回答 1

0

刚刚弄清楚问题出在哪里:我需要在程序顶部包含 math.h 库:

#include <math.h>

没有它,我相信没有对 log10 函数的引用,这反过来导致结果全为 0。我现在包含 math.h 并且一切似乎都运行良好。

于 2012-01-17T20:33:34.137 回答