精华内容
下载资源
问答
  • 面对越来越多的实时视频采集...本文介绍了视频数据的采集、记录、编解码、多路视频数据间的切换,基于多网络协议组合下的多媒体流传输,动态切换四路视频数据实时传输与播放,从而使远端操控、优质播放有了很大的提高。

    多路视频数据实时采集系统设计与实现

    常永亮   王霖萱  常馨蓉


    摘要 面对越来越多的实时视频采集、播放的应用,如何能更加方便的操控视频采集,保证流畅的播放效果,成为近几年实时媒体流的一个重要研究方向。本文介绍了视频数据的采集、记录、编解码、多路视频数据间的切换,基于多网络协议组合下的多媒体流传输,动态切换四路视频数据实时传输与播放,从而使远端操控、优质播放有了很大的提高。

    关键词 视频编解码、媒体流、RTP/RTCP协议、组播协议、TCP协议


    0. 引 言

    随着信息技术的不断发展,人们将计算机技术引入视频采集、视频处理领域,用计算机处理视频信息和网络传输数字视频数据在很多领域已有广泛的应用,飞机试飞中现如今也大量的应用。

    针对目前分散在多处试飞现场视频传入监控大厅后监测设备多而分散的问题,提出了将多处试飞现场视频引入监控大厅后用一台高性能服务器管控,客户端通过网络请求服务器端检测关心的现场场景,达到集中管理优化监控的目的。

    视频图像采集的方法较多,基本可分为2大类:数字信号采集和模拟信号采集。前者采用图像采集芯片组完成图像的采集、帧存储器地址生成以及图像数据的刷新;除了要对采集模式进行设定外,主处理器不参与采集过程,我们只要在相应的帧存储器地址取出采集到的视频数据即可得到相应的视频数据,这种方法,无论在功能、性能、可靠性、速度等各方面都得到了显著的提高,但成本高。后者采用通用视频采集卡实现图像的采集,并用软件进行实时编码,其特点是数据采集CPU占用率较高,对处理器的速度要求高,成本低、易于实现,能够满足某些图像采集系统的需要。此系统使用第二类视频采集方法。

    如何将各处试飞现场视频信号通过VGA持续接收?传统方式是将模拟的VGA信号引到指定显示器显示,这样即浪费资源且多占空间。多路视频实时采集使用的是VisionRGB- PRO板卡(英国Datapath公司),此卡可同时实时采集两路视频数据,基本达到了本系统的要求,再用一台VGA矩阵切换器将前端数据源的四路视频数据进行人为切换采集,用H.264格式编解码,保存为H.264格式,通过RTP/RTCP与组播协议将编码后视频流传输给请求客户端,而且可在客户端通过TCP协议选择关心的VGA采集通道。

    在一台显示器上同时最多显示两路 VGA数据,不用再增加设备,并通过一台服务器软件实时处理后,按客户端请求实时传送到相应客户端监控某现场状态。达到用任意一台客户端按需监控的目的。

    1.  系统整体设计


    图1   系统结构框图

    系统主要实现对前端四路视频数据的人为切换式实时采集,在服务器端最多可同时采集和储存两路视频数据(用一个视频采集卡),也可以一次只采集一路视频数据,再经网络实时传输到客户端播放,服务器端同时实时播放所采集的视频数据。

    系统主要由VGA矩阵切换器、服务器端软件、客户端软件三大部分组成,VGA矩阵切换器对四路视频输入信号进行切换输出,服务器端主要负责视频数据采集、VGA矩阵信号切换、视频数据编码、视频信号网络传输,客户端主要负责视数据的解码与播放、简单的VGA矩阵输入输出信号切换。

    在进行视频切换方面可在服务器端或客户端自行切换,在服务器端可通过串行口操作VGA矩阵切换进行相应的视频输入输出口的切换,在客户端可通过网络(TCP)->服务器程序相应模块->串行口->VGA矩阵切换进行相应的视频输入输出口的切换。如图1所示。

    2.  系统软件的设计

    2.1           服务器端软件设计

    图2 服务器端程序流程图

    图2所示为服务器端实时采集、记录、发送视频数据的程序流程图。运行服务器端程序先加载配置信息,加载成功后初始化RGB板卡、串口、网络,初始化成功后进入实时检测VGA通道信号状态,无信号可手动选择其他通道检测,如果有视频信号将进入实时显示与编码保存状态。如有客户端通过网络请求视频数据,则将编码后的视频数据用RTP协议打包后通过组播协议发送给请求的客户端,同时周期性发送RTCP控制包,,通过对发送、丢失的数据包的数量等统计,动态地改变传输速率与同步视频播放。视频数据量较大,这就要求视频数据处理系统具有实时处理的特点。在服务器端的实现是整个系统的关键,在此也承担了整个软件系统的大部分工作,主要有以下几大块:一是采集;二是记录;三是向客户端发送;四是串口的通信;五图像的形成;六是服务器端的实时播放;七是对图像亮度、颜色、位置等的调整;采集通道、采样率、采集时间的选择。

    软件要实现对视频数据的实时采集、控制视频输入输出通道、把视频数据实时编码保存并发送到多个请求客户端。在软件实现方面应用了相应的SDK(Software developmentkit)和API(应用编程接口)。

    视频采集先通过Initialise函数初始化VisionRGB板卡与播放界面,在SetupCapture函数中初始化视频的显示的模式,在采集方面最主要是实时性,在此以事件驱动的方法从端口获取数据,回调函数InitiateFrameCapture通过板卡通道命令事件实时采集原始视频数据,采集到视频数据流在相应软件界面播放的同时再利用ffmpeg开源库将InitiateFrameCapture获取视频原始数据编码为H264格式,编码后的数据在服务器本地保存的同时通过网络传输给请求客户端。如图3所示。

    图3 服务器端数据处理流程图

    在服务器端各方面协调工作是关键,程序启动首先默认上次设定的视频采集卡通道,如有视频数据就播放、记录,如果没有视频数据就等待,如果要调整视频采集卡通道可用串口给VGA矩阵切换器发送相应的命令让VGA矩阵切换器进行相应的输入输出通道切换。也可通过TCP协议经客户端经网络到服务器串口到VGA矩阵切换器进行VGA矩阵切换器相应的输入输出通道切换。每次切换后将自动保存原视频文件,如切换后有视频数据将自动重新生成一个新的视频文件。

    在服务器界面播放的视频是没经编码处理的,但网络传输和保存的视频数据是经H.264编码处理后的,这样有力的减轻了网络间传输和服务器的存储I/O负担。

    为了在局域网上有效的、高质量的实时传输媒体流,需要多种技术的支持,包括网络传输层协议的选择、编(解)码技术,网络传输层质量控制技术等等。

    实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播单播网络服务下的交互式视频音频数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。在此,通过JRTPLIB库提供的RTPUDPv4TransmissionParams、RTPSessionParams 等类实现了在组播协议上利用RTP/RTCP协议对视频流进行封装、视频流的同步和控制流封装。服务器端将视频数据封装成RTP协议格式通过组播传输到请求客户端,客户端再将RTP协议包中视频数据分离出,给H.264解码库进行解码播放。服务器端网络接口函数核心代码如下:

    服务器端网络发送核心代码如下:

    ......

    RTPUDPv4TransmissionParams netInterface; 

    RTPSessionParamsnetSet; 

    netSet.SetOwnTimestampUnit(1.0/8000); 

    netSet.SetAcceptOwnPackets(true);  

    netInterface.SetPortbase(组播端口);  

    netInterface.SetLocalIPList(本地IP); 

    netInterface.SetMulticastInterfaceIP(组播IP); 

    netInterface.SetMulticastTTL(255); 

    sess.Create(netSet,&netInterface); 

    RTPIPv4Addressaddr(destip,destport); 

    sess.AddDestination(addr); 

    if(!sess.SupportsMulticasting()) 

     { 

    ::MessageBox (NULL," 加入组播错误!","错误",MB_ICONERROR);

       } 

        ...... 

    如果局域网通信速率很高且状态稳定,则进行实时视频传输就可以达到非常好的效果。但是在网络出现异常时会导致数据传输率不稳定或明显下降,造成发送端数据积压或丢失,此时就要采取一定的策略来控制发送端(服务器端)与接收端(客户端),以达到实时性、稳定性的要求,通过RTCP控制分组信息,服务器端与客户端实时交互描述信息,根据传输数据状态调整传输数据及网络应用状态,达到最佳实时传输视频流的网络状态。在服务器端的采集、播放、保存不受此策略的影响,也就是在服务器端保存的视频数据不会有丢帧的现象。

    在服务器端视频采集采用从VisionRGB视频采集卡捕获视频数据,经相应软件模块处理成位图型式的视频帧,然后用H.264编码进行压缩,通过相应网络协议实现压缩后的视频数据在局域网中的实时传输,在客户端接收数据交给H.264解码器解压,最后实现视频播放。如图4所示:

    图4  网络间传输示意图

    2.2           客户端软件设计

    在上面讲服务器端的实现时已经大概描述了客户端的实现,把服务器端实现,客户端实现难点就小很多。如图5所示:

    图5 客户端程序流程图

         客户端程序执行流程,运行客户端程序先初始化网络,如果成功则将请求命令发送给服务器端,将接受的网络包按RTP协议分解组合送给H.264解码库解码播放,同时向服务器端周期性发送RTCP控制包。

    在客户端也可以自行选择要采集的通道,但对服务器端的采样率等都不能通过客户端进行设置。

    客户端端网络接收核心代码如下:

    ......

    RTPUDPv4TransmissionParamsnetInterface; 

    RTPSessionParams netSet;

    netSet.SetOwnTimestampUnit(1.0/8000); 

    netSet.SetAcceptOwnPackets(true); 

    netInterface.SetPortbase(组播端口);  

    netInterface.SetBindIP(本地IP);   

    netInterface.SetMulticastInterfaceIP(组播IP); 

    RTPIPv4Addressaddr(destip,portbase); 

    sess.Create(netSet,&netInterface); 

    sess.SupportsMulticasting();   

    status=sess.JoinMulticastGroup(addr);  

    ……

    在客户端实时H.264解码播放速度是完全可以达到实时播放的要求。H.264解码和播放在不同的两个线程中实现,这样做主要是为了播放流畅。可以在两个不同客户端全屏播放两个不同的视频通道采集的数据。

    2.3           运行结果分析

    在相对稳定的千兆以太网环境下,保证数据源质量的前提下,对采集、接收到的VGA数据包进行统计结果如表1:

    表1 时间段内采集与接收帧数比较

    运行时间(分钟)

    采集帧数

    播放帧数

    5

    125

    125

    10

    250

    250

    30

    750

    749

    60

    1500

    1497

    120

    3000

    2983

    3.结论

    系统作为试飞场景视频监控系统的一部分,负责多个试飞现场VGA数据的实时采集、记录和视频编解码算法的实现、通过多网络协议的优化组合,解决了视频流稳定传输、流畅播放的功能,系统软件还支持事后视频回放,在试运行期间已达到本系统的要求。

    系统的软件开发难点和重点在服务器端各功能的实现与多网络输协议的协调运用,通过多网络协议的协调运用,达到很好的实时监控效果。

    系统对VGA视频输入扩充后可以实现多于四路输入,增加VisionRGB- PRO板卡可增加视频输出路数,如此升级后,可大大增加系统的实时监控能力。

     

    参考文献

    [1] Jeffrey Richter(美). Windows核心编程[M].北京: 机械工业出版社出版,2008.          

    [2] 张静 , 梁澍.Windows多媒体编程基础[M]  北京. 清华大学出版社,2005

    [3] 罗莉琴、詹祖桥.Windows网络编程[M] .北京. 人民邮电出版社,2011  

    [4] 雷延钊 .H.264图像压缩与图像增强算法的研究与实现[L] .成都. 电子科技大学,2011   [5] 毕厚杰.新一代视频压缩码标准-H.264_AVC[M] .北京. 人民邮电出版社,2011

    [6] 陈靖 .深入理解视频编解码技术--基于H.264标准及参考模型[M] .北京. 北京航空航天大学出版社,2012

    [7] 李少博,王晓东,周宇,陈美子,章联军 .基于RTP/RTCP主动丢包的立体视频传输研究[J] .北京. 计算机工程,2015 41(4):241-245

    [8]  刘志军.基于H264的实时流媒体可靠性传输[J] .武汉. 中南民族大学,2015

    展开全文
  • 1、频分多路复用,特点是把电路或空间的频带资源分为多个频段,并将其分配给多个用户,每个用户终端的数据通过分配给它的子通路传输。主要用于电话和电缆电视系统。 2、时分多路复用,特点是按传输的时间进行分割,...

    转载:https://zhidao.baidu.com/question/2073819183176757868.html
    多路复用技术分为以下四种:

    1、频分多路复用,特点是把电路或空间的频带资源分为多个频段,并将其分配给多个用户,每个用户终端的数据通过分配给它的子通路传输。主要用于电话和电缆电视系统。

    2、时分多路复用,特点是按传输的时间进行分割,将不同信号在不同时间内传送。又包含两种方式:同步时分复用和异步时分复用。

    3、波分多路复用,特点是对于光的频分复用。做到用一根光纤来同时传输与多个频率很接近的光波信号。

    4、码分多路复用,特点是每个用户可在同一时间使用同样的频带进行通信,是一种共享信道的方法。通信各方面之间不会相互干扰,且抗干扰能力强。

    在这里插入图片描述
    拓展资料

    多路复用是指以同一传输媒质(线路)承载多路信号进行通信的方式。各路信号在送往传输媒质以前,需按一定的规则进行调制,以利于各路已调信号在媒质中传输,并不致混淆,从而在传到对方时使信号具有足够能量,且可用反调制的方法加以区分、恢复成原信号。

    多路复用常用的方法有频分多路复用和时分多路复用,码分多路复用的应用也在不断扩大。

    多路复用技术的实质是,将一个区域的多个用户数据通过发送多路复用器进行汇集,然后将汇集后的数据通过一个物理线路进行传送,接收多路复用器再对数据进行分离,分发到多个用户。多路复用通常分为频分多路复用、时分多路复用、波分多路复用、码分多址和空分多址。

    有兴趣:传送门

    展开全文
  • 基于蓝牙的数据传输系统的设计

    万次阅读 2012-10-23 00:03:02
    它能够在10米 的半径范围内实现单点对多点的无线数据和声音传输,其数据传输带宽达1Mbps。通讯介质为频率在2.402GHz到2.480GHz之间的电磁波 [1]。 蓝牙技术已获得了两千余家企业的响应,从而拥有了巨大的开发和...

    蓝牙(Bluetooth)是由东芝、爱立信、IBM、Intel和诺基亚于1998年5月共同提出的近距离无线数据通讯技术标准。它能够在10米 的半径范围内实现单点对多点的无线数据和声音传输,其数据传输带宽可达1Mbps。通讯介质为频率在2.402GHz到2.480GHz之间的电磁波 [1]。
    蓝牙技术已获得了两千余家企业的响应,从而拥有了巨大的开发和生产能力。蓝牙已拥有了很高的知名度,广大消费者对这一技术很有兴趣。
    蓝牙技术可以方便地建立无线连接代替传统的有线电缆连接,本论文给出了一种基于蓝牙的无线数据传输系统的研制方案及软件关键算法,能够实现短距离内数据的无线传输,具有较强的可靠性和较快的数据传输速度,能够应用在各种不方便使用有线电缆的现场。
    本程序采用VisualC++软件设计平台完成了初始化蓝牙协议栈、查询蓝牙设备、建立ACL连接以及发送数据的全过程,实现了点对点及点对多点的蓝牙无 线数据传输。为了完成整个应用程序本论文采用了基于蓝牙协议栈的开发方案,并阐述了这一方案的设计过程,原理,方法以及测试过程。在本次设计过程中应用程 序通过对按钮事件的响应来完成对各种命令消息的处理,通过使用蓝牙协议栈提供的动态链接库中包含的函数完成了对蓝牙设备的各种操作,从而完成了本次毕业设 计。实验证明,本程序能够实现短距离内数据的无线传输,具有较强的可靠性和较快的数据传输速度。

    关键词 蓝牙,数据传输,动态链接库

    摘 要 I
    ABSTRACT II
    第一章 绪论 1
    1.1研究背景及意义 1
    1.1.1 研究背景 1
    1.1.2 蓝牙技术发展现状 2
    1.2研究的意义 3
    1.3研究的主要内容和基本思路 4
    1.4论文的构成 5
    第二章 蓝牙系统分析 7
    2.1蓝牙市场分析 7
    2.1.1蓝牙的应用产品分析 7
    2.1.2蓝牙的市场状况分析 8
    2.1.3蓝牙的市场前景分析 8
    2.2系统可行性分析 9
    第三章 系统的总体设计 10
    3.1蓝牙协议体系结构 10
    3.2蓝牙数据传输关键技术 11
    3.3系统开发方案设计 14
    3.3.1 基于完整协议栈的开发方案 14
    3.3.2基于开放协议栈的开发方案 14
    3.3.3 基于蓝牙硬件的开发方案 15
    3.3.4 蓝牙数据传输系统开发方案设计 15
    3.4系统开发环境 16
    3.4.1硬件开发环境蓝牙DDP3303 16
    3.4.2软件开发环境VisualC++6.0 17
    3.5系统工作流程 18
    第四章 蓝牙数据传输系统软件设计模块 21
    4.1 蓝牙数据传输系统软件模块设计 21
    4.1.1 系统主界面的结构设计 21
    4.1.2 使用DLL调用的程序设计 24
    4.2 蓝牙数据传输系统界面说明 32
    4.2.1 启动程序界面 32
    4.2.2 观察窗口 32
    4.2.3 菜单栏 33
    4.3 蓝牙数据传输系统执行步骤 34
    4.4 蓝牙数据传输系统测试 35
    第五章 总结 42
    5.1调试过程中遇到的困难及解决方法 42
    5.2 工作总结 42
    5.3收获与心得 43
    5.4设计展望 44
    致谢 45
    参考文献 46

    ABSTRACT
    Bluetooth is the wire less close quarter data communication technical norms suggesting that commonly by Toshiba,Ericsson,IBM,Intel and Nokia on May,1998.It is able to realize wirless multiple spot data and voice transmission within 10 meters of radius range.It’s person data transmission bandwidth may amount to 1 Mbps.The communication medium is that frequency is in th electromagnetic wave between 2.480 GHz and 2.402 GHz[1].
    Bluetooth technology has already gained more than 2,000 enterprise responding and owned gigantic exploitation and efficiency thereby.Bluetooth has already owned very high notability,the exten sive consumer has had interest in this technology very much.
    Bluetooth technique made wireless connections expediently in place of cable connection in short distance. In this paper , a wireless data transfer system based on bluetooth technique is presented , including the sticking point of soft algorithm. The equipment could realize wireless PC data transfer in short distance ,the results show its advantages and high data transfer rate.The wireless PC data transfer system could apply to all kinds of complicated circumstance that use cable connections discommodious.
    This program adopts software developing platform of VisualC++ to complete the whole process of initializing Bluetooth protocol stack, inquiring Bluetooth equipment ,establishing ACL linking ,sending datas and realizing data transfer of point to point and point to mult-point. This paper adopt the method which is based on BlueTooth protocol stack to realize whole application program. The designing course, principle, measure and testing process are expounded in this paper. In this design application program passess the treatment coming to be completed to various order information responding to button event ande use the function which is included in DLL(Dynamic Link Library) which is provided by BlueTooth protocol stack to have accomplished various to Bluetooth equipment. The application program could realize wireless PC data transfer in short distance,the results show its dependability and high data transfer rate.

    KEY WORDS bluetooth, data transfer, dll(dynamic link library)
    第一章 绪论
    1.1研究背景及意义
    1.1.1 研究背景
    蓝牙是一种支持设备短距离通信(一般是10m之内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。蓝牙的标准是IEEE802.15,工作在2.4GHz 频带,带宽为1Mb/s。
    “蓝牙”(Bluetooth)原是一位在10世纪统一丹麦的国王,他将当时的瑞典、芬兰与丹麦统一起来。用他的名字来命名这种新的技术标准,含有将四分 五裂的局面统一起来的意思。蓝牙技术使用高速跳频(FH,Frequency Hopping)和时分多址(TDMA,Time DivesionMuli-access)等先进技术,在近距离内最廉价地将几台数字化设备(各种移动设备、固定通信设备、计算机及其终端设备、各种数字 数据系统,如数字照相机、数字摄像机等,甚至各种家用电器、自动化设备)呈网状链接起来。蓝牙技术将是网络中各种外围设备接口的统一桥梁,它消除了设备之 间的连线,取而代之以无线连接。
    蓝牙是一种短距的无线通讯技术,电子装置彼此可以透过蓝牙而连接起来,省去了传统的电线。透过芯片上的无线接收器,配有蓝牙技术的电子产品能够在十公尺的 距离内彼此相通,传输速度可以达到每秒钟1兆字节。以往红外线接口的传输技术需要电子装置在视线之内的距离,而现在有了蓝牙技术,这样的麻烦也可以免除了 [2]。
    蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其程序写在一个9 x 9 mm的微芯片中。例如,如果把蓝牙技术引入到移动电话和膝上型电脑中,就可以去掉移动电话与膝上型电脑之间的令人讨厌的连接电缆而而通过无线使其建立通 信。打印机、PDA、桌上型电脑、传真机、键盘、游戏操纵杆以及所有其它的数字设备都可以成为蓝牙系统的一部分。除此之外,蓝牙无线技术还为已存在的数字 网络和外设提供通用接口以组建一个远离固定网络的个人特别连接设备群。
    蓝牙是一种低功耗的无线技术,其设计意图是取代现有的PC机、打印机、传真机、移动电话等设备上的有线接口。作为一种新技术,蓝牙的主要优点是:可以方便 地建立无线连接来代替传统的有线电缆连接;移植性较强,可以应用到很多通信场合中,如WAP、GSM、DECT等;安全性较高,且每一台蓝牙设备的地址全 球唯一;功耗低、设计开发方便、成本较低[3]。
    作为一种电缆替代技术,蓝牙具有低成本和高速率的特点,它可把内嵌有蓝牙芯片的计算机、手机和多种便携通信终端互联起来,为其提供语音和数字接入服务,实 现信息的自动交换和处理。蓝牙产品涉及PC、笔记本电脑、移动电话等信息设备和A/V设备、汽车电子、家用电器和工业设备领域。而一旦支持蓝牙的芯片变得 非常便宜,蓝牙将置身于几乎所有产品之中,从微波炉一直到衣服上的纽扣。
    蓝牙在个人局域网中获得了很大的成功,应用包括无绳电话,PDA与计算机的互联,笔记本电脑与手机的互联,以及无线RS232,RS485接口等。采用蓝 牙技术的设备使用方便,可自由移动。与无线局域网相比,蓝牙无线系统更小、更轻薄,成本及功耗更低,信号的抗干扰能力强[4]。
    1.1.2 蓝牙技术发展现状
    蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。蓝牙的数据速率为1Mb/s。时分双工传输方案被用来实现全双工传输。ISM频带是对所有无线电系统都开放的频带,因 此使用其中的某个频段都会遇到不可预测的干扰源。例如某些家电、无绳电话、汽车房开门器、微波炉等等,都可能是干扰。为此,蓝牙特别设计了快速确认和跳频 方案以确保链路稳定。跳频技术是把频带分成若干个跳频信道(hop channel),在一次连接中,无线电收发器按一定的码序列(即一定的规律,技术上叫做”伪随机码”,就是”假”的随机码)不断地从一个信道”跳”到另 一个信道,只有收发双方是按这个规律进行通信的,而其他的干扰不可能按同样的规律进行干扰;跳频的瞬时带宽是很窄的,但通过扩展频谱技术使这个窄带宽成百 倍地扩展成宽频带,使干扰可能的影响变成很小。与其它工作在相同频段的系统相比,蓝牙跳频更快,数据包更短,这使蓝牙比其它系统都更稳定。FEC (Forward Error Correction,前向纠错)的使用抑制了长距离链路的随机噪音。应用了二进制调频(FM)技术的跳频收发器被用来抑制干扰和防止衰落。
    蓝牙基带协议是电路交换与分组交换的结合。在被保留的时隙中可以传输同步数据包,每个数据包以不同的频率发送。一个数据包名义上占用一个时隙,但实际上可 以被扩展到占用5个时隙。蓝牙可以支持异步数据信道、多达3个的同时进行的同步话音信道,还可以用一个信道同时传送异步数据和同步话音。每个话音信道支持 64kb/s同步话音链路。异步信道可以支持一端最大速率为721kb/s而另一端速率为57.6kb/s的不对称连接,也可以支持43.2kb/s的对 称连接。
    通过蓝牙技术连接在一起的设备组成微网。蓝牙技术的无线电收发器的链接距离可达30英尺,不限制在直线范围内,甚至设备不在同一房间内也能相互链接,并且 可以链接多个设备,这就可以把用户身边的设备都链接起来,形成一个”个人领域的网络”(Personal area network)。虽然微网的节点数有限,但多个微网可以连接在一起,组成一个无限大的散布网,从而将不同设备,如个人电脑、拨号网络、笔记本电脑、打印 机、传真机、数码相机、移动电话、高品质耳机等几乎所有具有开关功能的设备,通过无线的方式连成一个围绕个人的网络,使各种数字设备实现真正的资源共享。 蓝牙技术的最终目的是要建立一个全球统一的无线连接标准,让不同厂家生产的移动计算设备在近距离内无需电缆线就可实现数据共享。
    爱立信在1999年的Comdex展会上推出了世界上第一款蓝牙耳机 HBH-10,随后又在2001年推出了世界上第一款蓝牙手机T36。现在,由爱立信与索尼公司合并手机业务部门后成立的索尼爱立信,以及诺基亚在它们的 新款手机中几乎全部内置了蓝牙功能。另外,摩托罗拉和三星两大手机厂商则主要在高端手机上集成蓝牙功能。国产手机厂商中联想、CECT、夏新等均开始对蓝 牙技术表现出了热情。2002年第三季度微软宣布其Windows XP操作系统支持蓝牙。另外,Windows Pocket PC、Windows CE、苹果电脑的Mac OS X操作系统、Palm和多数手机操作系统都已经增加了对蓝牙的支持。同时,全球各地还有诸多科技公司正在生产各种蓝牙耳机、蓝牙网关、蓝牙USB接口适配 器等小型产品。
    近年来,蓝牙技术的发展转折点主要有两个:一个是1.2版本让无限局域网(WLAN)能与蓝牙共存,另一个则是新版蓝牙传输协议增强数据速率(Enhanced Data Rate,EDR),它将蓝牙的传输速率提高到了2Mb/s。
    目前,蓝牙技术开发重点是多点连接,即一台设备同时与多台(最多7台)其他设备互联。而蓝牙技术的应用主要有以下3类:
    (1)语音/数据接入:是指将一台计算机通过安全的无线链路连接到通信设备上,完成与广域网的联接。
    (2)外围设备互连:是指将各种设备通过蓝牙链路连接到主机上。
    (3)个人局域网(PAN):主要用于个人网络与信息的共享与交换[5]。
    1.2研究的意义
    蓝牙规范接口可以直接集成嵌入到普通电脑、笔记本电脑或一体机电脑的内部芯片中,或通过PC卡或USB接口连接。因而,蓝牙技术在实际生活中的应用十分广 泛。蓝牙耳机、蓝牙键盘、蓝牙数码相机等应用随处可见。在人民生活水平不断提高,通信电子高速发展的今天,更加实用的蓝牙设备及其短距离网络已逐步地进入 我们生活和工作中。
    近年来,移动通信发展迅速,便携式计算机如膝上型电脑(Laptop)、笔记本电脑(Notebook)、手持式电脑(HPC)以及个人数字辅助器 (PDA)等也迅速发展,还有因特网的迅速发展,使人们对电话通信以外的各种数据信息传递的需求日益增长。蓝牙技术把各种便携式电脑与蜂窝移动电话用无线 电链路连接起来,使计算机与通信技术更加密切的结合起来,使人们能随时随地进行数据信息的交换与输。因此,计算机行业、移动通信行业都对蓝牙技术非常重 视,认为蓝牙技术将对未来的无线移动数据通信业务产生巨大的促进作用。预计在最近几年内,蓝牙技术、蓝牙芯片、蓝牙产品都将获得重大进展。因此,推广研究 和普及应用蓝牙短距离网络技术,将对信息产业的更快速而统一的发展,提高商务经管领域中信息交流的便捷高效,便利人民生活有着直接而现实的意义。
    由于用蓝牙技术可以组成个人局域网,它还能应用到其他许多方面。例如瑞典律勒欧科技大学EIS实验室就开发出无线个人局域网,对曲棍球运动员进行实时检测,培养曲棍球运动员。
    蓝牙技术还可以用在遥控汽车上。SigmaComtech介绍了一种用具有蓝牙功能的操作杆来无线控制汽车,输入指令从操纵杆传送到计算机,由其产生控制信号发送给汽车。这一平台还可以在工业应用中使用。
    蓝牙的市场是广阔的,前景是光明的。有人预测,到2005年将有14亿个蓝牙产品,价格也会大幅度下降。那时的最大市场是数字移动电话、计算机和外围设备、PC卡、适配器和耳机。大量普及阶段将在2006年,到2010年后蓝牙产品就会无处不在。
    由于市场需求,越来越多的蓝牙硅片即将投入生产。旅馆、邮局、高尔夫球场、飞机场、零售商场、会议中心和商业领域都在采用蓝牙技术。BluetoothSiG现已拥有2400家会员公司,预计2005年蓝牙芯片将达14亿片,应用机器近7亿台。
    蓝牙的市场前景取决于蓝牙价格和基于蓝牙的应用能否达到一定的规模。目前,蓝牙设备一般由23个芯片组成,价格已低达8美元/片,并逐步向5美元/片迈进。业内人士分析,随着芯片价格、芯片大小以及可操作性、兼容性等问题的进一步解决,蓝牙市场前景必定会更好[6]。
    1.3研究的主要内容和基本思路
    本次毕业设计中我使用了蓝牙演示开发平台(DDP,Bluetooth Demonstration and Development Platform),其基本核心协议(BCP)组件包括硬件电路模块和软件部分,其中软件部分以应用程序扩展的方式提供动态链接库(DLL),需要运行在 操作系统为Windows2000的计算机上。BCP_DLL是蓝牙高层应用程序开发的组件,可以用于开发蓝牙应用。本组件具有以下特点:
     提供基于蓝牙上层点对点的完整的硬件、软件平台和解决方案,包括基带、射频、HCI接口功能以及核心协议;
     支持某一时刻点对点的语音和一点对多达七点的数据传输;
     提供基带射频硬件电路与计算机RS-232和USB的连接方式;
     软件部分运行于Windows2000操作系统上,简单易用;
     适于蓝牙较高层次的应用程序开发(提供动态链接库及其接口,以及开发的用户手册)。
    使用DDP的BCP组件可以进行蓝牙高层应用程序开发,实现查询附近设备、服务发现、语音和数据传输等功能。
    DDP的BCP组件包含蓝牙的一些基本核心协议,它们是:
     逻辑链路控制及适配协议(L2CAP)
     服务发现协议(SDP)
     串口仿真协议(RFCOMM)
    此外还包括用于处理和管理链路的管理实体(ME)。
    设计的重点是在蓝牙核心协议的理解和应用上,其次还要了解数据传输的有关内容。数据传输的一个重要内容是对要传输的数据进行分组。被拆分的数据还要根据蓝 牙数据包格式的定义,加上数据包头,以便模块对其进行正确的识别和处理。软件的主要功能是数据包分组的拆分和重组,所要发送的数据进行蓝牙格式处理后再组 合成较大的数据块,该例程已被写入动态链接库(BCP_DLL.dl1)中,由界面应用程序调用。
    根据系统设计的要求,在VisualC++的软件开发平台上,编制程序界面,完成系统的初始化、点对点的连接及断开、ACL数据的传输。要求界面简洁美观,便于操作,最后还要对此界面作简单的测试。
    1.4论文的构成
    本论文第一章论述了蓝牙的研究背景和发展现状,接着介绍了本论文研究的意义,以及研究的主要内容和基本思路,简要地描述了论文的总体结构和思路。
    第二章主要对蓝牙系统作了简要的分析,分别从蓝牙的应用产品,市场状况和市场前景这三个方面,之后又对蓝牙系统的可行性作了分析。只用通过提供蓝牙产品性能方面的各种数据才能体现出本次毕业设计中对蓝牙传输系统研究的现实意义。
    第三章首先介绍了蓝牙协议体系结构和蓝牙数据传输的关键技术,接着介绍了蓝牙产品开发的三种方案。通过比较,最后确定本设计的蓝牙数据传输系统开发方案。 最后介绍了本设计的硬件和软件开发环境以及系统的工作流程。硬件采用的是南京东大移动互联有限公司提供的蓝牙模块DDP3303,软件则是采用目前比较流 行的VisualC++6.0。
    第四章是论文的主体部分,主要介绍了在软件开发过程中对整个应用程序划分的各个模块的性能研究,以及各个模块中所使用到的VC6.0提供的控件和它的相应函数。此外还介绍了整个应用程序的执行流程,以方便用户使用。
    第五章主要是对本次毕业设计过程中的总结。对设计过程中所碰到的一些问题的说明和解决办法,还有个人的一些心得体会。

    第二章 蓝牙系统分析
    现代通信技术正走向网络核心技术分组化、窄带接入技术无线化。在无线接入领域,早期采用的是电路型传输方式和分组传输技术。近年来由Ericsson、 Intel、Nokia、Toshiba、IBM五家公司组成的蓝牙特殊利益集团SIG联手推出了蓝牙计划(Bluetooth)。采用蓝牙技术的设备使 用方便,可自由移动。与无线局域网相比,蓝牙无线系统更小、更轻薄,成本及功耗更低,信号的抗干扰能力强。本文正是研究基于蓝牙开发平台的无线数据传输, 并且非常具有实际应用价值,可广泛应用在实验及办公环境当中。
    2.1蓝牙市场分析
    蓝牙技术解决了短距离内(10~100米)小型移动设备间的无线互连问题。它的硬件市场非常广阔,涵盖了局域网络中的各类数据和语音设备等。蓝牙技术主要 针对三大类的应用:话音/数据接入、外围设备互连和个人局域网。从市场的角度看,蓝牙技术可制造出点对点连接、点对多点连接的市场应用产品及个人局域网等 网络设备。蓝牙正逐渐渗透到我们生活的各个方面,下面就从蓝牙的应用产品、市场状况和应用前景三个方面对其作简单的分析。
    2.1.1蓝牙的应用产品分析
    蓝牙产品根据不同的应用,可以大致分为四类[7],类与类之间存在着重叠。第一类是应用于各种适配器,如PCMCIA、USB蓝牙适配器、CF卡蓝牙适配 器等,这些适配器能够给己有的固定设备,如电脑和打印机等,实现无线连接的功能;第二类是蓝牙电气产品,如蓝牙耳机、电脑和其外围设备的连接(无线键盘、 无线鼠标、无线游戏操纵杆);第三类是嵌入式系统,这里的系统指电脑或其他固定设备,蓝牙设备直接集成在这些设备里,对于PC而言,可以将蓝牙系统直接集 成在主板上。嵌入到系统中后,就不必采用第一类的蓝牙适配器;第四类是移动电话,通过适配器或直接嵌入等方式将蓝牙功能集成到移动电话中。
    蓝牙应用确实非常广泛,而随着蓝牙技术的进一步成熟,蓝牙互操作性等问题的解决,蓝牙芯片成本的进一步降低,蓝牙产品必将大规模的投入生产和应用,为人类生活带来更多便利。
    2.1.2蓝牙的市场状况分析
    短距离无线蓝牙技术已经嵌入到了许多消费装置中,从笔记本电脑、手机到汽车都可以看到蓝牙的踪影。同时蓝牙在操作系统方面也得到了强有力的支持,2002 年第三季度微软宣布在Windows XP支持蓝牙,而在此之前已经有Pocket PC、Windows CE.Net、苹果电脑的Mac OS X操作系统、Palm与多数手机操作系统增加了对蓝牙的支持[8]。
    具权威机构预测,到2004年,在所有重要的电子产品中,60%将是便携式的,而蓝牙技术恰恰是为这些设备之间提供无线连接的主要技术。未来的信息家电将 是以因特网和家庭网络为基础,能以无线连接实现双向传输,显然蓝牙技术是符合家电需求的优选技术。据市场调查机构Navian公司日前公布的调查报告, 2001年全球蓝牙芯片发货量达505万套,价值9400多万美元。该公司认为,2002年全球蓝牙芯片发货量将超过3000万套,价值4.32亿美元。 另据美国ABI市场调查公司预测,采用蓝牙技术的通信应用设备将从2002年的5600万部迅速增长到2005年的超过10亿部。随着设备的增加,届时蓝 牙设备的销售额可达53亿美元。
    蓝牙技术不仅在手机、照相机及PC应用中显示出巨大的增长,而且汽车也将装备蓝牙技术设备。另据Frost&Sallivan公司研究,欧洲蓝牙芯片市场前景看好,2000年欧洲的销售额已达3670万美元,到2006年将达到约7亿美元[9]。
    2.1.3蓝牙的市场前景分析
    蓝牙的市场前景取决于蓝牙价格和基于蓝牙的应用能否达到一定的规模[10]。根据蓝牙的定位,蓝牙应该通过一个体积小、成本低、功耗低、跳速快的单芯片来 实现,只有低廉的价格才能在现有的通信产品、家电产品和办公产品中引入蓝牙技术。虽然目前定义了不少蓝牙的应用,但这些都是对传统应用的改进,真正基于蓝 牙的特性的应用还是很少,这也将成为影响蓝牙市场发展的重要因素。不过,即使蓝牙市场没有像预测的那样快速扩展,蓝牙的市场价值也不用怀疑,毕竟需求才是 影响市场的主要因素。
    目前,蓝牙的初期产品已经问世,一些芯片厂商已经开始着手改进具有蓝牙功能的芯片。与此同时,一些颇具实力的软件公司或者推出自已的协议栈软件,或者与芯 片厂商合作推出蓝牙技术实现的具体方案。尽管如此,蓝牙技术要真正普及开来还需要解决以下几个问题:首先要降低成本;其次要实现方便、实用,并真正给人们 带来实惠和好处;第三要安全、稳定、可靠地进行工作;第四要尽快出台一个有权威的国际标准。一旦上述问题被解决,蓝牙将迅速改变人们的生活与工作方式,并 大大提高人们的生活质量[11]。
    2.2系统可行性分析
    蓝牙系统采用ISM免费频段,在通信的时候无须考虑通信成本的问题。蓝牙设备的收发距离为l0米,作为室内的无线数据传输已足够,而增加发送功率传输距离 还可以达到100米。距离较短是蓝牙技术的一个缺点,但利用蓝牙技术组建的无线个人区域网可以有效解决这方面的不足。蓝牙设备可以每8个(也可以少于8 个)设备组成一个微微网,每个微微网又可以和其他的微微网互联组成散射网,从而提高蓝牙设备的通信距离,因此本系统可以很方便的进行扩展,实现远距离的无 线数据传输。并且还可以由点对点的传输,扩展到点对多点,由数据传输还可以扩展到语音传输,而且可以达到实时传输。蓝牙采用无线接口来代替有线电缆连接, 具有很强的移植性,适用于多种场合,加上该技术功耗低、对人体危害小,应用简单、容易实现,所以也易于推广。
    第三章 系统的总体设计
    要进行系统的设计,则必须详细了解所使用的硬件和软件开发环境,而要了解硬件开发环境,首先还必须了解蓝牙的协议体系结构以及蓝牙数据传输的一些关键技术。最后也是最重要的还必须了解蓝牙数据传输系统的工作流程。本章就是从以下几个方面分别进行阐述的。
    3.1蓝牙协议体系结构
    蓝牙核心系统覆盖了最低四层(射频层、基带层、链路管理层和逻辑链路控制与适配层L2CAP)和与其相关的服务层协议[12]。核心系统架构如图3.1所 示。最底三层有时作为一个子系统蓝牙控制器。通常在蓝牙控制器和L2CAP及其它应用层(即蓝牙主机)之间是一个标准的物理通信界面,而该物理通信界面一 般是可选的。该界面叫作主机控制界面(HCI),HCI层以下的叫做主控制器,HCI层以上的叫主机。蓝牙核心系统通过各种接入点来提供设备管理服务、传 输控制服务和数据传输服务(图中的椭圆形即为接入点)。下面对核心系统最低四层加以简单说明。
    (1)射频层:射频块主要在物理信道上可靠地传送和接收符合要求的数据。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。它使用查 询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL),而且,在同一射频上可实 现多路数据传送。
    (2)基带层:对射频块的时间和频率进行控制,传输符合基带要求的数据流。还-可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达L2CAP。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。
    (3)链路管理器层:链路管理器主要对与物理信道、逻辑传输和逻辑连接上所传输的相关数据载荷进行编码和解码。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。
    (4)逻辑链路控制与适配层(L2CAP):逻辑链路控制和适配层主要是进行流量控制和接收缓冲分配。L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP允许高层协议以64k字节长度收发数据分组。
    图3.1 蓝牙核心体系架构
    3.2蓝牙数据传输关键技术
    蓝牙系统一般由天线单元,链路控制(固件)单元,链路管理(软件)单元,蓝牙软件(协议)单元等4个功能单元组成(如图3.2)。蓝牙天线属于微带天线, 无线接口遵循FCC(美国联邦通讯委员会)对ISM (工业、科学、医学)频段的规定。基带描述了设备的数字信号处理部分,即蓝牙链路控制器,它完成基带协议和其它底层的链路规程。链路管理(LM)软件模块 携带了链路的数据设置、鉴权、链路硬件配置和其它一些协议。
    图3.2 蓝牙系统的组成

    蓝牙数据传输系统的主要技术包括:
    1. 射频特性
    蓝牙设备的工作频段选在全世界范围内都可自由使用的2.4GHz的ISM频段,频道采用23个或79个,频道间隔为1MHz,采用时分双工方式。蓝牙的无 线发射机采用FM调制方式,从而能降低设备的复杂性,最大发射功率分为3个等级100mW(20dBm),2.5mW(4dBm),1mW(0dBm), 在4-20dBm范围内要求采用功率控制。
    2. 跳频技术
    跳频是蓝牙使用的关键技术之一。对应单时隙包,蓝牙的跳频速率为1600跳/s;对于多时隙包,跳频速率有所降低,但是在建链时则提高为3200跳/s。
    3. TDMA结构
    蓝牙的基带符号速率为1Mb/s,采用数据包的形式按时隙传送,每时隙625µs,蓝牙系统支持实时的同步定向联接和非实时的异步不定向联接。蓝牙技术支持一个异步数据通道,3个并发的同步语音通道或一个同时传送异步数据和同步语音通道。
    4. 网络技术
    蓝牙技术支持点对点和点对多点连接。几个piconet可以被连接在一起,靠调频顺序识别每个,同一piconet所有用户都与这个跳频顺序同步。其拓扑 结构可以被描述为”多piconet”结构。在一个”多piconet”结构中,在带有l0个全负载的独立的pieonet的情况下,全双工数据速率超过 6Mbit/s。
    5. 基带
    基带部分描述了硬件-基带链路控制的数字信号处理规范。基带链路控制负责处理基带协议和其它一些低层常规协议。蓝牙基带协议是电路交换与分组交换的结合。 在被保留的时隙中可以传输同步数据包,每个数据包以不同的频率发送。一个数据包名义上占用一个时隙,但实际上可以被扩展到占用5个时隙。蓝牙可以支持异步 话音。每个话音信道支持64kbit/s同步话音链路。异步信道可以支持一端最大速率为721 kbit/s,而另一端速率为57.6kbit/s的不对称连接,也可以支持43.2kbit/s的对称连接。
    6. 连接类型和数据包类型
    连接类型定义了哪种类型的数据包能在特别连接中使用。蓝牙基带技术支持两种连接类型,即同步定向连接(SCO)类型(主要用于传送话音)和异步无连接 (ACL)类型(主要用于传送数据包)。同一个piconet中不同的主从对可以使用不同的连接类型,而且在一个阶段内可以任意改变连接类型。每个连接类 型最多可以
    支持l6种不同类型的数据包,其中包括四个控制分组,这一点对SCO和ACL来说都是相同的。两种连接类型都使用TDD(时分双工传输方案)实现全双工传 输。SCO连接为对称连接,利用保留时隙传送数据包。连接建立后,master和slave可以不被选中就发送SCO数据包。SCO数据包既可以传送话 音,也可以传送数据,但在传送数据时,只用于重发被损坏的那部分的数据。ACL链路就是定向发送数据包,它既支持对称连接,也支持不对称连接。 Master负责控制链路带宽,并决定piconel中的每个slave可以占用多少带宽和连接的对称性。Slave只有被选中才能传送数据。ACL链路 也支持接收master发给piconet中所有slave的广播消息。
    7. 纠错
    基带控制器有3种纠错方案:即1/3比例前向纠错(FEC)码、2/3比例前向纠错码和数据的自动请求重发方案。FEC(前向纠错)方案的目的是为了减少 数据重发的次数,降低数据传输负载。但是,要实现数据的无差错传输,FEC就必然要生成一些不必要的开销比特而降低数据的传送效率。这是因为,数据包对于 是否使
    用FEC是弹性定义的。报头总有占1/3比例的FEC码起保护作用,其中包含了有用的链路信息。
    8. 链路管理
    链路管理(LM)软件模块携带了链路的数据设置、鉴权、链路硬件配置和其它一些协议。LM能够发现其它LM远端并通过LMP(链路管理协议)与之通信。 LM模块提供的服务包括:①发送和接收数据。②请求名称。LM能够有效地查询和报告名称或长度最大可达l6位的设备ID。③链路地址查询。④建立连接。⑤ 鉴权。⑥链路模式协商和建立,比如数据模式或者话音/数据模式。在连接建立过程中模式是可以变更的。⑦决定帧的类型。⑧将设备设为sniff模式。工作在 sniff模式的设备只接收M时隙的数据。M时隙的位置是LM协商决定的。Master只能有规律地在特定的时隙发送数据。⑨将设备设为hold模式。工 作在hold模式的设备为了节能,在一个较长的周期内停止接收数据,平均每4s激活一次链路,这由LM定义,LC(链路控制器)具体操作。⑩当设备不需传 送或接收数据但仍需保持同步时将设备设为暂停模式。处于暂停模式的设备周期性地激活并跟踪同步,并检查page消息。
    9. 话音技术
    蓝牙话音信道采用连接可变斜率增量调制(CVSD)话音编码方案,并且从不重发话音数据包。CVSB编码擅长处理丢失和被损坏的语音采样,即使比特错误率达4% ,CVSD编码的语音还是可听的。
    10. 软件结构
    蓝牙设备需要支持一些基本互操作特性要求。对某些设备,这种要求涉及到无线模块、空中协议以及应用层协议和对象资格式。但对另外一些设备,比如耳机这种要 求就简单得多。蓝牙设备必须能够彼此识别并装载与之相应的软件以支持设备更高层次的性能。蓝牙对不同级别的设备(如PC、手持机、移动电话、耳机等)有不 同的要求,例如,无法期望一个蓝牙耳机提供地址簿,但是移动电话、手持机、笔记本电脑就需要有更多的功能特性。软件结构需要具有的功能包括:设置及故障诊 断工具、能自动识别其它设备、取代电缆连接、与外设通信、音频通信与呼叫控制、商用卡的交易与号簿网络协议等。蓝牙的软件(协议)单元是一个独立的操作系 统,不与任何操作系统捆绑。适用于几种不同商用操作系统的蓝牙规范正在完善中[13]。
    3.3系统开发方案设计
    蓝牙产品的开发主要有三种方案[14]:基于完整协议栈的开发方案,基于开放协议栈的开发方案和基于蓝牙硬件的开发方案。
    3.3.1 基于完整协议栈的开发方案
    目前蓝牙产品大多数采用的是基于协议栈的开发方案。这种方案使用完整的蓝牙协议栈和软硬件开发包,开发者不需要深入研究蓝牙协议规范,利用所提供的开发包 就可以在蓝牙协议栈基础上开发相应的蓝牙产品。采用这种方案的好处是蓝牙产品的开发具有常规性,难度小,从而研发周期短,但是完整的蓝牙协议栈和软硬件开 发包的价格比较贵,因此这种方案非常适合开发商用的蓝牙产品。
    3.3.2基于开放协议栈的开发方案
    随着蓝牙技术被越来越多地了解和研究,目前,在Internet上出现了一些基于linux操作系统的开放蓝牙协议栈。由于这种蓝牙协议栈具有的开放共享 性,因此用它来开发蓝牙产品最大的好处是开发成本低,但是因为没有开发包,仅仅在蓝牙协议栈的基础上,这会给蓝牙产品的开发带来一定的困难。另外, Internet上公布的这些开放的蓝牙协议栈,基本上是一些蓝牙爱好者共同开发的,往往没有经过全面的系统测试,从而导致整个协议栈的可靠性不高,这会 对所开发的蓝牙产品产生一定的影响。
    目前,在Internet上流传较为广泛的开放蓝牙协议栈主要包括IBM公司BlueDrekar蓝牙协议栈、Bluez蓝牙协议栈、Nokia的Affix蓝牙协议栈以及Axis的OpenBT协议栈。
    3.3.3 基于蓝牙硬件的开发方案
    在没有完整的蓝牙协议栈的情况下,也可以在蓝牙硬件的基础上进行开发。使用这一方案,一般有两种方式可以选择:一种是采用只提供无线接口的简单蓝牙硬件模 块,再针对应用自行开发主芯片,该芯片包括从基带层到应用层的完整蓝牙协议栈,这种开发方式较为复杂;另一种方法是购买由供应商提供的完整蓝牙模块,这种 蓝牙模块一般包括了无线收发层、基带层、链路管理层和主控制器层,再针对该蓝牙模块进行应用开发。在第二种开发方式中,由于主机和主机控制器层在硬件上完 全分离,所以需要通过HCI层把蓝牙模块和蓝牙主机连接在一起,为应用提供支持。
    3.3.4 蓝牙数据传输系统开发方案设计
    使用完整的蓝牙协议栈和开发包来进行蓝牙产品的开发,虽然其价格昂贵,但是开发周期短,开发难度小。因此针对本毕业设计题目,要求在较短的时间内,开展对蓝牙应用软件和产品的开发和研究是非常适用的。所以本课题采用了第一种开发方案,即基于蓝牙协议栈的开发方案。
    本设计是采用东南大学移动互联技术有限公司,提供的蓝牙开发平台(DDP 3303蓝牙芯片),实现无线数据的传输。此公司提供的蓝牙演示开发平台(DDP,Bluetooth Demonstration and Development Platform)基本核心协议(BCP)组件包括硬件电路模块和软件部分,其中软件部分以应用程序扩展的方式提供动态链接库(DLL),BCP_DLL 是蓝牙高层应用程序开发的组件,可以用于用户开发蓝牙应用。
    数据传输系统要求利用蓝牙开发平台所提供的软硬件,实现点到点的无线数据传输。本设计要求完成无线数据传输系统中发送端的程序设计与调试。采用VisualC++的程序设计开发环境,要求使操作界面简洁美观,达到点对点及点对多点的实时数据传输。
    3.4系统开发环境
    3.4.1硬件开发环境蓝牙DDP3303
    本设计采用南京东大移动互联技术有限公司提供的蓝牙模块,其型号是DDP3303,该平台可以提供RS232、USB接口供用户进行开发、调试使用,音频接口可进行蓝牙语音的传输。它的硬件电路模块有如下特点:
    ● 可动态设置主机与蓝牙主控制器之间的接口,方便主机与蓝牙之间进行动态协商。
    ● 支持完整的蓝牙演示功能,其中包括数据通信、语音通信和文件传输等,并且提供可靠的差错控制、重传等。
    ● 提供1.1B版本的蓝牙规范所有指令的测试接口,可方便地进行基于HCI层的指令测试。
    ● 记录窗口提供了工作流程和数据传输记录,以及上次工作流程的保存等功能,方便用户的学习和测试 。
    ● 可进行点对多点测试 。
    ● 充分了解掌握蓝牙协议栈包括l2cap、SDP、RFCOMM协议。
    ● 提供基于协议栈的应用模拟,包括蓝牙耳机、音频网关、模拟串口。
    ● 提供丰富的帮助文档,大大地加快了用户学习进度和效率。
    下面将列出DDP3303蓝牙开发平台主要技术参数表(表3.4.1),有了这些参数,我们就可以在此参数的约束下,达到最佳的传输效率。
    表3.4.1 主要技术参数表
    蓝牙规范版本 v1.2
    外型尺寸(长mm*宽mm*高mm) 75mm*45mm*20mm
    输入电压(v) 6V
    输入电流(mA) 40-50mA
    链接功耗(mw) Master:120mw;Slave:90mw
    睡眠功耗(mw) 1.5mw(可再唤醒)
    发射功率(mw) 1mw-10mw
    接收灵敏度(dbm) -75dbm
    工作温度 -40℃-50℃
    有效传输距离(M) 0m-15m
    工作方式 主从(可互换),从设备最多7个
    传输速率 732kb/s
    接口类型 USB/RS232
    运行环境 Win98/Win2000/WinXP
    工作频段 2.4GHz
    功能 数据/语音
    数据链接方式 SCO/ACL

    下图给出了本设计所使用的蓝牙DDP3303开发平台的外观图(图3.4.1),
    图3.4.1 蓝牙DDP3303开发平台的外观图
    3.4.2软件开发环境VisualC++6.0
    Visual C++ 6.0是一个基于Windows平台并为Windows平台开发应用程序的比较复杂的C++集成开发环境,是一个由许多部件组成的完整的开发环境。这些部 件协同工作,从而大大简化了软件开发的过程。在用Visual C++开发面向对象应用程序时,主要有两种方法:一种是使用Windows提供的API函数,另一种方法是直接使用Microsoft提供的MFC类库。 API是应用程序编程接口的缩写。API为应用程序提供系统的各种特殊函数及数据结构定义,Windows应用程序可以利用上千个标准API函数调用系统 功能。MFC类库集成了大量已经预先定义好的类。用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。本次毕业设计我使用VC++6.0 MFC类库来开发应用程序,开发效率高,并且便于理解[15]。
    3.5系统工作流程
    蓝牙数据传输主要完成系统的初始化、点对点的连接及断开、ACL数据的传输[14]。整个工作流程从模块的初始化开始逐步展开,其设计流程如图3.5所示。

    图3.5 工作流程图
    以下为每个部分的详细说明。
    (1)系统初始化
    系统初始化包括模块的初始化和系统初始状态设定。系统物理连接完成后,驱动程序自动加载,并开始初始化工作。系统首先将复位。驱动程序向模块发出 HCI_Rest指令,对模块进行复位,模块接收到该指令后,完成复位操作并向主机返回一个命令完成事件(Command Complete Event),通知主机复位完成。主机接收到复位完成事件后,读取并保存模块信息,包括版本信息、蓝牙地址和缓冲区大小等。其中的蓝牙地址将用于连接操 作,它在模块出厂时已经设定好,缓冲区大小参数将提交给主机,以便主机对要传输的数据进行分块。然后,主机将对模块进行初步设置,包括主机缓冲区设置和计 时器设置。通过HCI_Host_Buffer_Size指令,将主机缓冲区大小参数传递给模块,主机在对数据传输进行控制时将用到该信息。对于计时器, 包括查询时间值的大小、间隔等内容,模块默认了常用信息,实际应用中没有特别要求不用对其进行修改。但要应用相关指令将其读取出来并由主机保存,以便控制 时使用。在HCI的主机控制器和基带指令中有HCI_Read_xxx_Timeout指令,将返回这些计时器设置。
    (2)查询从蓝牙设备
    初始化完成后,开始进行查询(Inquiry),查询其它蓝牙设备。在Inquiry没有响应的情况下,系统进入该状态等待其它设备的连接请求。初步设置 完成后,系统将进行一次扫描,以便发现有效范围内的其它系统,从而决定本系统应处的状态。系统在开始的这次扫描后,将进行进一步的状态设置。 HCI_Inquiry指令将使系统进入寻找临近设备的状态,它的主要参数包括Inquiry_Length和Num_ Response。这里将产生程序的分支:如果找到临近设备,则系统设置为主设备,并发送连接请求;如果没有找到临近设备,那么在超过 Inquiry_Length时间之后,系统设置为从设备,并进入定期查询状态(HCI_Periodic_Inquiry_Mode),等待其它设备作 为主设备的连接请求。定期查询的参数则包括查询间隔、每次查询时间及允许应答的设备数等。
    (3)建立连接
    设备A作为主设备向设备B发送了连接请求, B的蓝牙模块接到该请求后向主机B发送一个连接请求事件(Connection Request Event),该事件中包含设备A的蓝牙地址、设备类型、链接模式等连接参数。设备B接收A的连接请求并发送指令 HCI_Accept_Connection_Request,同时用Role参数指定自己的角色。该指令发出后,设备A、B都将收到一个连接完成事件 (Connection Complete Event),该事件参数中包括了对方蓝牙地址、链接模式、加密方式以及连接句柄(Connection_ Handle),其中链接句柄是该连接的”名字”,对该连接的操作都将通过引用连接句柄进行。这样,两个设备间的连接就建立完成,可以进行数据传输了。中 断链接相对较为简单。链接的任一方发出中断指令,就可以中断链接。指令HCI_Disconnect中带有参数Connection_Handle,以表 示中断哪个链接。在当前数据传输操作完成后,A和B都将收到一个带有连接句柄的中断链接事件(Disconnection Complete Event)。
    (4)数据传输
    系统链接建立后,数据传输就比较简单了。因为通信信道已经建立,只需要向USB总线上发送要发送的数据即可。数据传输的一个重要内容是对要传输的数据进行 分组,以适应模块数据缓冲区的大小,这是以读取Buffer_Size的值为依据的。被拆分的数据还要根据蓝牙数据包格式的定义,加上数据包头,以便模块 对其进行正确的识别和处理。在软件中,专门针对这一要求编制了一个数据包处理例程,它的主要功能是数据包分组的拆分和重组。所要发送的数据进行蓝牙格式处 理后再组合成较大的数据块,该例程已被写入一个动态链接库(BCP_DLL.dl1)中,由界面应用程序调用。数据传输部分另一个重要内容就是针对USB 总线的编程。USB驱动程序并不直接与硬件对话,而是通过创建USB请求块(URB),并把它提交给总线驱动程序(USBD.SYS)来完成硬件操作。经 过前面的数据打包例程处理过的数据又将进行URB的接受实体,当它接收到送来的URB时,就会把驱动程序对其的调用转化为带有主功能的代码,来完成指定的 操作。由此,驱动程序首先要依照DDK中的规则创建URB。URB创建后,就可以使用它与USBD.SYS进行交互[16]。当然在本设计中,也可以完全 不用USB接口来传输数据,而直接由RS232串口来完成数据的传输。
    第四章 蓝牙数据传输系统软件设计模块
    本章节是整个论文的一个重点,主要论述了应用程序界面的设计以及实现的过程以及消息的发送与响应,接着讲述了对整个应用程序的设计过程,已经程序运行时的执行过程,最后完成了对整个应用程序性能的检测。
    4.1 蓝牙数据传输系统软件模块设计
    要想使用蓝牙设备进行数据传输,需要开发出适合于所用蓝牙设备的应用程序,基于上文所讲蓝牙系统工作流程,使用VC6.0开发一个适用于蓝牙DDP3303开发平台的应用程序。详细的设计过程如下所示:
    4.1.1 系统主界面的结构设计
    1.特殊消息类型及结构的设计
    基于BCP_DLL.dll开发的应用程序首先要初始化BCP,并向BCP注册,注册的内容包括:
     应用程序线程ID(Thread identifier)
     应用程序定义的用于接收BCP_DLL的消息
    如果注册成功,BCP将给该应用程序分配一个ID,用以区分多个应用程序。应用程序使用大部分命令时会需要将它的ID传递给BCP,以便将返回消息发给相应的应用程序线程。
    BCP_DLL是通过向应用程序线程发送消息来传递信息的,包括协议栈报告的错误状态、接收到对方设备请求的向上指示和接收到的数据等。应用程序接收到 BCP_DLL发送的消息并做出了相应的处理后,必须调用一个函数通知BCP_DLL作为对此消息的应答。BCP_DLL发送的消息如果是应用程序向 BCP_DLL注册的消息,那么这个消息带有两个参数,分别是:
    wParam BCP_MSG结构的指针。
    lParam BCP_MSG结构的长度。
    应用程序要对这些参数进行分析,BCP_MSG结构规定了参数的格式,BCP_MSG结构包括两大部分:
    MsgType(消息类型) 消息类型给出了BCP返回的消息种类。BCP通过这些消息向用户报告命令执行的结果、协议栈发给应用程序的指示信息和事件信息。
    MsgBody(消息体) 消息体是联合类型,内部包括多个结构,每一种结构都分别对应一个MsgType的消息所带的必要参数,但并不是所有的消息类型都有参数。
    所有消息的定义和BCP_MSG结构的定义在头文件BT_BCP.h中。
    2.系统主界面的设计
    主界面由菜单栏,对话框和状态栏三大部分组成,其中菜单栏有三个菜单选项,分别是:”编辑”,”查看”和”帮助”。下面说明主界面的设计步骤。
    第一步:选择File|New…菜单项,弹出NEW对话框,选择Projects标签,选中MFC AppWizard(exe)项,在Location编辑框中输入要建立的工程所在的目录,可以点击编辑框右边的省略号按钮选择一个已存在的目录,在 Project name编辑框中输入要建立的工程名称,在这里输入:TEST。
    第二步:在弹出的MFC AppWizard-Step1对话框中选择single document,即应用程序的类型为单文档模式,然后单击OK按钮。
    第三步:在弹出的MFC AppWizard-Step 6 of 6对话框中选择视图类CTestView,更改其基类名称为CFormView类,其余选项保持默认设置,然后单击OK按钮。
    第四步:在弹出的New Project Information对话框中点击Finish按钮,完成应用程序主框架的创建。
    完成主框架窗口的创建之后,点击运行,可以看到一个普通的应用程序界面,并不能实现我们想要完成的蓝牙数据传输的功能,为此我们还应该向应用程序中添加一些必要的控件,下面是整个界面的设计过程:
    首先,删除工具栏。本应用程序很少使用到工具栏,基本是通过对按钮控件的消息响应来完成蓝牙数据通信的功能。删除的方法也很简单,将框架类 CMainFrame的头文件MainFrm.h中声明的工具栏对象m_wndToolBar加”//”注释掉,再将CMainFrame类的成员函数 OnCreate中创建的该工具栏对象的一段代码进行同样的处理即可。
    其次,修改菜单。将”文件”菜单删除,使用Delete按钮即可删除,保留其余三个菜单,然后分别对这三个菜单的下拉菜单项作调整。其中,”编辑”菜单改 为”存储当前工作流程”和”载入上一次工作流程”两个菜单项;”查看”菜单改为”状态栏”选项;”帮助”菜单改为”关于蓝牙数据传输系统…”选项。菜单项 的名称,ID号和消息响应函数列于表4.2。
    最后,添加对话框。系统主界面中共放置了10个Button,1个Edit Box,10个Stitic Text,3个Combo Box,3个Group Box以及2个List Control和1个Progress。虽然对话框树目比较多,但在主界面中将它们按照蓝牙设备的操作顺序摆放在相应的位置,使得操作简洁。将这些对话框 的名称,属性,ID号和消息响应函数列于表4.3中(10个Stitic Text和3个Group Box已略去)[17]。
    表4.1 菜单项属性
    菜单项的名称 ID号 消息响应函数
    存储当前工作流程 ID_SAVE_WORKDREAM OnSaveWorkdream()
    载入上一次工作流程 ID_READWORK OnReadwork()
    状态栏 ID_VIEW_STATUS_BAR 无
    关于毕业设计演示程序… ID_APP_ABOUT ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

    表4.2 对话框属性
    属性 名称 ID号 消息响应函数
    Button 启动协议栈 IDC_BUTTONSTART OnButtonstart()
    注册服务 IDC_BUTTONREGSER OnButtonregser()
    注册RFCOMM信道号 IDC_BUTTONREGRF OnButtonregrf()
    查询设备 IDC_BUTTONINQ OnButtoninq()
    服务发现 IDC_BUTTONSEARCH OnButtonsearch()
    建立ACL连接 IDC_BUTTONLINK OnButtonlink()
    建立RFCOMM信道 IDC_BUTTONCONNECT OnButtonconnect()
    发送数据 IDC_BUTTONSEND OnButtonsend()
    断开RFCOMM信道 IDC_BUTTONUNCONNECT OnButtonunconnect()
    断开ACL连接 IDC_BUTTONUNLINK OnButtonunlink()
    Combo Box 注册的RFCOMM 信道号 IDC_COMBO5 无
    建立连接的设备地址 IDC_COMBO1 OnSelchangeCombo1()
    对方的RFCOMM信道号 IDC_COMBO2 无
    Edit Box 本地设备地址 IDC_STATIC1 无
    List Control 显示工作流程 IDC_STATUS 无
    数据传输 ID_LIST1 无
    服务发现 IDC_RESEARCH 无
    Progress 查询设备进度 IDC_PROGRESS1

    4.1.2 使用DLL调用的程序设计
    主界面设计完成后,就是要对单击界面按钮事件的响应,即需要使用BCP_DLL.dll提供的函数库来完成各个按钮标识符所标识的功能,下面是整个毕业设计主应用程序设计的相关介绍:
    1.系统初始化的设计
    系统初始化过程包括:启动蓝牙协议栈、注册服务、注册RFCOMM信道号三个步骤。而在初始化协议栈之前,还必须进行传输层的初始化,这个过程是在应用程序启动之前通过对一个组合框列表的选择来完成相应的初始化,主要是对蓝牙设备与主机的连接。
    (1)对传输层初始化所使用到的是DLL中的接口函数为void BCP_Init(BOOL UsbOrNot,UINT8 NumberOfCom);函数的作用为初始化BCP组件并选择传输层接口。当参数UsbOrNot为TRUE时选USB作为传输层接口;为FALSE时 选RS-232作为传输层接口。如果选择RS-232作为传输层接口,参数NumberOfCom制定串口号的值 ,1为”串口1″,2为”串口2″。
    实现传输层初始化的程序段如下,其中用来获取选择传输接口的ComboBox的ID号为IDC_COMBO1。
    //Test.cpp
    CComboBox m_SelTran;//定义ID号为IDC_COMBO1的编辑框的变量
    int Tran; //传输层的选择0:COM1,1:COM2,2:USB
    Tran = m_SelTran.GetCurSel();//返回编辑框中输入的选项转换为的整数值
    switch(Tran)
    {
    case 0:{
    m_pMainWnd->SetWindowText(”毕业设计 - COM1″);
    break; //选择COM1后设置的对话框名称
    }
    case 1:{
    m_pMainWnd->SetWindowText(”毕业设计- COM2″);
    break; //选择COM2后设置的对话框名称
    }
    case 2:{
    m_pMainWnd->SetWindowText(”毕业设计- USB”);
    break; //选择USB后设置的对话框名称
    }
    }
    //DiaTest.cpp文件
    switch(Tran)
    {
    case 0:{
    BCP_Init(false,1); //选择COM1后对传输层初始化
    Break;
    }
    case 1:{
    BCP_Init(false,2); //选择COM2后对传输层初始化
    Break;
    }
    case 2:{
    BCP_Init(true,1); //选择USB后对传输层初始化
    Break;
    }
    }
    在本次毕业设计中选择的是USB接口。
    (2)在启动BCP之前须向BCP注册应用程序线程ID以及接收消息类型。可以向BCP注册多个应用,注册可以在任何时刻,但是在启动BCP之前至少必须注册一个,并由该应用启动BCP。这个过程我们通过BCP_Register完成。具体函数代码如下所示:
    //DiaTest.cpp文件
    extern UINT8 ucCmpID;//定义变量存放线程ID号
    HANDLE MSGThread; //定义句柄
    DWORD dwThreadID; //定义应用程序线程ID
    MSGThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL, 0,
    (LPTHREAD_START_ROUTINE)ProcessBTMsg, NULL,
    0, &dwThreadID);//创建应用程序线程
    WM_BCP_MSG = RegisterWindowMessage(_TEXT(”WM_BCP_MSG”));
    //注册窗口消息
    ucCmpID = BCP_Register( dwThreadID, WM_BCP_MSG, MOD4);
    //将在BCP中注册的线程ID号附给变量ucCmpID
    if( ucCmpID == 0 )
    {
    //MessageBox(”BCP Register Error!”, “BCP Demo”,MB_OK);注册失败
    Process(48);// Process(int type)是一个自定义的输出字符串的函数,
    此时输出头文件中定义的第48个字符串
    return FALSE;
    }
    for (int i=0;i<30;i++) RegChannel[i]=0;
    //注册成功后,初始化30个信道标志位
    SetTimer(10,1000,NULL);
    //每隔1秒钟向应用程序的消息队列中放一个WM_TIMER消息
    (3)接下来就是要初始化蓝牙协议栈,初始化的作用一方面是将应用程序的线程ID注册到BCP中;另一方面是启动BCP,等待应用程序发送的消息。
    用于初始化蓝牙协议栈的接口函数为void BCP_Start(UINT8 ucCmpID),它的作用是启动BCP,参数ucCmpID是进行该项操作的应用程序ID。实现初始化蓝牙协议栈的程序段如下:
    void CDiaTest::OnButtonstart()
    {
    BCP_Start(ucCmpID);//启动BCP
    }
    启动BCP成功之后,在消息处理函数ProcessBTMsg()中处理成功返回的消息START_CNF,将本地的蓝牙地址显示在指定的对话框内。具体参考DiaTest.cpp文件注释。
    (4)接着就要注册本地RFCOMM信道号,因为注册的信道号只能在1到30之间,首先必须编程检测用户输入的值是否在1-30之间,可以通过对话框数据 检验(Dialog data validation,简称DDV)实现对用户输入值的检验。注册工程使用接口函数void BCP_RegisterChannel(UINT8 ucCmpID, UINT8 ucSeverChannel);向RFCOMM服务器注册RFCOMM服务器信道号,并且显示在指定的窗口内。具体的程序详见附录 DiaTest.cpp文件中的void CDiaTest::OnButtonregrf()函数。
    (5)然后就要点击”注册服务”按钮来完成注册本地服务。本应用程序提供了串口(Serial Port)服务,该服务类型及相关属性保存在SerialPort.dat文件中。为了成功注册该服务,此文件必须与可执行程序处于相同目录下。
    2.建立连接设计
    (1)点击”设备查询”按钮查询附近蓝牙设备,这一过程大概需要 10.24秒的时间,具体的流程可以观察”工作流程”窗口上方查询过程的进度条。此外只有那些处于可被发现的蓝牙设备才可以被查询到,具体程序详见附录 DiaTest.cpp文件中的void CDiaTest::OnButtoninq() 函数
    (2)点击”建立ACL连接”按钮,从下拉列表中选择一个已经查询到的蓝牙设备,就可以建立连接,具体代码参见附录DiaTest.cpp文件中的void CDiaTest::OnButtonlink() 函数。
    (3)建立ACL连接之后进行服务发现。通过服务发现可以获取远端注册的服务,具体结果将在”服务发现结果显示”窗口内显示,具体实现代码参加附录DiaTest.cpp文件中的void CDiaTest::OnButtonsearch() 函数。
    3.消息循环和消息处理的设计
    用户在点击”查询设备”按钮之后,就进入了该按钮的响应函数void CDiaTest::OnButtoninq()中,首先执行查询附近蓝牙设备的接口函数BCP_Inquiry(ucCmpID, InquiryLength, INQUIRY_MAX);其中参数ucCmpID是进行该项操作的应用程序ID,InquiryLength是查询设备的最长时间(1.28秒到 61.44秒),INQUIRY_MAX是查询设备接收的最多响应数。同时该函数返回消息INQUIRY_RESULT。本应用程序中设置 InquiryLength为8,则查询最长时间为10.24秒,INQUIRY_MAX为30,此外在该按钮响应函数中还设置了函数SetTimer (1,128,NULL),也就是说,每隔128毫秒Windows就要将查询设备函数BCP_Inquiry产生的消息放到消息队列中去,每当本数据传 输应用程序检索到该消息时,就将其发送到它的窗口响应函数void ProcessBTMsg()中,在指定的”工作流程”对话框中显示查询到的蓝牙设备地址。具体程序详见附录文件DiaTest.cpp。
    设备查询完毕之后,就要与远端设备建立ACL连接,这是通过接口函数void BCP_ReqLink(UINT8 ucCmpID, BDADDR tAddress, PageScanRepMode_T tPageScanRepMode, PageScanMode_T tPageScanMode,UINT16 tClockOffset, AcceptRoleSwitch_T tAcceptRoleSwitch);来实现的。连接建立成功之后返回消息LINK_CNF,然后进入此消息的响应函数void ProcessBTMsg()中,完成本地与远端设备之间的ACL连接。具体程序详见附录文件DiaTest.cpp。
    最后就是要建立RFCOMM信道,点击”建立RFCOMM信道”按钮进入窗口响应函数void CDiaTest::OnButtonconnect(),利用接口函数void BCP_ReqConnect(UINT8 ucCmpID, UINT8 ucServerChannelID, UINT16 acl_handle);实现在一条ACL连接上发出连接RFCOMM信道请求的命令,信道建立成功则返回消息CONNECT_CNF,当本应用程序从消 息队列中取到这条消息后,就进入此消息的响应函数void ProcessBTMsg()中,完成RFCOMM信道的建立,同时将建立连接的远端设备地址和信道号显示在相应的窗口内。具体消息参见下表:
    4.3消息类型及其意义
    消息类型 返回消息的意义
    START_CNF 启动BCP成功
    REGISTER_CHANNEL_CNF RFCOMM服务器信道号注册成功
    REGISTER_SERVICE_CNF 服务记录注册成功
    INQUIRY_RESULT 当前查询过程中的蓝牙设备查询响应
    LINK_CNF ACL连接建立成功
    UNLINK_CNF ACL连接断开成功
    DISCONNECT_CNF 断开RFCOMM信道成功
    DATA_CNF 数据已发送

    对于各种消息的处理参见DiaTest.cpp文件中的void ProcessBTMsg()函数。
    4.发送数据的设计
    首先选择发送数据的目的地,即远端设备的地址和目的设备注册的RFCOMM信道号,在发送数据之前首先弹出一个对话框,用来编辑所发送的数据。最后调用接 口函数void BCP_SendData(UINT16 uiHandle, UNIT8* pucData, INT16 uiLength);就可以发送数据了。参数uiHandle是用来发送数据的RFCOMM信道的句柄;pucData 是数据的指针,发送数据的内存应由用户来释放,本函数返回时即可释放;uiLength是发送数据的长度,必须少于128个字节。此函数返回消息 DATA_CNF表示数据已发送。实现发送数据的程序代码如下:
    void CDiaTest::OnButtonsend()
    {
    // TODO: Add your control notification handler code here
    CString rString;
    CDiaSend dlg;
    if (dlg.DoModal()==IDOK)
    {
    int m = m_LinkDevice.GetCurSel();
    int i = ChangeDeviceIndex(m); // 选择的设备地址序号
    int n = m_RfCommChannel.GetCurSel();
    int j = ChangeRfChIndex(i,n);// 选择的RFCOMM序号
    TempSendData = dlg.m_str;
    if(bt_device[i].dlc[j].dlc_handle == 0)
    {
    CString temp_str = STR_STATUS[52];
    MessageBox(temp_str,”蓝牙数据传输系统”);
    Return;
    }
    BCP_SendData(bt_device[i].dlc[j].dlc_handle,
    (UINT8 *)TempSendData.GetBuffer(TempSendData.GetLength()),
    TempSendData.GetLength());
    }
    }
    5.断开连接的设计
    数据发送完毕之后,还必须将已有的连接断开,包括断开RFCOMM信道和断开ACL连接,并且必须在断开ACL之前首先断开RFCOMM信道。其中断开 RFCOMM信道的程序段如下,用到的接口函数是void BCP_ReqDisconnect(UINT16 uiHandle),用来断开一条RFCOMM信道。参数uiHandle是断开的RFCOMM信道的句柄。返回消息DISCONNECT_CNF表示断 开RFCOMM信道成功。然后进入此消息的处理函数void ProcessBTMsg()中来处理这个消息,在”工作流程”对话框中显示”RFCOMM信道断开成功”的提示语。实现断开RFCOMM信道的程序段如 下:
    //DiaTest.cpp
    void CDiaTest::OnButtonunconnect()
    {
    int m = m_LinkDevice.GetCurSel();
    int i = ChangeDeviceIndex(m); // 选择的设备序号
    int n = m_RfCommChannel.GetCurSel();
    int j = ChangeRfChIndex(i,n); // 选择的RFCOMM序号
    BCP_ReqDisconnect(bt_device[i].dlc[j].dlc_handle);//断开RFCOMM信道
    }
    断开ACL连接的程序设计也与之相似,它用到的接口函数是void BCP_UnLink(UINT8 ucCmpID, UINT16 tHandle),参数ucCmpID是进行该项操作的应用程序ID,tHandle是需要断开的ACL连接句柄。返回消息UNLINK_CNF表示 ACL连接断开成功。然后进入此消息的处理函数void ProcessBTMsg()中来处理这个消息,在”工作流程”对话框中显示”ACL连接断开成功”的提示语,同时删除一个设备地址。实现断开ACL连接 的程序段如下:
    //DiaTest.cpp
    void CDiaTest::OnButtonunlink()
    {
    // TODO: Add your control notification handler code here
    // 选择的组合框序号
    int i=m_LinkDevice.GetCurSel();
    UINT16 Handle =0;
    //有RFCOMM信道时不能删除ACL
    if (i<0) return;
    for(int j=0; j
    {
    if (bt_device[i].dlc[j].dlc_handle != 0)
    {
    CString temp_str = STR_STATUS[53];
    MessageBox(temp_str,”蓝牙数据传输系统”);//弹出消息框
    Return;
    }
    }
    //断开ACL连接
    j=ChangeDeviceIndex(i);
    Handle = bt_device[j].acl_handle;
    BCP_UnLink(ucCmpID,Handle);
    }
    6.点对多点的设计
    点到多点的设计主要是建立主蓝牙设备和多个蓝牙设备之间的连接,因为一个主蓝牙设备可以和多达7个蓝牙设备实现建立ACL连接,所有已建立的ACL连接所 对应的远端蓝牙地址都显示在”建立连接设备”组合框内。为了实现该目的我首先编写函数ChangeDeviceIndex(int Index)返回所有建立连接的设备号。点击鼠标进入列表框”建立连接的设备地址”的消息响应函数void CDiaTest::OnSelchangeCombo1()中,完成所有建立连接的设备地址和信道号的显示,这样建立连接的设备地址和RFCOMM信道 号都在相应的下拉列表框中保存下来了,在点到多点连接中实现数据传输中其重要作用的另外一个函数int CDiaTest::ChangeRfChIndex(),它主要完成注册连接的RFCOMM信道号组合框中的选项与bt_device[]中的对应关系 的转换,关键代码如下所示:
    CString str;
    CString dst;
    char ch[6];
    int j=m_RfCommChannel.GetCurSel();
    m_RfCommChannel.GetLBText(j,str);
    for(int i=0;i
    {
    if (bt_device[acl].dlc[i].dlc_handle != 0)
    {
    char adr[6];
    sprintf(adr,”%d”,acl);
    dst=adr;
    if (bt_device[acl].dlc[i].direction) str+=” IN:”;
    else str+=” OUT:”;
    sprintf(ch,” %d”,bt_device[acl].dlc[i].channel_id);
    str+=ch;
    }
    if(memcmp(dst,str,sizeof(dst))==0) //判断选择的RFCOMM信道号
    {
    return i;
    break;
    }
    }
    4.2 蓝牙数据传输系统界面说明
    4.2.1 启动程序界面
    在VC++6.0的环境下,打开Test.dsw这个文件,编译链接并运行之后,将会显示如下的启动界面(如图4.1所示)。

    图4.1 启动界面
    下拉菜单中将会显示”串口1″、”串口2″和”通用串行总线”三个选项,若PC机上只有一个串口则选择”串口1″这个选项;若PC机上有两个串口则要视情 况而定,选择”串口1″或”串口2″;若将数据线插到USB接口上,则要选择”通用串行总线”这个选项,但此时还必须装上USB驱动程序,才能识别USB 接口并继续往下执行。
    4.2.2 观察窗口
    蓝牙数据传输系统的主窗口(如图4.2)内观察窗口用来显示程序运行过程的信息和数据,它们是:
    ● 工作流程:显示BCP运行过程中各步骤的信息。
    ● 数据传输:显示在RFCOMM信道上发送和接收到的数据及去向和来源。
    主窗口还显示以下各种信息:
    ● 本地设备地址:启动BCP后显示本地蓝牙设备地址。
    ● 注册的RFCOMM 信道号:显示注册的本地RFCOMM信道号。
    ● 建立连接的设备:显示建立ACL连接的所有远端蓝牙设备地址。
    ● RFCOMM信道号:显示建立在某个ACL连接上的所有RFCOMM信道。

    4.2 蓝牙演示程序主窗口
    4.2.3 菜单栏
    菜单栏中共有三个选项,分别是:”编辑”、”察看”和”帮助”(如图4.3所示)。
    编辑菜单栏中有两个选项:”存储当前工作流程”将当前”工作流程”观察窗口内的内容保存到DDP.txt文件中,以便分析;”载入上一次工作流程”可以将DDP.txt的内容显示到一个对话框中。
    察看菜单栏中有一个选项:”状态栏”,选中它可以在主窗口的最下方显示时间、日期等状态信息。
    帮助菜单栏中有一个选项:”关于蓝牙演示程序”,点击它可以显示制作人、版本号等帮助信息。

    4.3 菜单栏
    4.3 蓝牙数据传输系统执行步骤
    蓝牙执行过程有一定的流程,每一步的结果都会显示在”工作流程”观察窗口内。具体操作步骤如下:
    1 启动蓝牙协议栈
    点击”启动蓝牙协议栈”按钮。在这个过程中,应用程序向BCP注册,初始化并启动蓝牙协议栈。
    2 注册本地RFCOMM信道号
    在按下”注册RFCOMM信道号”按钮后的文本框中填入正确的RFCOMM信道号,该值为介于1~30之间的整数。这个信道号注册到RFCOMM服务器。
    3 注册本地服务
    点击”注册服务”按钮来完成注册本地服务。
    4 设备查询
    点击”查询设备”按钮查询附近蓝牙设备,这一过程需要大约十秒钟的时间,”数据传输”观察窗口上方显示查询过程的进度条。所有查询到的蓝牙设备地址将会显示在”工作流程”观察窗口中。
    只有那些处于可被发现的蓝牙设备才可以被查询到。
    5 建立ACL连接
    点击”建立ACL连接”按钮,从下拉列表中选择一个已经查询到的蓝牙设备,就可以与其建立ACL连接。
    建立ACL连接是完成后面工作的基础,服务发现和RFCOMM信道的建立都需要两个设备之间存在一条ACL连接。可以与多达7个设备建立ACL连接,所有已建立的ACL连接所对应的远端蓝牙地址都显示在”建立连接的设备”组合框内。
    6 服务发现
    建立ACL连接后,也可以进行服务发现。通过服务发现可以获取远端注册的服务。点击”服务发现”按钮即可。如果成功,会在”服务发现结果显示”列表框内显示服务发现的结果。
    7 建立RFCOMM信道
    建立ACL连接后,就可以建立两个端的RFCOMM信道了。在按下”建立RFCOMM信道”按钮后的文本框内填入远端RFCOMM服务器注册的 RFCOMM信道号,确认后远端就会弹出对话框询问是否接受连接请求,如果接受就可以建立一条RFCOMM信道。在一分钟内没有得到回应,本地端的 RFCOMM会自动断开RFCOMM信道。
    实际上,远端注册的RFCOMM信道号是通过服务发现过程获得的,是否可以建立RFCOMM信道也是根据服务发现的结果来进行判断的。演示程序忽略了这一 过程,直接由本地端在建立RFCOMM信道时输入。演示程序在两个蓝牙设备间可以建立多达60条RFCOMM信道。与某个设备建立的所有RFCOMM信道 都显示在”RFCOMM信道号”组合框中,格式为”方向:信道号”。
    8 数据传输
    RFCOMM模拟了一个设备串口。选择某个连接设备的某个RFCOMM信道后,按下”发送数据”按钮即出现文本框用于输入字符,确认后就可以将这些字符发 送到远端。另一方也可向本地发送字符,收发的字符都显示在”数据传输”观察窗口内这就是演示程序实现的简单的文字聊天功能。
    9 断开RFCOMM信道
    点击”断开RFCOMM信道”按钮,就会断开已经建立的RFCOMM信道。
    10 断开ACL连接
    点击”断开ACL连接”按钮,就会拆除已经建立的ACL连接。
    在拆除ACL连接时,演示程序要求只有在断开RFCOMM信道后才可以断开ACL连接。
    4.4 蓝牙数据传输系统测试
    整个应用程序完成设计之后就是对应用程序的检测,首先将蓝牙设备通USB接口与主机相连,启动生成的”毕设.exe”文件,注意在启动之前,需要将” SerialPort.dat”" BCP_DLL.dll”" USBDLL.dll”文件与exe文件放在同一个目录下。启动之后选择初始化端口为USB接口,然后进入程序主界面,下面是整个测试流程:
    1 初始化测试
    预期结果:在点击”初始化协议栈”按钮之前,应用程序完成了对接口的初始化以及注册应用线程ID。点击按钮之后,本地蓝牙设备地址出现在”本地设备地址” 旁边的编辑框中。分别点击”注册服务”和”注册RFCOMM信道号”按钮完成本机设备的初始化,流程显示在”工作流程”列表控件中。
    实际输出:启动蓝牙协议栈之后,本地设备地址00:06:6E:10:A7:32显示在列表框中,注册的信道号1显示在列表框中,并在工作流程列表控件中显示注册RFCOMM信道号成功。
    图片演示:

    a.初始化协议栈

    b.注册RFCOMM服务信道号

    c.注册服务
    4.5 初始化演示
    2 连接建立测试
    预期结果:点击”查询设备”按钮,此时在进度控件中会显示查询进度,大概耗时10.24秒;然后点击”建立ACL连接”按钮会弹出一个对话框显示查询到的 设备,选择一个要建立连接的设备,点击确定按钮之后,会在”建立连接设备”编辑框中,并在工作流程中显示”ACL建立连接成功”。
    实际输出:实际输出显示对方设备地址00:06:6E:10:A7:32,工作流程列表控件如图所示。
    图片演示:如图4.6

    a.查询设备

    b.建立ACL连接

    c.建立RFCOMM连接
    图4.6 连接建立演示
    3 数据发送测试
    预期输出:首先点击”建立RFCOMM信道”按钮,建立RFCOMM连接。点击按钮之后会弹出一个输入对方设备注册的RFCOMM信道好的对话框,输入对 方注册的信道号,然后点击”发送数据”按钮,弹出一个文本编辑框,输入要发送的数据”hello world”之后,在数据发送列表控件中显示相应的发送数据。
    实际输出:数据发送列表控件中显示远端设备地址为00:06:6E:10:A7:32,信道号为0×03,信道方向为DLC_OUT,传送的数据为”hello world”同时工作流程中显示”发送数据成功.”。
    图片演示:如图4.7

    图4.7 发送数据演示
    4 断开连接测试
    测试内容:数据发送后如需关闭程序,首先要断开RFCOMM连接,然后在断开ACL连接。我们先点击”断开RFCOMM连接”按钮,接着点击”断开ACL连接”按钮即可完成相应操作。
    实际输出:点击断开RFCOMM信道,然后点击断开ACL连接,此时发送数据框变灰色,并在工作流程列表控件中显示断链成功。
    图片演示:如图4.8

    图4.8 断开连接演示

    第五章 总结
    5.1调试过程中遇到的困难及解决方法
    在本次毕业设计过程中我碰到了各种各样的问题,有些是因为自己对控件功能的不熟悉造成,有些是对基本语法的掌握能力不高造成,还有些是用户手册了解不是很深造成的。
    我将在本次毕业设计中碰到的一些问题以及解决方法,还有个人的一点思考写在下面以做共勉。
    1、 C++语言较之C语言有许多共同的地方,但是也有其不同的地方,比如增加了面向对象。在学习过程中我们不但要注意到它们的共同点,更要对它们的不同点多加思考以求掌握
    2、 在C++语言中还有一个this指针的频繁使用值得大家思考,如果大家很好掌握了这个指针将会发现这个指针在我们的程序设计过程中会帮助我们很多,关于这方面的东西大家应该多多上网查些资料。
    3、 在学习Visual C++ 6.0进行程序设计中要注意到VC是基于消息响应的,所以在学习过程中我们要首先理解整个程序的运行过程以及如何进行消息相应,只有真正弄懂了这些,VC才能被我们方便的使用。
    4、 关于VC动态链接库的问题设计到动态调用和静态调用,由于本次毕业设计中使用到了BCP_DLL.dll文件,因此我们要对动态链接库方面的知识有个详细的了解,包括如何使用动态链接库。
    5、 本次毕业设计中我们使用USB接口实现了蓝牙设备与主机之间的连接,在运行程序时发现不能正常初始化协议栈,如果出现这个问题就需要我们设置断点来检查可 能出现错误的地方。还有在查询设备的时候由于我们设置了查询的最长时间是10.24秒,所以在查询过程中不要急于看到结果而忽略到这个问题。
    5.2 工作总结
    该应用程序主要建立在对按钮事件的响应,以及对BCP_DLL.dll文件提供的蓝牙接口函数产生的各种消息的响应。通过对这些消息的响应完成了各种功能。
    本毕业设计主要完成了基于蓝牙设备的无线数据传输,在进行软件开发之前,我首先详细阅读了蓝牙演示开发平台基本核心协议组件用户手册,详细了解了各个蓝牙 接口函数的作用以及该函数所产生的消息体成员的具体含义。接着在图书馆借了几本关于Visual C++ 6.0的书,了解整个VC程序的开发流程与方法,并着手设计软件界面。由于在本次设计中涉及到对动态链接库的使用,我着重参看了这方面的内容,并选择隐含 链接使应用程序链接到BCP_DLL.dll。最后就是着手对各个消息事件的响应,从而完成蓝牙设备数据传输的功能。
    本系统经实际测试,完成了点到点以及点到多点的数据传输的功能。
    测试结果表明,所设计的蓝牙数据传输系统能够实现发送和接收数据要求,并且具有很好的可靠性和实时性。由于具有很高的性能价格比,采用蓝牙的短距离无线数据传输系统具有很好的市场前景。
    5.3收获与心得
    长达三个月的毕业设计已经接近尾声,在这段时间里通过老师的帮助以及自身的努力基本完成了任务要求,并培养了自己主动发现问题,思考问题,解决问题的能力,通过对Visual C++6.0的学习培养了自己的自学能力,对今后其它语言的学习打下了良好的基础。
    第一,合理安排毕业设计进度。从接到毕业设计论文题目之后,我就开始有条不紊的着手进行毕业设计。首先是资料搜集阶段,广泛查阅各种资料,去图书馆借相关资料书籍,接着就是对各种资料的消化理解运用,最后着手进行程序设计。
    第二,熟练掌握了Visual C++ 6.0如何开发一个MFC应用程序,虽然只是了解了一个皮毛,但是通过这段时间的学习,我了解到应该如何去学习一门编程语言,就算以后我从事与VC无关的 工作,我仍可以把在本次毕业设计中得到的经验合理利用到我所从事的领域,相信对我的学习过程会有很大的帮助。
    第三,提高了我自己动手发现问题解决问题的能力,在本次毕业设计过程中碰到了许多各种各样的问题,在发现问题的过程中通过自己的思考和老师的帮助下去尝试 解决问题,从中我学到了很多东西并体会到了只有自己认真思考了知识才真的属于你。在本次毕业设计过程中我还提高了自己对中英文材料检索的能力,在开始的资 料收集阶段通过互联网,图书馆查询各种与我毕业设计相关的资料,在这个搜索过程中获得了各种各样的技巧,相信对我以后的工作会有很大的帮助。
    5.4设计展望
    本毕业设计虽然实现了蓝牙基本的数据传输,但仍有许多地方需要进一步改进和完善。
    首先在点到多点数据连接中我只完成了一个主设备对从设备的连接过程中,没有考虑到一个蓝牙设备既可以是主设备又可以是从设备。
    其次在本次毕业设计中我只完成了数据传输,在更多的应用中是进行文件传输,由于动态链接库提供的Bcp_SendData函数有字节限制,一旦大小超过限制就要进行拆包操作。
    最后我们还可以通过蓝牙设备建立音频视频连接,但是在本次毕业设计过程中没有反映。这个过程也可以通过动态链接库提供的接口函数实现的。
    随着蓝牙技术的成熟以及蓝牙芯片价格的下降,蓝牙技术将会在各个领域有个更为广泛的应用。
    参考文献
    [1] Bluetooth: Raffaele Bruno, Marco Conti, Enrico Gregori.Architecture, Protocols and Scheduling Algorithms [J]. Cluster Computing, 2002, 5 (2):117-131
    [2]蓝牙技术 http://info.tele.hc360.com/html/001/001/011/42986.htm
    [3]杜丰.蓝牙技术面临挑战.[J].现代电子技术,2004,(20):74~77.
    [4]邓永红.详解蓝牙技术.[J].有线电视技术,2005,(5):6~11.
    [5]李琦.蓝牙技术和应用.[J].青海师专学报,2005,(6):83~85.
    [6] 浅谈蓝牙技术、产品与应用 http://info.it.hc360.com/2006/04/181745136335.shtml
    [7]蓝牙市场及应用.http://www.damayi.com/default.asp.
    [8]蓝牙技术在中国的发展分析.[J].中国通信信息,2002.2.5.
    [9]蓝牙在中国.http://www.proteam.com.cn/bluetooth.
    [10]无线风光在蓝牙.http://www.damayi.com/default.asp.
    [11]金纯等.蓝牙技术[M].北京:电子工业出版社.2001.
    [12]符鹤,周忠华,彭智超.蓝牙技术的原理及其应用.[j].微型电脑应用,2006,7(3):60~61
    [13]刘海文等.蓝牙技术及系统原理[M].北京:电子技术出版社.2000.
    [14]黄丽.面向家庭网络的蓝牙技术研究与实践[M].合肥:工业大学出版社.2003. 11
    [15]王晖等.精通Visual C++ 6.0[M].北京:电子工业出版社,1999.3.
    [16]张元.基于蓝牙的微机无线数据传输系统.[J].仪器仪表用户杂志, 2004.11:56~58
    [17]席庆 张春林.Visual C++ 6.0[M].北京:中国水利水电出版社,1999.10

    展开全文
  • CoMP 协同多点传输技术

    千次阅读 2018-09-23 20:10:09
    CoMP传输是指地理位置上分离的传输点,协同参与为一个终端的数据(PDSCH)传输或者联合接收一个终端发送的数据(PUSCH),参与协作的传输点通常指不同小区的基站。CoMP技术将边缘用户置于几个基站的同频率上...

    CoMP


    • CoMP是什么
    • 解决什么问题
    • 有什么缺点
    • 最后附一个较为详细的介绍

    CoMP(Coordinated Multiple Points)协同多点传输,通信术语,LTE-A的重要技术之一。

    CoMP传输是指地理位置上分离的多个传输点,协同参与为一个终端的数据传输(PDSCH)或者联合接收一个终端发送的数据(PUSCH),参与协作的多个传输点通常指不同小区的基站。
    采用CoMP可以降低小区间干扰,可以提升小区边缘用户的频谱效率。

    3GPP中,CoMP技术分为三组:
    1、联合传输(JT):
    JT-CoMP技术将边缘用户置于几个基站的同频率上,几个基站同时为该用户服务,以提高边缘用户的覆盖性能。
    2、动态点选择(DPS):
    一个节点->发射一个UE相关的数据 / 使用动态点关闭(DPB) (节点间数据可互换,即:数据到处都有)
    3、协调式调度器 / 协作波束赋形(CS/ CB):
    与单个UE相关的数据在一个节点上并只由一个节点发送。

    简单来说,就是让用户无论在何地都有较强的信号。

    缺点:
    对时频同步要求较高,导致要求较高的网络配置要求。


    下面来做一个有关 CoMP 的详细介绍


    1. 绪论

    LTE-A 所提出的技术指标可以极大地提高峰值速率,降低延时,改善平均频谱效率和小区边缘用户频谱效率,基于OFDM 技术的 LTE-A 系统,可以通过一系列正交的子载波将高速率数据流转换成多路并行的低速率数据流进行传输,因此消除了小区内用户间的干扰。然而,在频率复用因子为 1 的 OFDM 蜂窝系统中(正交),小区边缘的用户将经历严重的小区间干扰(Inter-Cell Interference,ICI),这种 ICI 严重影响了LTE-A 系统的性能,更有甚者通过增大信号的发射功率是无法消除这种干扰的,这就为LTE-A系统带来了严峻的考验。

    个人认为,小区间干扰,就是当用户处于小区边缘(两小区交界处的位置时),信号极差。

    为了迎合 OFDM 带来的新挑战,协作多点传输技术 (Coordinated Multi-Point,CoMP) 应运而生,从本质上来说,多小区 MIMO 技术为用CoMP技术解决小区间干扰的问题提供了条件,其基本思想是利用空间信道的特性来实现信号的传输。

    作为一项能有效改善小区平均频谱效率和小区边缘用户频谱效率的技术,CoMP 技术的引入必然会增加系统的复杂度,然而却可以提升系统的容量和扩大小区的覆盖面,因此在 LTE-A 系统中采用 CoMP 技术来提高频谱效率是一个极具挑战和富有意义的课题。

    MIMO 技术:多输入多输出


    1. CoMP 理论基础

    CoMP 技术是指多点发射/接收技术,这里的多点是指地理上分离的多个天线接入点。它利用光纤连接的天线站点协同在一起为用户服务,相邻的几个天线基站或节点同时为一个用户服务,从而提高用户的数据率。在传统的小区蜂窝系统中,各个小区基站(eNodeB)仅服务于各自小区用户, 小区边缘用户受多个基站的影响,受到严重的小区间干扰, 系统性能比较差。

    LTE-A 系统中,为了进一步提高小区边缘的性能,系统必须传输更多的反馈,设计更为复杂的控制信令,并使更多的信息在小区间被交互使用。多个小区基站协作可以将干扰信号作为有用信号加以利用,从而降低小区间的干扰,提高系统的频谱利用率。

    CoMP 本质上是一种多小区多用户 MIMO 系统,即在 CoMP 系统中的协作小区集内对多个用户进行协作传输。

    采用 MIMO 技术后,MIMO 系统的信道容量相对于单输入单输出(Single Input Single Output,SISO) 系统有很大的提高,随着天线数目的增大而线性增长。此外,无线通信系统要获得相同的信道容量,MIMO 所要求的 SNR(信噪比) 比 SISO 要低得多

    2.1 多用户 MIMO 系统

    在 xDSL、无线局域网和蜂窝无线通信系统中,基站需要同时与多个用户通信。当基站和用户同时配置多根天线,基站到每个用户都构成一个 MIMO 信道,此时的系统就称为多用户 MIMO 系统。

    在多用户 MIMO 系统中,一个重要的问题就是信号检测,包括上行链路和下行链路两个方面的研究。在上行链路中, 基站可采用多用户检测 ( Multiple User Detection,MUD) 等方法来恢复用户的发送信号。但在下行链路中,基站同时向多个用户发射信号,此时任何一个用户除了接收到有用信号外,还收到其他用户的干扰信号。

    传统的 MIMO 系统中只有单小区和多用户与单小区的组合,完全没有小区间的协作。而在 CoMP 中,各协作小区之间相互协作,共享用户的数据信息。CoMP 和 MIMO 系统都是通过预编码技术消除小区间或用户间的干扰。可以说 CoMP 是 MIMO 在 LTE-A系统中的延续。


    1. CoMP 技术分类

    按照传输方案的不同,可以将 CoMP 技术分为两类: 联合处理(JP)技术和协同调度、波束赋形(CS/CB)技术。
    在 JP 技术中,下行数据来自多个小区,由多个传输点协同为 UE 传输数据。而在 CS/CB 技术中,下行数据来自单小区, 但小区之间相互协同使协作点之间干扰消除。

    3.1 协同调度、波束赋形技术(CS/CB-CoMP)

    在该技术方案中,每个用户的数据同时只有一个小区传输,通过多个小区协作调度来降低干扰。协作小区集内的其他小区可以利用相同的无线资源块为不同 UE 服务。协作小区集内各小区的发送信号需要根据对其他小区信号的干扰进行协调,尽可能减少对其他小区 UE的干扰。协作小区间通过协调发送信号波束的方向,有效地将干扰比较大的波束避开;通过窄的波束,就能有效降低小区间的干扰,提升接收信号的质量。而波束赋形是各 eNodeB 为用户提供服务时,使用单一的方向性波束,以减小多用户之间的干扰。

    (当用户在两个小区边界移动的时候,两个基站之间会进行数据交换,两基站之间有可能会频繁的进行数据交换,而若是把这个用户的数据发给它附近的基站,就不需要频繁的交换,省时省资源。)

    3.2 联合处理技术(JP-CoMP)

    在下行传输方向上,为每个UE服务的协作小区集内的所有小区都拥有为该 UE 发送的相同数据包,网络端根据调度结果和业务需求,可以选择协作小区集内的所有或部分小区为该 UE 服务。在 JP 方案中,协作小区集内的全部小区在相同的无线资源块中发送相同或者不同的数据到终端,即 多个协作小区在同一时刻发送数据到同一个UE,称这种JP为联合传输方式(Joint Transmission, JT),如图 6 所示。通过 JP 将原来 LTE 系统中不同小区间的干扰信号变成有用信号,从而减小小区间干扰,提升用户的接收信号质量,达到提升系统性能的目的。 在 JP 方案中,当传输选择的小区数为 l 时,则可以将此 JP 称为动态小区选择(Dynamic Cell Selection,DCS)。DCS 是 JP-CoMP 中的一个特例,仍然是多个小区联合服务于一个 UE,但是在这个时刻数据传输仅来自一个点,其他传输点的相同资源都要空出来不传输任何数据。

    (联合传输:正常情况下,基站发出的信号在传到小区边缘的时候会衰减到很弱,当多个协作小区同时发送同一数据到同一个UE时,控制得当,会产生信号加强)

    在 JP 技术中,联合传输(JT)的方式有两种:相干传输和非相干传输。相干传输时,参与 CoMP 的各传输节点都使用相同的预编码矩阵、调制编码方式向用户发送数据。非相干传输时,各 CoMP 传输节点采用不同的预编码矩阵和不同的调制编码方式进行传输。

    联合传输


    1. 结束了,恭喜

    CoMP 技术通过在多个小区间进行协作传输或联合调度,化干扰信号为有用信号, 降低相邻小区间的同频干扰,提高用户接收信号的质量,进而能够有效地提升边缘用户频谱效率和小区平均吞吐量。


    参考文献

    中国知网:
    http://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CJFQ&dbname=CJFDTEMP&filename=ZWDG201807037&uid=WEEvREcwSlJHSldTTEYzVnB3ZDE2Y3dtZkw2UW1PUWx0cmQ0T2ZIek1YST0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!&v=MTAzMjhIOW5NcUk5R1k0UjhlWDFMdXhZUzdEaDFUM3FUcldNMUZyQ1VSTEtmYnVSbkZDamtWNzdCUHpyUGFiRzQ=

    https://www.xzbu.com/1/view-6515363.htm


    展开全文
  • 系统总体方案设计. 3 2.1 系统总体框图. 3 2.2 图像采集与编码模块方案介绍与论证. 3 2.2.1 DSP+视频采集芯片. 3 2.2.2 DSP+ARM+视频采集芯片. 4 2.2.3 ARM+视频压缩芯片+视频采集芯片. 4 2.2.4 ARM+T26...
  • 摘要: 针对低速、低成本、快速搭建的特点,采用Arduino与LabVIEW来实现低成本上下位机数据采集系统。Arduino作为下位机,负责A/D转换以及数据传输;LabVIEW编写的数据采集软件作为上位机;上下位机利用RS-232串行...
  • 一、oEncoder系统简介 1.1 oEncoder系统简介 oEncoder是威海联讯信息技术有限公司研发的一套视频在线直播录播、视频虚拟直播的系统平台。系统基于Windows NT平台,采用MicrosoftSQL Server数据库,是国内最优秀最...
  • 数字基带信号(主要涉及基带编码、传输系统

    万次阅读 多人点赞 2015-08-27 10:10:07
    数字基带信号的类型很,本节以由矩形脉冲构成的基带信号为例,主要研究这些基带信号的时域波形、频谱波形以及功率谱密度波形。【remark: 信息是非实体,信源的信息必须外化后才能被信宿识别。数学是人类分析和表达...
  • 时分多路复用(TDM)

    千次阅读 2020-10-26 11:57:24
    时分多路复用(TDM)是按传输信号的时间进行分割的,它使不同的信号在不同的时间内传送,将整个传输时间分为许多时间间隔(Slot time,TS,又称为时隙),每个时间片被一路信号占用。TDM就是通过在时间上交叉发送每...
  • 1.模拟传输系统 背景 尽管模拟传输劣于数字传输(传输过程中,模拟传输容易受干扰,信号易衰减,安全性也不高),但由于采用模拟传输技术的电话网在计算机网络出现以前就已运行了近一个世纪,因此世界各地几乎都有...
  • 音视频网络传输技术在安防系统中的应用 <br />随着全球安防监控产业需求和相关技术的迅猛发展,数字图像压缩处理、流媒体技术、计算机网络通信、自动控制技术、智能报警技术、人工智能技术等已在安防领域...
  • 多路RTSP播放器直播与点播技术实现

    千次阅读 2013-11-24 17:13:01
    多路RTSP播放器直播与点播技术实现 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437 多路RTSP播放器源码下载地址:...
  • 数据传输技术

    千次阅读 2018-12-09 16:21:06
    数据在通信信道上的各种传输方式及其所采用的技术。
  • 音频时分多路复用(TDM)

    千次阅读 2019-10-30 22:33:14
    时分多路复用(TDM)是按传输信号的时间进行分割的,它使不同的信号在不同的时间内传送,将整个传输时间分 为许多时间间隔(Slot time,TS,又称为时隙),每个时间片被一路信号占用。TDM就是通过在时间上交叉发 送...
  • 传输媒体也称为传输介质或传输媒介,是数据传输系统中在发送器和接收器之间的物理通路。传输媒体可分为两类: 导引型传输媒体 非导引型传输媒体(自由空间) 导引型传输媒体双绞线 屏蔽双绞线 STP (Shielded Twisted...
  • 并行与串行传输,串行高速传输

    千次阅读 2018-03-24 17:17:05
    在高速状态下,并行口的几根数据线之间存在串扰,而并行口需要信号同时发送同时接收,任何一根数据线的延迟都会引起问题。...从另外的角度来看,并行传输还有很方式如系统同步(共同时钟)方式及源...
  • 相关文章 java网络编程—NIO与Netty(四) ...java网络编程—基石:五种IO模型及原理(多路复用\epoll) 理解Netty首先要理解NIO,理解NIO首先要理解reactor模型、多路复用select\poll\epoll等等原理。所以
  • GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的?当然是HTTP协议,但是不否认,他的概念和思想都是我们必须去涉及的,...
  • CUDA程序优化之数据传输

    千次阅读 2021-06-19 09:50:36
    cudaMemcpy2D/cudaMalloc3D(3)异步传输:cudaMemcpyAsync / cudaMemcpy2DAsync / cudaMemcpy3DAsync(4)锁页内存(Page-locked)(5)零拷贝内存(Zero-Copy)(6)CUDA流的使用个流的使用1) GPU的工作调度...
  • 智能车协同系统浅析

    千次阅读 2019-06-05 20:00:15
    写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,...智能车协同系统即IVICS(Intelligent Vehicle Infrastructure Cooperative Systems),简称车协同系统,是...
  • 地面网络传输层之TCP、UDP详解

    千次阅读 2013-03-15 07:50:45
    地面网络传输层之TCP、UDP详解 ... 面向连接的传输服务与面向连接的网络服务类似,都分为建立连接、数据传输、释放连接三个阶段;编址、寻址、流控制也是类似的。无连接的传输服务与无连接的网络
  • 流媒体及流媒体传输协议简介

    千次阅读 多人点赞 2019-06-01 22:26:10
    流媒体(streaming media):是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个...
  • Socket编程一实现简易的聊天功能以及文件传输

    万次阅读 多人点赞 2017-02-21 21:26:11
    干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看。...看看今天实现的功能效果图:可以这里使用台手机进行通讯,【凤歌】我采用的服务器发送消息。是不是只有发送消息,有些显得太单调
  • 音视频传输基本知识

    万次阅读 2017-01-03 20:51:12
    视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类。尽管后者在播放的稳定性和播放画面质量上可能没有前者优秀,但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频...
  • 计算机网络:网络传输介质

    千次阅读 2020-05-24 14:26:49
    传输介质大致分为有线介质和无线介质两类,有线介质包括双绞线、同轴电缆和光纤等,无线介质即电磁波。 一、有线介质 1.双绞线 双绞线是网络中最早使用的传输介质,价格便宜,性能适中。双绞线由两根带有绝缘层...
  • 多路访问协议

    千次阅读 2010-02-20 22:39:00
    这里先介绍两种类型的网络链路:点对点链路和广播...先看下一个对链路层很重要的问题:如何协调多个发送和接收节点对一个共享广播信道的访问,这就是多路访问问题。广播信道通常用于LAN中,也许对广播信道更好的类比是
  • KCP传输原理

    万次阅读 2019-05-23 17:53:42
    KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,...
  • 但是很USB2.0设备在实际工作时的数据传输速度却与此相差甚远,比如用PC用U盘拷个东西,往往比60MB/s慢很,这是为什么呢? 其实想想也能知道一些原因,USB总线中传输数据的就一对差分线,单是其要同时支持各种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,927
精华内容 25,970
关键字:

多路传输系统可分为