背景:最近看到实验室其他同学在用傅立叶变换解决问题,我也想通过并行来解决这个问题,所以看了一下傅立叶变换的东西,感觉涵盖的东西还能多,我只是初步做了一下了解(一定很片面,但是我主要是为了应用它,主要了解它的实现原理),据我理解:傅立叶分析使用一系列sin函数和cos函数表示一个连续函数。傅立叶变化就是一个将时间域的函数序列f(k)映射到频率域上的函数序列F(j)。序列f(k)表示一组信号采样的时间函数,序列F(j)表示傅立叶系数的分布,这个分布是关于频率的函数。

傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。

离散傅立叶变换(DFT)是一个矩阵-向量的乘积FNx,其中fij=wnij,(i,j从0到n),wn是单位元的第n个本原根。

复数知识回顾:

(1)单位1的n次复根是复数w,即wn=1;

(2)单位1的n次复根共有n个,即e2∏*i*k/n,其中k=1,2,...,n。

(3)用wn来表示复数e2∏*i/n,它是单位1的主n次方根。

(4)消去原理:对于任意整数n>=0,k>=0和d>0,有wdndk=wnk

(5)对于任意偶数n>0,有wnn/2 = w2= -1

(6)等分引理:如果n为正偶数,单位1的n个n次方根的平方与它的(n/2)个n/2次方根是相同的。

DFT代码:

 #include "stdio.h"
#include "math.h" typedef struct DFT
{
float real; //实部
float img; //inscribrer
}DFT; #define PI 3.1415926
#define LENGTH 4
int main()
{
DFT W[LENGTH][LENGTH],w[LENGTH+];
float var = /(float)LENGTH; w[].real = ;
w[].img = ;
w[].real = cos(var * PI);
w[].img = sin(var * PI); int i,j;

//初始化w0到wn-1的值
for(i=;i<=LENGTH;i++)
{
w[i].real = cos(var*i*PI);
w[i].img = sin(var*i*PI);
} for(i=;i<LENGTH;i++)
{
for(j=;j<LENGTH;j++)
{
int m = i * j;
if((i*j)<=LENGTH)
{
W[i][j].real = w[m].real;
W[i][j].img = w[m].img;
}
else
{
int n = m % LENGTH; //w具有周期性
W[i][j].real = w[n].real;
W[i][j].img = w[n].img;
}
}
}
/*
for(i=0;i<WIDTH;i++)
{
for(j=0;j<WIDTH;j++)
{
printf("%f\t",W[i][j].real);
}
printf("\n");
}
*/
// float a[WIDTH] = {1,2,3,4};
float a[LENGTH] = {,,,};
DFT result[LENGTH]; DFT sum;
//w矩阵与初始一维矩阵a相乘
for(i=;i<LENGTH;i++)
{
sum.real = ;
sum.img = ;
for(j=;j<LENGTH;j++)
{
sum.real += W[i][j].real * a[j];
sum.img += W[i][j].img * a[j];
}
result[i].real = sum.real;
result[i].img = sum.img;
} for(i=;i<LENGTH;i++)
{
if(result[i].real != )
{
printf("%3.1f",result[i].real);
}
if(result[i].img != 0.0 )
{
printf("+%3.1fi",result[i].img);
}
printf("\n");
}
}
时间复杂度:O(n2)

傅立叶变换—DFT的更多相关文章

  1. $\mathcal{FFT}$·$\mathcal{Fast \ \ Fourier \ \ Transformation}$快速傅立叶变换

    \(2019.2.18upd:\) \(LINK\) 之前写的比较适合未接触FFT的人阅读--但是有几个地方出了错,大家可以找一下233 啊-本来觉得这是个比较良心的算法没想到这么抽搐这个算法真是将一 ...

  2. 离散傅立叶变换与快速傅立叶变换(DFT与FFT)

    自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...

  3. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...

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

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

  5. 傅立叶变换系列(五)快速傅立叶变换(FFT)

    说明: 傅里叶级数.傅里叶变换.离散傅里叶变换.短时傅里叶变换...这些理解和应用都非常难,网上的文章有两个极端:“Esay”  Or  “Boring”!如果单独看一两篇文章就弄懂傅里叶,那说明你真 ...

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

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

  7. Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换

    原文:Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换  [函数名称] 1,一维FFT变换函数         Complex[] FFT(Complex[] sourceDat ...

  8. 快速傅立叶变换(FFT)

    多项式 系数表示法 设\(f(x)\)为一个\(n-1\)次多项式,则 \(f(x)=\sum\limits_{i=0}^{n-1}a_i*x_i\) 其中\(a_i\)为\(f(x)\)的系数,用这 ...

  9. 傅立叶变换—FFT

    FFT(快速傅立叶变换)使用“分而治之”的策略来计算一个n阶多项式的n阶DFT系数的值.定义n为2的整数幂数,为了计算一个n阶多项式f(x),算法定义了连个新的n/2阶多项式,函数f[0](x)包含了 ...

随机推荐

  1. NodeMCU快速上云集锦

    摘要: 上至智慧园区项目,下至 `Hello world`,基于开源 MQTT 协议,阿里云 IoT 用户使用 NodeMCU 完成了不少 IoT 项目,以下为项目和教程集锦,欢迎大家一起上手试试. ...

  2. X-WAF 安装配置指南

    X-WAF 是一款方便易用的云WAF,使用反向代理的方式介入Web服务器和访问者之间,不需要像 modSecurity 和 Naxsin 那样作为nginx的模块,需要进行编译安装 X-WAF使用 O ...

  3. H3C V.35接口线缆

  4. js获取dom节点

    var s= document.getElementById("test");del_ff(s); //清理空格var chils= s.childNodes; //得到s的全部子 ...

  5. laravel5.*安装使用Redis以及解决Class 'Predis\Client' not found和Fatal error: Non-static method Redis::set() cannot be called statically错误

    https://phpartisan.cn/news/35.html laravel中我们可以很简单的使用Redis,如何在服务器安装Redis以及原创访问你们可以访问Ubuntu 设置Redis密码 ...

  6. JavaScript:4个常见的内存泄露

    什么是内存泄漏 内存泄漏基本上就是不再被应用需要的内存,由于某种原因,没有被归还给操作系统或者进入可用内存池. 编程语言喜欢不同的管理内存方式.然而,一段确定的内存是否被使用是一个不可判断的问题.换句 ...

  7. 第三章 通过java SDK 实现个性化智能合约的部署与测试

    想了解相关区块链开发,技术提问,请加QQ群:538327407 前提 已经部署好底层,外网可以正常请求访问. 正常流程 1.基础合约处理 https://fisco-bcos-documentatio ...

  8. 阿里巴巴Java编程规范考试

    阿里巴巴Java编程规范考试 今天在阿里云官网把阿里巴巴Java编程规范认证考试考过了, 写下这篇文章总结一下考试中需要注意的知识点, 主体内容还是要直接看规范: 编程规约 异常日志 单元测试 安全规 ...

  9. redis_Cacha 爬虫链接redis配置文件

    import redisimport json class RedisCache(object): """ 使用redis进行爬虫结果的缓存,并可以进行增量爬取 &quo ...

  10. 【js】 vue 2.5.1 源码学习(五) props directives规范化 props 合并策略

    大体思路 (四) 上节回顾: A: 对于生命周期函数将父子组件的函数放到一个数组里面,特定时间点调用,保证父子组件函数都调用到. B: 对于directive,filters,components 等 ...