1数字信号处理课程设计报告.docx

上传人:b****5 文档编号:2804530 上传时间:2022-11-15 格式:DOCX 页数:9 大小:260.76KB
下载 相关 举报
1数字信号处理课程设计报告.docx_第1页
第1页 / 共9页
1数字信号处理课程设计报告.docx_第2页
第2页 / 共9页
1数字信号处理课程设计报告.docx_第3页
第3页 / 共9页
1数字信号处理课程设计报告.docx_第4页
第4页 / 共9页
1数字信号处理课程设计报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

1数字信号处理课程设计报告.docx

《1数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《1数字信号处理课程设计报告.docx(9页珍藏版)》请在冰豆网上搜索。

1数字信号处理课程设计报告.docx

1数字信号处理课程设计报告

数字信号与处理课程设计报告

 

1、课程设计题目:

按时间抽选(DIT)的基-2IFFT算法的C实现

 

学号:

08113126

学生姓名:

徐思凯

班级:

081131

专业:

信息工程

指导教师:

饶志华

2011年6月19日

 

目录

一.数字信号处理的简介-2-

 

二.课程设计的目的与要求-2-

 

三.傅立叶变换的逆变换-2-

 

四.IFFT的计算方法-3-

 

五.课程设计代码-4-

 

六.程序结果-8-

 

一.数字信号处理的简介

数字信号处理的主要对象是数字信号,且是采用运算的方法达到处理目的,因此,其实现方法不同于模拟信号的实现方法,基本上可以分为两种实现方法,即软件实现方法和硬件实现的方法。

而硬件实现指的是选用合适的DSP芯片,配有适合芯片语言及任务要求的软件,实现某种信号处理功能的一种方法。

数字信号处理的特点1.灵活性2.高精度和高稳定性3.便于大规模集成4.对数字信号可以存储、运算;系统可以获得高性能指标

二.课程设计的目的与要求

通过本课程设计进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;能掌握的基本理论和分析方法方面的知识得到进一步扩展;能有效地将理论和实际紧密结合;增强软件编程实现能力和解决实际问题的能力,要求能够熟练地用Matlab语言编写数字信号处理的应用程序。

三.傅立叶变换的逆变换

对一个给定的傅里叶变换,求其相应原函数f(t)的运算,即傅立叶变换的逆变换对向量(或直接对矩阵的行或列)进行离散傅立叶逆变换的函数的调用方法是:

Y=ifft(X,n,dim)

函数对X进行离散傅立叶逆变换。

其中X、n、dim的意义及用法和离散傅立叶变换函数fft完全相同。

举例

A=[3,2,1,1;-5,1,0,1;3,2,1,5];

fftA=fft(A)%求A的列向量的傅立叶变换

fftA2=fft(A,4,2)%求A的行向量的傅立叶变换

ifft(fftA)%对矩阵fftA的列向量进行傅立叶逆变换,结果应等于A

ifft(fftA2,4,2)%对矩阵fftA2的行向量进行傅立叶逆变换,其结果应等于A

DX=diff(X)计算向量X的向前差分,DX(i)=X(i+1)-X(i),0

DX=diff(X,n)计算X的n阶向前差分,diff(X,2)=diff(diff(X))。

DX=diff(A,n,dim)计算矩阵A的n阶差分,dim=1时(缺省状态),按列计算差分,dim=2,按行计算差分。

四.IFFT的计算方法

FFT算法同样可以应用于IDFT的计算,称为快速傅里叶反变换,简写为IFFT。

前述DFT和IDFT公式为

比较上面两式,可以看出,只要把DFT公式中的系数

改为

,并乘以系数1/N,就可用FFT算法来计算IDFT,这就得到了IFFT的算法。

     当把时间抽选FFT算法用于IFFT计算时,由于原来输入的时间序列x(n)现在变为频率序列X(k),原来是将x(n)偶奇分的,而现在变成对X(k)进行偶奇分了,因此这种算法改称为频率抽选IFFT算法。

类似地,当把频率抽选FFT算法用于计算IFFT时,应该称为时间抽选IFFT算法。

在IFFT计算中经常把常量1/N分解成M个1/2连乘,即1/N=(1/2)M,并且在M级的迭代运算中,每级的运算都分别乘上一个1/2因子。

图3.29表示的是时间抽选IFFT流程图。

五.课程设计代码

#include

#include/*调用系统函数*/

#include/*动态存储*/

#include

#defineN1024

typedefstruct/*定义复数类型*/

