标准模板库

2024-12-22

标准模板库(精选3篇)

标准模板库 篇1

1 标准模板库 (STL) 与vector

标准模板库STL (Standard Template Library) 是一个高效的C++程序库, 已经被容纳于C++标准函数库中。主要由容器 (container) , 算法 (algorithmn) , 迭代子 (itcrator) 等组成。容器包含了象list (链表) 、vector (类似于大小可动态增加的数组) 、set (集合) 、map (映射) 、queue (队列) 、stack (堆栈) 等许多数据结构。算法包含了大约70个通用算法, 用于操控各种容器, 也可以操控内建数组。可以进行对象排序、删除、记数、比较、找出特殊对象、把对象合并到另一个容器中, 以及执行其他有用的操作。迭代器是容器中指向对象的指针, 算法通过迭代器来定位和操控容器中的元素。

vector是C++标准模板库中的一个内容, 它是一个多功能的, 能够操作多种数据结构和算法的模板类和函数库, 可以存放各种类型的对象, 特别是能够存放任意类型的动态数组, 能够增加和压缩数据。vector相当于一个动态的数组, 当程序员无法知道自己需要的数组的规模多大时, 用其来解决问题可以达到最大节约空间的目的。其用法和数组类似, 比如push_back可以在数组的最后添加一个数据;pop_back可以去掉数组的最后一个数据;size获得当前使用数据的大小等。对于vector中存在的元素需要更改其值时, 可以使用数组的方式, 或成员函数at () , 得到编号位置的数据。

2 应用

开发文电收发系统时, 拆分字符串函数Split String () 和获取主机的IP地址函数Get Host IPs () 属于用数组来存储一组变量, 而数组长度无法确定的情形。这两个函数中, Split String () 功能是将一个字符串拆成几个部分, 如IP地址中以“.”为分隔符进行拆分, 目录路径中以“”为分隔符进行拆分等, 分拆后的字符串列表是一个变化的量, 即不同拆分情况下所得到的拆分字符串数目不同。Get Host IPs () 是获取网内相关计算机的IP地址, 因机器的配置不同所获得的IP地址数目也不固定。所以, 存储拆分后的字符串和IP地址的数组长度需要动态增长或缩小。下面介绍vector在Split String () 和Get Host IPs () 中的应用, 说明解决软件编程中数组长度动态变化问题的方法。

(1) 新建一个名为vector Cstring Test的SDI程序

可在Main Frm.h中添加文件包含:

(2) 定义Split String () 与Get Host IPs ()

在Main Frm.h中声明这两个函数, Split String () 的实现代码:

(3) 遍历vector中存储的内容:

以上程序段运行结果为:分割字符串的结果为:wohihzhonhgguoren。

获取的本机IP为:127.0.0.1 (未连接网络的状态下) 。

以上代码随拆分方式不同和本机IP数量差异, 每增加一个字符串或IP, vector会自动扩大容量。push_back是vector容器的一个类属成员函数, 用来在容器尾端插入一个元素。

3 STL的使用

在开发某软件时, 对一个文件夹内的所有文件路径进行搜索统计时, 被操作目录内的文件数是一个变化的量, 即不同目录内的文件数量各不相同。所以, 此数组长度需要动态增长或缩小。利用vector实现的具体方法如下:

(1) 文件包含

同上

(2) 定义搜索函数Search_Directory

(3) 遍历vectorlst Files

同上例一样, 程序中用到STL中一个可以动态调整大小的容器vector。以上程序片段中随着搜索进程的进行, 搜索到的文件每增加一个, 如果需要再放入元素则vector会自动扩大自己的容量。push_back是vector容器的一个类属成员函数, 用来在容器尾端插入一个元素。这种用法比用new、delete操作符简洁, 也减少了出错的概率。

4 结语

通过对C++标准模板库 (STL) 的使用, 有效解决了拆分字符串存储计算机IP地址和搜索目录内所有文件路径列表中需要动态添加数组元素的问题。vector可以动态增长, 可以容易地增加新元素。与MFC中的CArray、COb Array等方法相比, STL解决动态数组问题很有效, 使用了vector容器, 可以事先不用定义数组大小, 可以动态添加数组元素, 参考文中的vector, 也可以对vector, vector, vector等举一反三, 灵活运用。随着应用的深入, STL还提供许多典型的算法, 如排序等, STL使用起来更简洁、方便。

