Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ tính hệ số DFT trực tiếp


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úc

Mã 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)