DDFT
得知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的更多相关文章
- 空间谱专题02:波束形成(Beamforming)
作者:桂. 时间:2017-08-22 10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...
- js插件---->ueditor编辑器的使用
UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.今天我们就开始学习一下.大致的效果图如下
- day 35初识数据库
一.数据库概述 1.什么是数据库?先来看看百度怎么说的. 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系 ...
- 《Python入门》Windows 7下Python Web开发环境搭建笔记
最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境. 关于Python的版本 进入Python的网站,鼠标移到导航条上 ...
随机推荐
- iOS网络请求基础
这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在 ...
- BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草( dp )
-------------------------------------------------------------------- #include<cstdio> #include ...
- Database SQL script automation management tools investigation
Recently researched about database SQL scripts auto management tools, recorded the results here. Res ...
- 什么是RAW数据源
RAW数据源 顾名思义,数据源就是数据的源头,怎么理解那? 大家可以把它想象成一个接口,会给我们返回数据,这个数据是动态的. 举个最简单的例子,比如我要在网页中加载出网站的标题,到时候每个页面都要用到 ...
- 上架app被拒原因总结
1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...
- vs2013 cpu占用100%问题
是由于显卡驱动支持wpf有问题 更新驱动或设置里取消自动调节视觉效果 http://support.microsoft.com/kb/2894215
- 电脑cmos是什么?和bois的区别?
很多人都分不清电脑cmos和bois区别,有人一会儿说什么bois设置,有人一会儿说cmos设置.而看起来这两个又似乎差不多,本文将用最简单的白话文告诉各位,什么是cmos,以及cmos和bois的的 ...
- QTableView表格滚动条样式(QSS真是细致到家了)
环境:Qt5.3 IDE:QtCreator 效果预览: 垂直与水平滚动条样式 代码: ui->QTableView->verticalScrollBar()->setStyleSh ...
- Java多线程编程中Future模式的详解
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- Python生成随机数的方法
这篇文章主要介绍了Python生成随机数的方法,有需要的朋友可以参考一下 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与 ...