得知DIP文章4日

傅立叶变换数学原理将可能完全被引入,下仅仅实现代码。观察下结果,公式在上一篇博客中已经描写叙述

上代码:

//
// main.c
// Fourer2D
//
// Created by 谭升 on 14/11/17.
// Copyright (c) 2014年 谭升. All rights reserved.
// #include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#define VALUE_MAX 255
#define WIDTH 5
#define HEIGHT 5 struct Complex_{
double real;
double imagin;
};
typedef struct Complex_ Complex; int Initdata(double (*src)[WIDTH],int size_w,int size_h){
srand((int)time(0));
for(int i=0;i<size_w;i++){
for(int j=0;j<size_h;j++){
src[i][j]=rand()%VALUE_MAX;
printf("%lf ",src[i][j]);
}
printf(";\n");
}
return 0;
}
int DFT2D(double (*src)[WIDTH],Complex (*dst)[WIDTH],int size_w,int size_h){
for(int u=0;u<size_w;u++){
for(int v=0;v<size_h;v++){
double real=0.0;
double imagin=0.0;
for(int i=0;i<size_w;i++){
for(int j=0;j<size_h;j++){
double I=src[i][j];
double x=M_PI*2*((double)i*u/(double)size_w+(double)j*v/(double)size_h);
real+=cos(x)*I;
imagin+=-sin(x)*I; }
}
dst[u][v].real=real;
dst[u][v].imagin=imagin;
if(imagin>=0)
printf("%lf+%lfj ",real,imagin);
else
printf("%lf%lfj ",real,imagin);
}
printf(";\n");
}
return 0;
}
int IDFT2D(Complex (*src)[WIDTH],Complex (*dst)[WIDTH],int size_w,int size_h){
for(int i=0;i<size_w;i++){
for(int j=0;j<size_h;j++){
double real=0.0;
double imagin=0.0;
for(int u=0;u<size_w;u++){
for(int v=0;v<size_h;v++){
double R=src[u][v].real;
double I=src[u][v].imagin;
double x=M_PI*2*((double)i*u/(double)size_w+(double)j*v/(double)size_h);
real+=R*cos(x)-I*sin(x);
imagin+=I*cos(x)+R*sin(x); }
}
dst[i][j].real=(1./(size_w*size_h))*real;
dst[i][j].imagin=(1./(size_w*size_h))*imagin;
if(imagin>=0)
printf("%lf+%lfj ",dst[i][j].real,dst[i][j].imagin);
else
printf("%lf%lfj ",dst[i][j].real,dst[i][j].imagin);
}
printf(";\n");
}
return 0;
} int main() {
double src[WIDTH][HEIGHT];
Complex dst[WIDTH][HEIGHT];
Complex dst_[WIDTH][HEIGHT];
Initdata(src, WIDTH, HEIGHT);
printf("\n\n");
DFT2D(src,dst,WIDTH,HEIGHT);
printf("\n\n");
IDFT2D(dst,dst_,WIDTH,HEIGHT);
}

因为仅仅是为了观察结果。所以使用了固定大小的二维数组,若实际工作中应该依据须要动态分配内存。例如以下结果:上面为原始数据,中间为DFT后的数据。最以下为IDFT后的结果。

版权声明:本文博主原创文章,博客,未经同意,不得转载。

DDFT的更多相关文章

  1. 空间谱专题02:波束形成(Beamforming)

    作者:桂. 时间:2017-08-22  10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...

  2. js插件---->ueditor编辑器的使用

    UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.今天我们就开始学习一下.大致的效果图如下

  3. day 35初识数据库

    一.数据库概述 1.什么是数据库?先来看看百度怎么说的. 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作.     所谓“数据库”系 ...

  4. 《Python入门》Windows 7下Python Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境. 关于Python的版本 进入Python的网站,鼠标移到导航条上 ...

随机推荐

  1. tomcat 部署web项目异常

    项目部署到Tomcat报这样的异常:validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending cla ...

  2. Lowest Common Ancestor of a Binary Search Tree (BST)

    Given a binary search tree(BST), find the lowest common ancestor of two given nodes in the BST. Node ...

  3. Ubuntu 12.04环境下配置Postgresql和phppgadmin

    Ubuntu 12.04环境下配置Postgresql 9.1 和phppgadmin 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/zjianb ...

  4. Linux系统之UpStart

    子贡问为仁.子曰:“工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者.”——孔子(春秋)<论语·卫灵公> [工欲善其事,必先利其器] 掌握一门技术,知道其发展历程是非常重要的 ...

  5. Vim键盘布局

     Vim键盘布局 用Linux的朋友一定会使用到Vim这个文本编辑器,它是由Vi发展而来的编辑器,其具有代码补齐.编译.错误跳转等丰富的功能,非常适合编程.对于修改Linux配置文件它更是你不二的选择 ...

  6. 电脑bios到底是什么?

    没有哪个玩电脑的人不知道电脑bios,但是真正能明白bios是什么的?身边却没几个,甚至大多数电脑维修站的人员对bios也不够详细了解.一般人不去关心bios是因为它离我们的电脑真正使用仍有一段距离. ...

  7. perl5 附录一 函数集(未定稿)

    附录一 函数集(未定稿) by flamephoenix 一.进程处理函数  1.进程启动函数  2.进程终止函数  3.进程控制函数  4.其它控制函数二.数学函数三.字符串处理函数四.标量转换函数 ...

  8. HDU 1720 A+B Coming

    #include <string> #include <cstdio> #include <iostream> using namespace std; int c ...

  9. JavaScript推断E-mail地址是否合法

    编写自己定义的JavaScript函数checkEmail(),在该函数中首先推断E-mail文本框是否为空,然后在应用正則表達式推断E-mail地址是否合法,假设不合法提示用户 <script ...

  10. C# Webservice

    c#webservice的简单示例   webservice传递的数据只能是序列化的数据,典型的就是xml数据. 下面以一个简单例子为例: (一)新建——-项目---Visual C#---web-- ...