当前位置:文档之家› 基于IOCP模型的通信程序设计

基于IOCP模型的通信程序设计

基于IOCP模型的通信程序设计
基于IOCP模型的通信程序设计

实验__6__实验报告

教学班级: 0312401 学生学号: 031240111 学生姓名: 张齐乐

实验6 基于IOCP模型的通信程序设计

一.实验目的:

1.掌握IOCP模型下的多线程服务器及客户端设计

2、掌握socket通信中接收数据时包处理的方法(粘连包处理)及发送数据的处理方法二.实验内容

1.设计一个IOCP模型的TCP协议的服务和客户端,实现聊天室程序

三.实验要求

1. 写出程序,并调试程序,要给出测试数据和实验结果。

2. 整理上机步骤,总结经验和体会。

3. 完成实验报告和上交程序。

四实验步骤

1、实现Winsock库文件的装入和释放;

2、封装CInitSock类,为了每次写网络程序都可以方便的装载和释放Winsock库;

3、建立一个基于对话框的MFC工程;

4、将控件拖放到合适的位置,绘制一个简易界面;

5、用IDE实现控件相关的函数和类;

6、设计和编程是实现线程类;

7、设计和编码实现重叠IO模型的包管理类;

8、设计和编码实现内存管理类;

9、设计和编码实现业务类

10、自定义协议;

11、实现简易的基于IOCP模型的服务器;

五实验代码

#pragma once

#include "Business.h"

#include

#include "OverlapPacketManager.h"

#include "SocketManager.h"

class CIOCP {

public:

void PrintState();

void ProcessPacket(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket, DWORD dwTrans, BOOL bOK);

BOOL PostSend(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket);

BOOL PostRecv(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket);

BOOL PostAccept(OVERLAP_PACKET *pPacket);

void Shutdown();

BOOL Start(CBusiness *pBusiness,char *pcIP="127.0.0.1",int nPort = 4567, int nMaxConnections = 2000,int nMaxFreeBuffers = 200, int nInitialReads = 4 );

CIOCP();

virtual ~CIOCP();

CBusiness *m_pBusiness; //业务对象

COverlapPacketManager m_PacketManager;

CSocketManager m_SocketManager;

private:

void ProcessSocketError(COvlapSocket *pSocket,char *pPosition);

void ProcessAcceptPacket(OVERLAP_PACKET *pPacket);

char m_strIP[20];

int m_iPort;

HANDLE m_hCompletion;

HANDLE m_hWorkingThreadHandle; //服务线程句柄

HANDLE m_hSocketmanagehandle; //套接字连接管理线程

BOOL m_bServerStarted;

BOOL m_bShutDown;

int m_nMaxSends;

SOCKET m_sListen; //监听套接字句柄

LPFN_ACCEPTEX m_lpfnAcceptEx; // AcceptEx函数地址

LPFN_GETACCEPTEXSOCKADDRS m_lpfnGetAcceptExSockaddrs; // GetAcceptExSockaddrs函数地址

static DWORD WINAPI WorkingThreadProc(LPVOID lpParam);

};

// IOCP.cpp: implementation of the CIOCP class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "IOCP.h"

#include "mstcpip.h"

#pragma comment(lib, "WS2_32.lib")

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

#define LISTEN_SOCKET_COMPLITION_KEY 0 //监听套接字的ComplitionKey #define COMPLITION_QUIT_MSG_TRANS -1 //通知退出完成端口消息

#define OVERLAP_TIMEOUT 1000000 //超时时间24小时 86400000 extern bool g_bDebug; //调试模式

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CIOCP::CIOCP(){

// 初始化WS2_32.dll

m_bServerStarted=false;

m_nMaxSends = 500;

WSADATA wsaData;

WORD sockVersion = MAKEWORD(2, 2);

::WSAStartup(sockVersion, &wsaData);

}

CIOCP::~CIOCP(){

Shutdown();

if(INV ALID_SOCKET != m_sListen ){

::closesocket(m_sListen);

m_sListen=INV ALID_SOCKET;

}

::WSACleanup();

}

BOOL CIOCP::Start(CBusiness *pBusiness,char *pcIP, int nPort, int nMaxConnections, int nMaxFreeBuffers, int nInitialReads){

// 检查服务是否已经启动

if(m_bServerStarted){

return FALSE;

}

if(!pBusiness){

TRACE0("未设置业务对象");

return false;

}

m_pBusiness=pBusiness;

strcpy(m_strIP,pcIP);

m_iPort=nPort;

// 创建监听套节字,绑定到本地端口,进入监听模式

m_sListen = ::WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,

WSA_FLAG_OVERLAPPED);

if( INV ALID_SOCKET == m_sListen){

TRACE1("创建监听套接字出错,errCode=%d",WSAGetLastError());

return false;

}

SOCKADDR_IN si;

si.sin_family = AF_INET;

si.sin_port = ::ntohs(m_iPort);

si.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

if(bind(m_sListen, (sockaddr*)&si, sizeof(si)) == SOCKET_ERROR){

TRACE1("绑定套接字出错,errCode=%d",WSAGetLastError());

return FALSE;

}

listen(m_sListen, 200);

m_hCompletion =CreateIoCompletionPort(INV ALID_HANDLE_V ALUE, 0, 0, 0);

// 加载扩展函数AcceptEx

GUID GuidAcceptEx = WSAID_ACCEPTEX;

DWORD dwBytes;

::WSAIoctl(m_sListen,SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidAcceptEx, sizeof(GuidAcceptEx),

&m_lpfnAcceptEx,sizeof(m_lpfnAcceptEx), &dwBytes,NULL, NULL);

// 加载扩展函数GetAcceptExSockaddrs

GUID GuidGetAcceptExSockaddrs = WSAID_GETACCEPTEXSOCKADDRS;

::WSAIoctl(m_sListen,SIO_GET_EXTENSION_FUNCTION_POINTER,&GuidGetAcceptExSo ckaddrs,

sizeof(GuidGetAcceptExSockaddrs),&m_lpfnGetAcceptExSockaddrs,sizeof(m_lpfnGetAcceptEx Sockaddrs),

&dwBytes,NULL,NULL);

// 将监听套节字关联到完成端口,注意,这里为它传递的CompletionKey为0

::CreateIoCompletionPort((HANDLE)m_sListen, m_hCompletion,

(DWORD)LISTEN_SOCKET_COMPLITION_KEY, 0);

for(int i=0;i< 5;i++){

if(!PostAccept(m_PacketManager.GetAcceptPacket(i) )){

TRACE1("投递接收请求包失败,Code=%d",WSAGetLastError());

}

}

m_hWorkingThreadHandle = ::CreateThread(NULL, 0,WorkingThreadProc, this, 0, NULL);

// 初始化状态变量

m_bShutDown = FALSE;

m_bServerStarted = TRUE;

//启动清理线程

//m_hSocketmanagehandle = ::CreateThread(NULL,0,WorkingThreadProc, this, 0, NULL); return true;

}

void CIOCP::Shutdown(){

if(!m_bServerStarted){

return;

}

m_bShutDown = TRUE;

closesocket(m_sListen); //关闭监听套接字

m_sListen=INV ALID_SOCKET;

m_SocketManager.CloseAllConnections(); // 关闭所有连接

Sleep(500); //给服务线程一个处理已有重叠包退出的缓冲时间

// 通知I/O处理线程退出

if(!PostQueuedCompletionStatus(m_hCompletion,COMPLITION_QUIT_MSG_TRANS,LISTEN

_SOCKET_COMPLITION_KEY,NULL)){

TRACE0("发送退出命令出错");

}

// 等待I/O处理线程退出

WaitForSingleObject(m_hWorkingThreadHandle,10000);

PrintState(); //打印包管理器的状态

CloseHandle(m_hCompletion);

CloseHandle(m_hWorkingThreadHandle);

m_bServerStarted = FALSE;

}

BOOL CIOCP::PostAccept(OVERLAP_PACKET *pPacket){

pPacket->nOperation = OP_ACCEPT; // 设置I/O类型

ZeroMemory(pPacket,sizeof(WSAOVERLAPPED));

// 投递此重叠I/O

DWORD dwBytes;

pPacket->sClient = ::WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,

WSA_FLAG_OVERLAPPED);

BOOL b = m_lpfnAcceptEx(m_sListen, pPacket->sClient,pPacket->buff,

0, sizeof(sockaddr_in) + 16, sizeof(sockaddr_in) + 16,

&dwBytes,&pPacket->ol);

