DFT离散傅立叶变换C++实现【转】
来源:互联网 发布:nba球队季后赛数据 编辑:程序博客网 时间:2024/06/07 00:02
来自:http://blog.csdn.net/calcular/article/details/46804779
DFT的执行效率是O(n^2),FFT为O(log2n),但是它对点数没有限制。
/* 离散傅立叶算法V1.0 含有:DFT,IDFT made by xyt 2015/7/5*/#ifndef _DFT_H#define _DFT_H#include<iostream>#include<math.h>using namespace std;#define PI 3.14159265354struct complex{double r,i;};complex multi(complex a,complex b){complex tmp;tmp.r=a.r*b.r-a.i*b.i;tmp.i=a.r*b.i+a.i*b.r;return tmp;}int fi(double in){if((in-(int)in)>0.5) return (int)in+1;else return (int)in;}/* 离散傅立叶正变换,输出[][2]数组实部在前,采样容量n可以任意正整数 */void DFT(int *in,double **out,const int &n){int i,j;complex **W=new complex*[n];for(i=0;i<n;i++){W[i]=new complex[n];}complex *lis=new complex[(n-1)*(n-1)+1];lis[0].r=1;lis[0].i=0;lis[1].r=cos(2.0*PI/n);lis[1].i=-1.0*sin(2.0*PI/n);for(i=2;i<=(n-1)*(n-1);i++){lis[i]=multi(lis[1],lis[i-1]);}for(i=0;i<n;i++){for(j=0;j<n;j++){W[i][j]=lis[i*j];}}complex sum;for(i=0;i<n;i++){sum.r=0;sum.i=0;for(j=0;j<n;j++){sum.r+=in[j]*W[i][j].r;sum.i+=in[j]*W[i][j].i;}out[i][0]=sum.r;out[i][1]=sum.i;}for(i=0;i<n;i++) delete []W[i];delete []W;delete []lis;}/* 离散傅立叶逆变换 */void IDFT(double **in,int *out,const int &n){int i,j;complex **W=new complex*[n];for(i=0;i<n;i++){W[i]=new complex[n];}complex *lis=new complex[(n-1)*(n-1)+1];lis[0].r=1;lis[0].i=0;lis[1].r=cos(2.0*PI/n);lis[1].i=sin(2.0*PI/n);for(i=2;i<=(n-1)*(n-1);i++){lis[i]=multi(lis[1],lis[i-1]);}for(i=0;i<n;i++){for(j=0;j<n;j++){W[i][j]=lis[i*j];}}complex sum;for(i=0;i<n;i++){sum.r=0;sum.i=0;for(j=0;j<n;j++){sum.r+=W[i][j].r*in[j][0]-W[i][j].i*in[j][1];sum.i+=W[i][j].i*in[j][0]+W[i][j].r*in[j][1];}out[i]=fi(sum.r/n);}for(i=0;i<n;i++) delete []W[i];delete []W;delete []lis;}#endif
0 0
- DFT离散傅立叶变换C++实现【转】
- 离散傅立叶变换(DFT)
- 离散傅立叶变换(DFT)
- DFT离散傅立叶变换C++实现
- 离散傅立叶变换(DFT)
- 图像变换(离散傅立叶变换DFT)
- 【opencv练习12 - DFT离散傅立叶变换】
- Opencv学习之离散傅立叶变换DFT
- 离散傅立叶变换DFT和离散余弦变换DCT
- 数字图像处理成长之路4: C语言与离散傅立叶变换(DFT)
- 理解离散傅立叶变换(二) ------实数形式离散傅立叶变换(Real DFT)
- 离散傅立叶变换的实现
- opencv(c++)离散傅立叶变换
- 离散傅立叶变换——opencv实现
- 离散时间傅立叶变换DTFT实现
- 理解离散傅立叶变换
- 理解离散傅立叶变换
- 离散傅立叶变换
- JAVA基本数据类型转换的主要内容和注意事项
- 01-Storm初探
- javafx之TableView的FXCSS
- Mac终端搭建java web环境-安装启动tomcat
- 四元数与欧拉角间的转换(源代码)
- DFT离散傅立叶变换C++实现【转】
- JSP 解决illegal to have multiple occurrences of contentType with different values错误
- qt 实现md5 算法加密
- hiho1234--Fractal(高精度比较问题)
- bootstrap设置table的样式
- 关于Recyclerview使用时的一个错误java.lang.NoSuchMethodError: No static method getMatrix(Landroid/view/View;)
- 微信小程序 开发工具及开发环境配置
- DCT离散余弦变换C版本【转】
- 基于lmbp神经网络的效能评估(源代码)