搜档网
当前位置:搜档网 › 北邮windows程序设计实验报告

北邮windows程序设计实验报告

北邮windows程序设计实验报告
北邮windows程序设计实验报告

Windows程序设计

实验报告

实验一:绘图和绘钟

实验二:简易扫雷程序

班级:

姓名:

学号:

班内序号:

时间:2014. 5. 4

实验一:绘图和绘钟

一、实验要求:

利用MFC类编写windows程序,实现基本绘图功能,并在课堂所讲绘图功能上新加入自己其他的绘图功能。

二、实验概述:

①由于前期一直坚持听课,所以实现基本绘图功能的代码是按照老师的架构来做的,后来新加的功能是参阅孙鑫所著的《VC++深入详解》一书,在理解的基础上添加到之前的程序框架中的。做实验时先从课堂上讲的建立单文档开始,在熟悉了MFC单文档的程序框架后,按照老师给的画简单图形的代码,并对应自己借的书籍,了解了画图代码的编写。之后又逐步进行了改进,增加了更多其他的功能。

②利用MFC编写绘图和绘钟的程序是在Visual Studio 2013的环境下编写的;

③绘钟程序采取的是简洁风格,先绘制了表盘,之后用数学方法绘制钟表盘小格。利用Invalidate函数刷新钟表区域,利用SetTimer函数来对指针进行刷新。点击显示后再次点击即可关闭时钟。

④线型线宽的设置中,增加了单选框和示例框,线型的选择中由于线型定义中对应0~8,所以就按照顺序排列线型,从而减去了switch/case语句。点击单选框后利用Invalidate函数让窗口无效,在下一次WM_PAINT时重绘窗口,示例框线条在OnPaint函数中绘制。

⑤绘图所能实现的功能有:

1.能够实现图片文件和位图文件的打开;

2.可以将所绘制图形以位图形式保存;

3.以对话框形式实现对线型线宽的设置;

4.设置八种线型,增加示例框,能在选择时预览;

5.增加画图面板滚动条,能上下左右拉动绘图区域;

6.实现图形重绘功能,在拉动或最小化图形窗口以及滚动区域后图形不消失,

实现了对所绘矩形,椭圆,线条和扇形的重绘;

7.以系统自带对话框形式实现对颜色及字体的修改;

8.画图功能:直线,曲线,椭圆,扇形,带边界的扇形,位图填充的矩形,可

遮挡的空心矩形;

⑥绘钟所能实现的功能有:

1.实现闹钟功能,以对话框形式设置响铃时间;

2.能够绘制出模拟时钟,并获取正确的系统时间;

3.能够实现秒针每一秒移动一下的动画效果;

4.时钟下边以数字时钟的方式显示当前系统时间;

三、代码分析

1.整体代码分为三部分:

①窗口绘图:用于绘制各种图形(包括直线,曲线,扇形等);

②绘图设置:用于颜色,字体和线型线宽的设置等;

③绘制时钟:绘制与系统时间同步的模拟时钟。

2.设计流程:

根据基本功能描述,绘图程序有3个功能模块组成,其中图形绘制模块在鼠标消息处理函数中编码实现。鼠标左键按下响应OnLButtonDown()函数,确定绘图起始点,鼠标移动响应OnMouseMove()函数,鼠标左键弹起响应OnLButtonUp()函数,保存图形相关参数到文档类中并绘制最终的图形。图形相关数据的保存用到图元类,每当用户绘制完一个图形后,我们就可以实例化一个对应的图元子类对象,该对象实例就对应了用户所画的图形,图元的相关参数就保存在该图元类对象中,最后将图元类的指针存入文档类中定义的m_ptrArray列表类变量中。数据暂存模块定义了图元基类CGraph,直线段图元子类Cline,椭圆图元子类CEllipse,矩形椭圆子类CRectangle ,其中CGraph从CObject类公有继承,直线段图元子类CLine、椭圆图元子类CEllipse、矩形图元子类CRectangle均从CGraph公有派生,CGraph类从CObArray列表对象类继承,CGraph对象实例可用于保存指向CObject对象的指针。创建以上图元类及CGraph类是为了在窗口大小改变或者窗口最大化时能够利用OnDraw()函数实现图元的重画。图形属

行时动态改变其参数值即可。视图类中定义了dType、m_ptOrigin、m_ptNext等变量,控制绘图的线型,起点,终点等。

3.工程步骤:

(1)利用应用程序向导生成一个基于单文档的应用程序,工程名称为Draw123。

(2)在CDraw123View类中添加私有成员变量,添加的成员变量及其对应的ID列于下表1所示。

表1 视图类中定义的变量

变量类型变量名称变量说明

CPoint m_ptOrigin 鼠标绘图开始点坐标

CPoint m_ptNext 鼠标绘图终止点坐标

DrawType dType 绘图类型

int m_nLineWidth 线宽

COLORREF m_clr 线色

(3)编辑菜单栏,在菜单栏增加“窗口绘图”菜单项,绘图菜单项子菜单项标题(Caption)及对应ID 号列于下表2中。

表2 菜单项及其对应ID

菜单项标题ID 菜单项标题ID 直线ID_SHOW_SLINE 椭圆ID_SHOW_ECLLIPSE

曲线ID_SHOW_CLINE 扇形(无框)ID_SHOW_NOSECTOR 矩形(位图)ID_RECTA 扇形(有框)ID_SHOW_SECTOR 矩形(可遮挡)ID_Recta1 颜色设置ID_SHOW_COLOR 字体调整ID_SHOW_FONT 线型线宽ID_SHOW_LSTYLEWIDTH 平面绘钟ID_OMG 闹钟ID_TEXT_DLG

利用类向导ClassWizard添加以上菜单项的COMMAND和UPDATE_COMMAND_UI消息处理函数,并编写相关源代码。

(4)添加鼠标消息处理函数OnLButtonDown()、OnMouseMove()、OnLButtonUp()。添加过程为:选择View菜单下的ClassWizard菜单项打开类向导,在类列表中选择CDraw123View类,在消息列表框中选择WM_LBUTTONDOWN消息并用鼠标左键双击,此时类向导自动在成员函数列表框中添加该消息的处理函数。用同样方法添加WM_MOUSEMOVE消息和WM_LBUTTONUP消息的处理函数.

添加鼠标消息处理函数

所有类创建完成之后如下图:

四、关键功能的实现

1)选择要绘制图形的种类

在CDraw123View视图类中定义DrawType类型的变量dType,该变量等于SLine, CLine, Ecllipse, SetPen, SetBrush, NoSector, Sector, NoDraw, Recta ,Recta1,Recta2时分别表示绘制直线段、椭圆、矩形等图形。在直线、椭圆、矩形菜单项的消息处理函数中分别赋值相应变量,即选中了相应的图形种类。

2)选择线宽、线色、填充色

在CDraw123View视图类中定义dType、m_ptOrigin、m_ptNext分别表示线宽、线色、填充色,并在CDraw123View视图类的构造函数中分别将这些变量初始化,初始化后线宽为1个象素,线色为红色,填充色为白色。在程序运行时改变这些变量的值,然后创建相应的画笔、画刷,并选入设备环境DC,即可绘制相应属性要求的图形。

3)图元定义及重画

充的矩形,可遮挡的空心矩形。这样我们就可以分别定义类与之对应,每一个图元(用户绘制的图形)都是其对应的类的实例。同时,不同类型的图元之间又有相同的部分,比如图元控制点坐标、线宽、线色、填充色等。所以我们可以定义一个图元类,作为具体的图形类的基类。在其父类中定义图元共有的成员变量和成员函数,而在每个子类中定义具有自己特色的成员变量和成员函数。

