《现代信号处理课程设计》课程设计报告设计题目卷积运算及算法的DSP实现目录第1章总序..............................................31.1设计目的与背景.......................................错误!未定义书签。1.2设计要求.............................................错误!未定义书签。1.3设计思路简介.........................................错误!未定义书签。第2章系统开发平台与环境.................................错误!未定义书签。2.1CCS开发环境.........................................错误!未定义书签。2.2ICETEK-F2821-A开发实验板............................错误!未定义书签。第3章卷积算法设计过程...............................错误!未定义书签。3.1卷积算法设计总框图.................................错误!未定义书签。3.2卷计算法设计的原理.................................错误!未定义书签。第4章系统软件设计.......................................错误!未定义书签。4.1程序流程图...........................................错误!未定义书签。4.2程序源代码...........................................错误!未定义书签。第5章系统仿真..........................................错误!未定义书签。5.1仿真设置............................................错误!未定义书签。5.2仿真图..............................................错误!未定义书签。第6章总结..............................................错误!未定义书签。参考文献.................................................错误!未定义书签。第1章绪论1.1设计目的与背景1)设计背景卷积是在信号与线性系统的基础上或背景中出现的,脱离这个背景单独谈卷积是没有任何意义的,除了那个所谓褶反公式上的数学意义和积分(或求和,离散情况下)。信号与线性系统,讨论的就是信号经过一个线性系统以后发生的变化(就是输入输出和所经过的所谓系统,这三者之间的数学关系)。所谓线性系统的含义,就是,这个所谓的系统,带来的输出信号与输入信号的数学关系式之间是线性的运算关系。因此,实际上,都是要根据我们需要待处理的信号形式,来设计所谓的系统传递函数,那么这个系统的传递函数和输入信号,在数学上的形式就是所谓的卷积关系。卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本文选用F2812作为DSP处理芯片,通过对其编程来实现卷积。2)设计目的通过本次设计掌握并熟悉dsp的应用以及ICETEK-F2812-A的平评估板的使用,了解卷积算法的原理和计算方法,以及其特性与特点,并学习卷积算法的程序实现。并且通过本次设计来提高自己的动手实践能力,增加我们对本专业的各种芯片的了解,增强我们的专业素养。1.2设计要求利用C语言在CCS环境中编写一个卷积算法程序,并能利用已设计好的卷积器对一些常用信号进行卷积运算处理。1.3设计思路简介在TMS320C54x系统开发环境CCS(CodeComposerStudio)下对卷积的DSP实现原理进行讨论。利用C语言设计相应的算法,通过实验仿真,从输入信号和输出信号的时域和频域曲线可看出在DSP上实现的卷积算法能完成预定的计算任务。第2章系统开发平台与环境2.1CCS开发环境DSP开发工具:PC机+目标板+仿真器+CCS开发环境一般是先在CCS开发环境下编写程序(使用C语言、汇编语言或者两者混合)CCS内置软仿真simulator提供了编译,调试,运行功能。其作用主要是检测目标程序运行的正确性和连贯性!但不能够实时查看和控制。当程序成功运行通过后,通过仿真器(XDS510或者XDS560)与目标板连接,安装仿真器驱动,然后loadprogram到目标板,运行,利用仿真器提供的RTDX可实时查看存储器和寄存器变化。2.2ICETEK-F2821-A开发实验板第3章卷积算法设计过程3.1卷积算法设计总框图3.2卷积算法设计的原理1)卷积算法基础理论开始初始化DSP产生输入信号将卷积信号X(m)和H(m)输入在同一个坐标系内翻转:将H(m)以m=0的垂直轴为轴翻褶成H(-m)移位:将H(-m)移位n,即得H(n-m)相乘:再将H(n-m)和X(m)的相同m值的对应点值相乘相加:把以上所有点的对应点的乘积叠加起来,即得Y(n)值。取移位值nN值取遍整个坐标轴结束YES卷积的基本理论和公式卷积和:对离散系统“卷积和”也是求线性时不变系统输出响应(零状态响应)的主要方法。卷积和的运算在图形表示上可分为四步:A)翻褶现在亚变量坐标M上作出X(m)和H(m),将m=0的垂直轴为轴翻褶成H(-m)。B)移位将H(-m)移位n,即得H(n-m)。当n为正整数时,右移n位。当n为负整数时,左移n位。C)相乘再将H(n-m)和X(m)的相同m值的对应点值相乘。D)相加把以上所有点的对应点的乘积叠加起来,即得Y(n)值。依上法,取n=……,-2,-1,0,1,2,3,……各值,即可得全部Y(n)值。第4章系统软件设计4.1程序流程图程序的自编函数及其功能1)processing(int*input2,int*output2)调用形式:processing1(int*input2,int*output2)While(TRUE)执行dataIO2()子程序执行dataIO()子程序执行processing4()子程序结束YESNO执行processing4()子程序开始打印“volumeexampletarted\n”执行processing1()子程序执行processing2()子程序执行processing3()子程序参数解释:input2、output为两个整型指针数组。返回值解释:返回一个“TURE”,让主函数的While循环保持连续。功能说明:对输入的input2buffer波形进行截取m点,再以零点的Y轴为对称轴进行翻褶,把生成的波形上的各点的值存入以OUTPUT2指针开始的一段地址空间中。2)processing2(int*output2,int*output3)调用形式:processing2(int*output2,int*output3)参数解释:output2、output3为两个整形指针数组。返回值解释:返回了一个“TREN”,让主函数的While循环保持连续。功能说明:对输出的output2buffer波形进行作n点移位,然后把生成的波形上的各点的值存入以OUTPUT3指针开始的一段空间中。3)processing3(int*input1,int*output2,int*output4)调用形式:processing3(int*input1,int*output2,int*output4)参数解释:output2、output4、input1为三个整型指针数组。返回值解释:返回了一个“TRUE”,让主函数的While循环保持继续。功能说明:对输入的input2buffer波形和输入的input1buffer做卷积和运算,然后把生成的波形上的各点的值存入以OUTPUT4指针开始的地址空间中。4)processing4(int*input2,int*output1)调用形式:processing4(int*input2,int*output1)参数解释:output1、input为两个整型指针数组返回值解释:返回了一个“TRUE”,让主函数的循环保持继续。功能说明:对输入的input2buffer波形截取m点,然后把生成的波形上的各点的值存入以OUTPUT1指针开始的一段地址空间中。4.2程序源代码源程序:#includeDSP281x_Device.h#includeDSP281x_Examples.h#includef2812a.h#includestdio.h#includevolume.hintinp1_buffer[BUFSIZE];intinp2_buffer[BUFSIZE];intout1_buffer[BUFSIZE];intout2_buffer[BUFSIZE];intout3_buffer[BUFSIZE];intout4_buffer[BUFSIZE*2];intsize=BUFSIZE;intain=MINGAIN;intzhy=0;intsk=64;unsignedintprocessingLoad=1;staticintprocessing1(int*output1,int*output2);staticintprocessing2(int*output2,int*output3);staticintprocessing3(int*input1,int*output2,int*output4);staticintprocessing4(int*input2,int*output1);staticvoiddataIO1(void);staticvoiddataIO2(void);int*input1=&inp1_buffer[0];int*input2=&inp2_buffer[0];int*output1=&out1_buffer[0];int*output2=&out2_buffer[0];int*output3=&out3_buffer[0];int*output4=&out4_buffer[0];voidmain(void){intjishu=0;int*input1=&inp1_buffer[0];int*input2=&inp2_buffer[0];int*output1=&out1_buffer[0];int*output2=&out2_buffer[0];//int*output3=&out3_buffer[0];int*output4=&out4_buffer[0];puts(volumeexamplestarted\n);while(TRUE){dataIO1();dataIO2();processing4(input2,output1);processing1(output1,output2);/*processing2(output2,output3);*/processing3(input1,output2,output4);jishu++;//在此处加断点}}staticintprocessing4(int*input2,int*output1){intm=sk;for(;m=0;m--){*output1++=(*input2++)*ain;}for(;(size-m)0;m++){output1[m]=0;}}staticintprocessing1(int*output1,int*output2){i