2数字信号处理课程设计报告.doc_第1页
2数字信号处理课程设计报告.doc_第2页
2数字信号处理课程设计报告.doc_第3页
2数字信号处理课程设计报告.doc_第4页
2数字信号处理课程设计报告.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字信号处理课程设计报告数字信号与处理课程设计报告1、 课程设计题目:按时间抽选(DIT)的基-2IFFT算法的C实现 学号: 学生姓名: 班 级: 专 业:指导教师: 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的列向量进行傅立叶逆变换,结果应等于Aifft(fftA2,4,2) %对矩阵fftA2的行向量进行傅立叶逆变换,其结果应等于ADX=diff(X) 计算向量X的向前差分,DX(i)=X(i+1)-X(i),0in。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 #define N 1024 typedef struct /*定义复数类型*/ double real; double img;complex; /*定义结构体类型为复数类型,声明新类型名为complex*/complex xN, *W; /*想xn为输入序列,*w为指向complex的数据指针*/int size_x=0; /*输入序列的大小,在本程序中仅限2的次幂*/double PI; / *圆周率*/*主函数*/int main() int i,method,s; void fft(); /*快速傅里叶变换*/ void ifft(); /*逆快速傅里叶变换*/ void initW(); /*初始化变换核*/ void change(); /*变址,将xn倒置*/ void add(complex ,complex ,complex *); /*复数加法*/ void mul(complex ,complex ,complex *); /*复数乘法*/ void sub(complex ,complex ,complex *); /*复数减法*/ void divi(complex ,complex ,complex *); /*复数除法*/ void output(); /*输出结果*/ void input(); /*随机输入时调用*/typedef struct COMPLEX / 复数结构体double Real;double Imag; Complex;void FFT1D(Complex* pTD, Complex* pFD, unsigned int nGrade); / 一维 FFT 变换void IFFT1D(Complex* pFD, Complex* pTD, unsigned int nGrade); / 一维 IFFT 变换void FFT1D(Complex* pTD, Complex* pFD, unsigned int nGrade) / 一维 FFT 变换Complex *W, *X1, *X2, *X;Complex TempComplex;unsigned int i, j, k;unsigned int bfsize, p;unsigned int nCount = 1 1; / 分配内存空间X1 = new ComplexnCount;X2 = new ComplexnCount;for(i = 0; i 1); i+) / 计算加权系数dAngle = PI * 2.0 * i / nCount;Wi.Real = cos(dAngle);Wi.Imag = - sin(dAngle);memcpy(X1, pTD, sizeof(Complex) * nCount); / 内存拷贝 for(k = 0; k nGrade; k+) / 采用蝶形算法进行快速傅立叶变换for(j = 0; j (unsigned int) (1 k); j+)bfsize = 1 (nGrade - k);for(i = 0; i bfsize / 2; i+)p = j * bfsize;X2i + p.Real = X1i + p.Real + X1i + p + bfsize / 2.Real;X2i + p.Imag = X1i + p.Imag + X1i + p + bfsize / 2.Imag;TempComplex.Real = X1i + p.Real - X1i + p + bfsize / 2.Real;TempComplex.Imag = X1i + p.Imag - X1i + p + bfsize / 2.Imag;X2i + p + bfsize / 2.Real = TempComplex.Real * Wi * (1 k).Real - TempComplex.Imag * Wi * (1 k).Imag;X2i + p + bfsize / 2.Imag = TempComplex.Real * Wi * (1 k).Imag + TempComplex.Imag * Wi * (1 k).Real;X = X1;X1 = X2;X2 = X;for(j = 0; j nCount; j+)p = 0;for(i = 0; i nGrade; i+)if (j & (1 i)p += 1 (nGrade - i - 1);pFDj.Real = X1p.Real;pFDj.Imag = X1p.Imag;delete W;delete X1;delete X2;void IFFT1D(Complex* pFD, Complex* pTD, unsigned int nGrade) / 一维 IFFT 变换Complex *W, *X1, *X2, *X;Complex TempComplex;unsigned int i, j, k;unsigned int bfsize, p;unsigned int nCount = 1 1; / 分配内存空间X1 = new ComplexnCount;X2 = new ComplexnCount;/ 计算加权系数for(i = 0; i 1); i+)dAngle = PI * 2.0 * i / nCount;Wi.Real = cos(dAngle);Wi.Imag = sin(dAngle);memcpy(X1, pFD, sizeof(Complex) * nCount); / 内存拷贝for(k = 0; k nGrade; k+) / 采用蝶形算法进行快速傅立叶变换for(j = 0; j (unsigned int) (1 k); j+)bfsize = 1 (nGrade - k);for(i = 0; i bfsize / 2; i+)p = j * bfsize;X2i + p.Real = X1i + p.Real + X1i + p + bfsize / 2.Real;X2i + p.Imag = X1i + p.Imag + X1i + p + bfsize / 2.Imag;TempComplex.Real = X1i + p.Real - X1i + p + bfsize / 2.Real;TempComplex.Imag = X1i + p.Imag - X1i + p + bfsize / 2.Imag;X2i + p + bfsize / 2.Real = TempComplex.Real * Wi * (1 k).Real - TempComplex.Imag * Wi * (1 k).Imag;X2i + p + bfsize / 2.Imag = TempComplex.Real * Wi * (1 k).Imag + TempComplex.Imag * Wi * (1 k).Real;X = X1;X1 = X2;X2 = X;for(j = 0; j nCount; j+) / 重新排序p = 0;for(i = 0; i nGrade; i+)if (j & (1 i)p += 1 (nGrade - i - 1);pTDj.Real = X1p.Real / (double) nCount;pTDj.Imag = X1p.Imag / (double) nCount;delete W;delete X1;delete X2; 六.程序结果 心得和经验做课程设计是为了加深我们对平时学习的理论知识的理解,在理论和实验教学基础上进一步巩固所学基本理论和提高应用所学知识并加以综合应用的能力,培养学生将所学知识应用于实际的思想,提高分析和解决问题的能力,增强学生的综合能力,开发学生的智力,激发学生的创新精神,为毕业设计和以后工作打下必要基础。 这次为期一周的数字信号处理课程设计,使我们弄明白了不少的知识,也学到了不少的东西。首先我们认识到了Visual C+工具箱的强大的功能和方便的操控性,通过软件可以使设计简化,运算简

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论