定义图元类是为了在程序窗口最大化、最小化或者窗口大小发生改变时窗口中绘制的图形不会丢失,实现图元的重画。其实现机制是在窗口发生变化时,系统发送WM_PAINT消息,自动调用OnDraw函数,实现窗口的刷新。

4)修改标题栏默认窗口标题

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

if( !CFrameWndEx::PreCreateWindow(cs) )

return FALSE;

// TODO: 在此处通过修改

// CREATESTRUCT cs 来修改窗口类或样式

cs.style &= ~FWS_ADDTOTITLE;

cs.lpszName=_T("程序设计实践作业--绘图和绘钟--2014.5");

return TRUE;

}

5)图片文件的打开:

void CDraw123View::OnFileOpen()

{

// TODO: 在此添加命令处理程序代码

//CFileDialog

dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP;*.jpg)|*.BMP;*.jpg|"));

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("图片文件(*.jpg;*.jpeg;*.gif;*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP||"));

if (IDOK == dlg.DoModal())

{

strPicPath.Format(_T("%s"), dlg.GetPathName());

extname = dlg.GetFileExt(); //返回选定文件的扩展文件名

extname.MakeLower(); //将后缀名变成小写的

Invalidate();

}

}

6)图片文件的保存:

void CDraw123View::OnFileSave()

{

// TODO: 在此添加命令处理程序代码

CDC* pDC = GetWindowDC();

CBitmap bitmap;

CDC memDC;

CRect rect;

GetClientRect(rect);

memDC.CreateCompatibleDC(pDC);

bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());

memDC.SelectObject(&bitmap);

memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);

CFileDialog fDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件|*.bmp"),this);

if (fDlg.DoModal() == IDOK)

{

CString bmpfile = fDlg.GetPathName();

CFile file(bmpfile, CFile::modeCreate | CFile::modeWrite);

BITMAP bInfo;

bitmap.GetBitmap(&bInfo);

//计算调色板大小

if (bInfo.bmBitsPixel<24) //非真彩色

{

panelsize = pow((double)2, bInfo.bmBitsPixel)*sizeof(RGBQUAD);

}

//定义位图信息

BITMAPINFO*bMapInfo=(BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);

bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;

bMapInfo->bmiHeader.biClrImportant = 0;

bMapInfo->bmiHeader.biCompression = 0;

bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;

bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;

bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);

bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;

bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;

bMapInfo->bmiHeader.biXPelsPerMeter = 0;

bMapInfo->bmiHeader.biYPelsPerMeter = 0;

//获取位图的实际数据

char* pData = new char[bMapInfo->bmiHeader.biSizeImage];

int len=GetDIBits(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo, DIB_RGB_COLORS);

BITMAPFILEHEADER bFileHeader;

bFileHeader.bfType = 0x4D42;

bFileHeader.bfReserved1 = 0;

bFileHeader.bfReserved2 = 0;

bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);

bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;

//向文件中写入位图数据

file.Write(&bFileHeader, sizeof(BITMAPFILEHEADER));

file.Write(&bMapInfo->bmiHeader, sizeof(BITMAPINFOHEADER));

file.Write(pData, bMapInfo->bmiHeader.biSizeImage + panelsize);

file.Close();

delete pData;

LocalFree(bMapInfo);

}

bitmap.DeleteObject();

memDC.DeleteDC();

}

在桌面上打开:

1. 鼠标按下时OnLButtonDown部分:

void CDraw123View::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: 在此添加消息处理程序代码和/或调用默认值

{

case SLine: //直线

m_bDraw = TRUE;

m_ptOrigin = point;

break;

case CLine: //曲线

m_bDraw = TRUE;

m_ptOrigin = point;

break;

case NoSector: //无边框扇形

m_bDraw = TRUE;

m_ptOrigin = point;

break;

case Sector: //有边框扇形

m_bDraw = TRUE;

m_ptOrigin = point;

m_ptNext = point;

break;

case Recta: //填充位图矩形

m_bDraw = TRUE;

m_ptOrigin = point;

break;

case Recta1: //无遮挡空心矩形

m_bDraw = TRUE;

m_ptOrigin = point;

break;

case Ecllipse: //椭圆

m_bDraw = TRUE;

m_ptOrigin = point;

break;

default:

break;

}

SetCapture();

CScrollView::OnLButtonDown(nFlags, point);

}

2. 鼠标抬起时OnLButtonUp部分:

void CDraw123View::OnLButtonUp(UINT nFlags, CPoint point) {

// TODO: 在此添加消息处理程序代码和/或调用默认值

if (this == GetCapture())

ReleaseCapture();

CPen pen(m_LineStyle, m_nLineWidth, m_clr); //三个参数之后可以分别调(线型,线宽和颜色) CPen *pOldPen = dc.SelectObject(&pen); //选择画笔

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1); //加载位图

CBrush brush(&bitmap);

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CBrush *pOldBrush = dc.SelectObject(pBrush);

m_dcMetaFile.SelectObject(pBrush);

if (!m_dcCompatible.m_hDC)

{

m_dcCompatible.CreateCompatibleDC(&dc);

CRect rect;

GetClientRect(&rect);

CBitmap bitmap;

bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());

m_dcCompatible.SelectObject(&bitmap);

m_dcCompatible.BitBlt(0, 0, rect.Width(), rect.Height(), &dc, 0, 0, SRCCOPY);

m_dcCompatible.SelectObject(pBrush);

}

switch (dType)

{

case SLine: //记录起点和终点,抬起鼠标时绘制

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_dcCompatible.MoveTo(m_ptOrigin);

m_dcCompatible.LineTo(point);

break;

case Recta:

dc.FillRect(CRect(m_ptOrigin, point), &brush);

m_dcCompatible.FillRect(CRect(m_ptOrigin, point), &brush);

break;

case Recta1:

dc.Rectangle(CRect(m_ptOrigin, point));

m_dcCompatible.Rectangle(CRect(m_ptOrigin, point));

break;

case Ecllipse:

dc.Ellipse(CRect(m_ptOrigin, point));

m_dcCompatible.Ellipse(CRect(m_ptOrigin, point));

break;

default:

break;

}

m_bDraw = FALSE;

dc.SelectObject(pOldPen);

OnPrepareDC(&dc);

dc.DPtoLP(&m_ptOrigin);

dc.DPtoLP(&point);

CGraph *pGraph = new CGraph(dType,m_ptOrigin,point);

m_ptrArray.Add(pGraph);

CScrollView::OnLButtonUp(nFlags, point);

}

3. 鼠标移动时OnMouseMove部分:

void CDraw123View::OnMouseMove(UINT nFlags, CPoint point) {

// TODO: 在此添加消息处理程序代码和/或调用默认值

CPen pen(m_LineStyle, m_nLineWidth, m_clr);

CClientDC dc(this);

CPen *pOldPen = dc.SelectObject(&pen);

if ((nFlags&MK_LBUTTON) && (this == GetCapture()))

{

if (m_bDraw)

{

switch (dType)

{

case CLine:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_ptOrigin = point;

break;

case NoSector:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

break;

case Sector:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.LineTo(m_ptNext);

m_ptNext = point;

break;

default:

break;

}

}

}

dc.SelectObject(pOldPen);

CScrollView::OnMouseMove(nFlags, point);

}

void CDraw123View::OnShowCline()

{

// TODO: 在此添加命令处理程序代码

dType = CLine;

}