摘要:通过文件收发系统中vector<CString>在存储IP地址中的应用和对一个文件夹内的所有文件路径进行搜索统计两个实例, 介绍了STL中的vector容器在程序中的使用方法, 阐述了用C++标准模板库 (STL) 解决软件编程中数组长度动态变化问题的方法。

关键词:STL,数组长度,动态调整,IP地址,文件搜索

标准模板库 篇2

关键词:雷达目标识别,高分辨距离像,模板库建立,Jensen-Shannon散度

雷达高分辨距离像( high range resolution profile,HRRP) 能够提供目标丰富的结构信息,获取条件相对简单,对目标的识别很有价值。基于HRRP的雷达目标识别一直是现代战争环境感知和目标识别的重要研究方法之一,是目前国内外备受关注的研究热点[1]。

目标识别的性能在很大程度上取决于目标模板库的完备性。目标模板库的数据来源主要有三种: 虚拟仿真、半实物仿真和雷达实测数据。其中,雷达实测数据可信度最高,能够反映目标最真实、最全面的情况,是最可靠的。某研究所ISAR雷达测量的三种飞机数据[2,3]( “雅克-42”、“桨状”、“安-26”) 是被广泛使用的雷达实测数据,但其测试条件过于理想,测量目标均是合作目标,雷达工作在跟踪模式, 数据率很高。雷达作为一种军事装备,在实际工程应用中,非合作目标的识别可能是我们更为关心的。与合作目标相比,非合作目标单航路的测量数据往往根本无法达到建立完备模板库的要求: 首先,单航路的测量 几乎不可 能覆盖目 标全部的 姿态,而HRRP又是姿态敏感的,不同姿态下的HRRP可能很不相似; 其次,单航路数据往往难以包含目标外形变化的全部情况( 如挂载外挂设施、后掠翼展开收起等) 。与跟踪雷达相比,预警雷达的数据率要低得多,单航路数据能够提供的信息有限。

考虑上述实际工程应用中存在的问题,为了建立一个完备的目标模板库,本文提出了一种使用多航路的数据相融合,具有在线学习能力的目标模板库建立方法。

1 数据特点分析

在建库之前,首先要分析数据的特点才能决定采取什么样的方法。考虑的是实际工程应用的情况,采用的雷达为预警雷达,讨论的目标主要是飞机目标。在这种情况下,实测的数据具有以下特点:

( 1) 单航路数据基本上只能获得某一角域范围内的数据,不能提供全角域信息。

( 2) 由于飞机速度较快,单航路数据所能获得的实测数据样本量有限,相邻两个样本间姿态角变化可能比较大。

( 3) 受到周围电磁环境影响,样本信噪比变化较大。

( 4) 单航路数据的目标的外形基本固定,难以包含目标外形变化的全部情况( 如挂载外挂设施、后掠翼展开收起等) 。

根据上述分析得到的数据的特点,以及具备在线学习能力的要求,模板库建立算法主要分成3步完成,首先对数据预处理,然后分别对单航路数据分帧建模,最后将多个分帧结果合并形成最终的目标模板库。这样的模板库建立算法保证了模板库的在线学习能力,如果有新的测试数据,可以通过同样的流程优化已有的目标模板库来完成学习过程。

2 算法简介

2. 1 数据预处理

由于HRRP的幅度、平移及姿态敏感性直接影响着识别性能,必须对HRRP预处理。预处理部分通过幅度归一化( 本文采用2范数归一化) 和距离像对齐( 本文采用全局最小熵对齐)[4]来解决幅度以及平移敏感性,由于分帧的方法可以有效的解决HRRP姿态敏感性,预处理部分不再考虑这一点。

2. 2 单航路分帧

单航路分帧算法是模板建立的基础,直接影响着最终模板库的性能。其目的有两点,对HRRP样本进行适当的角域划分以解决HRRP的姿态敏感性,然后分别对各自角域建模,降低数据的冗余度, 便于后续的处理。

