gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:21 25 4
gpt4 key购买 nike

我一点也不了解 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),可能太小而无法准确定义为 float 。我已经尝试将其改为 double 值,但我仍然得到全 0 的结果。

谢谢!

最佳答案

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

#include <math.h>

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

关于在 C 中从对数转换为线性并取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com