Преобразование из логарифма в линейный в C и принимая среднее - PullRequest
2 голосов
/ 14 января 2012

Я плохо знаю C, и пытаюсь отредактировать чей-то код, но у меня возникают проблемы при попытке преобразовать значения из журнала в линейные домены.

Например,скажем, у нас есть массив A, который заполнен значениями журнала, равными -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 голосов
/ 18 января 2012

Просто выяснил, в чем проблема: мне нужно было включить библиотеку math.h вверху программы:

#include <math.h>

Без этого я считаю, что не было ссылки на функцию log10, которая, в свою очередь, приводила к тому, что результатом были все 0. Теперь я включил math.h, и все, кажется, работает нормально.

...