DSP2812实验指导书第三部分 - 图文

更新时间:2024-03-05 03:38:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第4章 实验内容

实验一 编写一个以C语言为基础的DSP程序

一.实验目的

1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。 2.学习编制连接命令文件,并用来控制代码的连接。

3.学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。 4.熟悉使用软件仿真方式调试程序。

二.实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.0软件。

三.实验原理

1. 标准C语言程序

CCS支持使用标准C语言开发DSP应用程序。当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c (如:volume.c)。

CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP的可执行代码。最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。

由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。所以用户工程中需要注明使用C的支持库。 2. 命令文件的作用

命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。命令文件也为链接程序提供了DSP外扩存储器的描述。在程序中使用CMD文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。

3. 内存映射(map)文件的作用

一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP代码的确切信息。当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。另外,通过观察map文件,可以掌握DSP存储器的使用和利用情

— 1 —

况,以便进行存储器方面的优化工作。 4.程序设计要求 程序框图:

循环 计算x+y 数值运算 开设三个整型变量x,y,z 赋初值: x=1,y=2 输出结果到z 四.实验步骤

1.实验准备

设置软件仿真模式 2.建立新的工程文件

(1)双击桌面上图标,如右图: 启动Code Composer Studio 2.21。

(2)进行以下设置:

①菜单项 选择 ④点击完成设置

— 2 —

②输入 工程名 ③点击选取目录 D:\\dsp\\t1\\CProgram

图4.1.1 建立CProgram.pjt

3.编辑输入源程序 (1)C语言程序

-先新建源程序窗口:

-输入源程序:

int x,y,z; main() {

x=1; y=2; while ( 1 )

{

z=x+y; } }

图4.1.2 新建源文件

-保存源程序为CProgram.c:

②选择存储目录为 ③输入 文件名 ① 选择 菜单项 ④单击按 D:\\dsp\\t1\\CProgram

钮保存

— 3 —

图4.1.3 保存为c文件 (2)连接命令文件

-如同第(1)步操作,建立空的源程序窗口。 -输入连接命令文件内容:

-l rts2800.lib -stack 400h -heap 100 MEMORY {

PAGE 0 : PROG(R) : origin = 0x3E8000, length = 0x10000 PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0 PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2 PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E

PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400 PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400 PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000 PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000 }

SECTIONS {

/* 22-bit program sections */

.reset : > RESET, PAGE = 0 vectors : > VECTORS, PAGE = 0 .pinit : > PROG, PAGE = 0

.cinit : > PROG, PAGE = 0

.text : > PROG, PAGE = 0

/* 16-Bit data sections */

.const : > L0L1RAM, PAGE = 1 .bss : > L0L1RAM, PAGE = 1 .stack : > M1RAM, PAGE = 1 .sysmem : > M0RAM, PAGE = 1

/* 32-bit data sections */ .ebss : > H0RAM, PAGE = 1 .econst : > H0RAM, PAGE = 1 .esysmem : > H0RAM, PAGE = 1 }-l rts2800.lib

-如同第(1)步操作,将文件存为:

— 4 —

D:\\dsp\\t1\\CProgram\\CProgram.cmd

(3) 将上述编译的源程序加入工程CProgram.pjt,

4.编译源文件、下载可执行程序 (1) 单击菜单“Project”、“Rebuild All”。

(2) 执行File?Load Program ,在随后打开的对话框中选择刚刚建立的

D:\\dsp\\t1\\CProgram\\debug\\CProgram.out文件。完成后,系统自动打开一个反汇编窗口“Disassembly”,并在其中指示程序的入口地址为“_c_int00”。

5.打开观察窗口

开启CPU寄存器观察窗口:单击菜单View->Registers->Core。

6.观察程序运行结果

这时,在“Disassembly”代表程序运行位置的绿色箭头指向程序的入口地址,程序将从此开始执行。

(1) 选择菜单中Debug->Go Main,CCS自动打开CProgram.c,程序会停在用户主程序入口main上,这从反汇编窗口和CProgram.c窗口中的指示箭头位置可以看出。 (2) 在内存观察窗口中观察变量的值:

选择“View”菜单中“Memory…”项,在“Memroy Window Options”窗口中的“Adress”项中输入&x,单击“OK”完成设置;“Memory”窗口中x的当前取值显示在第1个地址的后面。 (3) 将变量x、y、z分别加入观察窗口:

在源程序中双击变量名,再单击鼠标右键,选择“Add to Watch Window”。这时,这3个变量还未作初始化。