if(!b && WSA_IO_PENDING != ::WSAGetLastError()){

int i;

TRACE1("PostAccept Error: %d",i=WSAGetLastError());

return FALSE;

}

return TRUE;

}

BOOL CIOCP::PostRecv(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket){ pPacket->nOperation = OP_READ;

ZeroMemory(pPacket,sizeof(WSAOVERLAPPED));

pPacket->nLen = OVERLAP_PACKET_BUFFER_SIZE;

// 投递此重叠I/O

DWORD dwBytes;

DWORD dwFlags = 0;

WSABUF buf;

buf.buf = pPacket->buff;

buf.len = pPacket->nLen;

pPacket->sClient=pSocket->hSocket;

if(::WSARecv(pSocket->hSocket, &buf, 1, &dwBytes, &dwFlags, &pPacket->ol, NULL) != NO_ERROR){

if(WSA_IO_PENDING != WSAGetLastError()){

TRACE1("WSARecv出错,ErrorCode=%d",WSAGetLastError());

return FALSE;

}

}

// 增加套节字上的重叠I/O计数和读序列号计数

pSocket->nOutstandingRecv ++;

return TRUE;

}

BOOL CIOCP::PostSend(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket){

// 跟踪投递的发送的数量,防止用户仅发送数据而不接收,导致服务器抛出大量发送操作if(pSocket->nOutstandingSend > m_nMaxSends){

TRACE0("该套接字上的未决操作超过最大值,停止发送");

return FALSE;

}

// 设置I/O类型,增加套节字上的重叠I/O计数

ZeroMemory(pPacket,sizeof(WSAOVERLAPPED));

pPacket->nOperation = OP_WRITE;

PACKET_IOCP_HEAD * pProto=(PACKET_IOCP_HEAD *)(pPacket->buff);

pProto->adjust=pPacket->buff[0]+pPacket->buff[1]+pPacket->buff[3]; //校验

// 投递此重叠I/O

DWORD dwBytes;

DWORD dwFlags = 0;

WSABUF buf;

buf.buf = pPacket->buff;

buf.len = pProto->iLength;

if(buf.len > OVERLAP_PACKET_BUFFER_SIZE){

TRACE1("Send Data Overflow %d",buf.len);

}

if(::WSASend(pSocket->hSocket, &buf, 1, &dwBytes, dwFlags, &pPacket->ol, NULL) !=

NO_ERROR){

if(::WSAGetLastError() != WSA_IO_PENDING){

TRACE1("PostSend Error %d",WSAGetLastError());

pSocket->Close(); //关掉套接字

return FALSE;

}

}

// 增加套节字上的重叠I/O计数

pSocket->nOutstandingSend ++;

return TRUE;

}

DWORD WINAPI CIOCP::WorkingThreadProc(LPVOID lpParam){

CIOCP *pThis = (CIOCP *)lpParam;

OVERLAP_PACKET *pPacket;

DWORD dwKey;

DWORD dwTrans;

DWORD dwFlags = 0;

LPOVERLAPPED lpol;

pThis->m_pBusiness->Initial(pThis);

while(TRUE)

{// 在关联到此完成端口的所有套节字上等待I/O完成

BOOL bOK = ::GetQueuedCompletionStatus(pThis->m_hCompletion,&dwTrans, (LPDWORD)&dwKey, (LPOVERLAPPED*)&lpol, OVERLAP_TIMEOUT ); //WSA_INFINITE

if(COMPLITION_QUIT_MSG_TRANS == dwTrans) // 用户通知退出{ TRACE0("Secondry 收到退出消息");

break;

}

if(!bOK){

if(NULL == lpol) //取包超时,发送探活包{

//pThis->m_pBusiness->SetClientTime();

continue;

}

else{

if(g_bDebug)

{TRACE0("GetQueuedCompletionStatus error");

}

}

}

else{

if(g_bDebug){

TRACE0("Get message!");

}

}

pPacket = CONTAINING_RECORD(lpol, OVERLAP_PACKET, ol);

//把监听套接字的处理和工作套接字的处理分开

if(OP_ACCEPT == pPacket->nOperation){

if(g_bDebug){

TRACE0("Secondry 收到连接请求");

}

if(!bOK) //失败{

if(g_bDebug){

TRACE0("GetQueuedCompletionStatus 出错");

}

if(!::WSAGetOverlappedResult(pThis->m_sListen, &pPacket->ol, &dwTrans, FALSE,

&dwFlags)){

//TRACE1("Accept Packet Error:%d",WSAGetLastError());

}

if(INV ALID_SOCKET != pPacket->sClient){

closesocket(pPacket->sClient);

pPacket->sClient = INV ALID_SOCKET;

}

}

else{

pThis->ProcessAcceptPacket(pPacket);

}

// Accept请求完成,重新投递一个接收请求包,就用原来收到的请求包,不用再申请

if(!pThis->m_bShutDown){

if(!pThis->PostAccept(pPacket)){

TRACE1("投递接收请求包失败,Code=%d",WSAGetLastError());

}

}

}

else //工作套接字{

if(!bOK){

if(LISTEN_SOCKET_COMPLITION_KEY == dwKey) //监听套接字{

//TRACE0("监听套接字出现异常出错");

break;

}

}

pThis->ProcessPacket( (COvlapSocket *)dwKey, pPacket, dwTrans, bOK); //dwkey 其实就是COvlapSocket 对象的指针

}

}

return 0;

}

//KeepAlive 全局函数

int socket_set_keepalive(int fd){

/* Set: use keepalive on fd */

int alive = 1;

if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const char *) &alive,sizeof(alive)) != 0){ TRACE1("Set keep alive error: %s.\n", strerror (errno));

return -1;

}

struct tcp_keepalive inKeepAlive = {0};

unsigned long ulInLen = sizeof(struct tcp_keepalive);

struct tcp_keepalive outKeepAlive = {0};

unsigned long ulOutLen = sizeof(struct tcp_keepalive);

unsigned long ulBytesReturn = 0;

inKeepAlive.onoff = 1;

inKeepAlive.keepaliveinterval = 5000; //两次KeepAlive探测间的时间间隔

inKeepAlive.keepalivetime = 20000; //开始首次KeepAlive探测前的TCP空闭时间

if (WSAIoctl(fd, SIO_KEEPALIVE_V ALS, (LPVOID)&inKeepAlive, ulInLen,

(LPVOID)&outKeepAlive, ulOutLen,

&ulBytesReturn, NULL, NULL) != 0){

TRACE1 ("Set keep alive error: %s.\n", strerror (WSAGetLastError ()));

return -1;

}

return 0;

}

void CIOCP::ProcessPacket(COvlapSocket *pSocket, OVERLAP_PACKET *pPacket, DWORD dwTrans, BOOL bOK){

// 1)首先减少套节字上的未决I/O计数

if(OP_READ == pPacket->nOperation){

pSocket->nOutstandingRecv --;

if(g_bDebug){

TRACE0("Secondry 收到Read消息");

}

}

else if(OP_WRITE == pPacket->nOperation){

pSocket->nOutstandingSend --;

if(g_bDebug)

{

TRACE0("Secondry 收到Write消息");

}

}

// 2)检查套节字是否已经被我们关闭

if(INV ALID_SOCKET == pSocket->hSocket){

//TRACE0("检查到套节字已经被我们关闭 \n");

if(0 == pSocket->nOutstandingRecv && 0 == pSocket->nOutstandingSend ){

m_pBusiness->OnConnectionClosing(pSocket);//

m_SocketManager.ReleaseSocket(pSocket);

}

// 释放已关闭套节字的未决I/O包

m_PacketManager.ReleasePacket(pPacket);

return;

}

// 3)检查套节字上发生的错误,如果有的话,通知用户,然后关闭套节字

if(!bOK){

DWORD dwTrans;

DWORD dwFlags = 0;

int nError;

if(!::WSAGetOverlappedResult(pSocket->hSocket, &pPacket->ol, &dwTrans, FALSE, &dwFlags)){

nError = ::WSAGetLastError();

TRACE1("Overlap Packet Error:%d",nError);

}

ProcessSocketError(pSocket,"NO_ERROR !=0");

m_PacketManager.ReleasePacket(pPacket);

return;

}

// 开始处理

if(OP_READ == pPacket->nOperation){

if(0 == dwTrans ) // 对方关闭套节字{

ProcessSocketError(pSocket,"OP_READ trans 0");

m_PacketManager.ReleasePacket(pPacket);

}else //成功收到数据{

pPacket->nLen = dwTrans;

OVERLAP_PACKET *pCurrentProcPacket; //当前需要处理的包

//合并包

if(pSocket->pRecvPacket) //有收到但数据不完整,未处理的包{

pCurrentProcPacket=pSocket->pRecvPacket;

pSocket->pRecvPacket=NULL; //把未处理的包从套接字上摘掉

if(OVERLAP_PACKET_BUFFER_SIZE-pCurrentProcPacket->nLen >= (int)dwTrans) //可以合并包{

memcpy(pCurrentProcPacket->buff+pCurrentProcPacket->nLen,pPacket->buff,dwTrans); pCurrentProcPacket->nLen+=dwTrans;

m_PacketManager.ReleasePacket(pPacket); //收到的包释放了

}else{

TRACE0("包太大,需要特殊处理");

}}else //原来没有未处理的包

