0

重複の可能性:
Cプログラミング部門

値をMelFilterに変換しようとしていますが、結果を出力するたびに、doubleであっても常に「0」になります。フロートでしょうか?方程式に関する記事は次のとおりです。http://en.wikipedia.org/wiki/Mel_scale

関数は次のとおりです。

double MFCC::mel_filter(int val)
{
     double tmp;
     tmp = 2595 * log10(1 + val / 700);
     cout << tmp << endl;
     return tmp;
    }

    vector<double> MFCC::mel_frame(int size)
    {
    vector<double> mel_Frame;
    for(int i=1; (i < size); i++)
    {
          this->mel_filter(i);
    }

    return mel_Frame;
    }

主に、..(1、2、3、4、5、6、7 ......)などの値を渡します。

また、「1」を入力すると、式は次のようになります。

m = 2595 * log10(1 + 1 / 700) = 1.6

ヘルプや提案はありますか?

4

4 に答える 4

5

あなたの問題は

log10(1 + val / 700)

これは、実際の除算ではなく整数除算を使用しています。試してみてください

log10(1 + val / 700.0)
于 2012-12-04T20:55:14.200 に答える
3

の型valは int です。したがって、式val / 700は整数演算で評価されます。結果はゼロです。

于 2012-12-04T20:55:14.883 に答える
2

整数リテラルを使用すると、整数演算が使用されます。つまり、小数点以下は切り捨てられます。定数を 10 進数として明示的に記述し、倍精度演算が使用されます。

tmp = 2595.0 * log10(1.0 + val / 700.0);
于 2012-12-04T20:55:36.967 に答える
2

試す

log10(1 + val / (float) 700)
于 2012-12-05T01:43:47.890 に答える