(4) 单步运行2次,在观察窗中观察到变量x、y被赋值。变化的值被显示成红色。同时在“Memory”窗口中也能观察到x和y值的改变。

(5) 再单步运行,可观察到z的值被计算出来。双击观察窗口中变量x、y在“Value”栏中的取值

并修改成其他取值,单步运行后观察结果。 (6) 双击观察窗口中变量x、y在“Value”栏中的取值,并修改成0;选择菜单Debug->Restart,返

回程序起点。 (7) 重新单步运行程序,观察在CPU寄存器窗口中,各寄存器使用情况,观察哪个寄存器参与了运

算。 7.内存映像文件

(1) 选择菜单Project->Build Options…,启动“Build Options”工程设置对话框。

(2) 单击“Linker”属性页,在“Map Filename”项中观察生成的map文件名和路径。

(3) 单击“取消”退出。

8.对照观察map文件和cmd文件的内容 (1) 选择菜单File->Open…,将找到D:\\dsp\\t1\\CProgram\\Debug目录,将文件类型改为“Memory Map

Files”,选择CProgram.map文件、打开。 (2) 打开CProgram.cmd文件。

(3) 程序的入口地址:map文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(_c_int00)。 (4) 内存使用情况:

-map文件中“MEMORY CONFIGURATION”标明了程序占用RAM的使用情况,共占用aaH个存储单元。

-观察map文件中的“SECTION ALLOCATION MAP”段,可以看出CProgram.obj的入口地址为0x3e801e,这也是main函数的入口地址。

-用户堆栈段从400H开始,程序运行到main函数中后,变量x、y、z均开设在栈中。

— 5 —

三.实验原理 1.扩展IO接口:

F2812是一块以TMS320F2812DSP为核心的DSP扩展评估板,它通过扩展IO接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接收外设发送的各种数据、信息。

2.键盘控制方法:键盘接收寄存器MCTRKEY地址由Port8005给出,键盘清除寄存器CTRCLKEY地址由Port8006给出。使能液晶模块后,每当有键盘按下,MCTRKEY中的相应位就会置1,向CTRCLKEY中写入0会将MCTRKEY清零。 3.实验程序流程图:

是否有键盘输入? 读键盘接收寄 存器并清键盘 初始化液晶屏幕 开始 将相应指示灯置位

四.实验步骤

1.实验准备

(1)连接实验设备。

(2)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。 2.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行 3.启动Code Composer Studio 2.21选择菜单Debug→Reset CPU。 4.打开工程文件工程目录:D:\\dsp\\t4\\key\\key.pjt 浏览key.c文件的内容,理解各语句作用。 5.编译并下载程序

6.运行程序观察结果

运行程序后,按下键盘K1-K8的任意键,指示灯led4-led11中会有一个相应的指示灯点亮。 7.结束程序运行,退出CCS。

五.实验结果

实验结果:可以观察到指示灯led4-led11受键盘控制点亮熄灭。

分析:在程序中加入分支语句实现对不同键盘输入值的处理或支持控制型按键。

— 26 —

(3)液晶显示器控制显示

一.实验目的

通过实验学习使用2812ADSP的扩展I/O端口控制外围设备的方法,了解液晶显示器的显示控制原理及编程方法。

二.实验设备

计算机,ICETEK-F2812-EDU实验箱(或ICETEK仿真器+ICETEK-F2812-A系统板+相关连线及电源)。

三.实验原理

1.扩展IO接口:

F2812-A是一块以TMS320F2812DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。

2.液晶显示模块的访问、控制是由F2812 DSP对扩展接口的操作完成。

控制口的寻址:液晶屏幕指令寄存器LCDCOMMAND的地址为Port8001,液晶屏幕参数寄存器LCDDATA的地址为Port8002,液晶屏幕状态字寄存器LCDSTATUS的地址为Port8000。 3.显示控制方法:

本实验中使用已写好的库函数对液晶屏幕进行操作。需要在工程文件中加入库lcd.lib以及头文件lcd.h。

下面给出lcd.lib的控制液晶屏幕的接口函数及其功能描述:

LCDSetOrigin(int nX,int nY): 重新设定新原点的位置,nX,nY为新原点的坐标。初始时默认原点为(0,0),即屏幕左下角。

LCDSetScreenBuffer(unsigned int *_pScreenBuffer):设置屏幕缓冲区指针,缓冲区为30*128字,所有向屏幕进行的写操作都要先把数据写到缓冲区内,缓冲区位置需要在编程时预先设定,通常开辟一个长度为30*128的一维数组。 LCDTurnOn(): 打开显示器

