使用朴素方法计算离散傅立叶变换的 C++ 程序
在离散傅立叶变换 (DFT) 中,将函数的等距样本的有限列表转换为复正弦曲线有限组合的系数列表。它们按具有相同样本值的频率排序,将采样函数从其原始域(通常是时间或沿线的位置)转换为频域。
算法
BeginTake 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