DSP课程设计报告.docx

上传人:b****6 文档编号:8261453 上传时间:2023-01-30 格式:DOCX 页数:32 大小:1.02MB
下载 相关 举报
DSP课程设计报告.docx_第1页
第1页 / 共32页
DSP课程设计报告.docx_第2页
第2页 / 共32页
DSP课程设计报告.docx_第3页
第3页 / 共32页
DSP课程设计报告.docx_第4页
第4页 / 共32页
DSP课程设计报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

DSP课程设计报告.docx

《DSP课程设计报告.docx》由会员分享,可在线阅读,更多相关《DSP课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。

DSP课程设计报告.docx

DSP课程设计报告

 

 

 

 

实验流程及课程知识

§4.1[实验4.1]卷积运算

一、实验目的

1.掌握卷积运算的基本原理;

2.掌握用C语言编写DSP程序的方法。

二、实验设备

1.一台装有CCS软件的计算机;

2.DSP实验箱的TMS320C5410主控板;

3.DSP硬件仿真器。

三、实验原理

卷积是数字信号处理中经常用到的运算。

其基本的表达式为:

写实现程序时需要注意两点:

(1)序列数组长度的分配,尤其是输出数组y(n)要有足够的长度;

(2)循环体中变量的位置,即n和m的关系。

四、实验结果

1.自定义h、x、y的值,输出图形如下所示:

x(n):

h(n):

y(n):

2.Matlab程序:

对应的程序

closeall;clearall;

x=[15141312111098700000000000];

h=[22222222200000000000];

y=conv(h,x);

nx=0:

length(x)-1;

subplot(3,1,1);

stem(nx,x,'.');

title('x');

nh=0:

length(h)-1;

subplot(3,1,2);

stem(nh,h,'.');

title('h');

ny=0:

length(y)-1;

subplot(3,1,3);

stem(ny,y,'.');

title('卷积结果y');

对应的Matlab图形:

§4.2[实验4.2]相关运算

一、实验目的

  1. 掌握相关系数的估计方法;

  2. 掌握用C语言编写DSP程序的方法。

二、实验设备

1.一台装有CCS软件的计算机;

2.DSP实验箱的TMS320C5410主控板;

3.DSP硬件仿真器。

三、实验原理

相关系数是数字信号处理中的一个重要概念,包括自相关系数和互相关系数。

它们的定义是:

,k为相关系数的阶数;

根据相关系数的定义,需要求输入信号的期望值,这在实际上是不可能实现的。

因此,通常只根据一定长度的已知输入信号求相关系数的一个估计,这时采用以下的公式:

(设N为已知信号的长度)

 

和 

既然是估计值,那么就存在一致性和有效性的问题,可以证明上面两式的估计是有偏估计,而以下的则是无偏估计:

  (无偏估计),

  (无偏估计)

本实验在上面公式的基础上实现各阶相关系数的估计。

3、实验结果

无偏相关估计:

有偏相关估计:

 

§4.3[实验4.3]快速傅里叶变换(FFT)实现

一、实验目的

1.掌握FFT算法的基本原理;

2.掌握用C语言编写DSP程序的方法。

二、实验设备

1.一台装有CCS软件的计算机;

2.DSP实验箱的TMS320C5410主控板;

3.DSP硬件仿真器。

三、实验原理

  傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。

离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。

但是DFT的计算量非常大,FFT就是DFT的一种快速算法,FFT将DFT的N2步运算减少至(N/2)log2N步。

离散信号x(n)的傅里叶变换可以表示为 

, 

式中的WN称为蝶形因子,利用它的对称性和周期性可以减少运算量。

一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。

两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。

本实验以时间抽取方法为例。

时间抽取FFT是将N点输入序列x(n)按照偶数项和奇数项分解为偶序列和奇序列。

偶序列为:

x(0),x

(2),x(4),…,x(N-2);奇序列为:

x

(1),x(3),x(5),…,x(N-1)。

这样x(n)的N点DFT可写成:

考虑到WN的性质,即

因此有:

或者写成:

由于Y(k)与Z(k)的周期为N/2,并且利用WN的对称性和周期性,即:

