DSP实验
一、TMS320VC5402定时器实验
一实验目的
1.了解DSP汇编程序与C语言程序的构成;
2.了解DSP程序各段的含义;
3.熟悉如何编写中断服务程序;
4.掌握片内定时器的设置方法;
5. 掌握长时间间隔的定时器的处理
二实验内容
1.DSP的初始设置;
2.DSP中断向量表的建立;
3. 定时器的使用;
设实验板时钟频率为20MHz,编程实现以下要求:
1、TMS320C5402的时钟频率为100 MHz
2、TMS320C5402XF端输出一个周期为500ms的方波,周期性地点亮LED
3、采用定时中断方法实现
4、用C语言编程,画出程序流程图并给出源代码。
5、上机调试。
三实验背景知识
1 通用TIMER 简介
TMS320VC5402 的定时器的说明:
VC5416 中有两个可编程的片上定时器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。这三个寄存器分别为TIM、PRD、TCR。这些寄存器
与对应的存贮空间地址如下表所示:
时间寄存器(TIM)是一个16 位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并且做减一操作。
周期寄存器(PRD)是一个16 位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。
定时器控制寄存器(TCR)是一个16 位的存贮器映射寄存器,包含了定时器的控制与状态信息。
2、CMD 文件简介
cmd文件用于DSP 代码的定位。由3 部分组成:
1、(1)输入/输出定义:
.obj文件:链接器要链接的目标文件。
.lib 文件:链接器要链接的库文件。
.map 文件:链接器生成的交叉索引文件。
.out 文件:链接器生成的可执行代码;链接器选项。
(2) MEMORY 命令:描述系统实际的硬件资源。
(3) SECTIONS 命令:描述"段"如何定位。
下面例子则可说明其基本格式:
-o sample.out (可缺省)
-m sample.map (可缺省)
-stack 100 (可缺省)
sample.obj meminit.obj (可缺省)
-l rts.lib (可缺省)
MEMORY
{
PAGE 0:
RESEVE: org = 00h len = 0x80
PAGE 0:
PROG1: org = 0x0100 len = 0x1200 PAGE 0:
VECT: org = 0x0080, len = 0x80
PAGE 1:
RESEVE1: org = 00h len = 0x1300 PAGE 1:
DARAM2: org = 0x1300 len = 0x400 PAGE 1:
DARAM1: org = 0x1700 len = 0x2900 }
SECTIONS
{
.text :> PROG1 PAGE 0
.cinit :> PROG1 PAGE 0
.switch: > PROG1 PAGE 0
.vectors:> VECT PAGE 0
.const: >DARAM1 PAGE 1
.bss :> DARAM1 PAGE 1
.stack :> DARAM2 PAGE 1
.system: >DARAM2 PAGE 1
.data :> DARAM2 PAGE 1
}
下面介绍一下CMD 文件中常用的程序段名与含义
.cinit存放C 程序中的已初始化的变量初值和常数表;
.const存放C 程序中的字符常量和用const声明的常量;
.text 存放C 程序的代码;
.bss为C 程序中的未初始化的全局和静态变量保留存储空间;
.far 为C 程序中用far 声明的全局和静态变量保留空间;
.stack 为C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的
参数传递、存储局部变量和保存中间结果;
.sysmem用于C 程序中malloc、calloc和realloc函数动态分配存储空
间
.vectors 用于自定义的“.vectors”段,这里是中断向量表
.switch 用于C程序中的switch语句
.data 已初始化的数据段
3 中断向量表文件
中断服务程序的地址(中断向量)要装载到存储器的合适区域。一般用中断向量表文件编制中断向量表,中断向量表文件多采用汇编语言编写;在文件中一般用汇编指令.sect 来生成一个表,表中各中断占4个字。这个表包含中断向量的地址和跳转指令。因为中断跳转地址的标志符在汇编语言模块外部使用,所以标志符用.ref 或.global定义。
4、GEL文件
GEL文件有两大作用:(1)配置CCS工作环境。(2)直接访问目标处理器(包括软硬件访真器),在这是主要使用GEL文件的初始化DSP。以下面的例子介绍一下GEL 文件的构成
#define PRD0 0x0025u #define TCR0 0x0026u
#define PRD1 0x0031u #define TCR1 0x0032u
StartUp()
{
GEL_MapOn(); /*存储空间打开*/
GEL_MapReset(); /*存储空间复位*/
GEL_MapAdd(0x80u,0,0x3F80u,1,1); /* 定义程序空间0x80-0x3FFF可读写*/
GEL_MapAdd(0x4000u,0,0xC000u,1,1);/* 定义程序空间0x4000-0xFFFF 可读写 */
/* 定义数据空间0-0xFFFF 可读写 */
GEL_MapAdd(0x0u,1,0x60u,1,1);/*MMRs*/
GEL_MapAdd(0x60u,1,0x3FA0u,1,1);/*DARAM*/
GEL_MapAdd(0x4000u,1,0xC000u,1,1); /* External */
}
实验流程图:
四、实验步骤
1.根据实验要求编写出周期500ms方波的汇编语言源代码,和C语言源代码(C 语言中加入外部中断,通过按键改变方波频率)。
2.编译没有错误后下载到C5402开发板中,运行程序,观察LED是否周期性亮灭。
3.下载C程序到开发板上,通过按下链接在外部中段上的按键,观察能否改变LED 灯的亮灭频率。
五、程序源代码
1、主函数:
#include "timer.h"
int t0_count;
void main()
{ CLKMD=0x00; //清零
while(CLKMD&01);
CLKMD=0x47ff; //开启PLL方式且采用5倍频
PMST=0x00a0; //将片内数据RAM映射到程序空间和数据空间并从0080
地址开始
coeff=1;
t0_count=250*coeff;
asm(" SSBX INTM"); //关闭所有可屏蔽的中断
ST1=ST1|0x0800; //INTM=1
TCR=0x0010;//停止定时器,且当PSC减到0后,TIM减1;当调试程序断点时定时器立即停止工作
PRD=9999; //定时周期寄存器存放定时时间常数,将值赋给TIM
TIM=9999; //定时寄存器
TCR=0x669; //定时控制寄存器,启动定时器,将PRD中的数加载到TIM中 IFR=0x108; //中断标志寄存器,启动外部中断INT3和定时器中断0 (TINT0)的标志位
IMR=0x108; //中断屏蔽寄存器,开放外部中断INT3和定时器中断0 (INT0)的屏蔽位
asm(" RSBX INTM"); //开放全部可屏蔽中断
ST1=ST1&0xf7ff;
while(1)
{
while(t0_count>0);
t0_count=250*coeff;
if(ST1&0x2000) ST1=ST1&0xdfff; //XF=0,即熄灭LED灯
else ST1=ST1|0x2000; //XF=1,即点亮LED灯
}
}
interrupt void timer()
{
t0_count--;
}
interrupt void change_frequency()
{
coeff++; //改变XF引脚输出的信号的频率
if (coeff>5) coeff=1;
}
2、中断函数:
.sect ".vectors"
.ref _c_int00
.ref timer
rs: BD _c_int00 ;
Rest nopnop
nmi: .space 4*16 ;NMI, SINT16
sint17:.space 4*16 ;SINT17
sint18: .space 4*16 ;SINT18
sint19: .space 4*16 ;SINT19
sint20: .space 4*16 ;SINT20
sint21: .space 4*16 ;SINT21
sint22: .space 4*16 ;SINT22
sint23: .space 4*16 ;SINT23
sint24: .space 4*16 ;SINT24
sint25: .space 4*16 ;SINT25
sint26: .space 4*16 ;SINT26
sint27: .space 4*16 ;SINT27
sint28: .space 4*16 ;SINT28
sint29: .space 4*16 ;SINT29
sint30: .space 4*16 ;SINT30
int0: .space 4*16 ;INT0, SINT0
int1: .space 4*16 ;INT1, SINT1
int2: .space 4*16 ;INT2, SINT2
tint0: BD timer ;TINT0, SINT3
nop
nop
brint0: .space 4*16 ;BRINT0, SINT4 bxint0: .space 4*16 ;BXINT0, SINT5
dmac0: .space 4*16 ;DMAC0, brint2, SINT6
dmac1: .space 4*16 ;DMAC1, bxint2, SINT7
int3: .space 4*16 ;INT3, SINT8
hpint: .space 4*16 ;HPINT, SINT9
brint1: .space 4*16 ;BRINT1 or DMAC2, SINT10 bxint1: .space 4*16 ;BXINT1 or DMAC3, SINT11 dmac4: .space 4*16 ;DMAC4, SINT12
dmac5: .space 4*16 ;DMAC5, SINT13
rsvd1: .space 4*16 ;reserved
rsvd2: .space 4*16 ;reserved
.end
3、链接文件:
MEMORY
{
PAGE 0: RESERVER: origin = 0x00, len = 0x80 INT_VECT: origin = 0x80, len = 0x80
PROG_RAM: origin = 0x100, len = 0x1000 PAGE 1: DATA_1: origin = 0x1100, len = 0x0e00 DATA_2: origin = 0x2000, len = 0x2000 } SECTIONS
{
.vectors: {} > INT_VECT PAGE 0
.text: {} > PROG_RAM PAGE 0
.stack: {} > DATA_1 PAGE 1
vars: {} > DATA_1 PAGE 1
.data:{} > DATA_2 PAGE 1
.bss:{} > DATA_2 PAGE 1
}
六、实验结果及体会
实验结果应该是每次按下按键,亮灭周期发生变化。第一次写入程序没成功,按按键亮灭周期也发生变化,但是出现这种情况是实验板内部已经因为上一个人在试验中写入了程序,所以会出现插电后,程序没写入也能够按键改变亮灭周期。因为第一次接触实验板,写入程序还是有难度,后来由于芯片配置出现错误,后来在老师的指导下,将程序成功写入。在实验中需要每一步都细心的去完成,还需要多与同学讨论,多向老师请教,这样才能在实验中学到更多的东西。而且控制流水灯让我对电子这个方面充满了向往的兴趣。调试程序需要花费大量的时间来专研。
二、DSP 基于DSPLib的FFT程序设计
一、实验目的
1、了解FFT的原理;
2、了解在DSP中FFT 的设计及编程方法;
3、熟悉对DSPLIB的调用方法;
二、实验内容
编写256点的时序列FFT的DSP程序,利用数据文件对FFT程序进行调试。
三、实验要求
1.产生256点的数据文件,表示方波、正玄波等信号;
2.编写256点的时序列FFT的DSP程序对上述信号进行傅里叶变换;
3.利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。
四、实验原理
1、时间抽选基2FFT算法的基本原理。
在x[n]为复数序列的情况下,完全可以直接运算N 点DFT 需要(N-1)2次复数乘法和N(N-1)次复数加法。因此,对于一些相当大的N 值来说,直接计算它的DFT 所需计算量很大。
FFT(快速傅立叶变换)的基本思想为:将原来的N点序列最终分成分成两点为一组序列,并将这些序列的DFT 通过蝶形运算(见下图)组合起来得到原序列的DFT。 N点FFT 仅需NNN次复数乘法和Nlog2次复数加法。
2、DSPLib的应用。
CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了DSPLib的cbrev,rfft两个函数实现数字序列的逆序和DFT的计算。dsplib位于C:\ti\c5400\dsplib 其用户手册为:TMS320C54x dsp library programer'sreference.pdf
3、CCS中的graph详细使用说明。
CCS提供显示时频图(Time/Frequency),运算结果也可以通过CCS提供的图形功能经过一定处理显示出来,CCS提供的图形显示包括时频分析、星座图、眼图
和图像显示。如表1所示,用户准备好需要显示的数据后,选择命令View→Graph,设置相应的参数,即可按所选图形类型显示数据。
程序流程图为:
五、实验步骤
1、打开CCS,并设置好相对应的参数,采用软件仿真。
2、编写主函数,包含必要的头文件,并设置好相对应的路径。完毕将支持的库函数加入工程中。
3、接着编写中断向量表,中断向量表只要和主函数main中断一一对应就行。
4、编译,看一下会产生哪些链接文件,然后编写链接文件。在这里注意字对齐的格式要求。
5、编译通过后,用软件仿真,选择命令View→Graph→Time/Frequency对话框,验证是否有逻辑错误,然后进行修改。
六、程序源代码
1、主函数:
#include
#include
#define Nx 1024 #define pi 3.1415924
#define PMST (unsigned int*)0x1D
int scale=1;
intnoscale=0;
DATA x[Nx],x_tempt[Nx];
DATA y[Nx/2];
#pragma DATA_SECTION(x,".input")
#pragma DATA_SECTION(x_tempt,".input_tempt") #pragma DATA_SECTION(y,".output")
static void dataio();
void main()
{
PMST=0x00a0;
dataio();
for(i=0;i { x_tempt[i]=x[i]; } cbrev(x,x,Nx/2); rfft(x,Nx,scale); y[0]=x[0]; y[Nx/2-1]=abs(x[1]); j=1; for(i=2;i { y[j]=sqrt(pow(x[i],2)+pow(x[i+1],2)); } return; } voiddataio() { //get data for io } 2、中断函数: .ref _c_int00 .sect ".vectors" rs: BD _c_int00 ;Rest nop nop nmi: .space 4*16 ;NMI, SINT16 sint17:.space 4*16 ;SINT17 sint18: .space 4*16 ; sint19: .space 4*16 ; sint20: .space 4*16 ; sint21: .space 4*16 ; sint22: .space 4*16 ; sint23: .space 4*16 ; sint24: .space 4*16 ; sint25: .space 4*16 ; sint26: .space 4*16 ; sint27: .space 4*16 ; sint28: .space 4*16 ; sint29: .space 4*16 ; sint30: .space 4*16 ; int0: .space 4*16 ; int1: .space 4*16 ; int2: .space 4*16 ; tint0: .space 4*16; brint0: .space 4*16; bxint0: .space 4*16 ; dmac0: .space 4*16 ; dmac1: .space 4*16 ; int3: .space 4*16 ; hpint: .space 4*16 ; brint1: .space 4*16 ; bxint1: .space 4*16 ; dmac4: .space 4*16 ; dmac5: .space 4*16 ; rsvd1: .space 4*16 ; rsvd2: .space 4*16 ; .end 3、链接文件: } SECTIONS { .vectors:{}>FFT_VECTPAGE0 实验需要不断的测试,来验证自己心中的想法,从而不断地增加对于这 门课程的专研与制作开发当中去。 三、DSP 基于DSPLib的滤波器程序设计 一、实验目的 1、了解FIR、IIR数字滤波器的原理。 2、掌握FIR、IIR数字滤波器的设计方法。 3、熟悉对DSPLib的调用方法以及数字滤波器在DSP系统中的实现。 二、实验内容(要求) 现有连续时间信号,已基于采样频率fs=16000Hz对x(t)采样,获得离散数据x(n)。设计一个FIR(或IIR)数字低通滤波器,对数据x(n)滤波,滤除x(n)中2000Hz频率分量,保留1000Hz频率分量。 实验要求: 1、设计FIR(或IIR)数字低通滤波器,得到滤波器的有关参数; 2、基于DSPLib编制DSP的C语言程序,实现上述低通滤波,并对数据x(n)滤波。 3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。 三、实验原理 1、FIR、IIR数字滤波器的基本原理。 IIR滤波器传递函数包括零点和极点两组可调因素,对极点的惟一限制是在单位圆内。因此可用较低的阶数获得高的选择性,所用的存储单元少,计算量小,效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。FIR滤波器传递函数的极点固定在原点,是不能动的,它只能靠改变零点位置来改变它的性能。所以要达到高的选择性,必须用较高的阶数;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可能比IIR滤波器高5-10倍,结果,成本较高,信号延时也较大;如果按线性相位要求来说,则IIR滤波器就必须加全通网络进行相位校正,同样要大大增加滤波器的阶数和复杂性。而FIR 滤波器却可以得到严格的线性相位 2、MATLAB的数字滤波器设计工具FDAtool。 2.1 启动滤波器设计分析器 在MATLAB的start菜单中选择Toolboxes->Filter Design->Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。启动后界面如图1所示: 2.2 滤波器设计 在选项中选择或输入滤波器参数,然后点击“Design Filter”按钮完成滤波器设计。设计成功后的结果如图2所示。 2.3 导出FIR滤波器系数。 在fdatool中,选择Targets->Code Composer Studio IDE。 在出现的对话框中选择输出文件类型为C.header file,输出系数类型为signed 16-bit integer,如图2所示。 点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。 3、DSPLib的应用 CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了fir、firs、firs2、iircas4、 iircas5、iircas5I等函数实现数字滤波。 实验程序流程图为: 实验二拨码开关实验 —、实验目的 1.了解DSP开发系统的组成和结构 2.了解IO的基本编程方法 二、实验设备 计算机,CCS3.3版本软件,DSP仿真器,E300实验箱,2812CPU板。 三、实验原理 8位的数字量输入(由拨码开关产生),当拨码打到靠近LED时为低。相反为高。通过 74LS244(可读)缓冲连接到DSP的数据总线的低8位。CPU通过读指令读取到拨码开关产 生的8位输出的数字量,然后CPU通过写指令把读出的8位数字量写入(0x2200)单元内, 使连接到DSP的数据总线的低8位的74LS273的输出端产生高低信号,此时LED灯产生亮灭。 当对应LED灯点亮时说明输出为低,熄灭时为高。 (器件74LS244和74LS273详细的介绍请参看数据手册) 数字量输入输出单元的资源分配如下: 基地址:2000h(当CS1为0时分配有效) 数字量分配空间为数据空间地址:基地 址+0x2200(低8位,只读) 拨码开关扩展工作原理 说明:74LS244片选号、74LS273 片选信号和74LS273复位信号由E300 上CPLD译码产生。 本实验使用DSP数据总线的低8 位。 实验任务一: 1、编写程序完成将拨码开关的信息读入DSP,然后再将该信息回写,控制led灯。调整"数字输入输出单元"的开关K1~K8,观察LED1~LED8灯亮灭的变化。 2、本实验的程序流程框图如下: 3、输入主要程序 #include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File void main(void) { unsigned int temp; temp = 0; DINT; InitSysCtrl(); InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); for(;;) { asm(" nop "); temp = *(int *)0x2200&0x00ff; asm(" nop "); * (int *)0x2200 = temp; asm(" nop "); } } 四、实验步骤(步骤基本与实验一相同) 1. 2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON。 2.E300板上的开关SW4的第二位置ON,其余OFF;SW5开关全部置ON;其余开关全部置OFF。 3.运行Code Composer Studio (CCS)(CCS3.3需要“DEBUG→Connect”) 4. 用“Project\open”打开系统项目文件 路径为“c:\DSP_examep\DSP281X_examples\e300_02_switch\Example_281x_switch.pjt”双击该文件 5、输入主要程序。 实验0 实验设备安装才CCS调试环境 实验目的: 按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。 实验步骤: 以演示实验一为例: 1.使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out; 3.打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示; 4.点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框 5.双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1; DSP Data Type设置成16-bit signed integer,如下图所示; 6.点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察 7.点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果: 心得体会: 通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。 一、实验目的 1. 通过本次实验回忆并熟悉MATLAB这个软件。 2. 通过本次实验学会如何利用MATLAB进行序列的简单运算。 3. 通过本次实验深刻理解理论课上的数字信号处理的一个常见方法——对时刻n的样本附近的一些样本求平均,产生所需的输出信号。 3. 通过振幅调制信号的产生来理解载波信号与调制信号之间的关系。 二、实验内容 1. 编写程序在MATLAB中实现从被加性噪声污染的信号中移除噪声的算法,本次试验采用三点滑动平均算法,可直接输入程序P1.5。 2. 通过运行程序得出的结果回答习题Q1.31-Q1.33的问题,加深对算法思想的理解。 3. 编写程序在MATLAB中实现振幅调制信号产生的算法,可直接输入程序P1.6。 4. 通过运行程序得出的结果回答习题Q1.34-Q1.35的问题,加深对算法思想的理解。 三、主要算法与程序 1. 三点滑动平均算法的核心程序: %程序P1.5 %通过平均的信号平滑 clf; R=51; d=0.8*(rand(R,1)-0.5);%产生随噪声 m=0:R-1; s=2*m.*(0.9.^m);%产生为污染的信号 x=s+d';%产生被噪音污染的信号 subplot(2,1,1); plot(m,d','r-',m,s,'g--',m,x,'b-.'); xlabel('时间序号n');ylabel('振幅'); legend('d[n]','s[n]','x[n]'); x1=[0 0 x];x2=[0 x 0];x3=[x 0 0]; y=(x1+x2+x3)/3; subplot(2,1,2); plot(m,y(2:R+1),'r-',m,s,'g--'); legend('y[n]','s[n]'); xlabel('时间序号n');ylabel('振幅'); 2. 振幅调制信号的产生核心程序:(由于要几个结果,因此利用subplot函数画图) %程序P1.6 %振幅调制信号的产生 n=0:100; m=0.1;fH=0.1;fL=0.01; m1=0.3;fH1=0.3;fL1=0.03; xH=sin(2*pi*fH*n); xL=sin(2*pi*fL*n); y=(1+m*xL).*xH; xH1=sin(2*pi*fH1*n); xL1=sin(2*pi*fL1*n); y1=(1+m1*xL).*xH; y2=(1+m*xL).*xH1; y3=(1+m*xL1).*xH; subplot(2,2,1); stem(n,y); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.1;fH=0.1;fL=0.01;'); subplot(2,2,2); stem(n,y1); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.1;fL=0.01;'); subplot(2,2,3); stem(n,y2); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.3;fL=0.01;'); subplot(2,2,4); stem(n,y3); grid; 实验三 IIR 滤波器设计 一、实验目的: 1.认真复习滤波器幅度平方函数的特性,模拟低通滤波器的巴特沃思逼近、切比雪夫型逼近方法;复习从模拟低通到模拟高通、带通、带阻的频率变换法;从模拟滤波器到数字滤波器的脉冲响应不变法、双线性变换法的基本概念、基本理论和基本方法。 2掌握巴特沃思、切比雪夫模拟低通滤波器的设计方法;利用模拟域频率变换设计模拟高通、带通、带阻滤波器的方法.。 3.掌握利用脉冲响应不变法、双线性变换法设计数字滤波器的基本方法;能熟练设计巴特沃思、切比雪夫低通、带通、高通、带阻数字滤波器。 4.熟悉利用MATLAB 直接进行各类数字滤波器的设计方法。 二、实验内容 a. 设计模拟低通滤波器,通带截止频率为10KHz,阻带截止频率为16KHz,通带最大衰减1dB,阻带最小衰减20dB。 (1) 分别用巴特沃思、切比雪夫I、切比雪夫II 型、椭圆型滤波器分别进行设计,并绘制所设计滤波器的幅频和相频特性图。 (2) 在通带截止频率不变的情况下,分别用n=3,4,5,6 阶贝塞尔滤波器设计所需的低通滤波器,并绘制其相应的幅频响应和相频响应图。 %%%%%%%%%----巴特沃思-----%%%%%%% clc;clear all; omegap=10000*2*pi;omegas=16*10^3*2*pi; Rp=1;As=20; [N,omegac]=buttord(omegap,omegas,Rp,As,'s');%低通的节次 [b,a]=butter(N,omegac,'s'); [H,w]=freqs(b,a); %设计滤波器的幅频和相频特性图 subplot(211) plot(w/2*pi/1000,20*log10(abs(H))) DSP原理与应用 实 验 报 告 姓名: 专业: 班级: 学号: 成绩: 2013年5月13日《DSP原理与应用》实验报告 一、实验题目 数字IO应用实验 二、实验目的 1. 了解TMS320LF2407A DSP 的数字I/O 控制模块的使用方法; 2. 学习使用I/O 管脚控制外围设备; 3. 学会用程序驱动简单外围设备。 三、实验设备 计算机,教学实验箱 四、实验原理 1. TMS320LF2407A DSP 的数字I/O 控制模块介绍 数字输入/输出模块是集成在TMS320LF2407A 片内的外设之一,它主要对芯片的通用、双向的数字I/O(GPIO)引脚进行控制。这些I/O 引脚大多数是基本功能和一般I/O 复用的引脚,数字I/O 模块采用了一种灵活的方法,以控制专用I/O 和复用I/O 引脚的功能,所有I/O 和复用引脚的功能可通过9 个16 位控制寄存器来设置,这些寄存器可分为两类: ·I/O 口复用控制寄存器(MCRx):用于控制选择I/O 口作为基本功能方式或一般I/O 引脚功能; ·数据和方向控制寄存器(PxDATDIR):当I/O 口用作一般I/O 引脚功能时,用数据和方向控制寄存器可控制数据和到双向I/O 引脚的数据方向,这些寄存器直接和双向I/O 引脚相连。 具体控制寄存器的访问地址、定义请参见有关资料。 2. ICETEK-LF2407-A 板引出的I/O 管脚及使用方法 ICETEK-LF2407-A 板使用了一些I/O 管脚对DSP 进行控制。例如:跳线JP6 连接DSP 上MP/MC 管脚,在DSP 复位时,DSP 可读回这一管脚的设置,当管脚接高电平时,DSP 采用微处理器(MP)方式工作,否则设置成微控制器(MC)方式。ICETEK-LF2407-A 板在扩展插头上将未使用的I/O 引脚接出,提供给用户连接使用。其定义见ICETEK-LF2407-A 板说明。这些管脚支持0-3.3V 逻辑电平操作,用户在进行相应设置后可以在I/O 管脚上进行输入或输出操作,使用时须注意根据引脚本身的负载能力驱动相关设备。 3. ICETEK-LF2407-EDU 实验箱及控制模块使用的I/O 管脚 实验6 数字滤波器的网络结构 一、实验目的: 1、加深对数字滤波器分类与结构的了解。 2、明确数字滤波器的基本结构及其相互间的转换方法。 3、掌握用MA TLAB 语言进行数字滤波器结构间相互转换的子函数及程序编写方法。 二、实验原理: 1、数字滤波器的分类 离散LSI 系统对信号的响应过程实际上就是对信号进行滤波的过程。因此,离散LSI 系统又称为数字滤波器。 数字滤波器从滤波功能上可以分为低通、高通、带通、带阻以及全通滤波器;根据单位脉冲响应的特性,又可以分为有限长单位脉冲响应滤波器(FIR )和无限长单位脉冲响应滤波器(IIR )。 一个离散LSI 系统可以用系统函数来表示: M -m -1-2-m m m=0 012m N -1-2-k -k 12k k k=1 b z b +b z +b z ++b z Y(z)b(z)H(z)=== =X(z)a(z) 1+a z +a z ++a z 1+a z ∑∑ 也可以用差分方程来表示: N M k m k=1 m=0 y(n)+a y(n-k)=b x(n-m)∑∑ 以上两个公式中,当a k 至少有一个不为0时,则在有限Z 平面上存在极点,表达的是以一个IIR 数字滤波器;当a k 全都为0时,系统不存在极点,表达的是一个FIR 数字滤波器。FIR 数字滤波器可以看成是IIR 数字滤波器的a k 全都为0时的一个特例。 IIR 数字滤波器的基本结构分为直接Ⅰ型、直接Ⅱ型、直接Ⅲ型、级联型和并联型。 FIR 数字滤波器的基本结构分为横截型(又称直接型或卷积型)、级联型、线性相位型及频率采样型等。本实验对线性相位型及频率采样型不做讨论,见实验10、12。 另外,滤波器的一种新型结构——格型结构也逐步投入应用,有全零点FIR 系统格型结构、全极点IIR 系统格型结构以及全零极点IIR 系统格型结构。 2、IIR 数字滤波器的基本结构与实现 (1)直接型与级联型、并联型的转换 例6-1 已知一个系统的传递函数为 -1-2-3 -1-2-3 8-4z +11z -2z H(z)=1-1.25z +0.75z -0.125z 将其从直接型(其信号流图如图6-1所示)转换为级联型和并联型。 #include"math.h" #define PI 3.1415926 #define WANG 16 #define RUI 1024 int FIRLOW(int *nx,float *nh,int nError,int nCoeffNumber); float h[WANG],fU; int xx[RUI],rr[RUI],wc[RUI]; main() { int i,n_Output=0; fU=0.0005; for ( i=0;i FIR #include 实验4 离散系统的变换域分析 一、实验目的 1、熟悉对离散系统的频率响应分析方法; 2、加深对零、极点分布的概念理解。 二、实验原理 离散系统的时域方程为 其变换域分析方法如下: 频域: 系统的频率响应为: Z域: 系统的转移函数为: 分解因式: , 其中和称为零、极点。 三、预习要求 1.在MATLAB中,熟悉函数tf2zp、zplane、freqz、residuez、zp2sos的使用,其中:[z, p,K]=tf2zp(num,den)求得有理分式形式的系统转移函数的零、极点;zplane(z,p)绘制零、极点分布图;h=freqz(num,den,w)求系统的单位频率响应;[r,p,k]=residuez (num,den)完成部分分式展开计算;sos=zp2sos(z,p,K)完成将高阶系统分解为2阶系统的串联。 2.阅读扩展练习中的实例,学习频率分析法在MATLAB中的实现; 3.编程实现系统参数输入,绘出幅度频率响应和相位响应曲线和零、极点分布图。 四、实验内容 求系统 的零、极点和幅度频率响应和相位响应。 解析: 【代码】 num=[0.0528 0.0797 0.1295 0.1295 0.797 0.0528]; den=[1 -1.8107 2.4947 -1.8801 0.9537 -0.2336]; [z,p,k]=tf2zp(num,den); disp('零点');disp(z); disp('极点');disp(p); disp('增益系数');disp(k); figure(1) zplane(num,den) figure(2) freqz(num,den,128) 【图形】 -2 -1.5 -1 -0.500.5 1 1.5 -1.5 -1 -0.5 0.51 1.5 Real Part I m a g i n a r y P a r t 0.1 0.2 0.30.40.50.60.70.80.9 1 -800 -600-400-2000 Normalized Frequency (?π rad/sample) P h a s e (d e g r e e s ) 0.1 0.2 0.30.40.50.60.70.80.9 1 -40-2002040Normalized Frequency (?π rad/sample) M a g n i t u d e (d B ) 【结果】 零点 -1.5870 + 1.4470i DSP实验报告 院系:哈尔滨理工大学荣成校区 专业:电子信息工程 学号: 1230160101 姓名:董小天 日期: 2015年6月16日 实验二有限冲击响应滤波器(FIR)算法实验 一、实验目的 1.掌握用窗函数发设计FIR数字滤波器的原理和方法; 2.熟悉线性相位FIR数字滤波器特性; 3.了解各种窗函数对滤波特性的影响; 二、实验设备 1.计算机,CCS 3.1版软件,实验箱,DSP仿真器,连接线。 三、实验原理 1.有限冲击响应数字滤波器的基础理论; 2.模拟滤波器原理(巴特沃斯滤波器、且比学府滤波器、贝塞尔滤波器); 3.数字滤波器系数的确定方法。 四、实验步骤 1、复习如何设计FIR数字滤波;阅读本实验原理,掌握设计步骤; 2、阅读本实验所提供的样例子程序; 3、运行CCS软件,对样例程序进行跟踪,分析结果; 4、填写实验报告。 5、样例程序实验操作说明 A.实验前准备: ①实验箱和CPU配置:SW2的2、4置ON,1、3置OFF;S2全置ON,S23置ON,JP3拨码开关的3、6位置ON,其余置OFF;S2全部置OFF. ②用到西安连接“信号源”2号孔“信号源1”和“A/D单元”2号孔“ADIN1”; B.实验 启动CCS 3.1,打开文件Exp_fir.pjt工程文件;在i=0处设置断点;打开VIEW/GRAPH/TIME/FREQUENCY打开窗口,进行如下改动(参照图片),其中x,y分别表示经A/D转换后的输入混叠信号(输入信号)和对该信号进行FIR滤波的结果; 五、成果展示及代码 单击“Animate”运行程序,在实验箱上调整观察窗口并观察滤波的效果(滤波效果明显); 实验一:DSP软件集成开发环境CCS 一. 实验目的 1.了解DSP 软件开发集成环境Code Composer Studio (CCS) 的安装和配置过程; 2.熟悉并掌握CCS 的操作环境和基本功能,了解DSP软件开发的一般流程: (1) 学习创建工程和管理工程的方法; (2) 了解工程文件和映像文件的基本内容; (3) 了解基本的编译和调试功能; (4) 学习使用观察窗口。 二. 实验设备 计算机、Code Composer Studio 2.2 或以上版本 三. 背景知识 1.DSP 应用系统开发一般需要借助以下调试工具: ―软件集成开发环境(CCS):完成系统的软件开发,进行软件和硬件仿真调试; ―硬件开发及测试平台:实现系统的硬件仿真与调试,包括仿真器和评估模块。 https://www.360docs.net/doc/de5111771.html,S 集成了适用于所有TI 器件的源码编辑、编译链接、代码性能评估、调试仿真等功能,为 设计人员提供了一个完整的嵌入式系统软件开发环境。 3.系统软件部分可以通过CCS 建立的工程文件进行管理,工程文件一般包含以下几种文件: ―源程序文件:C 语言或汇编语言文件(*.ASM 或*.C) ―头文件(*.H) ―命令文件(*.CMD) ―库文件(*.LIB, *.OBJ) 四. 实验步骤 1. 创建工程文件 双击 CCStudio 图标,启动 CCS ,CCS 的初始界面包括工程管理区和工作区两部分。 在菜单中选择“Project —>New…”,弹出“Project Create ”窗口: 在“Project ”编辑框内填入项目名称,例如“hello1”;有必要的话,可以更改项目文件夹位置 (Location);“Project ”下拉框用以确定输出文件类型;目标硬件类型在“Target ”下拉框中指定。 点击“完成”后,CCS 自动在指定目录下生成“hello1.pjt ”工程文件。工程文件中保存了对应工程的设置信息和内部文件的引用情况。展开工程管理窗口“Projects ”下的“hello1.pjt ”,可以看到所有项目均为空。 任务 1:在 notepad 中打开“hello1.pjt ”,了解并记录工程文件提供的设置信息 若标题栏显示xxxx Emulator, 则需要先运行 Setup CCS, 选择合适的软件仿真环境 一:实验项目名称:TMS320F2812的GPIO实验 二:实验目的:学会使用ccs5.3开发环境以及GPIO的基本操作,通过实验学习使用 TMS320F2812的通用输入输出管脚直接控制外围设备的方法。 实验环境:pc一台,CCS5.3软件 三:实验原理: 四:实验步骤: 1:打开ccs5.3软件。 2依次单击File->New->CCS Project建立工程 3 在弹出的New Project对话框中单击Code Composer Studio,选择CCS Project,然后点击 Next 4 在弹出的对话框中,输入工程名字Led.c,在Family里选择C2000,在Variant的第二个复选框里选择TMS320F2812,在里选择empty project点击 Finish完成 5 将inc、source和F2812_nonBIOS_flash.cmd、rts2800_ml.lib拷贝到工程目录下; 6 在project面板里右键,New->Target Configuration File,在connect里面选择 ,然后在选择框中选择 TMS320F2812; 7 在main.c中编辑代码 8 连接好仿真器与开发板,按F11,下载并在线仿真 五:记录与处理: #include"DSP281x_Device.h" #include"System.h" void main(void) { InitSysCtrl(); EALLOW; GpioMuxRegs.GPBDIR.all |=0x00FF; EDIS; GpioDataRegs.GPBDAT.all = 0x0000; DelayUs(60000); GpioDataRegs.GPBDAT.all = 0x00f0; while(1) { 实验目的: 1.了解用MATLAB语言进行时域抽样与信号重建的方法 2.进一步加深对时域信号抽样与恢复的基本原理的理解 3.掌握采样频率的确定方法和内插公式的编程方法。 二.实验内容 1认真阅读并输入实验原理与方法中介绍的例子,观察输出波形曲线,理解每一条语句的含义。. 2.已知一个连续时间信号f(t)=sinc(t)。取最高有限带宽频率fm=1Hz。(1)分别显示原连续时间信号波形和Fm=fm、Fm=2fm、Fm=3fm三种情况下抽样信号的波形。 实验程序: dt=0.1; f0=1; T0=1/f0; fm=f0; Tm=1/fm; t=-2:dt:2; f=sinc(t); subplot(4,1,1),plot(t,f,'k'); axis([min(t) max(t) 1.1*min(f) 1.1*max(f)]); title('原连续信号和抽样信号'); for i=1:3; fs=i*fm; Ts=1/fs; n=-2:Ts:2; f=sinc(n); subplot(4,1,i+1),stem(n,f,'filled','k'); axis([min(n) max(n) 1.1*min(f) 1.1*max(f)]); end 实验截图: (2)求解原连续信号波形和抽样信号所对应的幅度谱。实验程序: dt=0.1;t=-4:dt:4; N=length(t);f=sinc(t);Tm=1;fm=1/Tm; wm=2*pi*fm;k=1:N; w1=k*wm/N; F1=f*exp(-j*t'*w1)*dt; subplot(4,1,1),plot(w1/(2*pi),abs(F1));grid axis([0 max(4*fm) 1.1*min(F1) 1.1*max(F1)]); for i=1:3; if i<= 2 c=0 ,else c=0.2,end fs=(4-i+c)*fm; Ts=1/fs; n=-4:Ts:4; f=sinc(n); N=length(n); wm=2*pi*fs; k=1:N; w=k*wm/N; F=f*exp(-j*n'*w)*Ts; subplot(4,1,5-i),plot(w/(2*pi),abs(F),'k');grid axis([0 max(4*fm) 1.1*min(F) 1.1*max(F)]); end 实验截图: 程序P6.1 % 程序 P6_1 % 将一个有理数传输函数 % 转换为因式形式 num = input('分子系数向量 = '); den = input('分母系数向量 = '); [z,p,k] = tf2zp(num,den); sos = zp2sos(z,p,k) Q6.1 使用程序p6.1,生成如下有限冲激响应传输函数的一个级联实现:H1(Z)=2+10Z^-1+23Z^-2+34Z^-3+31Z^-4+16Z^-5+4Z^-6 画出级联实现的框图。H1(Z)是一个线性相位传输函数吗? 分子系数向量 = [2,10,23,34,31,16,4] 分母系数向量 = [1,0,0,0,0,0,0] sos = 2.0000 6.0000 4.0000 1.0000 0 0 1.0000 1.0000 2.0000 1.0000 0 0 1.0000 1.0000 0.5000 1.0000 0 0 Y[k] 2 11 X[k] Q6.2 使用程序p6.1,生成如下有限冲激响应传输函数的一个级联实现:H2(Z)=6+31Z^-1+74Z^-2+102Z^-3+74Z^-4+31Z^-5+6Z^-6 画出级联实现的框图。H2(Z )是一个线性相位传输函数吗?只用4个乘法器生成H2(Z)的一个级联实现。显示新的级联结构的框图。 分子系数向量 = [6,31,74,102,74,31,6] 分母系数向量 = [1,0,0,0,0,0,0] sos = 6.0000 15.0000 6.0000 1.0000 0 0 1.0000 2.0000 3.0000 1.0000 0 0 1.0000 0.6667 0.3333 1.0000 0 0 Y[k] 6 11 X[k] Q6.3 使用程序 6.1生成如下因果无限冲激响应传输函数的级联实现: H1(Z)=(3+8Z^-1+12Z^-2+7Z^-3+2Z^-4-2Z^-5)/(16+24Z^-1+24Z^-2+14Z^-3+5Z^-4+Z^-5),画出级联实现的框图。 分子系数向量 = [3,8,12,7,2,-2] 分母系数向量 = [16,24,24,14,5,1] sos = 0.1875 -0.0625 0 1.0000 0.5000 0 1.0000 2.0000 2.0000 1.0000 0.5000 0.2500 1.0000 1.0000 1.0000 1.0000 0.5000 0.5000 Y [k ] 0.1875 11 11X [k ] Q6.4使用程序6.1生成如下因果无限冲激响应传输函数的级联实现: DSP实验报告(第二次实验) 实验四、正弦信号发生器 验四、正弦信号发生器 一、实验目的 1. 掌握利用DSP产生正弦信号的原理 2. 熟悉子程序调用的程序结构以及堆栈的使用 3.掌握CCS的图形输出操作 二、实验设备 1. 集成开发环境Code Composer Studio(简称CCS) 2. 实验代码Sin.s54、Lab.cmd和Lab.gel 三、实验内容 1. 阅读理解多项式逼近正弦的文档 2. 阅读和理解Sin.s54 3. 调试正弦波发生器 4. 加入断点,并选取图形观测,利用动画及时更新 5. 试利用迭代的方法来实现正弦信号发生器 四、实验结果和提示 1. 2345sin()= 3.140625 + 0.02026367 - 5.325196 + 0.5446778 + 1.800293x x x x x x ,x 为第一象限内的弧度值。因为sin()sin(),sin()sin()x x x x π-=-=-,所以只需将第二,三,四象限内的弧度值转换到第一象限即可计算出相应的正弦函数值。由于有限精度,规定弧度值从~ππ-,其中π=0x7FFF ,π/2=0x4000,π-=0x8000。利用级数展开产生正弦波,必须在调用计算子程序之前备份好累加器A 中的当前弧度值,以便计算结束后实现x 增量。正弦波的频率可以通过增幅的大小来进行控制,如果假定程序循环一次为一个时间单位,则正弦波的周期为65536/步长,频率为周期倒数。x 自动增长时要注意当x 超过π后必须调整到~ππ-的范围内才能调用计算子程序,即若,2x x x ππ>=-则。 2. 需要使用临时数据时,必须用frame 语句留出所需空间,使用结束后要将堆栈指针还原以防堆栈内存泄漏。要注意的是frame 的下一条指令不能使用直接寻址。 3. 注意事项:利用累加器写乘法寄存器T (stlm )之后的下一条指令不能使用T ;条件转移指令xc 在指令访问阶段判断条件,该条件必须在先于xc 指令的2个指令之前产生;条件转移指令bc 是在指令执行阶段判断条件,不存在这方面的问题。具体细节请参见《数字信号处理系统的应用和设计》3.6节和 4.5节。 4. 图形观测时选择菜单View->Graph->Time/Frequency ,然后设置如下图: 数字信号处理实验 实验一 自适应滤波器 一、实验目的 1、掌握功率谱估计方法 2、会用matlab 对功率谱进行仿真 二、实验原理 功率谱估计方法有很多种,一般分成两大类,一类是经典谱估计;另一类是现代谱估计。经典谱估计可以分成两种,一种是BT 法,另一种是周期法;BT 法是先估计自相关函数,然后将相关函数进行傅里叶变换得到功率谱函数。相应公式如下所示: ||1 *0 1 ?()()()(11) ??()(12) N m xx n jwn BT xx m r m x n x n m N P r m e --=∞ -=-∞ =+-=-∑ ∑ 周期图法是采用功率谱的另一种定义,但与BT 法是等价的,相应的功率谱估计如下所示: 21 1? ()()01 (13)N jw jwn xx n P e x n e n N N --== ≤≤--∑ 其计算框图如下所示: 观测数据x(n) FFT 取模的平方 1/N ) (jw xx e ∧ 图1.1周期图法计算用功率谱框图 由于观测数据有限,所以周期图法估计分辨率低,估计误差大。针对经典谱估计的缺点,一般有三种改进方法:平均周期图法、窗函数法和修正的周期图平均法。 三、实验要求 信号是正弦波加正态零均值白噪声,信噪比为10dB,信号频率为2kHZ,取样频率为100kHZ。 四、实验程序与实验结果 (1)用周期图法进行谱估计 A、实验程序: %用周期法进行谱估计 clear all; N1=128;%数据长度 N2=256; N3=512; N4=1024; f=2;%正弦波频率,单位为kHZ fs=100;%抽样频率,单位为kHZ n1=0:N1-1; n2=0:N2-1; n3=0:N3-1; n4=0:N4-1; a=sqrt(20);%由信噪比为10dB计算正弦信号的幅度 信号与信息处理综合实验(DSP部分) 学院:信息与通信工程学院 班级:2013211125 姓名:商晴庆 学号: 班内序号: 组号: 2016年4月 实验二 FFT的实现 一、实验目的 (1)进一步熟悉DSK6416开发平台,掌握调试功能; (2)充分理解FFT过程,并编码实现功能。 二、程序功能 (1)基础:将FFT结果写入SDRAM中,并读取出来。 (2)提高:其他点数的FFT 三、模块描述 (1)GBLCTL寄存器配置部分: static EMIFA_Config MyEmifaConfig = { EMIFA_GBLCTL_RMK ( EMIFA_GBLCTL_EK2RATE_FULLCLK, //1 X EMIF input clock EMIFA_GBLCTL_EK2HZ_CLK, //eclkout2 continue output during hold EMIFA_GBLCTL_EK2EN_ENABLE, //eclkout2 enable output EMIFA_GBLCTL_BRMODE_MRSTATUS, //bus request is memory access or refresh pending/in progress EMIFA_GBLCTL_NOHOLD_DISABLE, EMIFA_GBLCTL_EK1HZ_CLK, //eclkout1 continue output during hold EMIFA_GBLCTL_EK1EN_ENABLE, //eclkout1 enable output EMIFA_GBLCTL_CLK4EN_ENABLE, //clkout4 output enable EMIFA_GBLCTL_CLK6EN_ENABLE //clkout6 output enable ), (2)CECTL0-3寄存器配置部分 0xffffffd3, //64BIT SDRAM 0xffffffe3, 0x22a28a22, 0x22a28a22, (3)SDCTL寄存器配置部分 实验一编写一个汇编和C混合的DSP程序 一.实验目的 1.在了解纯C语言程序工程和汇编语言程序工程结构的基础上,学习在C工程中加入汇编编程的混合编程方法。 2.了解混合编程的注意事项。 3.理解混合编程的必要性和在什么情况下要采用混合编程。 二.实验设备 计算机,ICETEK-VC5416AE-S61实验箱(或ICETEK仿真器+ICETEK-VC5416-AE系统板+相关连线及电源)。 三.实验原理 1.使用C语言开发应用程序的优缺点 优点: 易于开发和维护。由于用C语言书写接近自然语言,其可读性强、利于理解,在编制、修改、实现算法方面比用汇编语言开发容易。 可移植性强。 不容易发生流水线冲突。编译器能提供完善的解决流水线冲突的结果。 有大量现存的算法可利用。 适用于人机界面的开发。 缺点: 代码量大。 程序效率较低。 优化代码存在一定困难。 综上所述,我们一般用C语言设计应用程序的总体框架、解决人机接口和对速度效率要求不太高的复杂算法。 2.使用汇编语言开发应用程序的优缺点 优点: 更能发挥系统特点。由于汇编语言掌控系统硬件的能力强于C语言,设计出来的程序更加贴近硬件特性,往往能将硬件效能发挥到极致。 代码精练,效率高。用汇编语言设计的程序,代码短、不容易产生冗余。 代码量小。 缺点: 可读性差。不利于复杂算法的开发和实现。 可移植性差。 容易产生流水线冲突。由于排除冲突需要靠人来辅助完成,这要求编程人员有较为丰富的开发经验和对硬件工作机制的深刻理解。 3.如何混合编程 (1)混合工程:在工程中可以同时包含C语言程序和汇编语言程序,无需更改编译选项。一般地,我们使用C程序为主,加入汇编语言程序模块。 (2)使用模块技术:在应用程序中划分出比较清晰的模块,不同模块可采用不同语言设计。 实验六 一、实验名称 离散时间滤波器设计 二、实验目的: 1、掌握利用脉冲响应不变法设计IIR 数字滤波器的原理及具体方法。 2、加深理解数字滤波器与连续时间滤波器之间的技术转化。 3、掌握脉冲响应不变法设计IIR 数字滤波器的优缺点及使用范围。 4、掌握利用双线性变换法设计IIR 数字滤波器的原理及具体方法。 5、深入理解利用双线性变换法设计IIR 数字滤波器的优缺点及使用范围。 三、实验原理: 1、脉冲响应不变法变换原理 脉冲响应不变法将模拟滤波器的s 平面变换成数字滤波器的z 平面,从而将模拟滤波器映射成数字滤波器。 IIR 滤波器的系数函数为1 -z (或z )的有理分式,即 ∑∑=-=--= N k k k M k k k z a z b z H 1 01)( 一般满足N M ≤。 ⑴转换思路: )(H )()(h )(h )(z n h nT t s H z a a ??→?=???→?????→?变换 时域采样拉普拉斯逆变换 若模拟滤波器的系统函数H (s )只有单阶极点,且假定分母的阶次大于分子的阶次,表达式: ∑ =--=N k T s k z e TA z H k 111)( ⑵s 平面与z 平面之间的映射关系。 Ω +==j s re z j σω→ =→=→ΩT j T jw sT e e re e z σT e r T Ω==ωσ IIR 数字滤波器设计的重要环节式模拟低通滤波器的设计,典型的模拟低通滤波器有巴 特沃兹和切比雪夫等滤波器。由模拟低通滤波器经过相应的复频率转换为H (s ),由H (s )经过脉冲响应不变法就得到所需要的IIR 数字滤波器H (z )。 Matlab 信号处理工具箱中提供了IIR 滤波器设计的函数,常用的函数: IIR 滤波器阶数选择 Buttord--巴特沃兹滤波器阶数选择。 Cheb1ord--切比雪夫I 型滤波器阶数选择。 Cheb2ord--切比雪夫II 型滤波器阶数选择。 IIR 滤波器设计 Butter--巴特沃兹滤波器设计。 东南大学自动化学院 实验报告 课程名称: D SP 原理及C 程序开发 第二次实验 实验名称:基于DSP 系统的实验——指示灯、拨码开关和定时器院(系):自动化专业:自动化 姓名:学号: 实验室:实验组别: 同组人员:实验时间:2012 年 4 月 18日 评定成绩:审阅教师: 第一部分实验:基于DSP 系统的实验——指示灯和拨码开关 一.实验目的 1. 了解ICETEK –F28335-A 评估板在TMS320F28335DSP 外部扩展存储空间上的扩展。 2. 了解ICETEK –F28335-A 评估板上指示灯和拨码开关扩展原理。 3. 学习在C 语言中使用扩展的控制寄存器的方法。 二.实验设备 计算机,ICETEK –F28335-A 实验箱(或ICETEK 仿真器+ICETEK–F28335-A 评估板+相关连线及电源)。 三.实验原理 1.TMS320F28335DSP 的存储器扩展接口 存储器扩展接口是DSP 扩展片外资源的主要接口,它提供了一组控制信号和地址、数据线,可以扩展各类存储器和存储器、寄存器映射的外设。 -ICETEK –F28335-A 评估板在扩展接口上除了扩展了片外SRAM 外,还扩展了指示灯、DIP 开关和D/A 设备。具体扩展地址如下: 0x180004- 0x180005:D/A 转换控制寄存器 0x180001:板上DIP 开关控制寄存器 0x180000:板上指示灯控制寄存器 -与ICETEK –F28335-A 评估板连接的ICETEK-CTR 显示控制模块也使用扩展空间控制主要设备: 208000-208004h :读-键盘扫描值,写-液晶控制寄存器 208002-208002h :液晶辅助控制寄存器 208003-208004h :液晶显示数据寄存器 2.指示灯与拨码开关扩展原理DSP实验二 拨码开关实验
DSP实验报告
数字信号处理实验一
DSP实验二.
DSP实验
数字信号处理实验作业
DSP实验程序及结果
数字信号处理实验4-6
DSP实验报告2解读
DSP实验指导书(DSP处理器原理与应用)
DSP实验
数字信号处理实验六-时域采样与信号的重建
数字信号处理实验报告 六
DSP第二次实验报告
数字信号处理实验
DSP实验二
dsp 实验报告
数字信号处理实验六
DSP技术及课程设计实验报告二(精)