请用MATLAB、C语言或者其他语言编程实现8点序列的基2-DIT-FFT算法,并对结果进行分析验证。 25

请用MATLAB、C语言或者其他语言编程实现8点序列的基2-DIT-FFT算法,并对结果进行分析验证。报告内容要求:设计目的及意义,设计原理,详细的设计方案,调试与验证,... 请用MATLAB、C语言或者其他语言编程实现8点序列的基2-DIT-FFT算法,并对结果进行分析验证。
报告内容要求:设计目的及意义,设计原理,详细的设计方案,调
试与验证,设计中存在的问题及改进措施,体会。

谁有这个,发给我12023125@qq.com
展开
 我来答
linkman_cn
2009-06-17 · TA获得超过540个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:98.4万
展开全部
typedef struct

{

float real;

float img;

}COMPLEX;

void reverse(COMPLEX *X,COMPLEX *x,int N) /*输入数组名称和元素个数,实现倒序 */

{

int LH = N/2;

int j = LH;

int N1 = N-2;

int i;

for(i = 1; i <= N1; i++)

{

int k = LH;

X[i] = (i<j ? x[j] : x[i]);

/*

if(i < j)

{

comp T = a[j];

a[j] = a[i];

a[i] = T;

*/

}

while(j >= k)

{

j = j-k;

k = k/2;

}

j = j+k;

}

}

/*
函数功能:对指定长度的采样数据进行快速傅立叶变换,并返回变换值, X = FFT(x)

入口参数:目标采样数据,保存变换值的指针,采样数据长度

出口参数:指向变换值的指针

注意事项:保存结果的空间是在函数外部申请,本函数不处理此内容

/*/

COMPLEX *FFT(COMPLEX *X,COMPLEX *x, unsigned N)

{

unsigned temp=N,L=0,M=0,LE=1,LE1=0,J=0,I=0,IP=0;

COMPLEX U={0,0},W={0,0},T={0,0};

while((temp>>=1)>0) /*获得阶码M*/

{

M++;

}

reverse(X,x,N);

for(L=0;L<M;L++)

{

LE=1<<L; /*LE=2^L,分组间隔*/

LE1 = LE>>1; /*LE1=LE/2,对偶跨距,实际也是一个分组中对偶点的对数*/

U.real = 1.0;

U.img = 1.0;

W.real = cos(PI / LE1);

W.img = sin(PI / LE1);

J = 0;

while(J<LE1)

{

I = J;

while(I < N)

{

IP = I + LE1;

ComMul(X + IP,&U,&T);

ComSub(X + I,&T,X + IP);

ComAdd(X + I,&T,X + I);

I += LE;

}

ComMul(&U,&W,&U);

J++;

}

}

return X;

}

FFT中有几个复数运算,自己实现,不想发给你,年轻人还是要自己动手做点东西。N为任意数,正常应该为2的幂次方。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式