void CDraw123View::OnLButtonDblClk(UINT nFlags, CPoint point) {

// TODO: 在此添加消息处理程序代码和/或调用默认值

dType = NoDraw;

CScrollView::OnLButtonDblClk(nFlags, point);

}

void CDraw123View::OnShowNosector()

{

// TODO: 在此添加命令处理程序代码

dType = NoSector;

}

void CDraw123View::OnShowSector()

{

// TODO: 在此添加命令处理程序代码

dType = Sector;

}

void CDraw123View::OnRecta()

{

// TODO: 在此添加命令处理程序代码

dType = Recta;

}

void CDraw123View::OnRecta1()

{

// TODO: 在此添加命令处理程序代码

dType = Recta1;

}

void CDraw123View::OnShowEcllipse()

{

// TODO: 在此添加命令处理程序代码

dType = Ecllipse;}

3.绘钟(为避免混乱,放在了MainFrame中来写绘钟的代码)

void CMainFrame::OnTimer(UINT_PTR nIDEvent)

{

switch (nIDEvent)

{

case 1:

//在框架正中央画一个时钟

CRect rect;

this->GetClientRect(&rect);

if (this->m_bOMG == FALSE){

Invalidate(FALSE);

break;

}

this->m_tmCurT = CTime::GetCurrentTime();

CString str = this->m_tmCurT.Format("时间%H:%M:%S");

this->m_iH = this->m_tmCurT.GetHour();

if (this->m_iH >= 12)

this->m_iH -= 12;

this->m_iM = this->m_tmCurT.GetMinute();

this->m_iS = this->m_tmCurT.GetSecond();

int QuarterWidth = rect.Width() / 4;

int ThreeQuartersWidth = rect.Width() * 3 / 4;

int QuarterHeight = rect.Height() / 4;

int ThreeQuartersHeight = rect.Height() * 3 / 4;

int MidWidth = rect.Width() / 2;

int MidHeight = rect.Height() / 2;

int i = 0;

static double Pi = 3.141593;

//画圆

for (i; i <= 10; i +=1){

pDC->Ellipse(MidWidth - QuarterHeight + i, QuarterHeight + i, MidWidth + QuarterHeight - i, ThreeQuartersHeight - i);

}

CPen pen;

CPen pen_2;

CPen pen_S;

CPen pen_M;

CPen pen_H;

pen.CreatePen(PS_SOLID, 4, RGB(0, 0, 0));

pen_2.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));

pen_S.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));

pen_M.CreatePen(PS_SOLID, 4, RGB(0, 0, 0));

pen_H.CreatePen(PS_SOLID, 6, RGB(0, 0, 0));

CPen* pOldPen = pDC->SelectObject(&pen);

//画 12

pDC->MoveTo(MidWidth, QuarterHeight);

pDC->LineTo(MidWidth, QuarterHeight + 20);

//画 6

pDC->MoveTo(MidWidth, ThreeQuartersHeight);

pDC->LineTo(MidWidth, ThreeQuartersHeight - 20);

//画 3

pDC->MoveTo(MidWidth + QuarterHeight, MidHeight);

pDC->LineTo(MidWidth + QuarterHeight - 20, MidHeight);

//画9

pDC->MoveTo(MidWidth - QuarterHeight, MidHeight);

pDC->LineTo(MidWidth - QuarterHeight + 20, MidHeight);

//画 1

pDC->MoveTo(MidWidth + QuarterHeight / 2, MidHeight - (int)(0.866*(double)QuarterHeight));

pDC->LineTo(MidWidth + QuarterHeight / 2 - 10, MidHeight - (int)(0.866*(double)QuarterHeight) + 17);

//画 7

pDC->MoveTo(MidWidth - QuarterHeight / 2, MidHeight + (int)(0.866*(double)QuarterHeight));

pDC->LineTo(MidWidth - QuarterHeight / 2 + 10, MidHeight + (int)(0.866*(double)QuarterHeight) - 17);

//画 2

pDC->MoveTo(MidWidth + (int)(0.866*(double)QuarterHeight), MidHeight - QuarterHeight / 2);

pDC->LineTo(MidWidth + (int)(0.866*(double)QuarterHeight) - 17, MidHeight - QuarterHeight / 2 + 10);

//画 8

pDC->MoveTo(MidWidth - (int)(0.866*(double)QuarterHeight), MidHeight + QuarterHeight / 2);

pDC->LineTo(MidWidth - (int)(0.866*(double)QuarterHeight) + 17, MidHeight + QuarterHeight / 2 - 10);

//画 4

pDC->MoveTo(MidWidth + (int)(0.866*(double)QuarterHeight), MidHeight + QuarterHeight / 2);

pDC->LineTo(MidWidth + (int)(0.866*(double)QuarterHeight) - 17, MidHeight + QuarterHeight / 2 - 10);

//画 10

pDC->MoveTo(MidWidth - (int)(0.866*(double)QuarterHeight), MidHeight - QuarterHeight / 2);

pDC->LineTo(MidWidth - (int)(0.866*(double)QuarterHeight) + 17, MidHeight - QuarterHeight / 2 + 10);

//画 5

pDC->MoveTo(MidWidth + QuarterHeight / 2, MidHeight +

pDC->LineTo(MidWidth + QuarterHeight / 2 - 10, MidHeight + (int)(0.866*(double)QuarterHeight) - 17);

//画 11

pDC->MoveTo(MidWidth - QuarterHeight / 2, MidHeight - (int)(0.866*(double)QuarterHeight));

pDC->LineTo(MidWidth - QuarterHeight / 2 + 10, MidHeight - (int)(0.866*(double)QuarterHeight) + 17);

pDC->SelectObject(pOldPen);

//画其他点

for (i = 0; i<60; ++i){

pDC->MoveTo(MidWidth + (int)(QuarterHeight*sin(i*Pi / 30)), MidHeight - (int)(QuarterHeight*cos(i*Pi / 30)));

pDC->LineTo(MidWidth + (int)(QuarterHeight*0.87*sin(i*Pi / 30)), MidHeight - (int)(QuarterHeight*0.87*cos(i*Pi / 30)));

}

pDC->MoveTo(MidWidth, MidHeight);

for (i = 0; i<6; ++i){

pDC->Ellipse(MidWidth - 5 + i, MidHeight - 5 + i, MidWidth + 5 - i, MidHeight + 5 - i);

}

//更改画笔

pDC->SelectObject(&pen_S);

// 画秒针

pDC->MoveTo(MidWidth, MidHeight);

pDC->MoveTo(MidWidth - (int)(QuarterHeight*0.18*sin(this->m_iS*Pi / 30)), MidHeight + (int)(QuarterHeight*0.18*cos(this->m_iS*Pi / 30)));

pDC->LineTo(MidWidth + (int)(QuarterHeight*0.8*sin(this->m_iS*Pi / 30)), MidHeight - (int)(QuarterHeight*0.8*cos(this->m_iS*Pi / 30)));

//更改画笔

pDC->SelectObject(&pen_M);

//画分针

pDC->MoveTo(MidWidth, MidHeight);

pDC->LineTo

(

MidWidth + (int)(QuarterHeight*0.8*sin(2 * Pi*(this->m_iM / 60.0 + this->m_iS / 3600.0))),

MidHeight - (int)(QuarterHeight*0.8*cos(2 * Pi*(this->m_iM / 60.0 + this->m_iS / 3600.0)))

);

北邮 通信网实验报告

北京邮电大学实验报告通信网理论基础实验报告 学院:信息与通信工程学院 班级:2013211124 学号: 姓名:

实验一 ErlangB公式计算器 一实验内容 编写Erlang B公式的图形界面计算器,实现给定任意两个变量求解第三个变量的功能: 1)给定到达的呼叫量a和中继线的数目s,求解系统的时间阻塞率B; 2)给定系统的时间阻塞率的要求B和到达的呼叫量a,求解中继线的数目s,以实现网络规划; 3)给定系统的时间阻塞率要求B以及中继线的数目s,判断该系统能支持的最大的呼叫量a。 二实验描述 1 实验思路 使用MA TLAB GUITOOL设计图形界面,通过单选按钮确定计算的变量,同时通过可编辑文本框输入其他两个已知变量的值,对于不同的变量,通过调用相应的函数进行求解并显示最终的结果。 2程序界面 3流程图 4主要的函数 符号规定如下: b(Blocking):阻塞率; a(BHT):到达呼叫量;

