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