我根本不懂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的结果。
谢谢!
答案 0 :(得分:0)
刚刚弄清楚问题是什么:我需要在程序的顶部包含math.h库:
#include <math.h>
没有它,我相信没有log10函数的参考,这反过来导致结果全部为0。我现在包括math.h,一切似乎都运行正常。