質問

私はCをよく知らないので、誰かのコードを編集しようとしていますが、ログから線形ドメインに値を変換しようとするときに問題があります。

たとえば、-100 dBに等しいログ値でいっぱいの配列Aがあるとしましょう。

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の結果が得られます。

ありがとう!

役に立ちましたか?

解決

問題が何であるかを理解しました。プログラムのトップにMath.hライブラリを含める必要がありました。

#include <math.h>

それがなければ、log10関数の参照はなかったと信じており、結果がすべて0になりました。私は今、Math.hを含めていますが、すべてが正常に機能しているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top