{pCurrentProcPacket=pPacket;

}//处理包

PACKET_IOCP_HEAD *pProtocalPacket=(PACKET_IOCP_HEAD *)pCurrentProcPacket->buff; while(pCurrentProcPacket->nLen >= 4 && pProtocalPacket->iLength<=pCurrentProcPacket-

>nLen) //完整包,通知用户处理

{pSocket->SetTimeOut(); //设置Session过期时间

//头部校验,在此处我们暂时注释掉

/*if(pProtocalPacket->adjust !=byte(pCurrentProcPacket->buff[0]+pCurrentProcPacket-

>buff[1]+pCurrentProcPacket->buff[3])) //校验

{//校验出错

TRACE1("校验出错,adjust=%d",pProtocalPacket->adjust);

ProcessSocketError(pSocket,"OP_READ Adjust Error");

m_PacketManager.ReleasePacket(pPacket);

return ;

}*/

if(!m_pBusiness->OnRecvPacket(pSocket,pProtocalPacket))

{TRACE0("业务处理失败,需要断开连接,做后续处理");

ProcessSocketError(pSocket,"ProcessPacket error");

m_PacketManager.ReleasePacket(pPacket);

return;

}else //处理成功{

pCurrentProcPacket->nLen -= pProtocalPacket->iLength;

if(pCurrentProcPacket->nLen>0) //粘连包,还有数据未处理完

{memcpy(pCurrentProcPacket->buff,pCurrentProcPacket->buff+pProtocalPacket-

>iLength,pCurrentProcPacket->nLen);

}else{break;

}}}

OVERLAP_PACKET *pNextRecvPacket=NULL; //下一个用于接收数据的重叠包if(0 == pCurrentProcPacket->nLen) //包中的数据已全部处理完{pNextRecvPacket=pCurrentProcPacket;

pSocket->pRecvPacket=NULL;

}else{pSocket->pRecvPacket=pCurrentProcPacket;

pNextRecvPacket=m_PacketManager.AllocatePacket(5);

}// 继续投递一个新的接收请求

if(NULL == pNextRecvPacket || !PostRecv(pSocket, pNextRecvPacket))

{_SocketManager.ReleaseSocket(pSocket);

}else if(OP_WRITE == pPacket->nOperation)

{if(0 == wTrans) // 对方关闭套节字

{ProcessSocketError(pSocket,"OP_WRITE trans 0");

m_PacketManager.ReleasePacket(pPacket);

}else{

// 写操作完成,通知用户

pPacket->nLen = dwTrans;

//OnWriteCompleted(pSocket, pBuffer);

m_PacketManager.ReleasePacket(pPacket);

//TRACE1("Send Success ,bytes=%d",dwTrans);

}}}

void CIOCP::ProcessAcceptPacket(OVERLAP_PACKET *pPacket)

{// 为新接受的连接申请客户上下文对象

COvlapSocket *pClient = m_SocketManager.AllocateSocket(pPacket->sClient);

if(NULL == pClient) // 连接数量已满或资源不足,关闭连接

{closesocket(pPacket->sClient);

pPacket->sClient = INV ALID_SOCKET;

TRACE0("连接数达到上限,连接请求拒绝");

return;}

if(0 !=socket_set_keepalive(pPacket->sClient))

{closesocket(pPacket->sClient);

pPacket->sClient = INV ALID_SOCKET;

TRACE0("设置探活时间出错!");

return;}

// 取得客户地址

int nLocalLen, nRmoteLen;

LPSOCKADDR pLocalAddr, pRemoteAddr;

m_lpfnGetAcceptExSockaddrs(

pPacket->buff,

0,//pPacket->nLen - ((sizeof(sockaddr_in) + 16) * 2)

sizeof(sockaddr_in) + 16,

sizeof(sockaddr_in) + 16,

(SOCKADDR **)&pLocalAddr,

&nLocalLen,

(SOCKADDR **)&pRemoteAddr,

&nRmoteLen);

memcpy(&pClient->inAddress, pRemoteAddr, nRmoteLen);

// 关联新连接到完成端口对象

CreateIoCompletionPort((HANDLE)pClient->hSocket, m_hCompletion, (DWORD)pClient, 0); //DWORD GetTickCount()

pClient->SetStartTime(); //设置连接时间

m_pBusiness->OnConnectionEstablished(pClient); // 通知用户

// 向新连接投递几个Read请求,这些空间在套节字关闭或出错时释放

for(int i=0; i<3; i++)

{OVERLAP_PACKET *pPacket =

m_PacketManager.AllocatePacket(OVERLAP_PACKET_BUFFER_SIZE);

if(pPacket != NULL)

{if(!PostRecv(pClient, pPacket))

{m_SocketManager.ReleaseSocket(pClient); //关掉套接字

break;}} }}

void CIOCP::ProcessSocketError(COvlapSocket *pSocket,char *pDescription)

{if(g_bDebug)

{TRACE1("Base:检查到客户套节字上发生错误__%s \n",pDescription);

}pSocket->Close();

if(0 == pSocket->nOutstandingRecv && 0 == pSocket->nOutstandingSend)

{m_pBusiness->OnConnectionClosing(pSocket);

m_SocketManager.ReleaseSocket(pSocket);

}}

