《DSP原理与应用教程课程设计基于DSP的卷积算法的实现》由会员分享,可在线阅读,更多相关《DSP原理与应用教程课程设计基于DSP的卷积算法的实现(18页珍藏版)》请在金锄头文库上搜索。
1、DSP课程考核论文 课程名称: DSP原理与应用教程 题 目:基于DSP的卷积算法的实现 专 业: 电子信息工程 班 级: 08级1班 目录摘 要.3绪 论.3课程设计方案及原理.3课程设计步骤及过程.10总 结.17参考文献.17基于DSP的卷积算法的实现摘要:卷积和(简称卷积)是信号处理中常用的算法之一。数字卷积运算通常采用两种方法:线性卷积和圆卷积。为了能使卷积运算在C54x系列DSP上的实现方法,首先要对数字卷积的基本概念作深入了解。使大家从根本上掌握卷积的实现方法,我们以模拟信号的卷积和数字信号的卷积为主,以及他们在C54x系列DSP上的实现方法。绪论:在通信和信号处理中,常用的运算
2、,如卷积,自相关,滤波和快速傅里叶交换等。都具有较高的密度性和复杂性,而这些运算中所用到的最基本的是乘法-累加运算。C54x的硬件及软件设计使其具有快速的进行乘法-累加运算功能,并具有丰富的软件资源为这些算法的实施提供有力的条件。因此,这种芯片在通信及信号处理等领域得到广泛的应用。本节主要介绍卷积算法在DSP原理中的应用。课程设计方案及原理一、实验目的1掌握用窗函数法设计卷积算法的原理和方法;2熟悉卷积算法特性;3了解各种窗函数对卷积算法的影响。二、实验设备计算机,Code Composer Studio 2.0 for C5000系统。三、实验原理1卷积的基本原理和公式 卷集和:对离散系统“
3、卷积和”也是求线性时不变系统输出响应(零状态响应)的主要方法。 卷积和的运算在图形表示上可分为四步: Y(n)= X(m)h(nm)=X(n)*h(n) m= 1)翻褶 先在哑变量坐标M上作出x(m)和h(m),将m=0的垂直轴为轴翻褶成h(-m)。 2)移位 将h(-m)移位n,即得h(n-m)。当n为正整数时,右移n位。当n为负整数时,左移n位。 3)相乘 再将h(n-m)和x(m)的相同m值的对应点值相乘。 4)相加 把以上所有对应点的乘积叠加起来,即得y(n)值。依上法,取n=,-2,-1,0,1,2,3,各值,即可得全部y(n)值。 2.程序流程图3程序的自编函数及其功能 (1)pr
4、ocessing1(int *input2, int *output2) 调用形式:processing1(int *input2, int *output2) 参数解释:intput2、output2为两个整型指针数组。 返回值解释:返回了一个“TREN”,让主函数的while循环保持连续。 功能说明:对输入的input2 buffer波形进行截取m点,再以零点的Y轴为对称轴进行翻褶,把生成的波形上的各点的值存入以OUTPUT2指针开始的一段地址空间中。 (2)processing2(int *output2, int *output3) 调用形式:processing2(int *outp
5、ut2, int *output3) 参数解释:output2、output3为两个整型指针数组。 返回值解释:返回了一个“TREN”,让主函数的while循环保持连续。 功能说明:对输出的output2 buffer波形进行作n点移位,然后把生成的波形上的各点 的值存入以OUTPUT3指针开始的一段地址空间中。 (3)processing3(int *input1,int *output2,int *output4) 调用形式:processing3(int *input1,int *output2,int *output4) 参数解释:output2、output4、input1为三个整型
6、指针数组。 返回值解释:返回了一个“TREN”,让主函数的while循环保持连续。 功能说明:对输入的input2 buffer波形和输入的input1 buffer作卷积和运算,然后把 生成的波形上的各点的值存入以OUTPUT4指针开始的一段地址空间中。 (4)processing4(int *input2,int *output1) 调用形式:processing4(int *input2,int *output1) 参数解释:output1、input2为两个整型指针数组。 返回值解释:返回了一个“TREN”,让主函数的while循环保持连续。 功能说明:对输入的input2 buffe
7、r波形截取m点,然后把生成的波形上的各点的值存 入以OUTPUT1指针开始的一段地址空间中。源程序如下:#include #include volume.h/* Global declarations */int inp1_bufferBUFSIZE;int inp2_bufferBUFSIZE; /* processing data buffers */int out1_bufferBUFSIZE;int out2_bufferBUFSIZE;int out3_bufferBUFSIZE;int out4_bufferBUFSIZE*2;int size = BUFSIZE;int ain
8、= MINGAIN;int zhy=0;int sk=64; /*sk代表所开的bufsize的大小,需修改它.输入文件sine.dat为32点,sine11.dat, sin22.dat,sin33.dat,sin44.dat为64点的输入波形.*/ /* volume control variable */unsigned int processingload = 1; /* processing routine /load value */* Functions */extern void load(unsigned int loadValue);static int processin
9、g1(int *output1, int *output2);static int processing2(int *output2, int *output3); static int processing3(int *input1,int *output2,int *output4);static int processing4(int *input2, int *output1);static void dataIO1(void);static void dataIO2(void);/* * = main = */void main() int *input1 = &inp1_buffe
10、r0; int *input2 = &inp2_buffer0; int *output1 = &out1_buffer0; int *output2 = &out2_buffer0; int *output3 = &out3_buffer0; int *output4 = &out4_buffer0; puts(volume example startedn); /* loop forever */ while(TRUE) /* * Read input data using a probe-point connected to a host file. * Write output dat
11、a to a graph connected through a probe-point. */ dataIO1(); dataIO2(); /* apply gain */ processing4(input2,output1); processing1(output1, output2); processing2(output2, output3); processing3(input1,output2,output4) ; /* * = processing = * * FUNCTION: apply signal processing transform to input signal
12、. * * PARAMETERS: address of input and output buffers. * * RETURN VALUE: TRUE. */static int processing4(int *input2,int *output1) int m=sk; for(;m=0;m-) *output1+ = *input2+ * ain; for(;(size-m)0;m+) output1m=0; /load(processingload); return(TRUE); static int processing1(int *output1,int *output2) int m=sk-1; for(;m0;m-) *output2+ = *output1+ * ain; /* additional processing /load */ /load(processingload); return(TRUE);static int processing2(int *output2, int *output3) int n=zhy; size=BUFSIZE; f