{

doublereal;

doubleimg;

}

complex;/*定义结构体类型为复数类型,声明新类型名为complex*/

complexx[N],*W;/*想x[n]为输入序列,*w为指向complex的数据指针*/

intsize_x=0;/*输入序列的大小,在本程序中仅限2的次幂*/

doublePI;/*圆周率*/

/*主函数*/

intmain(){

inti,method,s;

voidfft();/*快速傅里叶变换*/

voidifft();/*逆快速傅里叶变换*/

voidinitW();/*初始化变换核*/

voidchange();/*变址,将x[n]倒置*/

voidadd(complex,complex,complex*);/*复数加法*/

voidmul(complex,complex,complex*);/*复数乘法*/

voidsub(complex,complex,complex*);/*复数减法*/

voiddivi(complex,complex,complex*);/*复数除法*/

voidoutput();/*输出结果*/

voidinput();/*随机输入时调用*/

typedefstructCOMPLEX//复数结构体

{

doubleReal;

doubleImag;

}Complex;

voidFFT1D(Complex*pTD,Complex*pFD,unsignedintnGrade);//一维FFT变换

voidIFFT1D(Complex*pFD,Complex*pTD,unsignedintnGrade);//一维IFFT变换

voidFFT1D(Complex*pTD,Complex*pFD,unsignedintnGrade)//一维FFT变换

{

Complex*W,*X1,*X2,*X;

ComplexTempComplex;

unsignedinti,j,k;

unsignedintbfsize,p;

unsignedintnCount=1<

doubledAngle;

W=newComplex[nCount>>1];//分配内存空间

X1=newComplex[nCount];

X2=newComplex[nCount];

for(i=0;i<(nCount>>1);i++)//计算加权系数

{

dAngle=PI*2.0*i/nCount;

W[i].Real=cos(dAngle);

W[i].Imag=-sin(dAngle);

}

memcpy(X1,pTD,sizeof(Complex)*nCount);//内存拷贝

for(k=0;k

{

for(j=0;j<(unsignedint)(1<

{

bfsize=1<<(nGrade-k);

for(i=0;i

{

p=j*bfsize;

X2[i+p].Real=X1[i+p].Real+X1[i+p+bfsize/2].Real;

X2[i+p].Imag=X1[i+p].Imag+X1[i+p+bfsize/2].Imag;

TempComplex.Real=X1[i+p].Real-X1[i+p+bfsize/2].Real;

TempComplex.Imag=X1[i+p].Imag-X1[i+p+bfsize/2].Imag;

X2[i+p+bfsize/2].Real=TempComplex.Real*W[i*(1<

X2[i+p+bfsize/2].Imag=TempComplex.Real*W[i*(1<

}

}

X=X1;

X1=X2;

X2=X;

}

for(j=0;j

{

p=0;

for(i=0;i

{

if(j&(1<

{

p+=1<<(nGrade-i-1);

}

}

pFD[j].Real=X1[p].Real;

pFD[j].Imag=X1[p].Imag;

}

delete[]W;

delete[]X1;

delete[]X2;

}

voidIFFT1D(Complex*pFD,Complex*pTD,unsignedintnGrade)//一维IFFT变换

{

Complex*W,*X1,*X2,*X;

ComplexTempComplex;

unsignedinti,j,k;

unsignedintbfsize,p;

unsignedintnCount=1<

doubledAngle;

W=newComplex[nCount>>1];//分配内存空间

X1=newComplex[nCount];

X2=newComplex[nCount];

//计算加权系数

for(i=0;i<(nCount>>1);i++)

{

dAngle=PI*2.0*i/nCount;

W[i].Real=cos(dAngle);

W[i].Imag=sin(dAngle);

}

memcpy(X1,pFD,sizeof(Complex)*nCount);//内存拷贝

for(k=0;k

{

for(j=0;j<(unsignedint)(1<

{

bfsize=1<<(nGrade-k);

for(i=0;i

{

p=j*bfsize;

X2[i+p].Real=X1[i+p].Real+X1[i+p+bfsize/2].Real;

X2[i+p].Imag=X1[i+p].Imag+X1[i+p+bfsize/2].Imag;

TempComplex.Real=X1[i+p].Real-X1[i+p+bfsize/2].Real;

TempComplex.Imag=X1[i+p].Imag-X1[i+p+bfsize/2].Imag;

X2[i+p+bfsize/2].Real=TempComplex.Real*W[i*(1<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1