LCDTurnOff(): 关闭显示器 LCDCLS(): 清屏幕

LCDSetDelay(unsigned int nDelay) :设置液晶读写反应时间,参数:DSP主频8MHz时取0, 160MHz时取1 _Delay(unsigned int nTime) :延时函数

LCDRefreshScreen(): 用缓冲区中的数据刷新屏幕

LCDPutPixel(int x,int y,unsigned int color) :写点到屏幕,输入参数坐标值和颜色,颜色0消 点,1画点,2异或画点

LCDGraph(struct struLCDGraph *Gstru) :按照定义的参数(在结构中)绘制图形

LCDWriteBytes(unsigned int *pData,int x,int y,unsigned color) :屏幕写字符8x8

LCDPutCString(unsigned int *pData,int x,int y,unsigned int nCharNumber,unsigned color) : 屏幕写中文

字符串,*pData为输入字符串在内存中的起始地址,x, y为字符串左上角的坐标,nCharNumber为

显示的中文字数,color为颜色。

void LCDDrawLine(int x1,int y1,int x2,int y2,unsigned color):在屏幕上画线段,x1, y1为线段起点坐标,x2, y2为线段终点坐标。

关于显示字符串LCDPutCString (unsigned int *pData,int x,int y,unsigned int nCharNumber,unsigned

— 27 —

color)函数,输入的字符串数据可由字模提取插件生成,字模提取插件的地址为C:\\ICETEK-VC5416ar-AG-EDULab\\lab0403-lcd\\ZI_MO.EXE。其使用步骤如下: 1) 双击ZI_MO.EXE的图标,在左下角的汉字输入区键入想要生成的字符串。 2) 点击上排中部的预览键,将字符串显示到中间部分的模拟显示区。 3) 在上排横,纵,倒三个选项中只选择“纵”选项。

4) 选择上下镜像选项使字符串上下颠倒。

5) 选择生成C51格式的点阵数据,此时左下角的点阵数据生成区会生成8位宽的数据点阵。 6) 将生成的8位数据点阵每前后相邻的两个数据和并成一个16位的数据,然后制作成数组,将其相

关参数传递给LCDPutCString函数,即可在屏幕上显示字符串。

上下镜像 纵 C51格式的点阵数据 模拟显示区 点阵数据生成区 汉字输入区

说明:在进行屏幕显示时应遵循以下步骤: 1) 调用LCDTurnOff()函数关屏幕

2) 调用LCDSetScreenBuffer(unsigned int *_pScreenBuffer)函数确定屏幕缓冲区位置并清缓冲区 3) 调用LCDSetDelay(unsigned int nDelay)函数设置液晶读写反映时间 4) 调用LCDTurnOn()函数打开显示屏 5) 调用LCDCLS()函数清屏幕 6) 调用各种屏幕画图函数

7) 结束程序,退出主循环依次调用函数LCDCLS(),LCDTurnOff(),LCDSetDelay(0),exit(0)关闭屏。 2. 液晶显示器与DSP的连接:

— 28 —

5.数据信号的传送:

由于液晶显示模块相对运行在高主频下的DSP属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;

电平转换:由于DSP为3.3V设备,而液晶显示模块属于5V设备,所以在连接控制线、数据线时需要加电平隔离和转换设备,如:ICETEK-CTR板上使用了74LS245。 6. 实验程序流程图

开始 初始化DSP 初始化液晶显示屏幕 调用生成字符串函数在屏幕写字 调用写点函数在屏幕画线 调用写字符函数显示数字0至9 调用画线函数在屏幕画移动方框

关屏幕,退出程序 是否结 束循环 结束 — 29 —

四.实验步骤

1.实验准备

(1)连接实验设备。

(2)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。

2.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行 3.启动Code Composer Studio 2.21 选择菜单Debug→Reset CPU。 4.打开工程文件

工程目录:D:\\dsp\\t4\\lcd\\lcd.pjt

浏览LCD.c文件的内容,理解各语句作用。 5.编译、下载程序。 6.运行程序观察结果

7.更改程序中对页、列的设置,实现不同位置的显示。 8.自己设计一些控制语句,实现不同显示效果。 9.结束程序运行,退出CCS。

五.实验结果与分析

实验结果:屏幕左上角会显示教学实验箱5个中文字符,左下角会化出一条斜线,然后先显示数字从0到9再从9到0,最后会移动显示一个边长为10的正方形。