void CIOCP::PrintState(){

TRACE2("包管理器中pending包数量 %d,套接字数

量 %d",m_PacketManager.m_nPendingPackets,m_SocketManager.GetSocketCount());

m_SocketManager.PrintState();

}

六实验结果服务器端:

客户端:

通信原理公式总结

第一章 绪论 模拟通信系统一般模型: 数字通信系统模型: 点对点的通信按时间和传递方向可以分为:单工,半双工,全双工通信。 有效性指标 可靠性指标 模拟 频宽利用率 输出信噪比 数字 传码率,传信率,带宽利用率 误码率,误信率 参量: 公式 单位 信息量 )(log 2x P I -= bit 平均信息量/信源熵 ∑=-=M i i i x P x P x H 12)(log )()( bit/符号 传码率 T R B /1= B 传信率 )(x H R R B b = b/s 带宽利用率 B R B =η B/Hz 误码率 P e =错误码元数/码元总数 误信率 P b =错误比特数/比特总数 第二章 确知信号 确知信号 功率信 号 频谱 ? --= 2 2 20 000)(1 T T t nf j n dt e t s T C π 功率谱密 度 2|)(|1 lim )(f S T f P T T ∞→= 自相关函数 dt t s t s T R T T T ?-∞→+=2 /2 )()(1lim )(ττ 能量信 号 频谱密度 ∑∞ ∞--=dt e t s f S ft j π2)()( 能量谱密度 2 |)(|)(f S f G =;)()]([1 τR f G F =- 自相关函数 ?∞ ∞ -+=)()()(ττt s t s R ;)()]([f G R F =τ 第三章 随机过程 公式 备注 统计均值 dx x f t t E )()()]([?∞ ∞ -=ξξ f (x )是x 的概率密度函数 统计自相关函数 )]()([)(212,1t t E t t R ξξ== 参照统计均值计算方法 广义平稳随机过程 1. 均值为常数,与时间t 无关 2. 自相关函数只与时间间隔τ有关 时间均值 ?-∞→- =2 /2)(1lim T T T dt t x T a 时间自相关函数 ?-∞→----+=2 /2 )()(1lim )(T T T dt t x t x T R ττ 各态历经性 1.- =a t E )]([ξ 2.- ----= )(),(21τR t t R 平稳随机过程自相关函数性质 )0(R 代表平均功率 )(∞R 代表直流功率(均值的平方) )()(ττ-=R R 偶函数 )0(|)(|R R ≤τ 有上界 2)()0(σ=∞-R R 方差代表交流功率 高斯随机过程: )2)(ex p(21)(2 2 σσ πa x x f -- 结论1:线性系统:输出过程的功率谱密度是输入过程的功率谱密度乘以系统频率响应模值的平方,即)(|)(|)(2f P f H f P i o = 结论2:如果线性系统的输入是高斯型的,则输出也是高斯型的。 结论3:一个均值为零的窄带平稳高斯过程,他的同相分量和正交 分量同样是平稳高斯过程,而且均值为零,方差也相同。此外在同一时刻上得到的同相分量和正交分量是统计独立的。 结论4:一个均值为零、方差为2 ξσ的窄带平稳高斯过程)(t ξ,其包络的一维分布是瑞利分布,相位的一维分布是均匀分布,并且就一维分布而言他们是统计独立的。 结论5:正弦波加窄带高斯噪声的包络:小信噪比时接近瑞利分布,大信噪比时接近高斯分布,一般情况下是莱斯分布。 第四章 信道 无线信道:天波、地波、视线传播。 有线信道:明线、对称电缆、同轴电缆。 信号无失真条件:1.具有线性相位(相频特性为通过原点的直线) 2.幅频响应为常数

通信系统建模与仿真课程设计

通信系统建模与仿真课程设计2011 级通信工程专业1113071 班级 题目基于SIMULINK的基带传输系统的仿真姓名学号 指导教师胡娟 2014年6月27日

1任务书 试建立一个基带传输模型,采用曼彻斯特码作为基带信号,发送滤波器为平方根升余弦滤波器,滚降系数为0.5,信道为加性高斯信道,接收滤波器与发送滤波器相匹配。发送数据率为1000bps,要求观察接收信号眼图,并设计接收机采样判决部分,对比发送数据与恢复数据波形,并统计误码率。另外,对发送信号和接收信号的功率谱进行估计。假设接收定时恢复是理想的。 2基带系统的理论分析 1.基带系统传输模型和工作原理 数字基带传输系统的基本组成框图如图1 所示,它通常由脉冲形成器、发送滤波器、信道、接收滤波器、抽样判决器与码元再生器组成。系统工作过程及各部分作用如下。 g T(t) n 定时信号 图 1 :数字基带传输系统方框图 发送滤波器进一步将输入的矩形脉冲序列变换成适合信道传输的波形g T(t)。这是因为矩形波含有丰富的高频成分,若直接送入信道传输,容易产生失真。 基带传输系统的信道通常采用电缆、架空明线等。信道既传送信号,同时又因存在噪声n(t)和频率特性不理想而对数字信号造成损害,使得接收端得到的波形g R(t)与发送的波形g T(t)具有较大差异。 接收滤波器是收端为了减小信道特性不理想和噪声对信号传输的影响而设置的。其主要作用是滤除带外噪声并对已接收的波形均衡,以便抽样判决器正确判决。 抽样判决器首先对接收滤波器输出的信号y(t)在规定的时刻(由定时脉冲cp控制)进行抽样,获得抽样信号{r n},然后对抽样值进行判决,以确定各码元是“1”码还是“0”码。 2.基带系统设计中的码间干扰和噪声干扰以及解决方案

五层电梯模型试验系统的硬件设计毕业论文

五层电梯模型试验系统的硬件设计毕业论文 目录 引言 (1) 第一章概述 (2) 1.1电梯的发展概况 (2) 1.2电梯的发展趋势 (3) 1.3课题来源及意义 (4) 1.4本文主要工作 (5) 第二章电梯模型的组成及工作原理 (6) 2.1系统组成 (6) 2.1.1 信号综合及显示电路 (6) 2.1.2 轿箱控制系统 (7) 2.1.3 门控电路 (7) 2.2工作原理 (8) 第三章电梯模型的电气系统硬件设计 (9) 3.1信号综合及显示电路 (9) 3.1.1 呼叫电路 (9) 3.1.2 检测电路 (10) 3.1.3 显示电路 (12) 3.2轿箱控制系统 (14) 3.1.1 主电路及保护电路设计 (14) 3.2.2 驱动电路设计 (16) 3.2.3 保护电路设计 (18)

3.2.4 控制电路设计 (20) 3.3门控电路 (27) 3.3.1 门控及驱动电路 (27) 3.3.2 门控控制电路设计 (30) 3.4稳压电源电路的设计 (34) 第四章电梯模型的结构设计 (37) 4.1总体结构的设计 (37) 4.2曳引系统设计 (39) 4.3门控系统 (40) 第五章结论和展望 (41) 5.1本文工作总结 (41) 5.2展望 (42) 参考文献 (43) 附录硬件原理图 (45) A1呼叫系统电路原理图 (45) A2楼层检测电路原理图 (46) A3信息显示电路原理图 (47) A480C196KC单片机部分 (48) A5轿厢控制系统——主电路及驱动电路原理图 (49) A6门控系统控制电路原理图 (50) 谢辞 (52)

通信原理公式总结

第一章 绪论 模拟通信系统一般模型: 数字通信系统模型: 点对点的通信按时间和传递方向可以分为:单工,半双工,全双工通信。 有效性指标 可靠性指标 模拟 频宽利用率 输出信噪比 数字 传码率,传信率,带宽利用率 误码率,误信率 参量: 公式 单位 信息量 )(log 2x P I -= bit 平均信息量/信源熵 ∑=-=M i i i x P x P x H 12)(log )()( bit/符号 传码率 T R B /1= B 传信率 )(x H R R B b = b/s 带宽利用率 B R B =η B/Hz 误码率 P e =错误码元数/码元总数 误信率 P b =错误比特数/比特总数 第二章 确知信号 确 知 信 号 功率 信号 频谱 ? --= 2 2 20 000)(1 T T t nf j n dt e t s T C π 功率谱密度 2|)(|1 lim )(f S T f P T T ∞→= 自相 关函数 dt t s t s T R T T T ?-∞→+=2 /2 )()(1lim )(ττ 能 量 信 号 频谱 密度 ∑∞ ∞--=dt e t s f S ft j π2)()( 能量谱密度 2|)(|)(f S f G =;)()]([1τR f G F =- 自相关函数 ?∞ ∞ -+=)()()(ττt s t s R ;)()]([f G R F =τ 第三章 随机过程 公式 备注 统计均值 dx x f t t E )()()]([?∞ ∞ -=ξξ f (x )是x 的概率密度函数 统计自相关 函数 )]()([)(212,1t t E t t R ξξ== 参照统计均值计算方法 广义平稳随 机过程 1. 均值为常数,与时间t 无关 2. 自相关函数只与时间间隔τ有关 时间均值 ?-∞→- =2 /2)(1lim T T T dt t x T a 时间自相关 ?-∞→----+=2 /2 )()(1lim )(T T T dt t x t x T R ττ

数字通信系统的模型

数字通信系统的模型 ? 数字通信系统的分类 ?数字通信系统可进一步细分为数字频带传输通信系统、数字基带传输通信系统、模拟信号数字化传输通信系统。 1. 数字频带传输通信系统 数字通信的基本特征是,它的消息或信号具有“离散”或“数字”的特性,从而使数字通信具有许多特殊的问题。例如前边提到的第二种变换,在模拟通信中强调变换的线性特性,即强调已调参量与代表消息的基带信号之间的比例特性;而在数字通信中,则强调已调参量与代表消息的数字信号之间的一一对应关系。 另外,数字通信中还存在以下突出问题:第一,数字信号传输时,信道噪声或干扰所造成的差错,原则上是可以控制的。这是通过所谓的差错控制编码来实现的。于是,就需要在发送端增加一个编码器,而在接收端相应需要一个解码器。第二,当需要实现保密通信时,可对数字基带信号进行人为“扰乱”(加密),此时在收端就必须进行解密。第三,由于数字通信传输的是一个接一个按一定节拍传送的数字信号,因而接收端必须有一个与发端相同的节拍,否则,就会因收发步调不一致而造成混乱。另外,为了表述消息内容,基带信号都是按消息特征进行编组的,于是,在收发之间一组组的编码的规律也必须一致,否则接收时消息的真正内容将无法恢复。在数字通信中,称节拍一致为“位同步”或“码元同步”,而称编组一致为“群同步”或“帧同步”,故数字通信中还必须有“同步”这个重要问题。 综上所述,点对点的数字通信系统模型一般可用图1-3 所示。

需要说明的是,图中调制器/ 解调器、加密器/ 解密器、编码器/ 译码器等环节,在具体通信系统中是否全部采用,这要取决于具体设计条件和要求。但在一个系统中,如果发端有调制/ 加密/ 编码,则收端必须有解调/ 解密/ 译码。通常把有调制器/ 解调器的数字通信系统称为数字频带传输通信系统。 2. 数字基带传输通信系统 与频带传输系统相对应,我们把没有调制器/ 解调器的数字通信系统称为数字基带传输通信系统,如图1-4 所示。 图中基带信号形成器可能包括编码器、加密器以及波形变换等,接收滤波器亦可能包括译码器、解密器等。 3. 模拟信号数字化传输通信系统 上面论述的数字通信系统中,信源输出的信号均为数字基带信号,实际上,在日常生活中大部分信号(如语音信号)为连续变化的模拟信号。那么要实现模拟信号在数字系统中的传输,则必须在发端将模拟信号数字化,即进行A/D 转换;在接收端需进行相反的转换,即D/A 转换。实现模拟信号数字化传输的系统如图1-5 所示。

(完整word版)通信原理课后答案

第一章绪论 1.1以无线广播和电视为例,说明图1-1模型中的信息源,受信者及信道包含的具体内容是什么 在无线电广播中,信息源包括的具体内容为从声音转换而成的原始电信号,收信者中包括的具体内容就是从复原的原始电信号转换乘的声音;在电视系统中,信息源的具体内容为从影像转换而成的电信号。收信者中包括的具体内容就是从复原的原始电信号转换成的影像;二者信道中包括的具体内容分别是载有声音和影像的无线电波 1.2何谓数字信号,何谓模拟信号,两者的根本区别是什么 数字信号指电信号的参量仅可能取有限个值;模拟信号指电信号的参量可以取连续值。他们的区别在于电信号参量的取值是连续的还是离散可数的 1.3何谓数字通信,数字通信有哪些优缺点 传输数字信号的通信系统统称为数字通信系统;优缺点: 1.抗干扰能力强; 2.传输差错可以控制; 3.便于加密处理,信息传输的安全性和保密性越来越重要,数字通信的加密处理比模拟通信容易的多,以话音信号为例,经过数字变换后的信号可用简单的数字逻辑运算进行加密,解密处理; 4.便于存储、处理和交换;数字通信的信号形式和计算机所用的信号一致,都是二进制代码,因此便于与计算机联网,也便于用计算机对数字信号进行存储,处理和交换,可使通信网的管理,维护实现自动化,智能化; 5.设备便于集成化、微机化。数字通信采用时分多路复用,不需要体积较大的滤波器。设备中大部分电路是数字电路,可用大规模和超大规模集成电路实现,因此体积小,功耗低; 6.便于构成综合数字网和综合业务数字网。采用数字传输方式,可以通过程控数字交换设备进行数字交换,以实现传输和交换的综合。另外,电话业务和各种非话务业务都可以实现数字化,构成综合业务数字网;缺点:占用信道频带较宽。一路模拟电话的频带为4KHZ带宽,一路数字电话约占64KHZ。 1.4数字通信系统的一般模型中的各组成部分的主要功能是什么 数字通行系统的模型见图1-4所示。其中信源编码与译码功能是提高信息传输的有效性和进行模数转换;信道编码和译码功能是增强数字信号的抗干扰能力;加密与解密的功能是保证传输信息的安全;数字调制和解调功能是把数字基带信号搬移到高频处以便在信道中传输;同步的功能是在首发双方时间上保持一致,保证数字通信系统的有序,准确和可靠的工作。1-5按调制方式,通信系统分类? 根据传输中的信道是否经过调制,可将通信系统分为基带传输系统和带通传输系统。 1-6 按传输信号的特征,通信系统如何分类? 按信号特征信道中传输的信号可分为模拟信号和数字信号,相应的系统分别为模拟通信系统和数字通信系统。 1-7按传输信号的复用方式,通信系统如何分类? 频分复用,时分复用,码分复用。 1-8单工,半双工及全双工通信方式是按什么标准分类的?解释他们的工作方式并举例说明他们是按照消息传递的方向与时间关系分类。单工通信是指消息只能单向传输的工作方式,通信双方只有一个进行发送,另一个只能接受,如广播,遥测,无线寻呼等。半双工通信指通信双方都能进行收发信息,但是不能同时进行收发的工作方式,如使用统一载频的普通对讲机。全双工通信是指通信双方能同时进行收发消息的工作方式,如电话等。 1-9通信系统的主要性能指标是什么? 分为并行传输和串行传输。并行传输是将代表信息的数字信号码元以组成的方式在两条或两条以上的并行信道上同时传输,其优势是传输速度快,无需附加设备就能实现收发双方字符同步,缺点是成本高,常用于短距离传输。串行传输是将代表信息的数字码元以串行方式一

20通信系统概述

第一章通信系统概述 1.1 通信系统模型 一、通信的定义 1.信息:对收信者来说未知的、待传送、交换、存储或提取的内容 ﹙包括语音、图象、文字等﹚ 人与人之间要互通情报,交换消息,这就需要消息的传递。古代的烽火台、金鼓、旌旗,现代的书信、电报、电话、传真、电子信箱、可视图文等,都是人们用来传递信息的方式。 2.信号:与消息一一对应的电量。它是消息的物质载体,即消息是寄托在电信号的某一参量上。 3.通信就是由一地向另一地传递消息。 二、电通信 1.定义 利用“电”来传递信息,是一种最有效的传输方式,这种通信方式称为电通信。 2.特点 电通信方式能使消息几乎在任意的通信距离上实现既迅速、有效,而又准确、可靠的传递。 电通信一般指电信,即指利用有线电、无线电、光和其它电磁系统,对于消息、

情报、指令、文字、图象、声音或任何性质的消息进行传输。 (1)模拟信号与数字信号:按信号随时间分布的特性信号可分为模拟和数字信号。 模拟信号:信号的取值是连续的。 数字信号:信号的取值是离散的。 (2)基带信号与频带信号:按信号随频率分布的特性信号可分为基带和频带信号。 基带信号:发信源发出的信号。 频带信号:通过调制将基带信号变换为频带信号。 基带传输:在信道中直接传输的信号 (如直流电报、实线电话和有线广播等)。 频带传输:通过调制将基带信号变换为更适合在信道中传输的形式。(FM、AM、MODEM) 三、通信系统的模型 1.通信系统的一般模型 (1)通信系统:通信系统是指完成信息传输过程的全部设备和传输媒介。 (2)通信系统的基本模型

●发信源:是消息的产生来源,其作用是将消息变换成原始电信号。变换:将 非电物理量转换为掂量。 信源可分为模拟信源和离散信源。模拟信源(如电话机、电视摄像机)输出幅度连续的信号;离散信源(如电传机、计算机)输出离散的数字信号。 ●发送设备:作用是将信源产生的消息信号转换为适合于在信道中传输的信 号。它要完成调制、放大、滤波、发射等。在数字通信系统中还要包括编码 和加密。 ●信道:是传输的媒介。信道的传输性能直接影响到通信质量。 ●噪声源:将各种噪声干扰集中在一起并归结为由信道引入,这样处理是为了 分析问题的方便。 ●接收设备:完成发送设备的反变换,即进行解调、译码、解密等,将接收到 的信号转换成信息信号。 ●收信者:把信息信号还原为相应的消息。 2.模拟通信系统模型。

通信系统建模与仿真

《电子信息系统仿真》课程设计 级电子信息工程专业班级 题目FM调制解调系统设计与仿真 姓名学号 指导教师胡娟 二О一年月日

内容摘要 频率调制(FM)通常应用通信系统中。FM广泛应用于高保真音乐广播、电视伴音信号的传输、卫星通信和蜂窝电话系统等。 FM调制解调系统设计是对模拟通信系统主要原理和技术进行研究,理解FM系统调制解调的基本过程和相关知识,利用MATLAB集成环境下的M文件,编写程序来实现FM调制与解调过程,并分别绘制出基带信号,载波信号,已调信号的时域波形;再进一步分别绘制出对已调信号叠加噪声后信号,非相干解调后信号和解调基带信号的时域波形;最后绘出FM基带信号通过上述信道和调制和解调系统后的误码率与信噪比的关系,并通过与理论结果波形对比来分析该仿真调制与解调系统的正确性及噪声对信号解调的影响。在课程设计中,系统开发平台为Windows XP,使用工具软件为 7.0。在该平台运行程序完成了对FM调制和解调以及对叠加噪声后解调结果的观察。通过该课程设计,达到了实现FM信号通过噪声信道,调制和解调系统的仿真目的。了解FM调制解调系统的优点和缺点,对以后实际需要有很好的理论基础。 关键词 FM;解调;调制;M ATL AB仿真;抗噪性

一、M ATLAB软件简介 MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。其特点是: (1) 可扩展性:Matlab最重要的特点是易于扩展,它允许用户自行建立指定功能的M文件。对于一个从事特定领域的工程师来说,不仅可利用Matlab所提供的函数及基本工具箱函数,还可方便地构造出专用的函数。从而大大扩展了其应用范围。当前支持Matlab的商用Toolbox(工具箱)有数百种之多。而由个人开发的Toolbox则不可计数。 (2) 易学易用性:Matlab不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。 (3) 高效性:Matlab语句功能十分强大,一条语句可完成十分复杂的任务。如fft语句可完成对指定数据的快速傅里叶变换,这相当于上百条C语言语句的功能。它大大加快了工程技术人员从事软件开发的效率。据MathWorks公司声称,Matlab软件中所包含的Matlab 源代码相当于70万行C代码。

地下水渗流模型实验系统设计

地下水渗流模型实验系统设计 发表时间:2015-11-09T11:24:49.470Z 来源:《工程建设标准化》2015年7月供稿作者:张清林耿冬青 [导读] 中国建筑股份有限公司技术中心随着城市建设进程的加快,城区内的建筑高度越来越大,基坑也越来越深。 张清林耿冬青 (中国建筑股份有限公司技术中心地下工程研究所,北京,顺义区,101300) 【摘要】为了观察水在土中的渗透过程,模拟工程降水、边坡工程施工过程中出现的地下水渗透破坏,设计了一套能进行多种渗透情况的演示和模拟实验地下水渗流模型实验系统。介绍了地下水渗流模型实验系统的组成结构,以及它所能进行的模型试验。可为工程降水及边坡工程稳定等研究提供实验室数据和基础参数。 【关键词】渗透;模型试验;传感器 1 前言 目前,随着城市建设进程的加快,城区内的建筑高度越来越大,基坑也越来越深,在开挖较深、地表有沉降有严格要求的基坑时,通常会采取坑内降水、坑外止水的措施,这样在坑内外就形成了一个水头差,当水头差达到一定程度且止水结构失效时,就会发生土体的渗透破坏。造成基坑失稳、堤坝塌方等工程事故 [1~5]。不仅影响施工进度,更有甚者会造成人员伤亡。如何评价基坑及边坡发生渗透破坏的稳定性问题成为重要的课题。 在基坑工程中,由于常采用帷幕来降低发生渗透破坏的可能性,井点降水过程中坑底水位不断下降,以及水源补给条件的多样性,都会造成基坑工程中渗流场的分布有很大的不确定性、复杂性。本文提出的地下水渗流模型实验系统能对基坑土体在降水、回灌,以及不同工况下的边坡工程进行渗流模拟,通过压力传感器测得孔隙水压力,计算压力水头,分析其渗流场,评价其稳定性。为基坑工程降水及边坡工程的渗透稳定等研究提供实验室数据和基础参数。 2 地下水渗流模型实验系统组成 整个设备由主要渗流装置、供水系统、排水系统、降雨模拟系统、计算机监控系统共五大系统及角钢支座组成。 主要渗流装置是完成各种模型试验的主要设备,由有机玻璃水槽做成,厚1.5cm ,玻璃水槽尺寸为L×B×H=2.6m×1.4m×1.2m,长边方向两端面布置直径2cm的小孔,作为渗流时补给水源及排水用;隔板用来区分不同的功能区:槽首供水区,尺寸 L×B×H=0.3m×1.4m×1.2m;槽中渗流区,尺寸L×B×H=2.0m×1.4m×1.2m;槽尾排水区,尺寸L×B×H=0.3m×1.4m×1.2m。 供水区与渗流区之间,以及渗流区与排水区之间加透水活动传力柱顶托,以防装样后渗流区两端变形;传力柱布局及结构见图1。传力柱在实验后可以拆卸。传力柱外侧直径8cm,壁厚5mm,长29.9cm;侧壁开口宽度为1cm。材质为有机玻璃。监测井包括抽水井和回灌井,监测井可以根据实验目的自由设计其结构和安放位置,采用PVC管制成;内径2cm,外径2.5cm,管壁厚2.5mm,井长度120cm,网眼密度:3眼/cm2,网眼直径:3mm,在使用时需用纱网将监测井包裹防止砂粒进入监测井,以防止发生堵塞。 供水系统是补给土体进行渗透试验用水的设备,其通过可以调节高度的支架及设置在储水箱的排水孔来保证进行渗透试验所需的水源。供水箱可在带螺纹的升降杆作用下上下移动,用以调节渗流槽内的压力水头,供水箱下方有与渗流槽相连的软管,中间用阀门控制供水量大小。 图2 主要渗流装置图 排水系统是各种地下水相关试验过程中进行排水的装置,包括排水管,阀门等。 降雨模拟系统是用来模拟工程场地受降水影响时的淋雨装置,由喷淋器、供水管路、供水泵组成。淋喷器用硬塑料管做成,均布着直径为3mm的小孔,通过供水泵和阀门来调节降水量的大小。 计算机监控系统是本实验装置的数据采集系统,其通过设置在不同位置处的传感器和百分表,来测量土体在渗流作用下的侧向压应力的变化、孔隙水压力的变化以及土体表面的沉降。 角钢支座能防止因水土压力导致玻璃水槽发生变形,起固定的作用。从槽底部向上,分别在高度为30cm、60cm、90cm处,加水平角钢围栏固定槽体周边四个侧壁。槽体底部的托底角钢从渗流区一端开始布设,相邻两个角钢横梁相距40cm。角钢厚度为5mm,宽度5cm。角钢强度须要能够承载槽中的荷载,确保渗流装置不发生明显变形而影响实验精度。 3 渗流模型实验系统功能设计 本地下水渗流模型实验系统可通过不同设计完成如下实验功能: 3.1 模拟降水及回灌引起的土体沉降 本渗流模型实验系统能够模拟工程场地受施工降水及自然降水影响地基土体的沉降,模拟工程场地土体由于回灌作用产生的变形回弹

通信系统的组成

通信系统的组成 1.2.1 通信系统的一般模型 实现信息传递所需的一切技术设备和传输媒质的总和称为通信系统。以基本的点对点通信为例,通信系统的组成(通常也称为一般模型)如图 1-1 所示。 图 1-1 通信系统的一 般模型 图中,信源(信息 源,也称发终端)的作 用是把待传输的消息转 换成原始电信号,如电 话系统中电话机可看成是信源。信源输出的信号称为基带信号。所谓基带信号是指没有经过调制(进行频谱搬移和变换)的原始电信号,其特点是信号频谱从零频附近开始,具有低通形式,。根据原始电信号的特征,基带信号可分为数字基带信号和模拟基带信号,相应地,信源也分为数字信源和模拟信源。 发送设备的基本功能是将信源和信道匹配起来,即将信源产生的原始电信号(基带信号)变换成适合在信道中传输的信号。变换方式是多种多样的,在需要频谱搬移的场合,调制是最常见的变换方式;对传输数字信号来说,发送设备又常常包含信源编码和信道编码等。 信道是指信号传输的通道,可以是有线的,也可以是无线的,甚至还可以包含某些设备。图中的噪声源,是信道中的所有噪声以及分散在通信系统中其它各处噪声的集合。 在接收端,接收设备的功能与发送设备相反,即进行解调、译码、解码等。它的任务是从带有干扰的接收信号中恢复出相应的原始电信号来。 信宿(也称受信者或收终端)是将复原的原始电信号转换成相应的消息,如电话机将对方传来的电信号还原成了声音。 图 1-1 给出的是通信系统的一般模型,按照信道中所传信号的形式不同,可进一步具体化为模拟通信系统和数字通信系统。 1.2.2 模拟通信系统 我们把信道中传输模拟信号的系统称为模拟通信系统。模拟通信系统的组成可由一般通信系统模型略加改变而成,如图 l-2 所示。这里,一般通信系统模型中的发送设备和接收设备分别为调制器、解调器所代替。 对于模拟通信系统,它主要 包含两种重要变换。一是把连续 消息变换成电信号(发端信息源 完成)和把电信号恢复成最初的 连续消息(收端信宿完成)。由 信源输出的电信号(基带信号) 由于它具有频率较低的频谱分 量,一般不能直接作为传输信号而送到信道中去。因此,模拟通信系统里常有第二种变换,即将基带信号转换成其适合信道传输的信号,这一变换由调制器完成;在收端同样需经相反的变换,它由解调器完成。经过调制后的信号通常称为已调信号。已调信号有三个基本特性:一是携带有消息,二是适合在信道中传输,三是频谱具有带通形式,且中心频率远离零频。因而已调信号又常称为频带信号。 必须指出,从消息的发送到消息的恢复,事实上并非仅有以上两种变换,通常在一个通信系统里可能还有滤波、放大、天线辐射与接收、控制等过程。对信号传输而言,由于上面

通信原理期末考试复习重点总结(完整版)

《通信原理》考试重要知识点 第1章绪论 掌握内容:通信系统的基本问题与主要性能指标;模拟通信与数字通信;信息量、平均信息量、信息速率。 熟悉内容:通信系统的分类;通信方式。 了解内容:通信的概念与发展; 1.1---1.3 基本概念 1、信号:消息的电的表示形式。在电通信系统中,电信号是消息传递的物质载体。 2、消息:信息的物理表现形式。如语言、文字、数据或图像等。 3、信息:消息的内涵,即信息是消息中所包含的人们原来不知而待知的内容。 4、数字信号是一种离散的、脉冲有无的组合形式,是负载数字信息的信号。 5、模拟信号是指信号无论在时间上或是在幅度上都是连续的。 6、数字通信是用数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式。它可传输电报、数字数据等数字信号,也可传输经过数字化处理的语声和图像等模拟信号。 7、模拟通信是指利用正弦波的幅度、频率或相位的变化,或者利用脉冲的幅度、宽度或位置变化来模拟原始信号,以达到通信的目的。 8、数据通信是通信技术和计算机技术相结合而产生的一种新的通信方式。 9、通信系统的一般模型

10、按照信道中传输的是模拟信号还是数字信号,可相应地把通信系统分为模拟通信系统和数字通信系统。 11、模拟通信系统是传输模拟信号的通信系统。模拟信号具有频率很低的频谱分量,一般不宜直接传输,需要把基带信号变换成其频带适合在信道中传输的频带信号,并可在接收端进行反变换。完成这种变换和反变换作用的通常是调制器和解调器。 12、数字通信系统是传输数字信号的通信系统。数字通信涉及的技术问题很多,其中主要有信源编码/译码、信道编码/译码、数字调制/解调、数字复接、同步以及加密等。 13、数字信道模型 14、通信系统的分类 1 、按通信业务分类分为话务通信和非话务通信。 2、根据是否采用调制,可将通信系统分为基带传输和频带(调制)传输。 3、按照信道中所传输的是模拟信号还是数字相应地把通信系统分成模拟通信系统和数字 通信系统。 4、按传输媒质分类,可分为有线通信系统和无线通信系统两大类。 有线通信是用导线(如架空明线、同轴电缆、光导纤维、波导等)作为传输媒质 完成通信的,如市内电话、有线电视、海底电缆通信等。 无线通信是依靠电磁波在空间传播达到传递消息的目的的,如短波电离层传播、微 波视距传播、卫星中继等。 15、常见传输多路信号有两种复用方式,即频分复用、时分复用。频分复用是用频谱搬移的方法使不同信号占据不同的频率范围。时分复用是用脉冲调制的方法使不同信号占据不同的时间区间。

通信系统建模与仿真课程设计

1 任务书 试建立一个基带传输模型,采用曼彻斯特码作为基带信号, 发送滤波器为平方根升余弦滤波器,滚降系数为0.5,信道为加性高 斯信道,接收滤波器与发送滤波器相匹配。发送数据率为1000bps , 要求观察接收信号眼图,并设计接收机采样判决部分,对比发送数据 与恢复数据波形,并统计误码率。另外,对发送信号和接收信号的功 率谱进行估计。假设接收定时恢复是理想的。 2 基带系统的理论分析 2.1基带系统传输模型及工作原理 基带系统传输模型如图1所示。 发送滤波器 传送信道 接收滤波器 {an} n(t) 图1 基带系统传输模型 1)系统总的传输特性为(w)()()()H GT w C w GR w ,n (t )是信道中 的噪声。 2)基带系统的工作原理:信源是不经过调制解调的数字基带信号, 信源在发送端经过发送滤波器形成适合信道传输的码型,经过含有加

