C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

DFT係数を直接計算するC++プログラム


離散フーリエ変換(DFT)では、関数の等間隔のサンプルの有限リストが、複素正弦波の有限の組み合わせの係数のリストに変換されます。サンプリングされた関数を元のドメイン(多くの場合、時間または線に沿った位置)から周波数ドメインに変換するために、同じサンプル値を持つ周波数順に並べられました。

アルゴリズム

Begin
   Declare three variables which are the coefficient of linear equation and max value
   Read the variables
   Define a class with two variables real, img
   Create a constructor and set real, img to zero
   Take a variable M and initialize it to some integer
   Create function[M]
   For i=0 to M do
      function[i] = (((a * (double) i) + (b * (double) i)) - c)
   Declare function sine[M]
   Declare function cosine[M]
   for i = 0 to M do
      cosine[i] = cos((2 * i * k * PI) / M)
      sine[i] = sin((2 * i * k * PI) / M)
   for i = 0 to M do
      dft_value.real += function[i] * cosine[i]
      dft_value.img += function[i] * sine[i]
   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 coeff 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);
   }
   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;
   cout << "The coeffs are: ";
   for (int i = 0; i < M; i++) {
      dft_value.real += function[i] * cosine[i];
      dft_value.img += function[i] * sine[i];
   }
   cout << "(" << dft_value.real << ") - " << "(" << dft_value.img << " i)";
}

出力

Enter the coeff of simple linear function:
ax + by = c
4 6 7
Enter the max K value:
4
The coeffs are: (-50) - (-16.246 i)

  1. C ++プログラムでの二分探索?

    二分探索は、半区間探索、対数探索、または二分探索とも呼ばれ、ソートされた配列内のターゲット値の位置を見つける検索アルゴリズムです。二分探索は、ターゲット値を配列の中央の要素と比較します。それらが等しくない場合、ターゲットが存在できない半分が削除され、残りの半分で検索が続行され、再び中央の要素がターゲット値と比較され、ターゲット値が見つかるまでこれが繰り返されます。残りの半分が空の状態で検索が終了した場合、ターゲットは配列に含まれていません。アイデアは単純ですが、バイナリ検索を正しく実装するには、特に配列の値が範囲内の整数のすべてではない場合、終了条件と中間点の計算に関する微妙な点に注意する必要

  2. C ++ Hello、World!プログラム

    C ++は、手続き型、オブジェクト指向、およびジェネリックプログラミングをサポートする汎用プログラミング言語です。 C ++はCのスーパーセットであり、すべての有効なCプログラムはC++でも有効です。 C ++は、データの非表示、カプセル化、継承、ポリモーフィズムなどの機能を備えたオブジェクト指向プログラミングをサポートしています。 Hello、World!を出力する最初のC++プログラムを見てみましょう。 例 #include <iostream> using namespace std; int main() {    cout << &qu