DSP课程卷积算法报告.docx
《DSP课程卷积算法报告.docx》由会员分享,可在线阅读,更多相关《DSP课程卷积算法报告.docx(16页珍藏版)》请在冰豆网上搜索。
DSP课程卷积算法报告
DSP技术及应用
课程设计报告
课题名称:
卷积算法
学院:
电气信息工程学院
专业:
通信工程
班级:
姓名:
学号:
**************************************
成绩:
日期:
2014.6.9-2014.6.20
一、DSP课程设计目的..................................3
二、课程设计任务......................................3
三、卷积定义及实验原理..................................3
四、实验设备..........................................4
五、卷计算法的流程图及程序.............................4
六、课程设计步骤及过程.................................10
七、课程设计心得.......................................17
八、参考文献.........................................18
一、DSP课程设计目的
1、巩固《DSP技术及应用》的理论知识;
2、熟悉并掌握卷积算法以及CCS软件的使用方法;
3、掌握利用窗函数法设计卷积算法的原理和方法
二、课程设计任务
本课程设计要求利用卷积算法,能够在CCS集成开发环境中使用图形显示工具显示输入和输出波形。
三、卷积的定义及实验原理
1、卷积的定义
卷积和(简称卷积)是信号处理中常用的算法之一。
数字卷积运算通常采用两种方法:
线性卷积和圆卷积。
为了能使卷积运算在C54x系列DSP上的实现方法,首先要对数字卷积的基本概念作深入了解。
使大家从根本上掌握卷积的实现方法,我们以模拟信号的卷积和数字信号的卷积为主,以及他们在C54x系列DSP上的实现方法。
在通信和信号处理中,常用的运算,如卷积,自相关,滤波和快速傅里叶交换等。
都具有较高的密度性和复杂性,而这些运算中所用到的最基本的是乘法-累加运算。
C54x的硬件及软件设计使其具有快速的进行乘法-累加运算功能,并具有丰富的软件资源为这些算法的实施提供有力的条件。
因此,这种芯片在通信及信号处理等领域得到广泛的应用。
本节主要介绍卷积算法在DSP原理中的应用。
2、卷积的基本原理和公式
卷集和:
对离散系统“卷积和”也是求线性时不变系统输出响应(零状态响应)的主要方法。
卷积和的运算在图形表示上可分为四步:
Y(n)=∑X(m)h(n−m)=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)值。
四、实验设备
计算机,CodeComposerStudio3.3软件
五、卷计算法的流程图及程序
1、程序流程图
2.程序的自编函数及其功能
(1)processing1(int*input2,int*output2)
调用形式:
processing1(int*input2,int*output2)
参数解释:
intput2、output2为两个整型指针数组。
返回值解释:
返回了一个“TRUE”,让主函数的while循环保持连续。
功能说明:
对输入的input2buffer波形进行截取m点,再以零点的Y轴为对称轴进行翻褶,把生成的波形上的各点的值存入以OUTPUT2指针开始的一段地址空间中。
(2)processing2(int*output2,int*output3)
调用形式:
processing2(int*output2,int*output3)
参数解释:
output2、output3为两个整型指针数组。
返回值解释:
返回了一个“TRUE”,让主函数的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、input2为两个整型指针数组。
返回值解释:
返回了一个“TRUE”,让主函数的while循环保持连续。
功能说明:
对输入的input2buffer波形截取m点,然后把生成的波形上的各点的值存入以OUTPUT1指针开始的一段地址空间中。
3、卷积算法程序
#include
#include"volume.h"
intin1_buffer[BUFSIZE];
intin2_buffer[BUFSIZE];
intout1_buffer[BUFSIZE];
intout2_buffer[BUFSIZE];
intout3_buffer[BUFSIZE];
intout4_buffer[BUFSIZE*2];
intsize=BUFSIZE;
intgain=MINGAIN;
intzhy=0;
intsk=64;
unsignedintprocessingload=1;/*processingroutine//loadvalue*/
/*Functions*/
staticintstep1(int*output1,int*output2);
staticintstep2(int*output2,int*output3);
staticintstep3(int*input1,int*output2,int*output4);
staticintstep4(int*input2,int*output1);
staticvoiddataIO1(void);
staticvoiddataIO2(void);
voidmain()
{
int*input1=&in1_buffer[0];
int*input2=&in2_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)
{
/*
*Readinputdatausingaprobe-pointconnectedtoahostfile.
*Writeoutputdatatoagraphconnectedthroughaprobe-point.
*/
dataIO1();//breakpoint
dataIO2();//breakpoint
step4(input2,output1);
step1(output1,output2);
step2(output2,output3);
step3(input1,output2,output4);
}
}
staticintstep4(int*input2,int*output1)
{
intm=sk;
for(;m>=0;m--)
{
*output1++=*input2++*ain;
}
for(;(size-m)>0;m++)
{
output1[m]=0;
}
return(TRUE);
}
staticintstep1(int*output1,int*output2)
{
intm=sk-1;
for(;m>0;m--)
{
*output2++=*output1++*ain;
}
return(TRUE);
}
staticintstep2(int*output2,int*output3)
{
intn=zhy;
size=BUFSIZE;
for(;(size-n)>0;n++)
{
*output3++=output2[n];
}
return(TRUE);
}
staticintstep3(int*input1,int*output2,int*output4)
{
intm=sk;
inty=zhy;
intz,x,w,i,f,g;
for(;(m-y)>0;)
{
i=y;
x=0;
z=0;
f=y;
for(;i>=0;i--)
{
g=input1[z]*output2[f];
x=x+g;
z++;
f--;
}
*output4++=x;
y++;
}
m=sk;
y=sk-1;
w=m-zhy-1;
for(;m>0;m--)
{
y--;
i=y;
z=sk-1;
x=0;
f=sk-y;
for(;i>0;i--,z--,f++)
{
g=input1[z]*output2[f];
x=x+g;
}
out4_buffer[w]=x;
w++;
}
return(TRUE);
}
staticvoiddataIO1()
{
/*dodataI/O*/
return;
}
staticvoiddataIO2()
{
/*dodataI/O*/
return;
}
六、课程设计步骤及过程
1.实验准备
(1)设置CodeComposerStudio为C55xx、Simulator、C5510Devicesimulator
(2)启动CodeComposerStudio3.3
2.建立工程Project,编写程序并编译
3.装载目标文件进行如下设置
(1)选择主菜单File中LoadProgram命令,在CCS的安装目录下,找到构建该工程项目下的网Debug目录,选择构建后生成的可执行文件*.out并打开。
(2)选择Debug菜单中的GoMain命令。
4.打开观察窗口
-选择菜单“View”、“Graph”、“Time/Frequency…”进行如下设置:
5.设置波形输入文件
打开菜单栏file-Data-load,然后输入相应值
(1)当输入为sin11和一个正弦方波时图像为
(2)当把输入2改为另一个正旋波sin22时,波形为
(3).当输入为正弦波sin22和只有一个周期的正旋波sin时
(4).输入为sin11和方波时
(5)*图表分析
输入图形频域图形采用通过频域采样取值比较,卷积后的结果与标准值只有很小的误差。
所以说卷积实验结果正确,卷积程序正确无误。
七、课程设计心得
随着时间的推移,本次的DSP课程设计在一周多的时间内完成了,在这短短的设计期间,我学到了许多新知识,同时也巩固了许多老的知识。
在这个设计期间,我认为最重要的就是熟悉掌握卷积算法、程序的编程及调试,认真的研究老师给的题目。
同时我还明白了,在编程序时自己不会时可以主动的问问老师和同学,要及时的分析问题解决问题。
还有在编程序时要重视程序的模块化,以便修改的方便,也要注重程序的调试,掌握其中的方法。
对于本次DSP课程设计,从中有了很多的感触。
第一、是在学习态度上,无论是学习课本知识还是在编程序时,都要全神贯注,认真对待,不能马虎。
因为越是细节的东西,越是不会引起我们的重视,就会越容易出错,编程序时有很多问题都是由于我们不够严谨、不够认真所造成的。
第二、要主动与同学合作交流,由于对课本理论的不熟悉导致编程出现错误,在不会的情况下,一定要主动的问老师、同学,一起讨论,一起思考,互相交流。
在与别人交流中,可以学习到她们的优点,可以得到自己想不到的学习方法与知识。
第三、在这次课程设计中,从中认识到了自己许多的不足,对课本的基础知识掌握的不够熟练、不够扎实。
对于自己会的东西也不会正确的运用,这是我欠缺的地方,对于自己不会的东西请教了学习好的同学,听她们讲解分析,这让我受益匪浅。
我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样问题。
但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力提高都会受益于我在以后的学习、工作和生活中。
通过这次DSP课程设计,加深了我对《DSP技术及应用》理论知识的理解,对卷积部分的知识有了更进一步的理解。
同时懂得将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
八、参考文献
《DSP技术及应用》董胜、刘伯生北京大学出版社.
《信号与系统分析》吴京等编著国防科技大学出版社.
《C语言程序设计》韩增红王冬梅人民邮电出版社.