六.问题与思考

试设计程序在液晶显示屏上显示计时时钟,精确到秒,形式为“时时:分分:秒秒”。

实验五 外设控制—音频信号发生实验

一.实验目的

通过实验学习使用2812DSP的扩展端口控制外围设备信息的方法,掌握使用2812DSP通 用计时器的控制原理及中断服务程序的编程方法;了解蜂鸣器发声原理和音乐发生方法。

二.实验设备

计算机,ICETEK-F2812-EDU实验箱(或ICETEK仿真器+ICETEK-F2812-A系统板+相关连线及电源)。

三.实验原理

1.EMIF接口

TMS320F2812DSP的扩展存储器接口(EMIF)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。这一接口提供地址连线、数据连线和一组控制线。ICETEK-F2812-A将这些扩展线引到了板上的扩展插座上供扩展使用。

2.蜂鸣器由DSP上PWM2设置为通用I/O管脚输出控制,可将此管脚上的频率输出转换成声音输出。

控制的方法是使用DSP通用定时器设置PWM2管脚以一定的频率改变高低状态,输出方波。

— 30 —

对于通用定时器周期寄存器的设置,计数值为所需频率计数值的二分之一。

音乐的频率(C调):

C D E F G A B ^C 1 2 3 4 5 6 7 ^1 C: 264, 297, 330,352, 396, 440,495, 528

3.蜂鸣器的连接:由于选用的蜂鸣器所需电流较小,所以采用将DSP通用I/O引脚直接驱动的方式。

图4.5.1 蜂鸣器设计原理

4.实验程序流程图

根据预定的数据切换音符 中断服务程序开始 选通蜂鸣器 改变PWM2引脚的状态 (通过不同的定时器周期设置产生不同频率) 开始 初始化:DSP时钟、ICETEK-CTR 设置PWM2控制寄存器输出 初始化中断向量和定时器 中断服务程序结束 初始化音长,音高等参数

四.实验步骤

1.实验准备

(1)连接实验设备。

— 31 —

(2)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。注意将CTR控制模块中的S1的拨码开关的1设置为on

2.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行 3.启动Code Composer Studio 2.21

选择菜单Debug→Reset CPU。 4.打开工程文件

工程目录:D:\\dsp\\t5\\speaker\\speaker.pjt

浏览sperker.c文件的内容,理解各语句作用。 5.编译并下载程序 6.运行程序观察结果

7.将语句“delay(music[nCount][1]);”改为“delay(music[nCount][1]/2);”,重复步骤5-6,体会音乐的

节奏快了一倍。

五.实验结果

实验结果:可以听到蜂鸣器发出的音乐声。

分析:程序中使用循环延时的方法掌握节拍,可考虑使用定时器计数改变音符,更复杂的方法可以产生语音效果。

六.问题与思考

结合键盘控制程序,设计一个按键“弹琴”的程序。

实验六 语音采集和放送

一.实验目的

1.了解 F2812-A评估板上扩展语音codec芯片TLV320AIC23的设计和程序控制原理。 2.了解数字回声产生原理、编程及其参数选择、控制。 3.熟悉F2812DSP扩展存储器的编程使用方法。

二.实验设备

计算机,ICETEK-F2812-EDU实验箱(或ICETEK仿真器+ICETEK-F2812-A系统板+相关连线及电源),ICETEK-AIC23-E背板,耳机,麦克风。

三.实验原理

1.TLV320AIC23芯片性能指标及控制方法 -请参见本实验指导书第2章2.6 -背板位置及其插座:

— 32 —

麦克风输入 立体声线入 TLV320AIC23 耳机输出 立体声输出

图4.6.1 ICETEK-AIC23-E板实物图

-语音信号的输入:AIC23通过其中的AD转换采集输入的语音信号,每采集完一个信号后,将数据发送到DSP的McBSP接口上,DSP可以读取到语音数据,每个数据为16位无符号整数,左右通道各有一个数值。

-语音信号的输出:DSP可以将语音数据通过McBSP接口发送给AIC23,AIC23的DA器件将他们变成模拟信号输出。

2.数字回声原理

在实际生活中,当声源遇到物体时,会发生反射,反射的声波和声源声波一起传输,听者会发现反射声波部分比声源声波慢一些,类似人们面对山体高声呼喊后可以在过一会儿听到回声的现象。声音遇到较远的物体产生的反射会比遇到较近的物体的反射波晚些到达声源位置,所以回声和原声的延迟随反射物体的距离大小改变。同时,反射声音的物体对声波的反射能力,

