Trong biến đổi Fourier rời rạc (DFT), một danh sách hữu hạn được chuyển đổi thành các mẫu cách đều nhau của một hàm thành danh sách các hệ số của một tổ hợp hữu hạn của sóng sin phức. Chúng được sắp xếp theo tần số của chúng, có các giá trị mẫu giống nhau, để chuyển đổi hàm được lấy mẫu từ miền ban đầu (thường là thời gian hoặc vị trí dọc theo một đường) sang miền tần số.
Thuật toán
Bắt đầu
Khai báo ba biến là hệ số của phương trình tuyến tính và giá trị tối đa
Đọc các biến
Định nghĩa một lớp với hai biến real, img
Tạo constructor và đặt real, img = 0
Lấy một biến M và khởi tạo nó bằng một số nguyên
Tạo function[M]
Với i=0 đến M thực hiện
function[i] = (((a * (double) i) + (b * (double) i)) - c)
Khai báo function sine[M]
Khai báo function cosine[M]
Với i = 0 đến M thực hiện
cosine[i] = cos((2 * i * k * PI) / M)
sine[i] = sin((2 * i * k * PI) / M)
Với i = 0 đến M thực hiện
dft_value.real += function[i] * cosine[i]
dft_value.img += function[i] * sine[i]
In giá trị
Kết thúcMã ví dụ
#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 << "Nhập hệ số của hàm tuyến tính đơn giản:\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 << "Nhập giá trị K tối đa: ";
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 << "Các hệ số là: ";
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)";
}Kết quả
Nhập hệ số của hàm tuyến tính đơn giản: ax + by = c 4 6 7 Nhập giá trị K tối đa: 4 Các hệ số là: (-50) - (-16.246 i)