傅立叶变换—DFT
背景:最近看到实验室其他同学在用傅立叶变换解决问题,我也想通过并行来解决这个问题,所以看了一下傅立叶变换的东西,感觉涵盖的东西还能多,我只是初步做了一下了解(一定很片面,但是我主要是为了应用它,主要了解它的实现原理),据我理解:傅立叶分析使用一系列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的更多相关文章
- $\mathcal{FFT}$·$\mathcal{Fast \ \ Fourier \ \ Transformation}$快速傅立叶变换
\(2019.2.18upd:\) \(LINK\) 之前写的比较适合未接触FFT的人阅读--但是有几个地方出了错,大家可以找一下233 啊-本来觉得这是个比较良心的算法没想到这么抽搐这个算法真是将一 ...
- 离散傅立叶变换与快速傅立叶变换(DFT与FFT)
自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- Matlab图像处理系列4———傅立叶变换和反变换的图像
注意:这一系列实验的图像处理程序,使用Matlab实现最重要的图像处理算法 1.Fourier兑换 (1)频域增强 除了在空间域内能够加工处理图像以外,我们还能够将图像变换到其它空间后进行处理.这些方 ...
- 傅立叶变换系列(五)快速傅立叶变换(FFT)
说明: 傅里叶级数.傅里叶变换.离散傅里叶变换.短时傅里叶变换...这些理解和应用都非常难,网上的文章有两个极端:“Esay” Or “Boring”!如果单独看一两篇文章就弄懂傅里叶,那说明你真 ...
- Matlab图像处理系列4———图像傅立叶变换与反变换
注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...
- Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换
原文:Win8 Metro(C#)数字图像处理--2.53图像傅立叶变换 [函数名称] 1,一维FFT变换函数 Complex[] FFT(Complex[] sourceDat ...
- 快速傅立叶变换(FFT)
多项式 系数表示法 设\(f(x)\)为一个\(n-1\)次多项式,则 \(f(x)=\sum\limits_{i=0}^{n-1}a_i*x_i\) 其中\(a_i\)为\(f(x)\)的系数,用这 ...
- 傅立叶变换—FFT
FFT(快速傅立叶变换)使用“分而治之”的策略来计算一个n阶多项式的n阶DFT系数的值.定义n为2的整数幂数,为了计算一个n阶多项式f(x),算法定义了连个新的n/2阶多项式,函数f[0](x)包含了 ...
随机推荐
- 无旋treap hfq-treap
怎么代码都这么长... #include<iostream> #include<stdio.h> #include<string.h> #include<al ...
- Activiti5----流程监听器与任务监听器
首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以 流程监听器 package org.mpc.final_activiti; im ...
- 洛谷 2403 [SDOI2010] 所驼门王的宝藏
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐, ...
- 数据采集之js埋点
一.后台nginx环境搭建 web点数据采集后台配置nginx:https://blog.csdn.net/weixin_37490221/article/details/80894827 下载数据源 ...
- typescript基础语法--变量/函数/指令/类
博客地址 :https://www.cnblogs.com/sandraryan/ 要把ts文件引入到html中,首先要转码为js文件. 步骤: 终端运行: npm i -g typescript t ...
- SuperSocket获取所有连接上的 Session
你也可以从 AppServer 实例获取所有连接上的 session 然后推送数据到所有客户端: foreach(var session in appServer.GetAllSessions()) ...
- mysql基础(库、表相关)
一. mysql支持的数据类型 1.1 mysql支持的数字类型: TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767 ...
- 访问HTML可以,访问PHPfile not found
www目录的所有者和所属组都改为nginx用户试一下. 参考命令: chown nginx.nginx /home/www ps aux |grep nginx 看一下您的nginx是以哪个用户的 ...
- [转]在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- echarts 图表自适应外部盒子大小
项目中用到了echarts,由于页面是自适应的,还得兼容移动, 因此图表还需要根据盒子的大小来变化. 自适应窗口及盒子大小 页面中有一个[放大.缩小]功能,及全屏展示和预览图表 窗口自适应 let m ...