传统的分帧方法按不发生散射点越距离单元走动( MTRC) 的角度均匀分帧建模。然而不同姿态下HRRP的统计特性变化快慢并不相同,简单的均匀分帧没有考虑到这一点,并不合理。但由于单航路数据样本量不丰富且样本之间姿态跨度较大,一些需要比较多的样本迭代分帧的方法并不适用。因此本文采用HRRP互相关系数来度量HRRP样本的相似性,并以它为基准自适应的划分角域。参考自适应高斯分类器( AGC) ,划分完的各自角域用高斯模型分布近似描述个子帧内HRRP的统计特性[5]:

假设第k个目标的第l帧的D×1维HRRP样本各个距离单元回波统计独立且符合高斯分布,设其均值和方差矩阵分别为μkl和Ckl,则最大似然估计分别为

式中xj,kl和Nkl为第k个目标的第l帧的第j个训练样本和样本数目,DIAG表示所构成的矩阵中非对角线元素为零,对角线元素为方差值的操作。因此, 第k个目标的第l帧的概率密度函数可表示为:

分帧算法的流程图如图1所示。为了保证所建立模板的有效性,信噪比初筛选的条件是信噪比大于20 d B样本作为训练样本。一般认为相关系数小于0. 8则相关性较差,所以相关系数门限值取0. 8。在子帧建模时必须去掉样本数量少的子帧才能保证分布参数的估计精度。记录子帧包含样本数量和子帧排序是为了下一步多航路合并做准备。

2. 3 多航路合并

在完成单航路数据的分帧之后,本节将通过将多个航路数据合并建立最终的模板。选择一个单航路分帧结果作为初始模板,然后将其他航路数据的分帧结果与初始模板合并。模板合并的主要任务就是对子帧的统计分布进行参数优化和扩大模板姿态覆盖范围。由于HRRP的闪烁现象以及目标可能存在的外形变化等情况,最终模板每个子帧内都只使用一个高斯分布来描述统计特性是不合理的( 这里假设单航路各子帧内统计特性不改变) 。为了比较不同的统计分布,就需要找到一个能够度量统计分布相似性的量。本文给出一种改进Jensen-Shannon divergence( IJSD) 作为相似性度量。

2. 3. 1改进JSD

若已知两个高斯分布f1和f2,分布由它们估计得到,则f1和f2之间的JSD是f1到的KL距离与f2到的KL距离之和。其计算公式为[6]

式( 4) 中的参数计算

为了克服HRRP的幅度敏感性,在预处理时将训练样本作了2范数归一化处理,各子帧概率分布的方差矩阵的各个特征值均很小,而其阶数又比较大( 几百到上千阶) ,导致方差矩阵的行列式近似为零。而JSD的计算中需要对方差矩阵的行列式求对数,这样会导致计算机运算出错,而因不能直接使用JSD来度量子帧分布的相似性,必须做一些改动。注意到两个高斯分布对称形式的KL距离计算公式如式[7]

式( 6) 不存在对方差矩阵的行列式求对数的过程,因此,将式带入式中得到对称形式的IJSD:

式( 7) 中计算的参数时使用的平均法,并没有充分利用两个分布的权重信息,本文给出带权重信息的的参数计算公式为:

2. 3. 2多航路合并算法

下面给出多航路合并算法主要步骤:

步骤1将待合并航路数据运用单航路分帧算法分帧,分帧结果记做fi( i = 1,2,…,N) ,并设定阈值δ,令i = 1。

步骤2比较fi的姿态跨度和模板各子帧的姿态跨度的关系,若完全不重叠,则按姿态关系直接将fi 加入模板相应位置,跳转至步骤5; 若姿态跨度存在重叠,则按式( 7) 分别计算fi与模板内姿态有重叠的子帧 的所有分 布的IJSD,即IJSD( fi,f1,1) , IJSD( fi,f1,2) , …, IJSD( fi,f1,m 1) , …, IJSD( fi, fn,mn) ( n,mn分别为姿态重叠子帧数及其各自包含的分布数) ,其中的最小值记为IJSDmin。

步骤3若IJSDmin < δ则按式( 8) 修正IJSDmin对应分布的参数,若IJSDmin > δ,则将fi的分布参数存入与fi姿态重叠最多的子帧内。

