使用朴素方法计算离散傅立叶变换的 C++ 程序

在离散傅立叶变换 (DFT) 中,将函数的等距样本的有限列表转换为复正弦曲线有限组合的系数列表。它们按具有相同样本值的频率排序,将采样函数从其原始域(通常是时间或沿线的位置)转换为频域。

算法

Begin

   Take a variable M and initialize it to some integer

   Declare an array function[M]

   For i = 0 to M-1 do

      function[i] = (((a * (double) i) + (b * (double) i)) - c)

   Done

   Declare function sine[M]

   Declare function cosine[M]

   for i =0 to M-1 do

      cosine[i] = cos((2 * i * k * PI) / M)

      sine[i] = sin((2 * i * k * PI) / M)

   Done

   Declare DFT_Coeff dft_value[k]

   for j = 0 to k-1 do

      for i = 0 to M-1 do

         dft_value.real += function[i] * cosine[i]

         dft_value.img += function[i] * sine[i]

      Done

   Done

   Print the value

End

示例代码

#include<iostream>

#include<math.h>

using namespace std;

#define PI 3.14159265

class DFT_Coeff {

   public:

   double real, img;

   DFT_Coeff() {

      real = 0.0;

      img = 0.0;

   }

};

int main(int argc, char **argv) {

   int M= 10;

   cout << "Enter the coefficient of simple linear function:\n";

   cout << "ax + by = c\n";

   double a, b, c;

   cin >> a >> b >> c;

   double function[M];

   for (int i = 0; i < M; i++) {

      function[i] = (((a * (double) i) + (b * (double) i)) - c);

      //System.out.print( " "+function[i] + " ");

   }

   cout << "输入最大 K 值: ";

   int k;

   cin >> k;

   double cosine[M];

   double sine[M];

   for (int i = 0; i < M; i++) {

      cosine[i] = cos((2 * i * k * PI) / M);

      sine[i] = sin((2 * i * k * PI) / M);

   }

   DFT_Coeff dft_value[k];

   cout << "系数为: ";

   for (int j = 0; j < k; j++) {

      for (int i = 0; i < M; i++) {

         dft_value[j].real += function[i] * cosine[i];

         dft_value[j].img += function[i] * sine[i];

      }

      cout << "(" << dft_value[j].real << ") - " << "(" << dft_value[j].img <<" i)\n";

   }

}

输出结果
Enter the coefficient of simple linear function:

ax + by = c

4 5 6

输入最大 K 值: 10

系数为:

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

(345) - (-1.64772e-05 i)

以上是 使用朴素方法计算离散傅立叶变换的 C++ 程序 的全部内容, 来源链接: utcz.com/z/358498.html

回到顶部