直接計算 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)
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP