Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

순진한 접근 방식을 사용하여 이산 푸리에 변환을 계산하는 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 << "Enter the max K value: ";
   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 << "The coefficients are: ";
   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
Enter the max K value: 10
The coefficients are:
(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)