s(Lines):中继线数量。 1)已知到达呼叫量a及中继线数量s求阻塞率b 使用迭代算法提高程序效率 B s,a= a?B s?1,a s+a?B(s?1,a) 代码如下: function b = ErlangB_b(a,s) b =1; for i =1:s b = a * b /(i + a * b); end end 2)已知到达呼叫量a及阻塞率b求中继线数量s 考虑到s为正整数,因此采用数值逼近的方法。采用循环的方式,在每次循环中增加s的值,同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于上次误差时,结束循环,得到s值。 代码如下: function s = ErlangB_s(a,b) s =1; Bs = ErlangB_b(a,s); err = abs(b-Bs); err_s = err; while(err_s <= err) err = err_s; s = s +1; Bs = ErlangB_b(a,s); err_s = abs(b - Bs); end s = s -1; end 3)已知阻塞率b及中继线数量s求到达呼叫量a 考虑到a为有理数,因此采用变步长逼近的方法。采用循环的方式,在每次循环中增加a的值(步长为s/2),同时调用B s,a函数计算阻塞率并与已知阻塞率比较,当本次误差小于预设阈值时,结束循环,得到a值。 代码如下: function a = ErlangB_a(b,s)

课程设计实验报告 北邮

课程设计实验报告 -----物联网实验 学院:电子工程学院班级:2011211204 指导老师:赵同刚

一.物联网概念 物联网是新一代信息技术的重要组成部分。物联网的英文名称叫“The Internet of things”。顾名思义,物联网就是“物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网的基础上延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物体与物体之间,进行信息交换和通信。因此,物联网的定义是:通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物体与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别、定位、跟踪、监控和管理的一种网络。 二.物联网作用 现有成熟的主要应用包括: —检测、捕捉和识别人脸,感知人的身份; —分析运动目标(人和物)的行为,防范周界入侵; —感知人的流动,用于客流统计和分析、娱乐场所等公共场合逗留人数预警; —感知人或者物的消失、出现,用于财产保全、可疑遗留物识别等; —感知和捕捉运动中的车牌,用于非法占用公交车道的车辆车牌捕捉; —感知人群聚集状态、驾驶疲劳状态、烟雾现象等各类信息。 三.物联网无线传感(ZigBee)感知系统 ZigBee是一种新兴的短距离、低功耗、低数据速率、低成本、低复杂度的无线网络技术。ZigBee在整个协议栈中处于网络层的位置,其下是由IEEE 802.15.4规范实现PHY(物理层)和MAC(媒体访问控制层),对上ZigBee提供了应用层接口。 ZigBee可以组成星形、网状、树形的网络拓扑,可用于无线传感器网络(WSN)的组网以及其他无线应用。ZigBee工作于2.4 GHz的免执照频段,可以容纳高达65 000个节点。这些节点的功耗很低,单靠2节5号电池就可以维持工作6~24个月。除此之外,它还具有很高的可靠性和安全性。这些优点使基于ZigBee的WSN广泛应用于工业控制、消费性电子设备、汽车自动化、家庭和楼宇自动化、医用设备控制等。 ZigBee的基础是IEEE802.15.4,这是IEEE无线个人区域网工作组的一项标准,被称作IEEE802.15.4(ZigBee)技术标准。ZigBee不仅只是802.15.4的名字。IEEE仅处理低级MAC

北邮数字电路综合实验报告

数字电路综合实验报告 简易智能密码锁 一、实验课题及任务要求 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。 基本要求: 1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。 2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。 3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。 4、用点阵显示开锁和闭锁状态。 提高要求: 1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。 2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。 二、系统设计 2.1系统总体框图 2.2逻辑流程图

2.3MDS图 2.4分块说明 程序主要分为6个模块:键盘模块,数码管模块,点阵模块,报警模块,防抖模块,控制模块。以下进行详细介绍。 1.键盘模块 本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出高电平,在读入输出的行值时,通常高电平会被低电平拉低,当当前位置为高电平“1”时,没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。由此可确定按键位置。

北邮通电实验报告

实验3 集成乘法器幅度调制电路 信息与通信工程学院 2016211112班 苏晓玥杨宇宁 2016210349 2016210350

一.实验目的 1.通过实验了解振幅调制的工作原理。 2.掌握用MC1496来实现AM和DSB的方法,并研究已调波与调制信号,载波之间的关系。3.掌握用示波器测量调幅系数的方法。 二.实验准备 1.本实验时应具备的知识点 (1)幅度调制 (2)用模拟乘法器实现幅度调制 (3)MC1496四象限模拟相乘器 2.本实验时所用到的仪器 (1)③号实验板《调幅与功率放大器电路》 (2)示波器 (3)万用表 (4)直流稳压电源 (5)高频信号源 三.实验内容 1.模拟相乘调幅器的输入失调电压调节。 2.用示波器观察正常调幅波(AM)波形,并测量其调幅系数。 3.用示波器观察平衡调幅波(抑制载波的双边带波形DSB)波形。 四.实验波形记录、说明 1.DSB信号波形观察

2.DSB信号反相点观察 3.DSB信号波形与载波波形的相位比较 结论:在调制信号正半周期间,两者同相;负半周期间,两者反相。

4.AM正常波形观测 5.过调制时的AM波形观察(1)调制度为100%

(2)调制度大于100% (3)调制度为30% A=260.0mv B=140.0mv

五.实验结论 我们通过实验了解振幅调制的工作原理是:调幅调制就是用低频调制信号去控制高频振荡(载波)的幅度,使其成为带有低频信息的调幅波。目前由于集成电路的发展,集成模拟相乘器得到广泛的应用,为此本实验采用价格较低廉的MC1496集成模拟相乘器来实现调幅之功能。 DSB信号波形与载波波形的相位关系是:在调制信号正半周期间,两者同相;负半周期间,两者反相。 通过实验了解到了调制度的计算方法 六.课程心得体会 通过本次实验,我们了解了振幅调制的工作原理并掌握了实现AM和DSB的方法,学会计算调制度,具体见实验结论。我们对集成乘法器幅度调制电路有了更好的了解,对他有了更深入的认识,提高了对通信电子电路的兴趣。 和模电实验的单独进行,通电实验增强了团队配合的能力,两个人的有效分工提高了实验的效率,减少了一个人的独自苦恼。

北邮通信原理实验 基于SYSTEMVIEW通信原理实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告 班级:2013211124 专业:信息工程 姓名:曹爽 成绩:

目录 实验一:抽样定理 (3) 一、实验目的 (3) 二、实验要求 (3) 三、实验原理 (3) 四、实验步骤和结果 (3) 五、实验总结和讨论 (9) 实验二:验证奈奎斯特第一准则 (10) 一、实验目的 (10) 二、实验要求 (10) 三、实验原理 (10) 四、实验步骤和结果 (10) 五、实验总结和讨论 (19) 实验三:16QAM的调制与解调 (20) 一、实验目的 (20) 二、实验要求 (20) 三、实验原理 (20) 四、实验步骤和结果 (21) 五、实验总结和讨论 (33) 心得体会和实验建议 (34)

实验一:抽样定理 一、 实验目的 1. 掌握抽样定理。 2. 通过时域频域波形分析系统性能。 二、 实验要求 改变抽样速率观察信号波形的变化。 三、 实验原理 一个频率限制在0f 的时间连续信号()m t ,如果以0 12S T f 的间隔进行等间隔均匀抽样,则()m t 将被所得到的抽样值完全还原确定。 四、 实验步骤和结果 1. 按照图1.4.1所示连接电路,其中三个信号源设置频率值分别为10Hz 、15Hz 、20Hz ,如图1.4.2所示。 图1.4.1 连接框图

图1.4.2 信号源设置,其余两个频率值设置分别为15和20 2.由于三个信号源最高频率为20Hz,根据奈奎斯特抽样定理,最低抽样频率应 为40Hz,才能恢复出原信号,所以设置抽样脉冲为40Hz,如图1.4.3。 图1.4.3 抽样脉冲设置 3.之后设置低通滤波器,设置数字低通滤波器为巴特沃斯滤波器(其他类型的 低通滤波器也可以,影响不大),截止频率设置为信号源最高频率值20Hz,如图1.4.4。

计算机网络课程设计实验报告

校园网的组建与应用 摘要: 本文针对实验室的设备环境,对校园网的组网方式进行了研究和模拟,并最终提出了一套完整的校园网组网方案。 实验中我们对路由器、交换机等组网基础设备进行了认真的研究。关于路由器,我们实现了本地基本配置,并分别使用路由器的串口和以太网口实现了不同网段的网络互联,对路由器静态及动态路由机制进行了探究。关于交换机,我们实现了VLAN的划分以及不同VLAN间的相互通信,对广播风暴现象的产生原理及解决方案进行了特定的实验。综合两者的功能,我们对多种网络拓扑结构进行了分析,讨论和改进。最后通过实验和模拟提出了一套完整的校园网组建方案。 在此方案中,我们在实现了网络互通的情况下,我们进行了IP地址的划分,IP地址利用DHCP进行自动分配。并根据模拟实际,对不同的主机进行VLAN划分,同时保证不同VLAN间的相互访问与特定VLAN的保护与单向访问。同时构建内部防火墙保证校园网与外部的安全访问。构建了完整可靠的网络之后,依据校园网的功能和服务需求,我们搭建了FTP服务器,用于提供基础的网络服务。 限于实验室条件的限制,我们的方案并不是完全能够适用于现实的。但是,通过实验使我们对校园网乃至更大的网络有了更加深刻的了解。

目录

一、前言 随着信息的调整膨胀,全球信息已经进入以计算机网络为核心的时代。作为科技先导的教育行业,计算机校园网已是教育进行科研和现代化管理的重要手段。近几年、校园网已经取得很大的发展,中国教育科研网投入运营,全国多所高校校园网络开通联网。 随着学校教育手段的现代化,很多学校已经逐渐开始将学校的管理和教学过程向电子化方向发展,校园网的有无以及水平的高低也将成为评价学校及学生选择学校的新的标准之一,此时,校园网上的应用系统就显得尤为重要。一方面,学生可以通过它在促进学习的同时掌握丰富的计算机及网络信息知识,毫无疑问,这是学生综合素质中极为重要的一部分;另一方面,基于先进的网络平台和其上的应用系统,将极大的促进学校教育的现代化进程,实现高水平的教学和管理。 学校目前正加紧对信息化教育的规划和建设。开展的校园网络建设,旨在推动学校信息化建设,其最终建设目标是将建设成为一个借助信息化教育和管理手段的高水平的智能化、数字化的教学园区网络,最终完成统一软件资源平台的构建,实现统一网络管理、统一软件资源系统,并保证将来可扩展骨干网络节点互联带宽为10G,为用户提供高速接入网络,并实现网络远程教学、在线服务、教育资源共享等各种应用;利用现代信息技术从事管理、教学和科学研究等工作。最终达到在网络方面,更好的对众多网络使用及数据资源的安全控制,同时具有高性能,高效率,不间断的服务,方便的对网络中所有设备和应用进行有效的时事控制和管理。 二、综述 2.1 概述 从物理意义上来说,校园网就是一种局域网。校园网是各类型网络中一大分支,有着非常广泛的应用及代表性。作为新技术的发祥地,学校、尤其是高等院校,和网络的关系是密不可分的。作为“高新技术孵化器”的高校,是知识、人才的高地,资源十分丰富,比其他行业更渴求网络新技术、网络新应用,

北邮微波实验报告整理版

北京邮电大学信息与通信工程学院 微波实验报告 班级:20112111xx 姓名:xxx 学号:20112103xx 指导老师:徐林娟 2014年6月

目录 实验二分支线匹配器 (1) 实验目的 (1) 实验原理 (1) 实验内容 (1) 实验步骤 (1) 单支节 (2) 双支节 (7) 实验三四分之一波长阻抗变换器 (12) 实验目的 (12) 实验原理 (12) 实验内容 (13) 实验步骤 (13) 纯电阻负载 (14) 复数负载 (19) 实验四功分器 (23) 实验目的 (23) 实验原理 (23) 实验内容 (24) 实验步骤 (24) 公分比为1.5 (25) 公分比为1(等功分器) (29) 心得体会 (32)

201121111x 班-xx 号-xx ——电磁场与微波技术实验报告 实验二 分支线匹配器 实验目的 1.熟悉支节匹配器的匹配原理 2.了解微带线的工作原理和实际应用 3.掌握Smith 图解法设计微带线匹配网络 实验原理 支节匹配器是在主传输线上并联适当的电纳(或者串联适当的电抗),用附加的反射来抵消主传输线上原来的反射波,以达到匹配的目的。 单支节匹配器,调谐时主要有两个可调参量:距离d 和由并联开路或短路短截线提供的电纳。匹配的基本思想是选择d ,使其在距离负载d 处向主线看去的导纳Y 是Y0+jB 形式。然后,此短截线的电纳选择为-jB ,根据该电纳值确定分支短截线的长度,这样就达到匹配条件。 双支节匹配器,通过增加一个支节,改进了单支节匹配器需要调节支节位置的不足,只需调节两个分支线长度,就能够达到匹配(但是双支节匹配不是对任意负载阻抗都能匹配的,即存在一个不能得到匹配的禁区)。 微带线是有介质εr (εr >1)和空气混合填充,基片上方是空气,导体带条和接地板之间是介质εr ,可以近似等效为均匀介质填充的传输线,等效介质电常数为 εe ,介于1和εr 之间,依赖于基片厚度H 和导体宽度W 。而微带线的特性阻抗与其等效介质电常数为εe 、基片厚度H 和导体宽度W 有关。 实验内容 已知:输入阻抗Z 75in ,负载阻抗Z (6435)l j ,特性阻抗0Z 75 ,介质基片 2.55r ,1H mm 。 假定负载在2GHz 时实现匹配,利用图解法设计微带线单支节和双支节匹配网络,假设双支节网络分支线与负载的距离114d ,两分支线之间的距离为21 8 d 。画出几种可能的电路图并且比较输入端反射系数幅度从1.8GHz 至2.2GHz 的变化。 实验步骤 1.根据已知计算出各参量,确定项目频率。 2.将归一化阻抗和负载阻抗所在位置分别标在Smith 圆上。 3.设计单枝节匹配网络,在图上确定分支线与负载的距离以及分支线的长度,根据给定的介质基片、特性阻抗和频率用TXLINE 计算微带线物理长度和宽度。此处应该注意电长度和实际长度的联系。 4.画出原理图,在用微带线画出基本的原理图时,注意还要把衬底添加到图中,将各部分的参数填入。注意微带 分支线处的不均匀性所引起的影响,选择适当的模型。 5.负载阻抗选择电阻和电感串联的形式,连接各端口,完成原理图,并且将项目的频率改为1.8—2.2GHz 。 6.添加矩形图,添加测量,点击分析,测量输入端的反射系数幅值。 7.同理设计双枝节匹配网络,重复上面的步骤。

