实验三、四

实验三、四
实验三、四

实验三 A/D 转换实验(4学时)

一、实验目的:

1. 掌握A/D 转换与单片机的接口方法。

2. 了解A/D 芯片ADC0809转换性能及编程方法。 3. 通过实验了解单片机如何进行数据采集。 二、实验仪器和设备

PC 机、Keil 软件、Proteus 软件,烧录器。 三、实验说明

本实验使用ADC0809模数转换器,ADC0809是8通道8位CMOS 逐次逼近式A/D 转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D 转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。下图为该芯片的引脚图。

各引脚功能如下:

IN0~IN7:八路模拟信号输入端。

ADD-A 、ADD-B 、ADD-C :三位地址码输入端。八路模拟信号转换选择由这三个端口控制。

CLOCK :外部时钟输入端(小于640KHz )。 D0~D7:数字量输出端。

OE :A/D 转换结果输出允许控制端。当OE 为高电平时,允许A/D 转换结果从D0~D7端输出。

ALE :地址锁存允许信号输入端。八路模拟通道地址由A 、B 、C 输入,在ALE 信号有效时将该八路地址锁存。

START :启动A/D 转换信号输入端。当START 端输入一个正脉冲时,将进行A/D 转换。

EOC :A/D 转换结束信号输出端。当 A/D 转换结束后,EOC 输出高电平。 Vref(+)、Vref(-):正负基准电压输入端。基准正电压的典型值为+5V 。 VCC 和GND :芯片的电源端和地端。

ADC0809 START 端为A/D 转换启动信号,ALE 端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D 采样转换,故启动A/D 转换只需如下两条指令:

MOV A ,#PORT MOVX @DPTR,A

A 中为何内容并不重要,这是一次虚拟写。

在中断方式下,A/D 转换结束后会自动产生EOC 信号,将其与AT89C51的INT0相连接。在中断处理程序中,使用如下指令即可读取A/D 转换的结果:

MOV A ,#PORT MOVX A ,@DPTR 四、实验内容:

认真预习A/D 转换器和中断的相关内容。用中断方式编写并调试AD 转换程序,并在Proteus 中设计仿真电路。

将转换得到的二进制数字量通过P1口送到发光二极管显示。

D0D1D2D3D4D5D6D7START ALE OE ADD-A ADD-B ADD-C

GND

ref(-)EOC IN0IN1IN2IN3IN4IN5IN6IN7CLOCK ref(+)VCC 12345678910111213

14151617

181920212223

2425262728

利用万用表测量输入的模拟量和A/D 的基准电压,利用A/D 转换原理计算出转换后的数字量,并与数码管显示值比较,分析误差大小及产生的原因(分析三组数据)。 五、思考题

1.AD 转换通道如何确定,怎样改变转换通道?

2.A/D 转换程序有三种编制方式:中断方式、查询方式、延时方式,实验中使用了中断方式,请用另两种方式编制程序(选做)。

3.如果8个通道各采集一次,结果从片内RAM30H 开始存放,程序和电路应该如何设计?(选做) 六、参考流程图参考程序

主程序流程图 中断服务子程序流程图

七、参考程序 ORG 0000H AJMP MAIN ORG 0003H LJMP INTTR0

ORG 0030H

MAIN: MOV SP,#50H SETB EA SETB EX0 SETB IT0 MOV A,#0FFH

MOV DPTR,#0FEF9H

MOVX @DPTR,A HERE: SJMP HERE

INTTR0: MOVX A,@DPTR

MOV P1,A

MOVX @DPTR,A RETI

END

八、参考电路图

实验四:电子时钟(综合实验 4学时)

一、实验目的:

1. 熟悉MCS—51定时器,中断初始化方法,了解定时器的应用,实时程序的设计与调试技巧。

2.掌握中断处理程序的编程方法。

3.熟悉显示接口工作原理。

二、实验仪器和设备

PC机、Keil软件、Proteus软件。

三、实验内容:

设计一六位显示电脑时钟,编写程序,设计电路。用定时器产生0.1S 的定时中断,对时钟计数器计数,并将数值实时地送数码管显示。编写程序,调试。并在Proteus中设计电路并仿真,并观察结果是否正确。电子时钟,使七段数码管输出记时值,格式如下:

XX XX XX 由左向右分别为:时、分、秒

四、中断服务子程序参考流程图

中断服务子程序流程图

五、思考题:

1.电子钟走时精度和程序中那些常数有关?

2.如果是共阴极的应该如何修改程序?

3.如果显示精度为0.01秒(8位显示),程序应该如何修改?

4.如果采用静态显示,电路应该如何设计(串行方式0,仿真是可采用89C2051)。(选做)

六、参考程序

ORG 0000H

LJMP START

ORG 001BH

LJMP CLOCK

ORG 0030H

START:

MOV SP , #50H

MOV TL1 , #0B7H

MOV TH1 , #3CH

MOV 20H , #13H

MOV 21H , #16H

MOV 22H , #22H

MOV 23H , #00H

MOV 30H , #01H

MOV 31H , #02H

MOV 32H , #03H

MOV 33H , #04H

MOV 34H , #05H

MOV 35H , #06H

MOV IE , #10001000B

MOV IP ,#00001000B

MOV TMOD ,#00010000B

SETB TR1

LOOP:

LCALL HEX2D

LCALL DIS

SJMP LOOP

HEX2D:

PUSH PSW

CLR RS0

CLR RS1

MOV R7 , #03H ;

MOV R1 , #30H ;

MOV R0 , #20H

LOO_A:

MOV A , @R0

MOV B , #0AH

DIV A B

MOV @R1 , A

INC R1

MOV @R1 , B

INC R0

INC R1

DJNZ R7 , LOO_A

POP PSW

RET

DIS:

CLR C

PUSH PSW

PUSH ACC

SETB RS0

CLR RS1

MOV R0 , #30H

MOV R2 , #01H

MOV DPTR , #TAB

LS2:

MOV A , @R0

MOVC A , @A+DPTR

MOV P2,#00H

MOV P2, R2

MOV P0,A

DELAY: MOV R4,#05H ; LOO_P: MOV R5,#18H LOOP1: NOP

NOP

DJNZ R5, LOOP1

DJNZ R4,LOO_P MOV A,R2

RLC A

MOV R2 , A

INC R0

JNZ LS2

POP ACC

POP PSW

RET

CLOCK: CLR TR1

MOV TL1,#0B7H

MOV TH1,#3CH

SETB TR1

PUSH PSW

PUSH ACC

INC 23H

MOV A,23H

CJNE A,#0AH,DONE

MOV 23H,#00H

INC 22H

MOV A,22H

CJNE A,#3CH,DONE

MOV 22H,#00H

INC 21H

MOV A,21H

CJNE A,#3CH,DONE

MOV 21H,#00H

INC 20H

MOV A ,20H

CJNE A,#18H,DONE

MOV 20H,#00H

DONE: POP ACC

POP PSW

RETI

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;共阳极0~1~2~3~4~5 DB 82H,0F8H,80H,90H,88H,83H,0C6H ;6~7~8~9~A~B~C

DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH ;D~E~F~灭~P.~H~.~END

七、参考电路图

注:本电路图只是在Proeus中的仿真电路图,未画出振荡、复位电路,EA非接高电平。具体在制作硬件电路时,请读者根据器件参数适当修改电路。

实验三 类、对象基础知识

实验三类、对象基础知识 一、实验目的 1、熟练掌握类、对象的的概念以及对事物的抽象。 2、熟练掌握成员、方法的概念以及构造方法的概念。 3、熟练掌握封装性,多态性的概念 4、理解面向对象的程序设计方法。 二、实验内容与要求 1运行下面的程序,理解面向对象的程序设计方法的基本概念。 class value { public int x,y; public value(int a,int b) { x=a; y=b; } } public class Ch31 { public static void main(String args[]) { int total; value num=new value(24,65); total=num.x+num.y; System.out.println("add="+total); } } 2、定义一个类实现银行帐户的概念,包括的变量有"帐号"和"存款余额",包括的方法有"存款"、"取款"、"查询余额"和”显示帐号”,。定义主类,创建帐户类的对象,并完成相应操作。提示:关键代码如下: public int getleftmoney(){ return leftmoney; } public void savemoney(double money){ leftmoney+=money; } public void getmoney(double money){ if(money<=leftmoney) leftmoney-=money; else System.out.println("只能取:"+leftmoney); } …

实验3 类和对象

实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.360docs.net/doc/e210881390.html,); error!! } } class Account { private String account; private String name; private String address; private double balance;

南昌大学DSP实验报告

实验报告 实验课程:DSP原理及应用 学生姓名: 学号: 专业班级: 2012年 5月 25日

目录 实验一定点除法运算 实验二FIR滤波器 实验三FFT算法 实验四卷积计算 实验五数码管显示 实验六语音录放

实验一定点除法运算 一、实验目的 1、熟悉C54指令系统,掌握常用汇编指令,学会设计程序和算法的技巧。 2、学习用指令实现除法运算。 二、实验设备 计算机;DSP 硬件仿真器;DSP 实验开发平台。 三、实验原理 由内置的硬件模块支持,数字信号处理器可以高速的完成加法和乘法运算。但TMS320 系列DSP不提供除法指令,为实现除法运算,需要编写除法子程序来实现。二进制除法是乘法的逆运算。乘法包括一系列的移位和加法,而除法可分解为一系列的减法和移位。本实验要求编写一个16 位的定点除法子程序。 1.除法运算的过程设累加器为8 位,且除法运算为10 除以3,除的过程包括与除数有关的除数逐步移位,然后进行减法运算,若所得商为正,则在商中置1,否则该位商为0 例如:4 位除法示例:(1)数的最低有效位对齐被除数的最高有效位00001010 - 00011000 11110010 (2)由于减法结果为负,丢弃减法结果,将被除数左移一位再减00010100 - 00011000 11111000 (3)结果仍为负,丢弃减法结果,将被除数左移一位再减00101000 - 00011000 00010000 (4)结果为正,将减法结果左移一位后把商置1,做最后一次减00100001 - 00011000 00001001 (5)结果为正,将减法结果左移一位加1 得最后结果,高4 位是余数,低4 位商:00010011 2.除法运算的实现为了尽量提高除法运算的效率,’C54x 系列提供了条件减指令SUBC 来完成除法操作。 四、实验步骤 1.用Simulator 方式启动Code Composer。 2 .执行Project New 建立新的项目,输入chuf作为项目的名称,将程序定位在D:\ti\myprojects\chuf目录。 3.执行File New Source File 建立新的程序文件,为创建新的程序文件命名为chuf.asm 并保存;执行Project Add Files to Project,把chuf.asm 加入项目中。4.执行File New Source File 建立新的文件并保存为chuf.cmd;执行Project Add Files to Project,把chuf.cmd 加入项目中。 5.编辑chuf.asm 加入如下内容: ;*** 编制计算除法运算的程序段。其中|被除数|<|除数|,商为小数*** .title "chuf.asm" .mmregs .def start,_c_int00

实验3 类的定义、对象的建立与使用

实验报告_实验3 类的定义、对象的建立与使用(学 生学号_姓名) 实验目的: 1、理解C++中class与struct的区别; 2、掌握类的定义以及成员函数的定义方法; 3、掌握对象的定义和对象成员的访问方式; 4、熟悉this指针的基本用法。 实验内容 二、((基础题)请按照下列要求定义一个Clock时钟类,并创建对象,再调用相应方法: 程序代码: //日期类的应用 #include using namespace std; class Clock // 定义日期类 { public: // 定义公有成员函数 void setTime(int h, int m, int s); void showTime(); private: // 定义私有数据成员 int hour; int minute;

int second; }; // 类定义体的结束 //类实现部分 void Clock::setTime(int h, int m, int s) { hour = h; minute = m; second = s; } void Clock::showTime() { cout << "设置时间为" << hour <<":"<< minute <<":"<< second << endl; } int main() { Clock now; now.setTime(8,30, 0); now.showTime(); return 0; } 三、(基础题)请按要求,编写程序(请将类的定义、成员函数的实现、类的使用分开): rect.h代码: #include

实验四 类与对象

宁夏师范学院数学与计算机科学学院《面向对象程序设计(C++)》实验报告

}*/ // ~CPU() {cout<<"析构了一个CPU!"<

实验三 FIR滤波器的DSP实验报告

实验三FIR滤波器的DSP实验报告 一、实验目的 1. 了解MATLAB的FIR滤波器设计方法与编程; 2. 掌握FIR滤波器算法基本原理和C语言的编程方法; 二、实验内容 FIR滤波器设计流程为,根据给出的滤波器设计(通带带宽、阻带衰减、相位要求)要求,在Matlab环境下仿真得到滤波器系数,得到了滤波器系数后在CCS下编程设计DSP 的FIR滤波器。 1.使用Matlab中的FDAtool设计FIR滤波器 设计实现fir低通滤波器,阶数为20,采样频率fs=8000Hz,截止频率fc=1500Hz,窗口设置为汉明窗Hamming。经过的信号频率是1000HZ和2000HZ的混叠波。 2.参阅FIR基本理论及C语言编程方法,研读、分析实验指导书中的代码; 3. 双击,启动CCS的配置程序选项,选择“C5502 Simulator”; 4. 启动CCS,打开实验工程文件,再编译并装载程序; 5. 仿真波形 A.输入信号波形 B.输入信号频 C输出信号波形

D 输出信号频谱 从输入信号和输出信号的频谱对比中可以看出,输出信号有1KHZ 和2KHZ 的混叠信号。经过FIR 低通录波器后,滤掉了2KHZ 的频谱。只剩下1KHZ 的频谱。 4.修改代码:滤波器设计要求:线性相位低通滤波器,模拟信号通带为0~1kHz ,阻带衰减在5kHz 处为-60dB 。采样率为20kHz 。 采用凯塞窗口设计此低通滤波器,设计过程如下: 通带边界频率为1KHZ ,阻带边界频率是5KHZ 有60dB 的衰减,可得: rad rad s p 22052,102012ππωππ ω==== 过渡带πωωω5 2 = -=?p s ,A=60dB 设计凯塞窗口的长度N 和参数β分别为: 29285.28 =?-≈ ω A N 65326.5)7.8(1102.0=-=a β 使用MA TLAB 设计此滤波器,过程如下: 1)在Matlab 的Start 菜单中选择Toolboxes -> Filter Design -> Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool 来启动滤波器设计分析器。

实验报告_实验3 类与对象

实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样?

答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。

DSP实验3

实验三 快速傅里叶变换 FFT 一、实验目的 1.理解DFT 算法,并能用MATLAB 实现DFT 。 2. 加深对FFT 的理解,体会DFT 和FFT 之间的关系。 3.熟悉应用FFT 实现两个序列的线性卷积的方法。 二、实验原理 N 点序列x(n) 的DFT 和IDFT 定义: 若将DFT 变换的定义写成矩阵形式,则得到 X=A ﹒x ,其中DFT 变换矩阵A 为 ?????????? ????=---2)1(111...1......... ......11...11N N N N N N N W W W W A 可以用函数U=fft(u,N)和u=ifft(U,N)计算N 点序列的DFT 正、反变换。 三、实验内容 (一)离散傅里叶变换(DFT ) 1.用MATLAB 求N=16的有限序列)4/sin()8/sin()(ππn n n x +=的DFT 结果,并画出结果图。 参考程序如下: N=16; n=0:1:N-1; %时域采样 xn=sin(n*pi/8)+sin(n*pi/4); k=0:1:N-1; %频域采样

WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^nk; Xk=xn*WNnk; subplot(2,1,1) stem(n,xn); subplot(2,1,2) stem(k,abs(Xk)); 2.矩形序列x(n)=R (n),求N分别取8,32时的DFT,最后绘出结果图形。 5 参考程序如下: function[Xk]=dft(xn,N) n=[0:1:N-1]; %n的行向量 k=[0:1:N-1]; %k的行向量 WN=exp(-j*2*pi/N); %旋转因子 nk=n'*k; %产生一个含nk值的N乘N维矩阵WNnk=WN.^nk; %DFT矩阵 Xk=xn*WNnk; %DFT系数的行向量 调用上面函数解题。 N=8;x=[ones(1,5),zeros(1,N-5)]; n=0:N-1; X=dft(x,N); %N=8点离散傅立叶变换 magX=abs(X);phaX=angle(X)*180/pi; k=(0:length(magX)'-1)*N/length(magX); subplot(2,2,1);stem(n,x);ylabel('x(n)'); subplot(2,2,2);stem(k,magX);axis([0,10,0,5]);ylabel('|X(k)|'); N=32;x=[ones(1,5),zeros(1,N-5)]; n=0:N-1; X=dft(x,N); %N=32点离散傅立叶变换 magX=abs(X);phaX=angle(X)*180/pi; k=(0:length(magX)'-1)*N/length(magX);

实验四-类与对象

实验四类与对象 1.实验目的 1、使用类来封装对象的属性和行为; 2、掌握对象的组合以及参数传递; 3、掌握类变量与实例变量,以及类方法与实例方法的区别 2.实验内容 1、参考教科书,完成下面实验: 1)实验1 Tank类 2)实验2 计算机与光盘 3)实验3 家族的姓氏 4)实验4 三角形、梯形和圆形的类封装 5)实验5 实例成员与类成员 2、完成习题: 1)根据要求修改实验1,改进speedUP方法,使得Tank类的对象加速时不能将speed值超过220;增加一个刹车方法:void brake(),Tank类的对象调用它能将speed的值变成0。 2)根据要求修改实验2,主类中再增加一个CD的对象,然后将计算机中的数据(data数组)复制到CD对象中。 3、提高题 编写储蓄账户类及测试类,模拟存款,参考以下运行方式: (1)新开5个储蓄账户,各储蓄账户的编号、户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱。 (2)提示用户从键盘输入储蓄账户编号。 (3)若输入的储蓄账户编号与新开的5个储蓄账户编号之一匹配,则提示用户从键盘输入存款金额,存款金额必须大于0,否则显示错误提示,直到用户输入的存款金额大于0为止。 (4)相应储蓄账户的余额被更新。 (5)存款完成后,提示存款成功,显示该储蓄账户的编号、户名、余额。 (6)若输入的储蓄账户编号与新开的5个储蓄账户编号均无法匹配,显示错误提示,并询问是否还要继续存款。 (7)用户输入yes,继续执行步骤(2),否则显示退出信息。 最基本要求:绘制UML类图;储蓄账户的余额必须确保大于等于0。 3.实验步骤 参考教材中相关的实验。 4.评分标准

实验:类和对象1

实验一:类和对象 【实验目的】 1.理解对象和类,掌握类的定义及如何创建一个对象; 2.掌握构造方法的运用; 3.掌握方法的定义和参数传递; 4. 掌握类的继承机制。 【实验准备】 一、复习配套教材相关章节的内容; 二、预习本次实验; 【实验内容】 1.编写一个程序,显示水果的定购行情。定义一个带有参数的构造方法,这些参数用于存放产品名,数量和价格。在主程序中输出三种不同的水果。package avage; public class text { String name; int agr; double page; public text(){ } public text(String name,int agr,double page){ https://www.360docs.net/doc/e210881390.html,=name; this.agr=agr; this.page=page; } public void evagre(){ System.out.println("水果名为:"+https://www.360docs.net/doc/e210881390.html,); System.out.println("水果数量:"+this.agr); System.out.println("水果单价:"+this.page); } } public class text1 { /** * @param args

*/ public static void main(String[] args) { // TODO Auto-generated method stub text s=new text(); https://www.360docs.net/doc/e210881390.html,="苹果"; s.agr =10; s.page=1.0; s.evagre(); text c=new text(); https://www.360docs.net/doc/e210881390.html,="香蕉"; s.agr =10; s.page=1.0; s.evagre(); text d=new text(); https://www.360docs.net/doc/e210881390.html,="橘子"; s.agr =10; s.page=1.0; s.evagre(); 2. 编写一个学生类,封装学生的学号、姓名、成绩等信息。再编写一个主类,

DSP实验三和实验四

实验三离散时间系统及响应 [实验目的] 1、熟悉离散时间系统的时域和频域分析方法。 2、掌握稳定系统性的判别。 3、掌握利用MATLAB求解零极状态、差分方程和频率响应的方法。 [实验仪器] 计算机、Matlab6.5(或更高版本)软件 [实验参考书] :自编实验指导书 与本实验有关的MA TLAB函数: 1. conv.m用来实现两个离散序列的线性卷积。其调用格式是:y=conv(x,h) 2.filter.m求离散系统的输出y(n) 。若系统的h(n) 已知,可用conv.m文件可求出y(n) ;若系统的H(z) 已知,可用filter可求出y(n),调用格式是: y=filter(b, a, x);%其中x, y, a 和b都是向量。 3.impz.m在H(z) 已知情况下, 求系统的单位抽样响应h(n)。调用格式是: h = impz(b, a, N) 或 [h,t]=impz(b,a,N) N是所需的的长度。前者绘图时n从1开始,而后者从0开始。 4.freqz.m在H(z) 已知情况下, 求系统的频率响应。基本的调用格式是: [H,w]=freqz(b,a,N,'whole',Fs) N是频率轴的分点数,建议N为2的整次幂;w是返回频率轴座标向量,绘图用;Fs是抽样频率,若Fs=1,频率轴给出归一化频率;’whole’指定计算的频率范围是从0~FS,缺省时是从0~FS/2. 5.zplane.m文件可用来显示离散系统的极-零图。其调用格式是: zplane(z,p), 或zplane(b,a), 前者是在已知系统零点的列向量z和极点的列向量p的情况下画出极-零图,后者是在仅已知H(Z)的A(z)、B(z) 的情况下画出极-零图。 [实验内容] 1、序列的卷积运算。下例是一个指数函数的卷积,结果如图所示。 clear all; fs=20; n =0:49; x=exp(-n/fs); subplot(211),stem(x) y=conv(x,x); subplot(212);stem(y);grid; 05101520253035404550 仿照上例,现在假设存在两个序列,()[,,,,,,] h n=54321,利用计 x n=9121041215()[,,,,]

实验一、类与对象

实验一类与对象 一、实验目的 1.掌握类的定义和使用。 2.掌握类的对象的声明。 3.复习具有不同访问属性的成员的访问方式。 4.观察构造函数和析构函数的执行过程。 5.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 二、实验课时 4学时 三、实验任务 1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run(提示信息“CPU开始运行”)、stop(提示信息“CPU停止运行”)。其中,为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage 为浮点型的电压值。在main函数中定义该类的一个对象,并调用其公有成员函数,观察构造函数和析构函数的调用顺序。试试能不能在主函数中打印该对象的属性值,并分析原因。 2.在上述CPU类中添加成员函数,分别用于设置及获取各属性的值,并在main函数中调用这些函数。观察当这些函数被设置成private或public时会有什么不同。 3.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram 为RAM类的一个对象,cdrom为CDROM类的一个对象。CPU类的定义为实验任务1,RAM、CDROM类可以自由设置一些属性,并提供类似的run、stop这两个成员函数。在main函数中测试这个类,分析成员函数的运行顺序。 4.定义一个Point类,属性为坐标X、Y的值,包含有如下成员函数:构造函数、析构函数、设置与获取X和Y的值的函数,并测试程序的输出结果。

实验一 类和对象

实验一类和对象 Visual C++ 6.0集成开发环境的使用: Visual C++系列产品是微软公司推出的一款优秀的C++集成开发环境,其产品定位为Windows 95/98、NT、2000 系列Win32 系统程序开发,由于其良好的界面和可操作性,被广泛应用。由于2000 年以后,微软全面转向.NET 平台,Visual C++6.0 成为支持标准C/C++规范的最后版本。 1.启动 安装完系统后,可以选择如下两种方式启动 1) 点击Windows “开始”菜单,选择“程序”菜单下“Microsoft Visual Studio 6.0”子菜单下的快捷方式Microsoft Visual C++ 6.0 启动Visual C++ 6.0。 2) 点击Windows “开始”菜单,选择“运行”,输入msdev,即可启动。启动后的界面如下: 图 1 启动界面 2.建立工程

选择“File”菜单下的“New”菜单项或直接按Ctrl+N,启动新建向导,如图2 所示: 图 2 新建向导 选择在“Projects”属性页选择Win32 Console Application,在Project Name 中输入项目名称demo,在Location 中选择项目文件,如图2 中c:\test\demo,项目所有文件将保存在此文件。输入完毕,单击确定按钮,进入下一界面如图3:

图 3 项目类型向导 在图 3 所示界面中选择a simple application,然后点击Finish 按钮,系统显示图4 所示界面。如果想退回上一步可以选择“Back”按钮。 图 4 项目信息 在图 4 中选择OK 按钮,系统完成项目的创建,并保存项目相关的信息。项目的目录结构如图5 所示。 1) Demo.dsw 是项目工作区文件,双击此文件,即可打开此项目; 2) Demo.dsp 为项目文件; 3) demo.cpp 是项目中的一个源程序;stdafx.h 和stdafx.cpp 为自动创建的源程序,一般不用修改。 图 5 目录结构

DSP运行实验报告

DSP运行实验报告 一、实验目的 熟悉CCS软件仿真下,DSP程序的下载和运行;熟悉借助单片机的DSP程序下载和运行; 熟悉借助仿真器的DSP程序下载和运行;熟悉与DSP程序下载运行相关的CCS编程环境。 二、实验原理 CCS软件仿真下,借用计算机的资源仿真DSP的内部结构,可以模拟DSP程序的下载和运行。 如果要让程序在实验板的DSP中运行、调试和仿真,可以用仿真器进行DSP程序下载和运行。初学者也可以不用仿真器来使用这款实验板,只是不能进行程序调试和仿真。 在本实验板的作用中,单片机既是串口下载程序的载体,又是充当DSP 的片外存储器(相对于FLASH),用于固化程序。 三、实验设备、仪器及材料 安装有WINDOWS XP操作系统和CCS3.3的计算机。 四、实验步骤(按照实际操作过程) 1、CCS软件仿真下,DSP程序的下载和运行。 第一步:安装CCS,如果不使用仿真器,CCS 的运行环境要设置成一个模拟仿真器(软仿真)。

第二步:运行CCS,进入CCS 开发环境。 第三步:打开一个工程。 将实验目录下的EXP01目录拷到D:\shiyan下(目录路径不能有中文),用[Project]\[Open]菜单打开工程,在“Project Open”对话框中选 EXP01\CPUtimer\CpuTimer.pjt,选“打开”, 第四步:编译工程。 在[Project]菜单中选“Rebuild All”,生成CpuTimer.out文件。 第五步:装载程序。 用[File]\[Load Program]菜单装载第四步生成CpuTimer.out文件,在当前工程目录中的Debug 文件夹中找到CpuTimer.out文件,选中,鼠标左键单击“打开”。

