学习DIP第3天

傅里叶变换是一个非常大的话题。今天实现了下一维的DFT,兴许将完毕其它傅里叶系的算法实现和实验。

DFT公式:

                       

    当中e 是自然对数的底数,i是虚数单位。通常以符号表示这一变换,即

                 

IDFT公式:

                                 
   记为:
                            

c语言代码:

//
// main.c
// Fourer1D
//
// Created by Tony on 14/11/16.
// Copyright (c) 2014年 Tony. All rights reserved.
// #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define SIZE 1000
#define VALUE_MAX 2000
struct Complex_{
double real;
double imagin;
};
typedef struct Complex_ Complex; void setInput(double * data,int n){
printf("Setinput signal:\n");
srand((int)time(0));
for(int i=0;i<SIZE;i++){
data[i]=rand()%VALUE_MAX;
printf("%lf\n",data[i]);
} }
void DFT(double * src,Complex * dst,int size){
clock_t start,end;
start=clock(); for(int m=0;m<size;m++){
double real=0.0;
double imagin=0.0;
for(int n=0;n<size;n++){
double x=M_PI*2*m*n;
real+=src[n]*cos(x/size);
imagin+=src[n]*(-sin(x/size)); }
dst[m].imagin=imagin;
dst[m].real=real;
if(imagin>=0.0)
printf("%lf+%lfj\n",real,imagin);
else
printf("%lf%lfj\n",real,imagin);
}
end=clock();
printf("DFT use time :%lf for Datasize of:%d\n",(double)(end-start)/CLOCKS_PER_SEC,size); } void IDFT(Complex *src,Complex *dst,int size){
//Complex temp[SIZE];
clock_t start,end;
start=clock();
for(int m=0;m<size;m++){
double real=0.0;
double imagin=0.0;
for(int n=0;n<size;n++){
double x=M_PI*2*m*n/size;
real+=src[n].real*cos(x)-src[n].imagin*sin(x);
imagin+=src[n].real*sin(x)+src[n].imagin*cos(x); }
real/=SIZE;
imagin/=SIZE;
if(dst!=NULL){
dst[m].real=real;
dst[m].imagin=imagin;
}
if(imagin>=0.0)
printf("%lf+%lfj\n",real,imagin);
else
printf("%lf%lfj\n",real,imagin);
}
end=clock();
printf("IDFT use time :%lfs for Datasize of:%d\n",(double)(end-start)/CLOCKS_PER_SEC,size); }
int main(int argc, const char * argv[]) {
double input[SIZE];
Complex dst[SIZE];
setInput(input,SIZE);
printf("\n\n");
DFT(input, dst, SIZE);
printf("\n\n");
IDFT(dst, NULL, SIZE); }


一维DFT的更多相关文章

  1. Matlab图像处理系列4———傅立叶变换和反变换的图像

    注意:这一系列实验的图像处理程序,使用Matlab实现最重要的图像处理算法 1.Fourier兑换 (1)频域增强 除了在空间域内能够加工处理图像以外,我们还能够将图像变换到其它空间后进行处理.这些方 ...

  2. fft ocean注解

    针对这两篇教程: http://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-tran ...

  3. 旧文备份:FFTW介绍

    1. FFTW介绍 FFTW由麻省理工学院计算机科学实验室超级计算技术组开发的一套离散傅立叶变换(DFT)的计算库,开源.高效和标准C语言编写的代码使其得到了非常广泛的应用,Intel的数学库和Sci ...

  4. Matlab图像处理系列4———图像傅立叶变换与反变换

    注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...

  5. Other-Website-Contents.md

    title: 本站目录 categories: Other sticky: 10 toc: true keywords: 机器学习基础 深度学习基础 人工智能数学知识 机器学习入门 date: 999 ...

  6. 灰度图像--图像分割 阈值处理之OTSU阈值

    学习DIP第55天 转载请标明本文出处:***http://blog.csdn.net/tonyshengtan ***,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:http ...

  7. OpenCV代码提取:dft函数的实现

    The Fourier Transform will decompose an image into its sinus and cosines components. In other words, ...

  8. DFT到FFT的理解

    DFT简化计算理解(FFT)   DFT: WN=e^(-j*2*pi/N) DFT复杂度o(N^2) 降低与N^2的依赖 使N = LM  (L^2+m^2 <= N^2) N点DFT分解为M ...

  9. Opencv+Zbar二维码识别(一维码校正)

    一维码由一组规则排列的黑色线条.白色线条以及对应的字符组成.对倾斜的(没有严重形变)一维码的角度校正,可以根据其黑白相间.排列规则的特点,计算傅里叶频谱,通过傅里叶频谱中直线的倾斜角度计算空间域图像一 ...

随机推荐

  1. MaraDNS与DeadWood一起配置为本地机器提供小型化DNS服务

    因为工作测试需要,要在本机装一个环境,可以解析自己命名的域名,即域名->IP的映射服务.在网上找了下,都说是MaraDNS不错.也试了下,在本地配置是没有问题的.从官网上下载的是2-0-11.w ...

  2. JS相关链接

    给开发者提供的 35 款 JavaScript 图形图表库: http://news.cnblogs.com/n/201518/ 主题:[前端必看]JavaScript推荐资料合集: http://w ...

  3. (转)js arguments对象

    在javascript中,不需要明确指出参数名,就能访问它们.如: function hi(){if(arguments[0]=="andy"){     return;}aler ...

  4. [转]MySQL数据库的热备份

    一.系统环境描述:      1.两台数据库服务器,A和B:      2.当前A正在使用,将作为主服务器,B为准备用来做备用数据库服务器:      3.要进行热备份的数据库中含有类型为MyISAM ...

  5. 修复 status 为 unusable 的 index

    以DBA权限登陆,执行以下脚本即可. declare     -- 指向所有 UNUSABLE 状态的 index 的游标      cursor c is        select index_n ...

  6. PHP Filesystem

    Runtime 配置 Filesystem 函数的行为受到 php.ini 中设置的影响. Filesystem 配置选项: 名称 默认 描述 可改变 allow_url_fopen "1& ...

  7. Css3案例

    <!DOCTYPE html> <html> <meta charset=utf-> <head> <style> body{ backgo ...

  8. 手机页面关于头部固定定位与input出现的问题

    前些天写了一个页面,要求头部导航进行固定定位position:fixed.内容区域有输入框input.在大多数手机上都是显示正常的,可偏在一些低版本的手机却出现问题了. 把我给苦恼的不行. 问题:头部 ...

  9. Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法

    Linux查看已经分好的区[root@linuxidc ~]# fdisk -l /dev/sda   Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 he ...

  10. PYTHON文件多线程下载

    其实,在一般的文件编程中,这有两个概念要说明: 第一是,下载一个大文件,将这个大文件多为多线程. 第二是,下载N多小文件,将每个线程指定下载多个小文件. 现在实现的是多线程下载一个大文件. 今天完成了 ...