北邮电路综合实验报告——串行口数据传输的仿真及硬件实现

北京邮电大学 信息与通信工程学院 电路综合实验报告 串行口数据传输的仿真及硬件实现 姓名: 学号: 班内序号: 班级: 指导老师: 日期:2014年10月10日

摘要: 本实验模拟了现代数字逻辑电路中的数据传输过程。使用连续的代表0、1的高低电平作为数字信号,将该数字信号从输出端发送到接收端,并分别用串行、并行两种方式进行锁存,检测。本实验模拟了序列信号的发生装置、串并转换装置、串行并行两种方式的检测装置、锁存输出和控制电路,实现了一个简单的串行口数据传输模型。在此试验中,通过对常见芯片的组合实现功能,将一串由0、1组成的数字信号进行传输、转换、检测,使之显示在数码管上成为可读信息。并且,还实现了对此电路显示的控制,使数码管在满足条件的情况下才点亮。在实验中,还使用了Qua rtusⅡ对设计的电路进行了仿真模拟。 关键字: 数据传输、串并转换、数据检测、QuartusII Abstract: This experiment simulated data transfer in modern digital logic circuit. Digital signal was transferred from the output terminal to the receiving end, which was consisted of

continuous high or low level represent 0 and 1 as digital signal, and latch, test it through serial or parallel mode. Our experiment simulated the producing equipment of sequence signal, the signal conversion module, testing module of serial and parallel mode, latch output and control circuit. It implements a simple serial port data communication model. In the experiment, we use the combination of simple chips to realize the function that transport, transfer and test a sequence of the digital signal consisting of 0 and 1, and display it on LED Segment Displays. In addition, we realize the control of display. The LED Segment Displays works only in specific conditions. We also conduct simulations on QuartusⅡ. Keywords: Data transmission, String conversion, Data detection, Quartus II 目录 一、实验目的 (4)

北京邮电大学数字电路实验报告

北京邮电大学 数字电路与逻辑设计实验 实验报告 实验名称:QuartusII原理图输入 法设计与实现 学院:北京邮电大学 班级: 姓名: 学号:

一.实验名称和实验任务要求 实验名称:QuartusII原理图输入法设计与实现 实验目的:⑴熟悉用QuartusII原理图输入法进行电路设计和仿真。 ⑵掌握QuartusII图形模块单元的生成与调用; ⑶熟悉实验板的使用。 实验任务要求:⑴掌握QuartusII的基础上,利用QuartusII用逻辑 门设计实现一个半加器,生成新的半加器图像模 块。 ⑵用实验内容(1)中生成的半加器模块以及逻辑门 实现一个全加器,仿真验证其功能,并能下载到实 验板上进行测试,要求用拨码开关设定输入信号, 发光二级管显示输出信号。 ⑶用3线—8线译码器(74L138)和逻辑门实现要求 的函数:CBA F+ C + =,仿真验证其 + B C B A A A B C 功能,,并能下载到实验板上进行测试,要求用拨 码开关设定输入信号,发光二级管显示输出信号。二.设计思路和过程 半加器的设计实现过程:⑴半加器的应有两个输入值,两个输出值。 a表示加数,b表示被加数,s表示半加和, co表示向高位的进位。

⑵由数字电路与逻辑设计理论知识可知 b a s ⊕=;b a co ?= 选择两个逻辑门:异或门和与门。a,b 为异 或门和与门的输入,S 为异或门的输出,C 为与门的输出。 (3)利用QuartusII 仿真实现其逻辑功能, 并生成新的半加器图形模块单元。 (4)下载到电路板,并检验是否正确。 全加器的设计实现过程:⑴全加器可以由两个半加器和一个或门构 成。全加器有三个输入值a,b,ci ,两个输 出值s,co :a 为被加数,b 为加数,ci 为低 位向高位的进位。 ⑵全加器的逻辑表达式为: c b a s ⊕⊕= b a ci b a co ?+?⊕=)( ⑶利用全加器的逻辑表达式和半加器的逻 辑功能,实现全加器。 用3线—8线译码器(74L138)和逻辑门设计实现函数 CBA A B C A B C A B C F +++= 设计实现过程:⑴利用QuartusII 选择译码器(74L138)的图形模块

北邮《现代通信技术》实验报告一

现代通信技术实验报告 班级: 2012211110 学号: 2012210299 姓名:未可知

在学习现代通信技术实验课上,老师提到的一个词“通信人”警醒了我,尽管当初填报志愿时选择了通信工程最终也如愿以偿,进入大三,身边的同学忙着保研、考研、出国、找工作,似乎大家都为了分数在不懈奋斗。作为一个北邮通信工程的大三学生,我也不断地问自己想要学习的是什么,找寻真正感兴趣的是什么,通信这个行业如此之大,我到底适合什么。本学期,现代通信技术这本书让我了解到各种通信技术的发展和规划,也让我对“通信人”的工作有了更深刻的认识。 一、通信知识的储备 《现代通信技术》第一页指出,人与人之间通过听觉、视觉、嗅觉、触觉等感官,感知现实世界而获取信息,并通过通信来传递信息。所谓信息,是客观事物状态和运动特征的一种普遍形式,客观世界中大量地存在、产生和传递着以这些方式表示出来的各种各样的信息。信息的目的是用来“消除不可靠的因素”,它是物质运动规律总和。因此,我们通信人的任务就是利用有线、无线等形式来将信息从信源传递到信宿,在传输过程中保证通信的有效性和可靠性。 而具体来讲,要实现信息传递,通信网是必需的通信体系,其中通信网分层的结构形式需要不同的支撑技术,包括业务网技术,向用户提供电话、电报、数据、图像等各种电信业务的网络;介入与传送网技术,实现信息由一个点传递到另一个点或一些点的功能。对此,我们通信工程专业学习课程的安排让我们一步步打下基础,建立起知识储备。 知识树如下: 如知识树所述,通信工程课程体系可以大致分为一下6类基础:

数学基础:工科数学分析,线性代数,复变函数,概率论基础,随机过程; 电路基础:电路分析,模拟电子技术,数字逻辑电路,通信电子电路; 场与波基础:电磁场与电磁波,微波技术,射频与天线; 计算机应用能力:C 语言程序设计,微机原理与接口技术,计算机网络,数据结构,面向对象程序设计,实时嵌入式系统 信号处理类课程:信号与系统,信号处理,图像处理,DSP 原理及应用; 通信类课程:通信原理,现代通信技术,信息论基础,移动通信,光纤通信等。 从大一开始学习的工科数学分析,大学物理,大学计算机基础等课程为基础类课程,旨在培养我们的语言能力,数学基础,物理基础,计算机能力,然后逐步加大难度,细化课程,方向逐渐明朗详细。同时,课程中加入了各种实验,锻炼了我们的动手能力。 二、通信知识的小小应用 实验课上老师说过,以我们所学的知识已经可以制作简单通信的手机的草图了,我对此跃跃欲试。经过思考和调研,以下是我对于简单手机设计的原理框图和思考结果。 一部手机的结构包括接收机、发射机、中央控制模块、电源和人机界面部分,如下图 手机结构设计图 电路部分包括射频和逻辑音频电路部分,射频电路包括从天线到接收机的解调输出,与发射的I/O 调制到功率放大器输出的电路。其中,射频接收电路完成接收信号的滤波、信号放大、解调等功能;射频发射电路完成语音基带信号的调制、变频、功率放大等功能。要用到的超外差接收机、混频器、鉴相器等在《通信电子电路》书本中的知识。逻辑音频包括从接收解调到接收音频输出、送话器电路到发射I/O 调制器及逻辑电路部分的中央处理单元、数字语音处理及各种存储器电路。由核心控制模块CPU 、EEPROM 、 FLASH 、SRAM 等部分组成,一个基本 天线 接收机 发射机 频率合成 电源 逻 辑 音 频 人 机 交 互

北邮移动通信实验报告

信息与通信工程学院移动通信实验报告 班级: 姓名: 学号: 序号: 日期:

一、实验目的 1移动通信设备观察实验 1.1RNC设备观察实验 a) 了解机柜结构 b) 了解RNC机框结构及单板布局 c) 了解RNC各种类型以及连接方式 1.2基站设备硬件观察实验 a) 初步了解嵌入式通信设备组成 b) 认知大唐移动基站设备EMB5116的基本结构 c) 初步分析硬件功能设计 2网管操作实验 a) 了解OMC系统的基本功能和操作 b) 掌握OMT如何创建基站 二、实验设备 TD‐SCDMA移动通信设备一套(EMB5116基站+TDR3000+展示用板卡)、电脑。 三、实验内容 1TD-SCDMA系统认识 TD-SCDMA是英文Time Division-Synchronous Code Division Multiple Access(时分同步码分多址)的简称,TD-SDMA是由中国提出的第三代移动通信标准(简称3G),也是ITU批准的三个3G标准中的一个,以我国知识产权为主的、被国际上广泛接受和认可的无线通信国际标准。是我国电信史上重要的里程碑。 TD-SCDMA在频谱利用率、业务支持灵活性、频率灵活性及成本等方面有独特优势。TD-SCDMA由于采用时分双工,上行和下行信道特性基本一致,因此,基站根据接收信号估计上行和下行信道特性比较容易。TD-SCDMA使用智能天线技术有先天的优势,而智能天线技术的使用又引入了SDMA的优点,可以减少用户间干扰,从而提高频谱利用率。TD-SCDMA还具有TDMA的优点,可以灵活设置