C++实验二类与对象(附答案)

实验二类与对象 实验目的和要求 1.掌握类、类的数据成员、类的成员函数的定义方式。 2.理解类成员的访问控制方式。 3.掌握对象的定义和操作对象的方法。 4.理解构造函数和析构函数的定义与执行过程。 5.掌握重载构造函数的方法。 6.了解拷贝构造函数的定义方法。 实验容 1.下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#include class Aa { public: Aa(int i=0) { a=i; cout<<"Constructor "<

(1) #include class Date { void set_date(); void show_date(); int year; int month; int day; }; Date d; int main() { set_date(); show_date(); } void set_date() { cin>>d.year; cin>>d.month; cin>>d.day; } void show_date() { cout< class A { public: void A(int i=0) { m=i; } void show() { cout<

实验三 类与对象(1)——耿祥义

实验三类与对象(1) 一、实验目的 (1)掌握面向对象程序设计的方法和Java作为面向对象程序设计语言的特点; (2)掌握类得封装与对象的使用; (3)掌握修饰符和构造方法的使用规则; (4)掌握构造方法的使用,方法重载用于多态 (5)掌握包的使用 二、实验要求 (1)编写一个体现面向对象思想的程序; (2)编写一个创建对象和使用对象的方法的程序; (3)编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序; (4)编写体现类的多态性(成员方法重载、构造方法重载)的程序。 三、实验内容 (一)Java类的设计与编程 1. 创建一个Application 应用程序Demo3_ 2.java 文件.在Demo3_2.java文件中定义两个类。一个是CCircle,另一个是主类Demo3_2。 程序功能:描述一个圆类,其主要属性为半径,还有一个非常重要的常量是圆周率。该圆可以求出面积,可以设置半径和取得半径大小。 class CCircle { double pi; double radius; double getRadius() { return radius; } void setCircle(double r, double p) { pi=p; radius=r; } double getCircleArea() { return pi*radius*radius; } } public class Demo3_2 { public static void main(String args[]) { CCircle cir1=new CCircle(); cir1.setCircle(2.0,3.1416); System.out.println("园半径="+cir1.getRadius()); System.out.println("园面积="+cir1.getCircleArea()); cir1.pi=3.14159; cir1.radius=10.0;

DSP实验二要点

实验三 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)))

实验四 类与对象