步骤4对模板子帧姿态跨度进行适当修正。

步骤5若i = N ,则算法结束,否则令

i = i + 1 ,跳转至步骤2。

3 实验结果与讨论

3. 1 实验数据介绍

本文使用某宽带预警雷达连续5 d在不同时段实测的飞机数据。雷达信号带宽为400 MHz,扫描周期为4秒。对三类目标进行建库和识别,分别是B737( 中型飞机) ,B752 ( 大型飞机) 以及某型直升机。其中B737数据最为丰富,基本包含全角域的情况,而B752和直升机数据只能提供部分角域信息。训练数据选取前3天所获得的部分数据,测试数据则采用后两天实测的部分数据。

3. 2 模板建立及识别结果

由于B737的数据最为丰富,这里以737为例, 分析模板建立的过程。图2给出了模板姿态覆盖范围随着合并次数的变化情况。从图中可以看出,随着参与合并的数据的增加,模板姿态覆盖范围逐渐增大。需要指出的是,图中的姿态覆盖范围最大只有不到350°,不能达到360°全覆盖。但这是由于所用的数据在计算姿态角时,0°和±180°附近姿态存在一些误差,并不是算法本身存在的问题,排除姿态角计算误差的影响,应用算法可以得到全角域的信息。B737的16条航路包含的总的HRRP数为476幅而使用这16条航路数据建立的模板的子帧数为38个,大大降低了模板库的冗余度。

建立模板库的最终目的是为了识别服务,针对不同的模板库必须采用不同的分类器才能获得更好的识别结果。由于本文模板建立完成后,可以得到各子帧的概率密度函数,本文采用贝叶斯分类器对样本分类。假定各类目标具有相同的先验概率,判决函数为[7]

式( 9) 中pi( yt| c) ,αi为子帧模板的第i个高斯分布及其对应的权重,分类时只需将测试样本分别代入各目标的所有子帧模板中,按式求出各帧对应的类条件概率密度值,其中最大值对应子帧所属目标就是测试样本的目标类别。三类目标的平均识别率和参与建库的航路数的部分关系如表1所示。可以看出,随着模板库的逐渐完善,三类目标的平均识别率在不断提高。表格最后一行是最终将所有测试数据都建立模板库时三种飞机的平均识别率,B752和直升机的识别率出现小幅下降的原因是由于B737的数据量比其他两种飞机的数据量大很多而导致的。

3. 3 讨论

本文建库方法的结构保证了该方法的在线学习的能力,在获得新的测量数据之后,只需对其作前文所述的预处理、单航路分帧、在使用3. 2节的合并算法就可以将新的数据加入已有的模板库,这样就完成了学习的任务。表一每行的变化也可以视为一个学习的过程,将第一行数据视为基础模板库,下面的内容均为基础模板库的学习结果。在线学习可以丰富模板库从而提高识别率。

4 总结

为了解决实际工程应用中预警雷达单航路数据存在的不足,本文提出了一种将多航路数据融合的模板库建立方法。先对单航路数据分帧建模,然后通过比较姿态相同或相近子帧统计分布的改进JSD将多航路数据的分帧结果融合建立模板库。使用实测数据的实验表明,该方法能够建立冗余度较低且包含全角域信息的模板库,建立的模板库具有在线学习的能力,随着模板库的逐渐完善,目标的平均识别率能够逐步提高。

参考文献

[1] 王亚子,周湘贞.基于压缩感知的高分辨距离像散射中心参数估计.科学技术与工程,2014;14(20):61—66Wang Y Z,Zhou X Z.The parameters estimation of HRRP based on compressive sensing.Science Technology and Engineering,2014;14(20):61—66

[2] 杜兰.雷达高分辨距离像目标识别方法研究.西安:西安电子科技大学,2007Du L.Study on radar HRRP target recognition.Xi'an:Xidian University,2007

[3] 孟继成.雷达目标距离像识别研究.成都:电子科技大学,2005Meng J C.Study on recognition of radar target using range profiles.Chengdu:University of Electronic Science and Technology of China,2005