性噪声的有线信道后,在接收端通过接收滤波器的滤波去噪,由抽样 判决器进一步去噪恢复基带信号,从而完成基带信号的传输。 2.2 基带系统设计中的码间干扰及噪声干扰 码间干扰及噪声干扰将造成基带系统传输误码率的提升,影响基 带系统工作性能。 1)码间干扰及解决方案 a ) 码间干扰:由于基带信号受信道传输时延的影响,信号波形 将被延迟从而扩展到下一码元,形成码间干扰,造成系统误码。 b) 解决方案: ① 要求基带系统的传输函数H(ω)满足奈奎斯特第一准则: 2(),||i i H w Ts w Ts Ts ππ+ =≤∑ 不出现码间干扰的条件:当码元间隔T 的数字信号在某一理想低通 信道中传输时,若信号的传输速率位Rb=2fc (fc 为理想低通截止频 率),各码元的间隔T=1/2fc ,则此时在码元响应的最大值处将不 产生码间干扰。传输数字信号所要求的信道带宽应是该信号传输速 率的一半:BW=fc=Rb/2=1/2T ② 基带系统的系统函数H(ω)应具有升余弦滚降特性。 如图2所示:滚降系数:a=[(fc+fa)-fc]/fc

大型湿喷桩复合地基模型试验系统