实验四类与对象 一、实验目的 1. 掌握类的声明和使用。 2. 掌握类的声明和对象的声明。 3.复习具有不同访问属性的成员的访问方式。 4. 观察构造函数和析构函数的执行过程。 5.学习类的组合使用方法。 6. 使用 VC++的debug 调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 二、实验任务 1. 声明一个 CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank 为枚举类型CPU_Rank,声明为enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是 MHz 的整型数,voltage为 浮点型的电压值。观察构造函数和析构函数的调用顺序。 2. 声明一个简单的 Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数 run、stop。cpu 为 CPU类的一个对象,ram为RAM 类的 一个对象,cdrom为 CDROM 类的一个对象,声明并实现这个类。 3. (选做)设计一个用于人事管理的 People(人员)类。考虑到通用性,这里只抽象 出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员 函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、 内联成员函数、组合。 三、参考程序 1、#include using namespace std; enumCPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { private: ?CPU_Rank rank; ?int frequency; ?float voltage; public: CPU (CPU_Rank r, intf, float v) ?{ ?rank = r; ?frequency = f; ?voltage = v; ?cout << "构造了一个CPU!" << endl; ?}

实验一.类与对象实验报告

浙江理工大学信息学院 面向对象程序设计实验报告 实验名称:类的定义与使用学时安排:3 实验类别:设计性实验实验要求:1人1组姓名:邵旸珂学号:2016329621068  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的 1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性; 2)掌握类对象的定义; 3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数; 二、实验原理介绍 通过建立类及对象,用类的成员函数和对象访问类的成员; 利用建立类的构造函数,完成类的成员的初始化工作; 三、实验设备介绍 软件需求: windows或linux下的c++编译器 硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU 处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。 四、实验内容 编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。 要求: 1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。

2.如果是上行,则选择输入的楼层号不能比当前楼层号小,否则应给出不合法提示。 3. 如果是下行,则选择输入的楼层号不能比当前楼层号大,否则应给出不合法提示。 4.电梯一旦开始运作就会始终运行,直到窗口关闭。 5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层的输出形式能更加醒目。如果可以,在电梯最初开始运行时,能在电梯由内部显示当前日期(提示:实现这些功能时,需要调用系统api,实现时间显示功能可以使用CDate类)。 五程序清单 #include #include #include using namespace std; int n,floorNumber; class Elevator { private: int floor; //电梯总的楼层数 bool up; //是否上行,bool为布尔类型,可取值true或false bool down; //是否下行 int currentFloor; //当前所在楼层 public: Elevator(int floor); void setUpButton(); //按下上行按钮 void setDownButton(); //按下下行按钮 void setFloorNumber(int floorNumber); //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层

c++类和对象实验报告

实验一类和对象 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 一、实验目的和要求 (1) 理解类和对象的概念,掌握声明类和定义对象的方法。 (2) 掌握构造函数和析构函数的实现方法。 (3) 初步掌握使用类和对象编制C++程序。 (4) 掌握对象数组、对象指针和string类的使用方法。 (5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。 (6) 掌握类对象作为成员的使用方法。 (7) 掌握静态数据成员和静态成员函数的使用方法。 (8) 理解友元的概念和掌握友元的使用方法。 二、实验内容 1.设计一个静态数组存储结构的顺序表类,要 求编程实现如下任务:建立一个线性表,首先 依次输人数据元素1,2,3,…,10,然后删除 数据元素6,最后依次显示当前线性表中的数 据元素。要求采用顺序表实现,假设该顺序表 的数据元素个数在最坏情况下不会超过50个。实验代码:#include using namespace std; const int MaxSize=100; //100只是示例性的数据,可根据实际问题具体定义 template //定义模板类SeqList class SeqList { public:

SeqList( ) {length=0;} //无参构造函数 SeqList(T a[ ], int n); //有参构造函数 ~SeqList( ) { } //析构函数为空 int Length( ) {return length;} //求线性表的长度 T Get(int i); //按位查找,取线性表的第i个元素 int Locate(T x ); //按值查找,求线性表中值为x的元素序号 void Insert(int i, T x); //在线性表中第i个位置插入值为x的元素 T Delete(int i); //删除线性表的第i个元素 void PrintList( ); //遍历线性表,按序号依次输出各元素 private: T data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 }; template SeqList::SeqList(T a[ ], int n) { int i; if (n>MaxSize) throw "参数非法";

相关文档
最新文档