可得:

对Y(k)与Z(k)继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。

在基数为2的FFT中,总共有log2(N)级运算,每级中有N/2个2点FFT蝶形运算。

单个蝶形运算示意图如下:

以N=8为例,时间抽取FFT的信号流图如下:

从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。

也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。

如011变成110,那么第3个输入值和第六个输入值就要交换位置了。

本实验中采用了一种比较常用有效的方法完成这一步工作__雷德算法。

 

四、实验结果

1.定义变量x的参数值,输出变量x及其FFT的波形图:

X(n)

FFT结果y(n)

2.对应Matlab源程序

closeall;clearall;

k=0:

63;

x=k;

y=fft(x,64);

subplot(2,1,1);

nx=0:

length(x)-1;

stem(nx,x);

title('x');

ny=0:

length(y)-1;

subplot(2,1,2);

stem(ny,abs(y),'.');

title('FFT½á¹ûy');

对应的图形如下所示:

 

 

§4.4[实验4.4]离散余弦变换(DCT)实现

一、实验目的

  1. 掌握离散余弦变换的概念和实现方法;

  2. 掌握用C语言编写DSP程序的方法。

二、实验设备

 1. 一台装有CCS软件的计算机;

2.DSP实验箱的TMS320C5410主控板;

3.DSP硬件仿真器。

三、实验原理

尽管傅里叶变换具有很多优点,得到了广泛的应用,但是它也有缺点。

例如:

傅里叶变换需要计算的是复数而不是实数,一般进行复数运算要比进行实数运算费时得多。

如果采用其它合适的完备正交函数系来代替傅里叶变换所利用的正、余弦函数构成的完备正交函数系,就可以避免这种复数运算。

离散余弦变换就是基于实数的正交变换。

一维的离散余弦变换的定义如下:

式中F(k)为第k个余弦变换系数,f(x)为时域中的N点序列。

要进行离散余弦变换可以从它的定义出发,但这样做的计算量相当大,在实际应用中非常不便,因此需要一种快速算法。

首先,将f(x)进行延拓:

按照一维离散余弦变换的定义有:

由于

是fe(x)的2N点离散傅里叶变换,因此,在作离散余弦变换时,可以把长度为N的序列f(x)的长度延拓为2N的序列,然后对延拓的结果进行离散傅里叶变换,最后提取离散傅里叶变换的实部便是离散余弦变换的结果。

在作离散傅里叶变换时可以采用快速傅里叶变换方法(FFT)。

四、实验结果

修改FFT变换的长度N,分别取8和16,所示的窗口如下图所示:

N=8

N=16

§4.7[实验4.7]自适应滤波器(LMS)实现

一、实验目的

1.掌握自适应滤波器的原理;

2.掌握LMS算法的原理;

3.掌握用C语言编写DSP程序的方法。

二、实验设备

1. 一台装有CCS软件的计算机;

2.DSP实验箱的TMS320C5410主控板;

3.DSP硬件仿真器。

三、实验原理

图1

(图1)为自适应滤波器结构的一般形式,图中x(k)为输入信号,通过参数可调的数字滤波器后产生输出信号y(k),将输出信号y(k)与标准信号(或者为期望信号)d(k)进行比较,得到误差信号e(k)。

e(k)和x(k)通过自适应算法对滤波器的参数进行调整,调整的目的是使误差信号

最小。

反复进行上面过程,使滤波器逐渐掌握了输入信号和噪声的统计规律,并以此为根据自动调整自己的参数,从而达到最佳的滤波效果。

一旦输入信号的统计规律发生了变化,滤波器能够自动跟上输入信号的变化,自动调整滤波器的参数,这就是自适应滤波的原理。

自适应滤波器的结构可以采用FIR型或IIR型,由于IIR滤波器存在稳定性问题,因此一般采用FIR滤波器作为自适应滤波器的结构。

自适应FIR滤波器结构又可分为三种结构类型:

横向型结构(TransversalStructure)、对称横向型结构(SymmetricTransversalStructure)、格型结构(LatticeStructure)。

本实验所采用的是自适应滤波器设计中最常用的FIR横向型结构。