[4] Zhu D Y,Wang L,Yu Y S,et al.Robust ISAR range alignment via minimizing the entropy of the average range profile.Geoscience and Remote Sensing Letters,IEEE,2009;6(2):204—208

[5] 候庆禹.基于高分辨距离像的雷达自动目标识别方法研究.西安:西安电子科技大学,2009Hou Q Y.Study of radar automatic target recognition based on high range resolution profile.Xi'an:Xidian University,2009

[6] 姚志均.一种新的空间直方图相似性度量方法及其在目标跟踪中的应用.电子与信息学报,2013;35(7):1644—1649Yao Z J.A New spatiogram similarity measure method and its application to object hacking.Journal of Electronics&Information Technology,2013;35(7):1644—1649

标准模板库 篇3

现在机床设计越来越重视外观设计, 机床液压管路设计的合理性、美观性对机床外观设计起到了至关重要的作用。但SolidWorks的管件库中没有符合国标的液压管接头、阀等, 从厂家网站上下载的模型又不符合SolidWorks管路设计要求, 因此建立符合管路设计要求的国标液压件库是机床液压管路设计首先要完成的工作。在创建国标液压标准件零件模型时会有几何和非几何的属性要求, 利用SolidWorks Routing Library Manager零部件向导可以检查零件是否符合要求, 并将符合要求的零件加到数据库中。

2设定液压标准件库位置

首先设定液压标准件库位置, 库可以设在本地计算机也可以设在局域网服务器, 设在局域网服务器上方便大家共享使用。从开始菜单启动SolidWorks 2011Routing Library Manager (图1) , 选择Routing文件位置和设定选项卡, 指定步路库位置 (图2) 。

3设计零件及属性

首先按常规方式设计零件模型, 再将手册数据填到系列零件设计表中, 模型设计完后根据零件类型设置连接点、线路点、旋转轴、垂直轴等, 并且自定义每个配置的属性。

连接点 (CPoint) 是零件中的一个点, 用来确定线路的终止位置和线路延伸进入配件或接头的方向, 用图标来生成。管道在管道装配体中总是从连接点开始或连接到装配体的连接点上, 每个附件零件的每一个端口都必须包含一个连接点, 它决定相邻管道连接的情况。线路点 (RPoint) 是零件 (三通、四通和管夹) 中用于定位零件在3D线路草图中的交叉点或端点, 用图标来生成。具有多个端口的接头, 线路点位于轴线交叉点的草图点;对于法兰, 线路点位于圆柱面同轴心的点;当法兰与另一法兰配合, 线路点位于配合面上。旋转轴、垂直轴用于在装配体中将零件旋转至所需的角度。线夹轴用于将管夹轴旋转与装配体中的边线或轴对齐。

J14 GB/T3733.1-83说明模型及属性设置见图3~图5。4将零件增加到液压标准件库

我们可以用SolidWorks Routing Library Manager将零件增加到液压标准件库里, 在导入过程中SolidWorks Routing Library Manager会对零件的几何和非几何的属性进行检查, 如不符合管路设计要求, 可以随时对零件模型进行修改。

从菜单选择Routing-步路工具-Routing零部件向导, 选择管筒选项, 然后单击下一步 (图6) 。

选择末端法兰选项作为选取零部件类型, 然后单击下一步。

检查零件几何和非几何的 (属性) 是否符合要求 (图8~图11) 。

对零件各个配置属性进行检查 (图12) 。

将零件保存至液压标准件库文件夹 (图13) 。

将零件属性增加到液压标准件库中 (图14) 。

这样新的零部件就会出现在液压标准件库中 (图15) 。

逐一把液压标准件增加至液压标准件库中, 标准件库建立好后, 就可以通过拖放零件至液压管路装配体中来设计管路。实践证明液压标准件库建立后大大提高了液压管路设计的合理性。同样也可以用SolidWorks Routing Library Manager建立润滑管路标准件库、冷却管路标准件库。

摘要:通过给液压零件模型设置几何和非几何属性, 用SolidWorks 2011 Routing Library Manager将零件导入到库中, 从而建立液压标准件库。

关键词:SolidWorks,Routing Library Manager,液压标准件库,连接点,线路点

参考文献

上一篇:企业财会队伍下一篇:巴氏杆菌病