ในการแปลงฟูริเยร์แบบไม่ต่อเนื่อง (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)