物探论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 827|回复: 0

二维傅里叶变换c程序

[复制链接]
发表于 2013-2-25 19:03:30 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"FFT.h"
//申请二维动态数组的函数
void MySpace(float ***p, int m, int n)
{
        int i;
        *p=(float **)calloc(m,sizeof(float *));
        for(i=0; i<m; i++)
                (*p)=(float *)calloc(n,sizeof(float));
}
//释放申请的二维动态数组
void FreeMySpace(float ***p, int m)
{
        int i;
        for(i=0; i<m; i++)
                free((*p));
        free(*p);
}
//矩阵转置a[m][n]->b[n][m]
void Zhuan(float ***a,float ***b,int m,int n)
{
        int i,j;
        for(i=0; i<n; i++)
                for(j=0; j<m; j++)
                        (*b)[j]=(*a)[j];
}
//2D-FFT tag=1,正变换;tag=-1,反变换
void FFT2D(float **xr,float **xi,int m,int n,int tag)
{
        int i,j,k1,k2;
        float **xtr, **xti;
        MySpace(&xtr,n,m);
        MySpace(&xti,n,m);
        k1=(int)(log(n)/log(2)+0.5);
        k2=(int)(log(m)/log(2)+0.5);
        for(i=0; i<m; i++)
                fft(xr,xi,k1,tag);

        Zhuan(&xr,&xtr,m,n);
        Zhuan(&xi,&xti,m,n);
        for(i=0; i<n; i++)
                fft(xtr,xti,k2,tag);
        Zhuan(&xtr,&xr,n,m);
        Zhuan(&xti,&xi,n,m);
        FreeMySpace(&xtr,n);
        FreeMySpace(&xti,n);
}

void main()
{
        int i,j;
        const int M=64;
        const int N=256;
        float **xr, **xi;
        FILE *fp1, *fp2;
   
        MySpace(&xr,M,N);
        MySpace(&xi,M,N);
        fp1=fopen("2D-test-64-256.dat","rb" );
        fp2=fopen("2D-64-256.dat","wb" );
        for(i=0; i<M; i++)
                for(j=0; j<N; j++)
                        fread(&xr[j],sizeof(float),1,fp1);
        FFT2D(xr,xi,M,N,1);
        for(i=0; i<M; i++)
                for(j=0; j<N; j++)
                        fwrite(&xr[j],sizeof(float),1,fp2);
        FreeMySpace(&xr,M);
        FreeMySpace(&xi,M);
}




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|物探论坛 ( 鄂ICP备12002012号 微信号:iwutan )

GMT+8, 2024-5-2 10:55 , Processed in 0.128147 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表