C ++
 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)
>
  1. C ++プログラムを使用してプログラムを起動するにはどうすればよいですか?

    ここでは、メモ帳などのサードパーティアプリケーションやC++プログラムを使用したものを起動する方法を説明します。このプログラムは非常に単純で、コマンドプロンプトコマンドを使用してこのタスクを実行できます。 system()関数内でアプリケーション名を渡します。これにより、それに応じて開きます。 例 #include <iostream> using namespace std; int main() {    cout >> "Opening Nodepad.exe" >> endl;    sy

  2. C++を使用して楕円の領域を見つけるプログラム

    ここでは、C++を使用して楕円の面積を取得する方法を説明します。楕円にはさまざまな部分があります。これらは以下のようなものです。 キーポイント 説明 センター 楕円の中心。また、2つの焦点を結ぶ線分の中心でもあります。 主軸 楕円の最長直径 nmemb これは要素の数であり、各要素のサイズはサイズです。 バイト。 短軸 楕円の最小直径 コード tを指す線分 フォーカス 図で示されている2つのポイント ロータス直腸 蓮の直腸は、焦点を通り、楕円の主軸に垂直な線です。 楕円の面積はΠ𝜋 ∗𝑎a∗b𝑏 サンプルコード #include <iostre