4

この配列のDFTを計算しようとしていますx_1。非常に単純なはずですが、私の値は低すぎます。私のコードの何が問題になっていますか?

他の例へのリンクはありませ。自分のコードの修正を探しているだけです。

#include <iostream>
#include <complex>
#include <cassert>

int main ()
{
    const unsigned int N = 20;

    const double x_1[N] = {0, 0.3, 0.6, 0.8, 1, 1, 0.9, 0.7, 0.5, 0.2, 0.2, 0.5, 0.7, 0.9, 1, 1, 0.8, 0.6, 0.3, 0};

    for(unsigned int k = 0; k < N; k++)
    {
        std::complex<double> sum(0.0,0.0);
        for(unsigned int j = 0; j < N; j++)
        {
            int integers = -2*j*k;
            std::complex<double> my_exponent(0.0, M_PI/N*(double)integers);
            sum += x_1[j] * std::exp(my_exponent);
        }
        std::cout << abs(sum)/N << std::endl;
    }
    return 0;
} 
4

2 に答える 2

5
std::cout << abs(sum)/N << std::endl;

なぜNで割るのですか?

係数は除算なしです。wikiを参照してください。

これらは私がMatlabで得た値です:

12.0000000000000 + 0.00000000000000i
-0.971586454726535 - 0.153884176858763i
-4.26246117974981 - 1.38495759172886i   
-0.0712959999079796 - 0.0363271264002681i   
-0.473606797749979 - 0.344095480117793i
0.00000000000000 + 0.00000000000000i
-0.237538820250189 - 0.326944137602412i
0.0185095954079375 + 0.0363271264002681i
-0.0263932022500213 - 0.0812299240582274i
0.0243728592265771 + 0.153884176858763i
0.00000000000000 + 0.00000000000000i    
0.0243728592265771 - 0.153884176858763i
-0.0263932022500213 + 0.0812299240582274i
0.0185095954079375 - 0.0363271264002681i    
-0.237538820250189 + 0.326944137602412i 
0.00000000000000 + 0.00000000000000i    
-0.473606797749979 + 0.344095480117793i 
-0.0712959999079796 + 0.0363271264002681i
-4.26246117974981 + 1.38495759172886i   
-0.971586454726535 + 0.153884176858763i

std :: cout << sum << std :: endl;を使用して印刷すると、ほぼ同じ値が表示されます。

于 2012-05-03T15:07:12.893 に答える
0

integers = -2*j*kこれは逆変換ではないので、行にマイナス(-)記号を付けるべきではないと思います

于 2014-07-04T08:03:35.230 に答える