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.14159265354
struct 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++)

本文详细介绍了如何使用C++实现离散傅立叶变换(DFT),探讨了DFT的基本原理及其在信号处理中的应用。尽管DFT的时间复杂度较高,为O(n^2),但其不受变换点数限制,适用于各种信号分析场景。与快速傅立叶变换(FFT)相比,虽然效率较低,但在特定情况下仍具有一定的实用价值。
最低0.47元/天 解锁文章
7768

被折叠的 条评论
为什么被折叠?