决定了听到的回声的强弱和质量。另外,生活中的回声的成分比较复杂,有反射、漫反射、折射,还有回声的多次反、折射效果。

当已知一个数字音源后,可以利用计算机的处理能力,用数字的方式通过计算模拟回声效应。简单地讲,可以在原声音流中叠加延迟一段时间后的声流,实现回声效果。当然通过复杂运算,可以计算各种效应的混响效果。如此产生的回声,我们称之为数字回声。 3.程序流程图:

是 制作回声? 否 MCBSP中断产生 否 保存于语音缓冲区 初始化: CPU频率、AIC23 等待McBSP通道0传送结束 开始 中断开始 读取语音数据 是 — 33 — 根据延迟参数读回保存数据

四.实验步骤

1.实验准备

(1)连接实验设备:。

(2)准备音频输入、输出设备。

注意:ICETEK-AIC23-E背板可以在2812,5416,6713等板卡上使用,但要根据图2-33-2

来重新插板上跳线,此图在背板背面有绘制。

图4.6.2 跳线设置说明

把ICETEK-AIC23-E板插到ICETEK-F2812-A评估板上,即图4.6.3和图4.6.4的P3、P4插槽要对应插上,完成后如图4.6.5

P3插槽 P4插槽

— 34 —

图4.6.3 ICETEK-F2812-A评估板

P4插槽 P3插槽 麦克风 输入 耳机 输出

图4.6.4 ICETEK-AIC23-E背板

①将耳机上麦克风插头插到ICETEK-AIC23-E背板的LINE IN插座,即图4.6.4中“麦克风输入”。

②将耳机上音频输入插头插到ICETEK-AIC23-E背板的PHONE插座,即图4.6.4中“耳机输出”。

③调节耳机上音量旋钮到适中位置。

图4.6.5 ICETEK-F2812-A+ICETEK-AIC23-E 2.设置Code Composer Studio 2.21在硬件仿真(Emulator)方式下运行 3.启动Code Composer Studio 2.21

选择菜单Debug→Reset CPU。 4.打开工程文件

— 35 —

工程目录为:D:\\dsp\\t6\\echo\\echo.pjt

5.编译、下载程序,选择菜单Debug->Go Main,使程序运行到main函数入口位置。 6.设置观察窗口

打开源程序AIC23_Loopback.c,将变量bEcho和uEffect加入观察窗口。 7.运行程序观察结果

-按“F5”键运行,注意观察窗口中的bEcho=0,表示数字回声功能没有激活。 -这时从耳机中能听到麦克风中的输入语音放送。 -将观察窗口中bEcho的取值改成非0值。 -这时可从耳机中听到带数字回声道语音放送。

-试着调整uEffect的取值,使他们保持在0-0xd000范围内,同时听听耳机中的输出有何变化。 8.退出CCS

五.实验结果

声音放送可以加入数字回声,数字回声与原声的延迟可在程序中设定和调整。

六.问题与思考

请修改实验程序,实现第二重回声。例如:原声音直接放送表示为“A------”,而带数字回声的发送为“A—a----”,那么带第二重回声的为“A—a—a---”。第二重回声的音效要比第一重的弱。

实验七 DSP算法实验

(实验中可任选一种算法实现)

(1)有限冲激响应滤波器(FIR)算法实验

一.实验目的

1.握用窗函数法设计FIR数字滤波器的原理和方法。 2.熟悉线性相位FIR数字滤波器特性。 3.了解各种窗函数对滤波器特性的影响。

二.实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.21软件。

三.实验原理

1.有限冲激响应数字滤波器的基础理论(请参考相关书籍)。

2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。 3.数字滤波器系数的确定方法。

4.根据要求设计低通FIR滤波器

要求:通带边缘频率10kHz,阻带边缘频率22kHz,阻带衰减75dB,采样频率50kHz。

— 36 —

设计:

-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz -采样频率:

f1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz Ω1=2πf1/fs=0.64π -理想低通滤波器脉冲响应:

h1[n]=sin(nΩ1)/n/π=sin(0.64πn)/n/π -根据要求,选择布莱克曼窗,窗函数长度为: N=5.98fs/过渡带宽度=5.98*50/12=24.9 -选择N=25,窗函数为:

w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24) -滤波器脉冲响应为:

h[n]=h1[n]w[n] |n|≤12 h[n]=0 |n|>12