大型湿喷桩复合地基模型试验系统研究摘要:根据模型试验相似理论,分析湿喷桩复合地基模型设计应满足的相似条件,建立了可以模拟实际成桩过程的湿喷桩室内试验模型。鉴于此模型可以较好的模拟湿喷桩成桩过程,因此将其用于湿喷桩复合地基特性的室内试验研究。 关键词:湿喷桩复合地基;模型实验;相似理论 abstract: according to the model test similar theory, analyses the wet spray pile composite foundation model design should meet similar conditions to establish the can simulate the real pile of wet process spray pile indoor test model. in view of this model can be good simulation wet spray pile into pile process, and so on the wet spray pile composite foundation characteristics of the laboratory tests. keywords: wet spray pile composite foundation; model experiment; similarity theory 中图分类号:tu47 文献标识码:a文章编号: 湿喷桩因其在施工、技术、经济等方面的优势,目前正广泛应用于高速公路软基处理的复合地基中。由于湿喷桩构成的复合地基在含结构物路段、桥头过渡路段和地质条件较差的特殊路段等处理中发挥的巨大作用,因而,倍受学术界与工程界关注。现阶段湿喷桩复合地基的研究手段主要有原位观测、静载试验、数值分析、模

通信系统仿真作业(设计五-设计七)