设w(i)为横向滤波器的一组系数,滤波器的输出与输入信号间的关系可以表示为:

自适应滤波器除了包括一个按照某种结构设计的滤波器,还有一套自适应的算法。

滤波器的参数就是依照这种自适应算法来自动调整的,最常用的自适应算法是最小均方误差算法,即LMS算法(LeastMeanSquare)。

LMS算法的目标是通过调整系数,使输出误差序列e(n)=d(n)y(n)的均方值最小化,并且根据这个判据来修改权系数。

当均方误差达到最小时,得到最佳系数w*。

为了较快地求得近似的最佳系数,可以采用最快下降法,也叫梯度算法,这是一种迭代运算。

在采用种种近似和代替后,最后可以导出如下公式:

式中的u是由系统稳定性和迭代运算收敛速度决定的自适应步长,u越小,则收敛越慢,但是u太大则会导致系统的不稳定性。

本实验就是以这个公式为基础实现自适应滤波器的。

关于算法的详细推导过程及参数的选择原则,请读者参考数字信号处理的有关资料。

四、实验原理

输出信号y(k)与标准信号(或者为期望信号)d(k)的比较

误差信号e(k)

§5.1[实验5.1]McBSP配置GPIO实验

一、实验目的

1.熟悉5410的指令系统;

2.熟悉配置GPIO的方法。

二、实验设备

1.一台装有CCS5000软件的计算机;

2.DSP实验箱;

3.DSP硬件仿真器。

三、实验原理

DSP5410能够使用的GPIO资源很少,片上现有的只有XF和BIO两个,如果需要使用较多的GPIO引脚,可以将McBSP口和HPI口配置为GPIO口使用,本实验是将McBSP2口配置为GPIO口,输出5个信号用发光二极管来显示。

模块由五个发光二极管和一个锁存器组成。

“0”“1”信号由5410模块McBSP口输入,锁存器的控制信号由5410模块片选经由CPLD模块译码后输出。

实验结果:

§5.2[实验5.2]数码管控制实验

一、实验目的

1.熟悉5410的指令系统;

2.熟悉74HC573的使用方法。

二、实验设备

1.一台装有CCS5000软件的计算机;

2.插上5410主控板的DSP实验箱;

3.DSP硬件仿真器。

三、实验原理

此模块由数码管和八个锁存器组成。

数码管为共阴极型的。

数据由5410模块的低八位输入,锁存器的控制信号由5410模块输出,但经由CPLD模块译码后再控制对应的八个锁存器。

注:

其中七片数据均由5410传输过去

 

实验结果:

§5.3[实验5.3]液晶显示屏(LCD)实验

一、实验目的

1.掌握液晶的使用方法;

2.掌握液晶信号之间时序的正确识别和引入。

二、实验设备

1.一台装有CCS5000软件的计算机;

2.插上5410主控板的DSP实验箱;

3.DSP硬件仿真器。

三、实验原理

1.液晶简介

1

/CS1

H/L

L:

选择芯片(左半屏)信号

2

/CS2

H/L

L:

选择芯片(右半屏)信号

3

GND

0

电源地

4

VDD

5V

+5V

5

VO

-----

液晶驱动电压

6

D/I

H/L

D/I=’H’,表示DB7——DB0为显示数据;

D/I=’L’,表示DB7——DB0为显示指令数据

7

R/W

H/L

R/W=’H’,E=’H’数据被读到DB7—DB0

R/W=’L’,E=’H’—>’L’,数据被写到IR或DR

8

E

H/L

R/W=’L’,E信号的下降沿锁存DB7--DB0

R/W=’H’,E=’H’,DDRAM数据独到DB7—DB0

9~16

DB0----DB7

H/L

数据线

液晶的使用注意事项:

(1)液晶分左右半屏,通过CS0,CS1控制,CS1或CS0一个置1的同时另一个置0,其中置1的将被选中;

 

(2)RS和RW配合使用

RS

R/W

Function

0

0

Instruction

1

Statusread(busycheek)

1

0