-根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。 -完成的滤波器的差分方程为:

y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5] -0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]

+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]

+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]

+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]

-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]

5.程序流程图:

开始 波形发生

FIR滤波 初始化工作变量 计算步长 用滤波器系数乘以保存的N-1个输入值和调用波形发生子程序产生混叠的波形(高频+低频) 用标准C的sin函数和cos函数计算当前波形值 返回计算结果 调用FIR滤波子程 序计算当前输出 返回波形值 当前输入值并求和

四.实验步骤

1.实验准备

-设置软件仿真模式, -启动CCS

2.打开工程,浏览程序:工程目录为D:\\dsp\\t7\\fir\\fir.pjt

— 37 —

3.编译并下载程序

4.打开观察窗口

*选择菜单View->Graph->Time/Frequency…,进行如下设置:

*选择菜单View->Graph->Time/Frequency…,进行如下设置:

在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。 5.设置断点

在有注释“/* 请在此句上设置软件断点 */”的语句设置软件断点。 6.运行并观察结果

⑴选择“Debug”菜单的“RUN”项,或按F12键运行程序。 ⑵观察“fin”、“fout”窗口中时域图形;观察滤波效果。

⑶鼠标右键单击“Input”和“Output”窗口,选择“Properties…”项,设置“Display Type”为“FFT Magitude”,再单击“OK”按钮结束设置。 ⑷观察“Input”、“Output”窗口中频域图形;理解滤波效果。 注意:由于实验运算复杂,需要等一会才能看到运行完结果。 7.退出CCS

五.实验结果

— 38 —

输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。

通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则大部分被滤除。

六.问题与思考

试选用合适的高通滤波参数滤掉实验的输入波形中的低频信号。

(2)无限冲激响应滤波器(IIR)算法

一.实验目的

1.掌握设计IIR数字滤波器的原理和方法。 2.熟悉IIR数字滤波器特性。

3.了解IIR数字滤波器的设计方法。

二.实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.0软件。

三.实验原理

1.无限冲激响应数字滤波器的基础理论。

2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。 3.数字滤波器系数的确定方法。

4.根据要求设计低通IIR滤波器

要求:低通巴特沃斯滤波器在其通带边缘1kHz处的增益为-3dB,12kHz处的阻带衰减为30dB,采样频率25kHz。设计:

-确定待求通带边缘频率fp1Hz、待求阻带边缘频率fs1Hz和待求阻带衰减-20logδsdB。

模拟边缘频率为:fp1=1000Hz,fs1=12000Hz 阻带边缘衰减为:-20logδs=30dB

-用Ω=2πf/fs把由Hz表示的待求边缘频率转换成弧度表示的数字频率,得到Ωp1和Ωs1。

Ωp1=2πfp1/fs=2π1000/25000=0.08π弧度 Ωs1=2πfs1/fs=2π12000/25000=0.96π弧度 -计算预扭曲模拟频率以避免双线性变换带来的失真。

— 39 —

由w=2fs tan(Ω/2)求得wp1和ws1,单位为弧度/秒。 wp1=2fs tan(Ωp1/2)=6316.5弧度/秒 ws1=2fs tan(Ωs1/2)=794727.2弧度/秒

-由已给定的阻带衰减-20logδs确定阻带边缘增益δs。

因为-20logδs=30,所以logδs=-30/20,δs=0.03162 -计算所需滤波器的阶数:

log(n?1?2s?1)?)log(1(0.03162)2?1)?0.714 )2log(?s1?p12log(794727.26316.5因此,一阶巴特沃斯滤波器就足以满足要求。 -一阶模拟巴特沃斯滤波器的传输函数为:

H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)

由双线性变换定义s=2fs(z-1)/(z+1)得到数字滤波器的传输函数为:

H(z)?500006316.5z?1z?1?6316.5?0.1122(1?z1?0.7757z?1?1)

因此,差分方程为:y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1] 5.程序流程图:

调用波形发生子程序产生混叠的波形(高频+低频) 用标准C的sin函数和cos函数计算当前波形值 返回计算结果 调用IIR滤波子程序计算当前输出 返回波形值 开始 波形发生 IIR滤波 初始化工作变量 计算步长 用滤波器系数乘以保存的N-1个输入输出值和当前输入值并求和 四.实验步骤

1.实验准备

-设置软件仿真模式。 -启动CCS

— 40 —

本文来源:https://www.bwwdw.com/article/w9oa.html

Top