上行和下行时隙的比例而调整上行和下行的数据速率的比例,特别适合因特网业务中上行数据少而下行数据多的场合。但是这种上行下行转换点的可变性给同频组网增加了一定的复杂性。TD-SCDMA是时分双工,不需要成对的频带。因此,和另外两种频分双工的3G标准相比,在频率资源的划分上更加灵活。 图1 3G网络架构 2硬件认知 2.1 RNC设备认知 TDR3000整套移动通信设备机框外形结构如图2所示。

北邮arduino实验报告

电子电路综合实验设计 实验名称: 基于 Arduino 的电压有效值测量电路设计与实现 学院: 班级: 学号: 姓名: 班内序号:

实验 基于Arduino 的电压有效值测量电路设计与实现 一. 摘要 Arduino是一个基于开放原始码的软硬件平台,可用来开发独立运作、并具互动性的电子产品,也可以开发与PC 相连的周边装置,同时能在运行时与PC 上的软件进行交互。为了测量正弦波电压有效值,首先我们设计了单电源供电的半波整流电路,并进行整流滤波输出,然后选择了通过Arduino设计了读取电压有效值的程序,并实现使用此最小系统来测量和显示电压有效值。在频率和直流电压幅度限定在小范围的情况下,最小系统的示数基本和毫伏表测量的值相同。根据交流电压有效值的定义,运用集成运放和设计的Arduino最小系统的结合,实现了运用少量元器件对交流电压有效值的测量。 关键字:半波整流整流滤波 Arduino最小系统读取电压有效值 二. 实验目的 1、熟悉Arduino 最小系统的构建和使用方法; 2、掌握峰值半波整流电路的工作原理; 3、根据技术指标通过分析计算确定电路形式和元器件参数; 4、画出电路原理图(元器件标准化,电路图规范化); 5、熟悉计算机仿真方法; 6、熟悉Arduino 系统编程方法。 三. 实验任务及设计要求 设计实现 Arduino 最小系统,并基于该系统实现对正弦波电压有效值的测量和显示。 1、基本要求 (1)实现Arduino 最小系统,并能下载完成Blink 测试程序,驱动Arduino 数字13 口LED 闪烁; (2)电源部分稳定输出5V 工作电压,用于系统供电; (3)设计峰值半波整流电路,技术指标要求如下:

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

数据结构 哈夫曼编码 实验报告

数据结构实验报告 实验名称:实验3——树(哈夫曼编/解码器) 学生姓名: 班级: 班内序号: 学号: 日期:2011年12月5日 1.实验要求 利用二叉树结构实现哈夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个字符的频 度,并建立哈夫曼树 2、建立编码表(CreateTable):利用已经建好的哈夫曼树进行编码,并将每个字符的 编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的字符串输 出。 4、译码(Decoding):利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出 译码结果。 5、打印(Print):以直观的方式打印哈夫曼树(选作) 计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果。 并用I love data Structure, I love Computer。I will try my best to study data Structure.进行测试。 2. 程序分析 哈夫曼树结点的存储结构包括双亲域parent,左子树lchild,右子树rchild,还有字符word,权重weight,编码code 对用户输入的信息进行统计,将每个字符作为哈夫曼树的叶子结点。统计每个字符出现的次数作为叶子的权重,统计次数可以根据每个字符不同的ASCII码,根据叶子结点的权重建立一个哈夫曼树。 建立每个叶子的编码从根结点开始,规定通往左子树路径记为0,通往右子树路径记为1。由于编码要求从根结点开始,所以需要前序遍历哈夫曼树,故编码过程是以前序遍历二叉树为基础的。同时注意递归函数中能否直接对结点的编码域进行操作。 编码信息只要遍历字符串中每个字符,从哈夫曼树中找到相应的叶子结点,取得相应的编码。最后再将所有找到的编码连接起来即可。 译码则是将编码串从左到右逐位判别,直到确定一个字符。这就是哈夫曼树的逆过程。

北京邮电大学电路实验报告-(小彩灯)

北京邮电大学电路实验报告-(小彩灯)

电子电路综合实验报告课题名称:基于运算放大器的彩灯显示电路的设计与实现 姓名:班级:学号: 一、摘要: 运用运算放大器设计一个彩灯显示电路,通过迟滞电压比较器和反向积分器构成方波—三角波发生器,三角波送入比较器与一系列直流电平比较,比较器输出端会分别输出高电平和低电平,从而顺序点亮或熄灭接在比较器输出端的发光管。 关键字: 模拟电路,高低电平,运算放大器,振荡,比较 二、设计任务要求: 利用运算放大器LM324设计一个彩灯显示电路,让排成一排的5个红色发光二极管(R1~R5)重复地依次点亮再依次熄灭(全灭→R1→R1R2→R1R2R3→R1R2R3R4→R1R2R3R4R5→R1R2R3R4→R1R2R3→R1R2→R1→全灭),同时让排成一排的6个绿色发光二极管(G1~G6)单光