Datawrite(frominputregistertodisplaydataRAM

1

Dataread(fromdisplaydataRAMtooutputregister)

(3)向LCD里写指令或数据前应先写指令相应的位置,对行,列,页的选择写命令时,由于命令字的位都有标志,所以写时LCD会自动识别;

(4)E,每次写数据或指令前都是变高,写入数据或指令后使E变低锁存;

(5)液晶的扭曲度可以通过调节VDD和VO之间的可调电阻得到。

2.对于5410芯片I/O口有二类寄存器:

(1)控制寄存器和数据方向寄存器,使用方法如下:

首先确定引脚的功能,即IO控制器寄存器,为0表示IO功能,为1表示基本功能。

本试验使用IO功能。

(2)引脚被配置为IO功能,就需要确定它的方向:

输入还是输出。

为1表示是输出引脚,否则是输入引脚。

对于IO功能的输入或输出是通过读写相应的数据方向寄存器来实现。

输入引脚对应读操作;输出引脚对应写操作。

本试验只用写操作。

实验结果:

 

§5.7[实验5.7]普通语音A/D与D/A转换实验

一、实验目的

1.熟悉5410DSP的MCBSP的使用;

2.了解AD50的结构;

3.掌握AD50各寄存器的意义及其设置;

4.掌握AD50与DSP的接口;

5.掌握AD50的通讯格式;

6.掌握AD50的DA实验。

二、实验设备

1.一台装有CCS软件的计算机;

2.DSP实验箱;

3.DSP硬件仿真器;

三、实验原理

1.DSP的MCBSP接口基础

TMS320VC5402提供了三个高速、全双工、多通道缓存串行口。

它提供了双缓存的发送寄存器和三缓存的接收寄存器,具有全双工的同步或异步通信功能,允许连续的数据流传输;数据发送和接收有独立可编程的帧同步信号;能够与工业标准的解码器、模拟接口芯片或其它串行A/D与D/A设备(如AD50,AIC23)、SPI设备等直接相接;支持外部时钟输入或内部可编程时钟;每个串行口最多可支持128通道的发送和接收;串行字长度可选,包括8、12、16、20、24和32位;支持m律和A律数据压缩扩展。

McBSP通过7个引脚(DX、DR、CLKX、CLKR、FSX、FSR和CLKS)与外设接口。

DX和DR引脚完成与外部设备进行通信时数据的发送和接收,由CLKX、CLKR、FSX、FSR实现时钟和帧同步的控制。

由CLKS来提供系统时钟。

发送数据时,CPU和DMA控制器将要发送的数据写到数据发送寄存器DXR,在FSX和CLKX作用下,由DX引脚输出。

接收数据时,来自DR引脚的数据在FSR和CLKR作用下,从数据接收寄存器DRR中读出数据。

接收和发送帧同步脉冲即可以由内部采样速率产生器产生,也可以由外部脉冲源驱动,McBSP分别在相应时钟的上升沿和下降沿进行数据检测。

串行口的操作由串行口控制寄存器2SPCR和引脚控制寄存器PCR来决定;接收控制寄存器RCR和发送控制寄存器XCR分别设置接收和发送的各种参数,如帧长度等。

2.AD50结构

AD50是TI公司生产的一个16位、音频范围(采样频率为2K~22.05KHZ)、内含抗混叠滤波器和重构滤波器的模拟接口芯片,它有一个能与许多DSP芯片相连的同步串行通信接口。

AD50C片内还包括一个定时器(调整采样率和帧同步延时)和控制器(调整编程放大增益,锁相环PLL,主从模式)。

AD50有28脚的塑料SOP封装(带DW后缀)和48脚的塑料扁平封装(带PT后缀),体积较小,适应于便携设备。

AD50的工作温度范围是0~70℃,单一5V电源供电或5V和3.3V联合供电,工作时的最大功耗为120mW。

AD50的内部结构简图如下:

最上面第一通道为模拟信号输入监控通道,第二通道为模拟信号转化为数字信号(A/D)通道,第三通道为数字信号转化为模拟信号(D/A)通道,最下面一路是AD50的工作频率和采样频率控制通道。

3.AD50内部寄存器及其作用

AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。

寄存器0:

空操作寄存器。

寄存器1:

软件复位

软件掉电

选择16位或15位工作方式

硬件或软件二次通信请求方式的选择

寄存器2:

使能ALTDATA输入端

为ADC选择16/15位方式

寄存器3:

选择FS与FSD之间延迟SCLK的个数

告诉主机有几个从机被联上

寄存器4:

为输入和输出放大器选择放大器增益

选择N来设置采样频率,fs=MCLK/(128*N)或MCLK/(512*N)

在MCLK输入端使能外部时钟输入,并旁通内部的PLL

寄存器5,6:

保留

 

4.AD50与DSP的接口

AD50与TMS320VC5402是以SPI方式连接的。

AD50工作在主机模(M/S=1),提供SCLK(数据移位时钟)和FS(帧同步脉冲)。

TMS320VC5402工作于SPI方式的从机模式,BCLKX1和BFSX1为输入引脚,在接数据和发数据时都是利用外界时钟和移位脉冲。

5.AD50的通讯方式

AD50有两个通信方式一种是15+1方式软件申请第二串行通信的;另一种是用FC来切换通信方式。

软件不太可靠而且15位精度小,对于音频数据处理麻烦。

故我们采用拉高FC以达到切换通信方式。

普通AD/DA语音模块控制及原理图

 

实验结果

波形图

 

大作业

一、实验目的

1、掌握FIR低通滤波器的一种编程实现方法

2、进一步掌握CCS软件各项功能操作

3、进一步了解FIR体统滤波器的特性

4、

二、实验设备

1.一台装有CCS5000软件的计算机;

3.DSP硬件仿真器。

三、实验原理

1、

4、实验步骤

编写程序

系统函数:

#include

#ifdefWIN32

#include

#endif

#defineSAMPLEdouble/*definethetypeusedfordatasamples*/

voidclear(intntaps,SAMPLEz[])

{

intii;

for(ii=0;ii

z[ii]=0;

}

}

intmain(void)

{

#defineNTAPS6

staticconstSAMPLEh[NTAPS]={1.0,1.2,2.1,3.3,4.2,5.1,5.4,};

staticSAMPLEh2[2*NTAPS];

staticSAMPLEz[2*NTAPS];

#defineIMP_SIZE(3*NTAPS)

staticSAMPLEimp[IMP_SIZE];

SAMPLEoutput;

intii,state;

/*makeimpulseinputsignal*/

clear(IMP_SIZE,imp);

imp[5]=1.5;

/*createaSAMPLEdh*/

for(ii=0;ii

h2[ii]=h2[ii+NTAPS]=h[ii];

}

/*testFIRalgorithms*/

printf("Testingfir_basic:

\n");

clear(NTAPS,z);

for(ii=0;ii

output=fir_basic(imp[ii],NTAPS,h,z);

printf("%3.1lf",(double)output);

}

printf("\n\n");

printf("Testingfir_shuffle:

\n");

clear(NTAPS,z);

state=0;

for(ii=0;ii

output=fir_shuffle(imp[ii],NTAPS,h,z);

printf("%3.1lf",(double)output);

}

printf("\n\n");

printf("Testingfir_circular:

\n");

clear(NTAPS,z);

state=0;

for(ii=0;ii

output=fir_circular(imp[ii],NTAPS,h,z,&state);

printf("%3.1lf",(double)output);

}

printf("\n\n");

printf("Testingfir_split:

\n");

clear(NTAPS,z);

state=0;

for(ii=0;ii

output=fir_split(imp[ii],NTAPS,h,z,&state);

printf("%3.1lf",(double)output);

}

printf("\n\n");

printf("Testingfir_double_z:

\n");

clear(2*NTAPS,z);

state=0;

for(ii=0;ii

output=fir_double_z(imp[ii],NTAPS,h,z,&state);

printf("%3.1lf",(double)output);

}

printf("\n\n");

printf("Testingfir_double_h:

\n");

clear(NTAPS,z);

state=0;

for(ii=0;ii

output=fir_double_h(imp[ii],NTAPS,h2,z,&state);

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

当前位置:首页 > 自然科学 > 天文地理

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

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