设计五 2FSK调制解调系统 一、设计目的 1.掌握2FSK信号的调制解调原理及MATLAB编程实现方法。 2.利用Simulink设计2FSK信号的调制解调系统。 3.画出2FSK信号的时域波形和频谱图。 二、设计原理 1.2FSK信号的调制解调原理 数字移频键控是用载波的频率来传送数字消息,或者说用所传送的数字消息控制载波的频率。2FSK信号便是符号“1”对应于载频,而符 号“0”对应于载频(与不同的另一载频)的已调波形,而且与之间的改变是瞬间完成的。从原理上讲,数字调频可用模拟调频法来实现,也可用键控法来实现,如图5.1所示。 图5.1 2FSK信号的调制 根据以上对2FSK信号的调制原理的分析,已调信号的数字表达式可以表示为 (5.1) 其中,是单个矩形脉冲,脉宽为,且 2FSK信号的常用解调方法采用如图5.2所示的非相干检测法和相干检测法。这里的取样判决器是判定哪一个输入样值大,此时可以不专门设置门限电平。 (a) 非相干方式 (b) 相干方式 图5.2 2FSK信号的解调 2FSK调制属于非线性调制,其频谱特性的研究常用把2FSK信号看成是两个2ASK信号相叠加的方法。2FSK信号的功率谱密度为: (5.2) 传输2FSK信号所需频带约为 (5.3)