三角波振荡电路可以采用如图2-28所示电路,这是一种常见的由集成运算放大器构成的方波和三角波发生器电路,图2-28中运放A1接成迟滞电压比较器,A2接成反相输入式积分器,积分器的输入电压取自迟滞电压比较器的输出,迟滞电压比较器的输入信号来自积分器的输出。假设迟滞电压比较器输出U o1初始值为高电平,该高电平经过积分器在U o2端得到线性下降的输出信号,此线性下降的信号又反馈至迟滞电压比较器的输入端,当其下降至比较器的下门限电压U th-时,比较器的输出发生跳变,由高电平跳变为低电平,该低电平经过积分器在U o2端得到线性上升的输出信号,此线性上升的信号又反馈至迟

滞电压比较器的输入端,当其上升至比较器的上门限电压U th+时,比较器的输出发生跳变,由低电平跳变为高电平,此后,不断重复上述过程,从而在迟滞电压比较器的输出端U o1得到方波信号,在反向积分器的输出端U o2得到三角波信号。假设稳压管反向击穿时的稳定电压为U Z,正向导通电压为U D,由理论分析可知,该电路方波和三角波的输出幅度分别为: 式(5)中R P2为电位器R P动头2端对地电阻,R P1为电位器1端对地的电阻。 由上述各式可知,该电路输出方波的幅度由稳压管的稳压值和正向导通电压决定,三角波的输 出幅度决定于稳压管的稳压值和正向导通电压以及反馈比R1/R f,而振荡频率与稳压管的稳压值和正向导通电压无关,因此,通过调换具有不同稳压值和正向 导通电压的稳压管可以成比例地改变方波和三角波的幅度而不改变振荡频率。 电位器的滑动比R P2/R P1和积分器的积分时间常数R2C的改变只影响振荡频率而 不影响振荡幅度,而反馈比R1/R f的改变会使振荡频率和振荡幅度同时发生变化。因此,一般用改变积分时间常数的方法进行频段的转换,用调节电位器滑动头 的位置来进行频段内的频率调节。

电子琴的实验报告

单片机课程设计 设计题目电子琴 指导老师:苏 参与实验者:moxiaoxiao 专业:统本电信0801 地点:3#楼北楼605 电子琴 一.设计目的: (1).培养综合运用知识的能力 (2).朋友查阅资料,使用工程设计标准及编写设计文档的能力. (3).掌握单片机应用系统的设计方法. (4).提高计算机绘图能力 二.设计任务: 利用DP51PROC实验系统上的定时器/计数器,按键和蜂鸣器单元。用单片机I/O 口线控制蜂鸣器发出不同的音调,程序检测按键状态,7个按键中某一键按下时,蜂鸣器对应标称音阶. 三.设计与调试环境 KEIL uVision2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM ,汇编和 C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。 1:按下面的步骤建立一个项目: 图1-4 选取芯片 图1-5 新建程序文件 (1)点击图1-5 中的 3 保存新建的程序,也可以用菜单File-Save 或快捷键Ctrl+S 进行保存。因是新文件所以保存时会弹出类似图1-3 的文件操作窗口,我们把第一个程序命名为,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明KEIL 的 C 语法检查生效了。如图1-6 鼠标在屏幕左边的Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。我们选“Add File t o Group ‘SourceGroup 1’”弹出文件窗口,选择刚刚保存的文件,按ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。 图1-6 把文件加入到项目文件组中 编译程序 (2)进入调试模式,软件窗口样式大致如图1-8 所示。图中1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按

北邮-电子电路综合设计实验(函数信号发生器)报告

电子电路综合设计实验报告 实验1 函数信号发生器的设计与实现 姓名:------ 学号:---------- 班内序号:--

一. 实验名称: 函数信号发生器的设计与调试 二.实验摘要: 采用运放组成的积分电路产生方波-三角波,可得到比较理想的方波和三角波。根据所需振荡频率的高低和对方波前后沿陡度的要求以及对所需方波、三角波的幅度可以确定合适的运放以及稳压管的型号、所需电阻的大小和电容的值。三角波-正弦波的转换是利用差分放大器来完成的,选取合适的滑动变阻器来调节三角波的幅度以及电路的对称性。同时利用隔直电容、滤波电容来改善输出正弦波的波形。 关键词: 方波三角波正弦波频率可调 三、设计任务要求 1.基本要求: (1)输出频率能在1-10KHz范围内连续可调,无明显失真; (2)方波输出电压Uopp=12V,上升、下降沿小于10us,占空比可调范围30%-70%; (3)三角波Uopp=8V; (4)正弦波Uopp错误!未找到引用源。1V. (5)设计该电路的电源电路(不要求实际搭建) 2.提高要求: (1)正弦波、三角波和方波输出波形的峰峰值Uopp均可在1V-10V内连续可调。 (2)三种输出波形的输出端口的输出阻抗小于100Ω。 (3)三种波形从同一端口输出,并能够显示当前输出信号的种类、大小和频率 (4)用CPLD设计DDS信号源 (5)其他函数信号发生器的设计方案 四、设计思路以及总体结构框图 本课题中函数发生器结构组成如下所示:由比较器和积分器组成方波—三角波产生电

路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。 图4-1 函数信号发生器的总体框图 五.分块电路和总体电路的设计 (1)方波——三角波产生电路 图5-1 方波-三角波产生电路

北邮程序设计实验报告

程序设计实践 设 计 报 告 课题名称:邮件客户端学生姓名: 班级: 2 班内序号:16 学号: 2 日期:2014.6.4

1.课题概述 1.1课题目标和主要内容 本课题主要通过MFC的方式,利用SOCKET以及SMTP相关知识,来实现邮件(可携带附件)的定向发送,借此来复习和巩固C++编程的基本思想;学习SOCKET以及SMTP的相关知识,了解复杂网络应用程序的设计方法,并独立完成一个网络应用。 1.2系统的主要功能 1.邮件的发送(不携带附件) 2.邮件的发送(携带附件) 3.邮件接收 2. 系统设计 2.1 系统总体框架 程序的功能由MyEmailClientDlg.cpp,SMTP.cpp,MailMessage.cpp,Base64.cpp, MIMECode.cpp,MIMEContentAgent.cpp,MIMEMessage.cpp,AppOctetStream.cpp, MyEmailClient.cpp,StdAfx.cpp,TextPlain.cpp来实现。其中MIMECode.cpp, MIMEContentAgent.cpp,MIMEMessage.cpp, AppOctetStream.cpp, TextPlain.cpp来对MIME 协议进行封装,Base64.cpp来对Base64编码进行封装,SMTP.cpp是对SMTP协议进行封装,MailMessage.cpp是利用MIME协议对邮件内容的一个处理,最终通过MyEmailClientDlg.cpp 来实现邮件的发送的功能。 2.2 系统详细设计 [1] 模块划分图及描述 协议模块:包括网络应用程序中的各种协议,包括STMP协议,MIME协议等。 处理模块:主要实现对数据的进行编码以及解码。 实现模块:主要内容为邮件发送的具体步骤,相关按钮操作。 [2] 类关系图及描述 协议类:CSMTP, CTEXTPlai, CMIMECode,C MIMEContentAgent,C MIMEMessage, CAppOctetStream, CTextPlain.主要为协议中信息处理的中作用 编码类:Base64, MailMessage.主要为对邮件信息的处理

相关主题