傅里叶变换(由公式推导出来的c++源代码)

来源:互联网 发布:公安部软件违章查询 编辑:程序博客网 时间:2024/06/05 03:30

一维傅立叶变化对应程序里面的一维:


二维傅立叶变化对应程序里面的二维:


#include <iostream>#include <math.h>using namespace std;float fx[4] = {1, 2, 4, 4};float fxReal[4] = {0, 0, 0, 0};float fxImag[4] = {0, 0, 0, 0};float Real[4] = {0, 0, 0, 0};float Imag[4] = {0, 0, 0, 0};float e = 2.72;float pi = 3.14;float fxTwo[4][4] = {{1, 2, 4, 4},                 {1, 2, 4, 4},                 {1, 2, 4, 4},                 {1, 2, 4, 4}};float fxRealTwo[4][4] = {{0, 0, 0, 0},                        {0, 0, 0, 0},                        {0, 0, 0, 0},                        {0, 0, 0, 0}};float fxImagTwo[4][4] = {{0, 0, 0, 0},                        {0, 0, 0, 0},                        {0, 0, 0, 0},                        {0, 0, 0, 0}};float RealTwo[4][4] = {{0, 0, 0, 0},                      {0, 0, 0, 0},                      {0, 0, 0, 0},                      {0, 0, 0, 0}};float ImagTwo[4][4] = {{0, 0, 0, 0},                      {0, 0, 0, 0},                      {0, 0, 0, 0},                      {0, 0, 0, 0}};int main(int argc, char *argv[]){    /*一维傅里叶变换*/    for (int j = 0; j < 4; j++)    {        for (int i = 0;i < 4;i++)        {           Real[j] += fx[i] * cos(-2 * pi * j * i / 4);           Imag[j] += fx[i] * sin(-2 * pi * j * i / 4);        }    }    for (int i = 0; i < 4; i++)    {         cout <<"Real:"<<Real[i]<<" Imag:"<<Imag[i]<<endl;    }    /*一维傅里叶反变换*/    for (int j = 0; j < 4; j++)    {        for (int i = 0;i < 4;i++)        {         fxReal[j] += (Real[i] * cos(2 * pi * j * i / 4) - Imag[i] * sin(2 * pi * j * i / 4));         fxImag[j] += (Real[i] * sin(2 * pi * j * i / 4) - Imag[i] * cos(2 * pi * j * i / 4));        }    }    for (int i = 0; i < 4; i++)    {         cout <<"Real:"<<fxReal[i]/4<<" Imag:"<<fxImag[i]/4<<endl;    }    /*二维傅里叶变换*/    for (int v = 0; v < 4; v++)    {        for (int u = 0; u < 4; u++)        {            for (int j =0; j < 4; j++)            {                for (int i = 0; i < 4; i++)                {                    RealTwo[v][u]+=fxTwo[j][i] * cos(2 * pi * u * i / 4 + 2 * pi * v * j /4);                    ImagTwo[v][u]+=fxTwo[j][i] * sin(-2 * pi * u * i / 4 - 2 * pi * v * j /4);                }            }        }    }    /*二维傅里叶反变换*/    for (int v = 0; v < 4; v++)    {        for (int u = 0; u < 4; u++)        {            for (int j =0; j < 4; j++)            {                for (int i = 0; i < 4; i++)                {                    fxRealTwo[v][u]+=RealTwo[j][i] * cos(2 * pi * u * i / 4 + 2 * pi * v * j /4) - ImagTwo[j][i] * sin(2 * pi * u * i / 4 + 2 * pi * v * j /4);                    fxImagTwo[v][u]+=RealTwo[j][i] * sin(2 * pi * u * i / 4 + 2 * pi * v * j /4) - ImagTwo[j][i] * cos(2 * pi * u * i / 4 + 2 * pi * v * j /4);                }            }        }    }    cout<<fxRealTwo[2][2]/16<<fxImagTwo[2][2]/16<<endl;    return 0;}


原创粉丝点击