【例5-1】用MATLAB产生独立等概的二进制信源,画出2FSK信号的波形及其功率谱。 解首先产生随机的二进制数字基带信号,然后根据2FSK信号的表达式产生二进制数字调制信号,最后通过FFT变换求解调制信号的功率谱。源程序如下: A=1; % 调制信号幅度 fc=2; % 载波频率 N_sample=8; % 每码元的采样点数 N=500; % 码元数目 Ts=1; % 采样间隔 dt=Ts/fc/N_sample; % 波形采样间隔 t=0:dt:N*Ts-dt; % 定义时间序列 L=length(t); % 计算时间序列长度 % 产生二进制信源 d=sign(randn(1,N)); dd=sigexpand((d+1)/2,fc*N_sample); gt=ones(1,fc*N_sample); d_NRZ=conv(dd,gt); [f,d_NRZf]=T2F(t,d_NRZ(1:L)); % 数字基带信号的傅里叶变换 sd_2fsk=2*d_NRZ-1; % 双极性基带信号 s_2fsk=A*cos(2*pi*fc*t+2*pi*sd_2fsk(1:L).*t); % 产生2FSK信号 [f,s_2fskf]=T2F(t,s_2fsk); % 2FSK信号的傅里叶变换 figure(1) subplot(2,2,1); plot(t,d_NRZ(1:L)); axis([0,10,0,1.2]); xlabel('(a) 输入信号'); subplot(2,2,2); plot(f,10*log10(abs(d_NRZf).^2/Ts)); axis([-2,2,-40,40]); xlabel('(b) 输入信号功率谱密度'); subplot(2,2,3); plot(t,s_2fsk); axis([0,10,-1.2,1.2]); xlabel('(c) 2FSK信号'); subplot(2,2,4); plot(f,10*log10(abs(s_2fskf).^2/Ts)); axis([-fc-4,fc+4,-40,40]); xlabel('(d) 2FSK信号功率谱密度'); %--------------------------------------------------------------------------------------------------------------- function [out]=sigexpand(d,M) % 将输入的序列扩展成间隔为N-1个0的序列

地下水渗流模型实验系统设计

地下水渗流模型实验系统设计 【摘要】为了观察水在土中的渗透过程,模拟工程降水、边坡工程施工过程中出现的地下水渗透破坏,设计了一套能进行多种渗透情况的演示和模拟实验地下水渗流模型实验系统。介绍了地下水渗流模型实验系统的组成结构,以及它所能进行的模型试验。可为工程降水及 边坡工程稳定等研究提供实验室数据和基础参数。 【关键词】渗透;模型试验;传感器 1 前言 目前,随着城市建设进程的加快,城区内的建筑高度越来越大,基坑也越来越深,在开 挖较深、地表有沉降有严格要求的基坑时,通常会采取坑内降水、坑外止水的措施,这样在 坑内外就形成了一个水头差,当水头差达到一定程度且止水结构失效时,就会发生土体的渗 透破坏。造成基坑失稳、堤坝塌方等工程事故 [1~5]。不仅影响施工进度,更有甚者会造成人 员伤亡。如何评价基坑及边坡发生渗透破坏的稳定性问题成为重要的课题。 在基坑工程中,由于常采用帷幕来降低发生渗透破坏的可能性,井点降水过程中坑底水 位不断下降,以及水源补给条件的多样性,都会造成基坑工程中渗流场的分布有很大的不确 定性、复杂性。本文提出的地下水渗流模型实验系统能对基坑土体在降水、回灌,以及不同 工况下的边坡工程进行渗流模拟,通过压力传感器测得孔隙水压力,计算压力水头,分析其 渗流场,评价其稳定性。为基坑工程降水及边坡工程的渗透稳定等研究提供实验室数据和基 础参数。 2 地下水渗流模型实验系统组成 整个设备由主要渗流装置、供水系统、排水系统、降雨模拟系统、计算机监控系统共五 大系统及角钢支座组成。 主要渗流装置是完成各种模型试验的主要设备,由有机玻璃水槽做成,厚1.5cm ,玻璃水槽尺寸为L×B×H=2.6m×1.4m×1.2m,长边方向两端面布置直径2cm的小孔,作为渗流时补给 水源及排水用;隔板用来区分不同的功能区:槽首供水区,尺寸L×B×H=0.3m×1.4m×1.2m; 槽中渗流区,尺寸L×B×H=2.0m×1.4m×1.2m;槽尾排水区,尺寸L×B×H=0.3m×1.4m×1.2m。 供水区与渗流区之间,以及渗流区与排水区之间加透水活动传力柱顶托,以防装样后渗 流区两端变形;传力柱布局及结构见图1。传力柱在实验后可以拆卸。传力柱外侧直径8cm,壁厚5mm,长29.9cm;侧壁开口宽度为1cm。材质为有机玻璃。监测井包括抽水井和回灌井,监测井可以根据实验目的自由设计其结构和安放位置,采用PVC管制成;内径2cm,外 径2.5cm,管壁厚2.5mm,井长度120cm,网眼密度:3眼/cm2,网眼直径:3mm,在使用 时需用纱网将监测井包裹防止砂粒进入监测井,以防止发生堵塞。 供水系统是补给土体进行渗透试验用水的设备,其通过可以调节高度的支架及设置在储 水箱的排水孔来保证进行渗透试验所需的水源。供水箱可在带螺纹的升降杆作用下上下移动,用以调节渗流槽内的压力水头,供水箱下方有与渗流槽相连的软管,中间用阀门控制供水量 大小。 图2 主要渗流装置图 排水系统是各种地下水相关试验过程中进行排水的装置,包括排水管,阀门等。 降雨模拟系统是用来模拟工程场地受降水影响时的淋雨装置,由喷淋器、供水管路、供 水泵组成。淋喷器用硬塑料管做成,均布着直径为3mm的小孔,通过供水泵和阀门来调节 降水量的大小。

电子通信原理复习资料

通信原理复习资料 一、基本概念 第一章 1、模拟通信系统模型 模拟通信系统是利用模拟信号来传递信息的通信系统 2、数字通信系统模型 数字通信系统是利用数字信号来传递信息的通信系统 3、数字通信的特点 优点: (1)抗干扰能力强,且噪声不积累 (2)传输差错可控 (3)便于处理、变换、存储 (4)便于将来自不同信源的信号综合到一起传输 (5)易于集成,使通信设备微型化,重量轻 (6)易于加密处理,且保密性好 缺点: (1)需要较大的传输带宽 (2)对同步要求高 模拟通信系统模型 信息源 信源编码 信道译码 信道编码信 道数字调制 加密 数字解调解密 信源译码 受信者 噪声源 数字通信系统模型

4、通信系统的分类 (1)按通信业务分类:电报通信系统、电话通信系统、数据通信系统、图像通信系统(2)按调制方式分类:基带传输系统和带通(调制)传输系统 (3)调制传输系统又分为多种调制,详见书中表1-1 (4)按信号特征分类:模拟通信系统和数字通信系统 (5)按传输媒介分类:有线通信系统和无线通信系统 (6)按工作波段分类:长波通信、中波通信、短波通信 (7)按信号复用方式分类:频分复用、时分复用、码分复用 5、通信系统的主要性能指标:有效性和可靠性 有效性:指传输一定信息量时所占用的信道资源(频带宽度和时间间隔),或者说是传输的“速度”问题。 可靠性:指接收信息的准确程度,也就是传输的“质量”问题。 (1)模拟通信系统: 有效性:可用有效传输频带来度量。 可靠性:可用接收端最终输出信噪比来度量。 (2)数字通信系统: 有效性:用传输速率和频带利用率来衡量。 可靠性:常用误码率和误信率表示。 码元传输速率R B:定义为单位时间(每秒)传送码元的数目,单位为波特(Baud) 信息传输速率R b:定义为单位时间内传递的平均信息量或比特数,单位为比特/秒 6、通信的目的:传递消息中所包含的信息 7、通信方式可分为:单工、半双工和全双工通信 8、信息量是对信息发生的概率(不确定性)的度量。一个二进制码元含1b的信息量;一个M进制码元含有log2M比特的信息量。等概率发送时,信息源的熵有最大值。 第二章 1、确知信号:是指其取值在任何时间都是确定的和可预知的信号,通常可以用数学公式表示它在任何时间的取值。

相关主题
文本预览
相关文档 最新文档