




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1节工程数据处理在研究交通工程问题的过程中,经常需要处理一系列的工程数据,如研究 信号交叉口性能所采集到的交通流数据;研究单个车辆行驶特性所采集到的gps 数据;城市路网规划与管理中的道路几何数据等。不同类型的数据,处理的方法 和技术是不同的。一般工程数据处理流程如下(图1):图1工程数据处理流程通常,工程数据的组织和存储方式有三种:临时变量、文件和数据库技术。 三种方式的主要区别在于数据來源和数据量的不同。如果工程数据比较少,需要 交互输入,采用临时变量存储比较简单;如果要处理的数据量比较大,或者数据 之间有某种关系,或者需要同时进行数据的读和写,采用数据库技术比较可靠; 如果要处理的数据
2、来自于其他系统软件,或数据采集设备,且量不是很大,文件 实现则比较容易。文件分为文本文件和二进制文件。文本文件将一切内容都保存为文本,优点 是可以用任何通用的文木编辑器(比如:notepad、word等软件)打开,用户可 以直接编辑、查看文件中的数据,常见的txt、c、dxf文件即为文本文件; 缺点是效率较低。二进制文件屮的数据都以二进制的形式进行存储,优点是效率 较高;缺点是用户需要用特殊的工具才能看到文件内容。实际工程数据处理过程 中,文本文件使用频率较高,冇些数据采集设备,比如车载gps,历史数据就是 以文木文件的格式进行存储的。下面,通过实例来说明工程数据处理过程。例1行车速度既是道路
3、规划设计中的一项重要控制指标,又是车辆运营效 率的一项主要评价指标,对于运输经济、安全、迅捷、舒适具有重要意义。车速 频率是对行车速度进行统计分析的方法之一。表1给出了在某段面采集到的地点 车速观测原始数据,试通过车速频率分布图分析该断而行车速度特性。(注意: 为了调试方便,表中只给出了部分数据。)表1某断面地点车速观测原始数据(km/h)3141382851394542334341513751262334384048333540414346585048474653433339454134332940443735403830534453问题分析该问题属于数据统计范畴,使用图形方式分析数据比较直
4、观。车速频率分 布曲线一般生成过程如下:(1)采集地点车速,将地点车速从小到大进行排序,并找出最大车速和最小车 速。(2)将地点车速以合适的速度间隔进行分组,分组数根据车速的分散程度和样 本数量而定,一般分组数宜在820范围内。分组数确定后,可通过式1 求得区间速度间隔(即组距)。区间速度间隔=(int)最大车速/(最小车速-1)(1)其中,(int)表示对最大车速除以最小车速减1的结果进行取整。(3)计算每个速度区间的屮间值及每组车速出现的频率。(4)用车速分组的中间值为横坐标,分组车速出现的频率为纵坐标生成车速频 率分布曲线。(5)根据车速频率分布曲线得到所需指标。编程思路通用程序设计语言
5、,如c+,数据处理功能较强,编程比较灵活,具有一定 的绘图功能,但图形交互功能较弱;matlab软件提供了大量解决数学问题的工 具箱和函数,在图形交互分析方面功能较强,但数据组织和处理方面不如c+灵 活。因此,编程的基本思路是,将c+语言和matlab软件的优点相结合。车速 频率等基木数据处理由c+语言实现,车速频率分布曲线牛成及分析由matlab 实现。数据在c+和matlab中的导出和导入,由于数据量不是特别大,采用matlab 环境下可以直接运行的ni格式文本文件,而不是数据库进行存储。程序流程如 图2所示。图2地点车速频率处理流程 m格式文木文件的主要作用是在两个不同软件环境之间实现数
6、据的导出和 导入,即不同软件之间的接口功能。因为涉及到c+和matlab z间的接口实现,为了便于读者快速地理解编程 思路,卜面给岀完整的源代码。读者可以根据运行结果,反过來理解文本文件的 作用、数据组织及实现过程。整个程序由3个文件组成,point, h; point, cpp; user. cppo(1) /point.h#ifndef point.h定义点类#define point.h class pointpublic:point();point();void sctpx(doublc x);void setpy(double y);double getpx() const;获取绘图
7、吋的横他标 和纵朋标double getpy() const;private:double px; /绘图时的横坐标 double py; /绘图时的纵坐标;#endif(2) / point.cpp#include"point.hh/构造和析构函数point: :point()point: :point()设置绘图时的横坐标和纵坐标void point:setpx(double x)px=x;void point:setpy(double y)py=y;获取绘图时的横坐标和纵坐标double point:getpx() constreturn px;double point:get
8、py() constreturn py;(3) use匚epp# include<iostream>#include<vector># includc<algorithm># include<fstream>#include"point.h"using namespace std;int main()const int speedlimited=70;double speed,maxspeed,minspeed,upperspeed,lowerspeed;int groupnumber=83nterval;vector<
9、double> vecspeed;vector<double>: iterator templ,temp2;cout«"请输入车辆速度,按ctrl+z结束.”vvendl;地点车速原始数据输入whilc(cin»spccd)if(!(speed>0 && speed<=speedlimited)comvv“数据有课,请重新输入!”;elsevccspccd.push_back(spccd);/原始数据从小到大进行排序sort(vecspeed.begin (),vecspeed.end();找出最大速度、最小速度、组距
10、temp 1 =max_element(vecspeed.begin (),vecspeed.end(); maxspeed=*temp 1;temp2=min_element(vecspeed.begin (),vecspeed.end();minspeed=* temp2; interval=(maxspeed-minspeed)/(groupnumber-l);计算出绘制速度频率分布曲线吋的速度上限和下限 upperspeed=(int)maxspeed+l;lowerspeed=(int)minspeed-1;cout«upperspeed«h h«low
11、erspeed«h m«interval«endl;vector<point> speedpoint;point temppoint;double temp,leftboundary=minspeed,rightboundary=leftboundary+interval; double midspeed;vector<double>:iterator iter;计算速度组小间值(横处标)及分组年速出现的频率(纵坐标)for( int i=0;i !=groupnumber;+i)temp=0; for(iter=vecspeed.begi
12、n();iter!=vecspeed.end();+iter)if( (*iter>=leftboundary) && (*iter<rightboundary)+temp; temppoint.setpy(temp/vecspeed.size()*100); temppoint.setpx(leftboundary+interval/2.0);speedpoint.push_back( temppoint); leftboundary=rightboundary; rightboundary+=interval;观察横坐标和纵坐标值for( vcctor<p
13、oint>:sizc_typc nt=0; nt!=spccdpoint.sizc() ;+nt)cout«nt«m:x:,«speedpoint.at(nt).getpx()«n y:h«speedpoint.at(nt)-getpy()«endl;输出为matlab支持的.m文件,以便于在matlab中进一步分析ofstrcam fout("spccd.mm);if(!fout)cerr«m error unable to open output file! "«endl;return
14、 -1;/横处标fout«n x=for(vector<point>:iterator itera=speedpoint.begin();itera!=speedpoint.end();+itera)fout«(*itcra).gctpx()«"fout«,'',«endl;纵坐标fout«h y=n;for( itera=speedpoint.begin();itera!=speedpoint.end();4-+itera)fout«(*itera).getpy()«m lf
15、; fout«hn«endl;fout«uplot(x,y)n«endl;fout«hhold onn«cndl;return 0;运行结果编译、运行上述程序,依次输入表1中的数据,结果在源程序的当前路径下生成一个 名为speed.m的matlab文件。启动matlab软件,打开speed.m文件,选择"debug” 菜单下的“run”选项,运行结果如图23所示。图3表1中地点车速频率分布曲线结果分析根据图3,我们可以看出地点车速频率分布的大体规律。此外,我们可以 利用菜单或工具栏提供的功能对图形进行交互操作,比如获取曲线上任意点的坐 标值。在此基础上,还可以进一步对数据进行拟合,并求取该断面85%位行车速 度等技术指标。speed, m文本文件将c+语言灵活、较强的数据处理功能和matlab软件直 观、强大的数值分析功能有力地结合了起來,是连接两个不同软件环境的纽带。 另外,读者还可以将源程序数据输入方式改为文件方式,进行数据的读取。此 功能读者可自行完成。拓展:如果试验数据不需要经过预处理,只是做一次实验分析,则使用matlab更
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论