英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料
基于OpenGL的水下声信号的可视化仿真
摘要——基于水下对抗仿真中声音信号的实时可视化的需求,使用OpenGL VBO和多线程技术实现了声波信号的类型和频谱的绘制。根据正方形均匀的旋转对称结构平面阵列的接收波束,用OpenGL二次型几何圆柱体和显示列表的水平分割作图方法被提出并实现了。波束增益,功率,和情况被映射到光束绘制。最后,所有的图像被嵌入在主三维可视化基于OSG的场景。该应用结果表明绘制方法可以满足实时性系统的要求,丰富了视觉显示的内容。
关键词:可视化仿真;声音信号的可视化;波束图;OpenGL;Open Scene Graph(OSG)
Ⅰ 简介
可视化仿真是一种通过多媒体方法,如图像,曲线,动画,声音等,显示实验过程的技术。它已被成功地用于水声对抗实时仿真研究[1]建立了特殊水下环境中的视觉观。除了这些可见的部分,我们也希望看到各种声音信号的转换。传统的方式无法直接达到这个目的,所以我们需要新的方法根据有关参数来可视化这些信号。
最近的关于这些信号的可视化研究是以数据字段[2]和电磁信号计算为中心的[3-5]。也有一些对声信号可视化的尝试:王[6]利用基于Matcom混合MATLAB和VC6.0编程的方法,在其中,信号的时域和频谱图表数据用Matlab计算,然后通过VC6.0下的ActiveX曲线控制绘制。虽然王的方法可以可视化声信号的图表,它依赖于MATLAB工具和曲线控制。所以它不能被灵活地控制和直接嵌入到三维可视化场景中。范[7]用Simulink的VR模块在MABTLAB中显示声波二维平面上信号的波束和作用球。这种方法不是很生动,显示的信号的信息很少。它也不能被嵌入到三维可视化场景。
因此,基于三维水下对抗仿真中的声信号实时可视化的需求[ 8 ],声波信号的可视化新方法被提出。这些方法通过在VC MFC平台的OpenGL和OSG实现并嵌入水下视景仿真系统。然后声音信号的特征,如类型,频谱,波束,搜索区域等等,可以模拟过程中同步显示。
为了满足在水下对抗仿真中声音信号实时可视化的要求,利用OpenGL VBO和多线程技术实现了声音信号的类型和波谱的绘制。根据正方形均匀平面阵列的接收波束的旋转对称结构,通过OpenGL二次型几何圆柱体和显示列表提出并实现了水平分割作图方法。而且波束增益,功率,和情况被映射到光束绘制。在顶部视图绘制了搜索区域。最后,所有的绘图都被嵌入在主要的基于OSG和VC MFC的三维可视化场景中,。该应用结果表明绘制方法可以满足实时性系统的要求,丰富了视觉显示的内容。
Ⅱ 视觉显示系统的框架
本文为基于HLA体系结构的水下对抗仿真系统提供[9]。主要平台由七部分组成:攻击者,水下无人驾驶器,防卫者,海洋环境、多通道视景显示成员等。视觉显示成员是末尾数据流。它采用了主节点被添加到主平台和订阅的每一个对象的运动和通过RTI与其他成员交互信息的B/S模式。主节点还接收用户的交互信息,并将所有这些信息分配到子信道。然后主信道和子信道可以同步显示的水下对抗的实时三维场景。
视觉显示系统的框架如图所示。1。主要实现如下:水上和水下场景和每一个对象的三维模型作为lsquo;fltrsquo;格式构建了创造者和保存;OSG用于呈现和管理三维可视化场景;声音信号的可视化通过OpenGL实现。最后一部分是本文的要点,以下详细描述。
图1 视觉显示系统的框架
Ⅲ声信号可视化
A 总体设计思想
所有的这些声音信号被定义为源于osg::Drawable的对象[10],并由OpenGL API 通过重载rsquo;drawImplementatio()rsquo;功能绘制。这些对象可以通过OSG的回调机制实时更新和互动,将其分为两类:lsquo;updatacallbackrsquo;执行每一帧 和lsquo;EventCallbackrsquo;只由用户交互触发,如鼠标和键盘操作。回调类,使用OOP的事件触发的思想为借鉴,有效地解决了多线程中的异步事件处理。实时三维视景仿真中的交互控制是一个重要的机制。然后,所有的对象可以通过来自两类的回调更新。
B 信号类型和频谱的可视化
在这个系统中声信号包括[6]:UUV发射信号(CW,LFT编码线性调频LFM,STF编码目标回波、目标辐射噪声、背景等噪音,海洋混响等。为了区分不同类型的信号性能,最简单方法是绘制他们的时间字段图。
首先重要的是产生信号的时空场数据。虽然这些数据计算基础是UUV的节点而且可以通过,但是数据量过大。例如,如果采样率为8K,1.06M数据需要在一个周期内传输。这将消耗过多的网络资源和增加整个系统的复杂性。经过综合考虑,只有信号的关键参数将被传递,如两频率(F3、F5)的CW信号和三频率(F1、F3、F5)的LFM信号。然后这些信号的时域数据可以在视觉显示节点被计算和重新采样。为了不影响刷新率,上述数据生成的作品放在一个单独的线程中,只有通过HLA交互信息时触发信号类型或参数更改。然后,生成的数据数组将传递给对象的drawlmplementationO功能,并通过OpenGL的原始的GL_L1NE_STRIP被绘制。我们可以使用顶点数组一次性向OpenGL传递数据并结合顶点缓冲对象(VBO)来支持动态数据更新和自动地管理数据存储。最后,目标节点添加到一个HUD摄像头,并嵌入到主视觉场景中。
为了看信号的细节,除了上述的嵌入式显示模式,还可以打开一个单独的窗口通过菜单栏显示详细的波形和参数,而且你可以得到一个截图。为了满足在水下对抗仿真中声音信号实时可视化的要求,利用OpenGL VBO和多线程技术实现了声音信号的类型和波谱的绘制。根据正方形均匀平面阵列的接收波束的旋转对称结构,通过OpenGL二次型几何圆柱体和显示列表提出并实现了水平分割作图方法。而且波束增益,功率,和情况被映射到光束绘制。在顶部视图绘制了搜索区域。最后,所有的绘图都被嵌入在主要的基于OSG和VC MFC的三维可视化场景中。该应用结果表明绘制方法可以满足实时性系统的要求,丰富了视觉显示的内容。
为了实现前面的功能,我们需要建立一个模态对话框窗口,并将窗口的句柄图形传到OpenGL。然后我们可以根据计算数据在OpenGL环境中直接绘制图表。如图2所示,我们可以用类似的方式显示每个信号的类型。这两种显示模式共享数据,因此数据只需要被计算一次。因为嵌入式图表很小,所以一半的数据就足够了。
图2信号类型的可视化流程图
信号频谱的绘制流程与图2相似。主要的差异和困难是频谱分析的实现。考虑信号的多样性,研究小组开发出一种复杂的矩阵C 类,在MATLAB中实现功能,例如复杂的信号的FFT变换,ABS操作等等。所以,我们可以脱离MATLAB引擎做频谱分析,而且计算速度能满足系统的实时要求。该频谱显示模块可以模拟频谱分析仪,并且可以显示发射信号的频率,目标回波的多普勒频移,混响的带宽等。
如图3和图4所示,CW信号的三个显示截图作为例子被给出。它的2两个频率为29.4千赫和34.3千赫,采样率为120千赫,脉冲宽度为60毫秒。
图3 CW信号的嵌入式显示
(a) 时域图 (b) 频谱图
图4 CW信号的详细信息对话框
C 接收波束的可视化
1 波轴线的水平切面方程
首先,我们需要做一些合理的简化:因为真正的水下环境是可变的,考虑到实时性和实用性的视觉表现的要求,接收的波束仅能根据理论案例绘制。也就是说,我们只考虑到了几何形状和波束形成参数,而忽略海洋环境的影响。在确保信息得完整性的前提下,只有波束的主瓣可以被绘制。同样的,波束形成参数被水下无人航行器节点通过,而且波束几何数据将在本地生成。当波束改变,计算只通过HLA交互信息触发。然后,波束可以通过合理的参数映射被绘制。
在该系统中,阵列形状为正方形均匀平面。所需的参数为:阵列数(M*M),阵列间距(d),主瓣宽度(b_width),波束指向(theta;,theta;perp;)和发射信号的波长(lambda;)。根据这些参数,简化的波束方程可以被建立,下面将详细描述。
沿着水平方向,这个数组M可以被视为离散均匀线阵的M线。假设每个阵列的灵敏度是相同的而且源信号正好在阵列的前面,每一个线性阵列的波束输出为:
(1)
(2)
当d和是足够小(仅在主瓣附近相关),f将会非常小。然后:
然后,沿垂直方向的离散均匀线阵列的M线可以被认为是M阵列。所以波束平面阵列的输出将会如下建立:
根据公式(5),波束体的形状是旋转对称的。所以我们只需要知道波束的,然后整个形状可以通过旋转得出。当在(5)中,我们可以得到水平轴的平面切割的形状方程:
2 波束的水平分割绘制方法
图5波束的轴线水平切面
如图5所示。当采样角度值范围为b _ width/2到 0,我们可以把横切面切割成许多梯形。如果这些分割足够小的话,通过每个梯形的旋转,我们可以构造出波束的整个形状。 然后,我们可以使用OpenGL中的二次函数功能gluCylinderO通过旋转这些梯形画出形状。我们只需要保证slices参数是足够大(32就可以)和通过圆柱的三个参数:上底半径(R _ up ),下底半径(R _ down)和高度(H)。如果把波束切割成N个圆柱体,我们需要(N 1)个采样角度,那么我们可以如下构建每个圆柱:
我们可以从上面的过程中看到,这一绘制方法是快速而且清晰的,并只占据很小的内存。所以,它是适合于实时仿真系统的。
(a)水平搜索状态 (b)垂直发掘状态
图6波束图参数映射
3 参数映射
通过了水下无人航行器节点,一些重要的参数还需要在波束图上显示,如光束增益,波束功率,波束状态和波束类型。所以,我们将这些参数映射到波束图,细节如下:
- 波束增益映射到波束的最大径向间距。它可以控制光束的长度变化。
- 波束功率映射到波束上点的颜色。为了与Malab上的轮廓一致,我们只是用MATLAB的colormap[index]。根据权值,通过公式(8),index可以被计算出来。
- 光束状态映射到波束的色调。当状态是隐藏,所有的波束颜色相同映射。当状态改变为被发现,波束的颜色指向在目标将映射到紫色色调。
- 当光束类型是垂直的,光束的俯仰角需要向上旋转90度。
当我们画了一个以上的光束,我们可以使用OpenGL的显示列表功能gINewListO进行优化。也就是说,我们在外面建立了一个波束的显示列表,而且只在绘制位置短暂访问它。为了满足在水下对抗仿真中声音信号实时可视化的要求,利用OpenGL VBO和多线程技术实现了声音信号的类型和波谱的绘制。根据正方形均匀平面阵列的接收波束的旋转对称结构,通过OpenGL二次型几何圆柱体和显示列表提出并实现了水平分割作图方法。而且波束增益,功率,和情况被映射到光束绘制。在顶部视图绘制了搜索区域。最后,所有的绘图都被嵌入在主要的基于OSG和VC MFC的三维可视化场景中。该应用结果表明绘制方法可以满足实时性系统的要求,丰富了视觉显示的内容。这可能会预编译波束的显示数据到显卡内存,所以我们不需要每次都重新构建对象。然后,根据无人水下航行器的位置,我们可以通过过载的UpdatCallback类把波束对象放到MatrixTransform节点下并且更新位置和旋转。
接收光束的绘制结果如图6所示,数组的参数为:数组数(20times;20),主瓣宽度(10°),d/lambda;asymp;0.5,12个同步的接收光束。
D 搜索区域的可视化
搜索区域是一个扇形区域,其半径是导航范围。从上面看,观察距离远,所以,我们用它来表示水下无人航行器可能会发现目标的区域,而不是用光束。这可以利用OpenGL函数gluPartialDiskO实现。我们只需要设置部分磁盘的内半径为0,外半径为引导范围,开始角为光束全宽负向的一半和扫描角为正向的一半。还有,颜色可以根据光束的状态改变。
Ⅳ运行结果
计算机硬件配置:
- 处理器:奔腾双核E5400 / 2.7GHz.
- 显卡:NVIDIA GeForce 9600 GSO / 512M.
- 硬盘:160G / 7200/16m.
- 内存:DDR II 800/2G.
软件配置:
- 操作系统:Window XP sp3.
- OpenGL版本:2.2.
- OSG版本:2.8.2.
- Visual Studio版本:.net 2005 SP 1
通过向osgViewer添加StatsHandler,我们可以得到在不同条件下的帧速率,结果显示在表1中。
表1 不同条件下的帧速率
<tr
剩余内容已隐藏,支付完成后下载完整资料</tr
资料编号:[148071],资料为PDF文档或Word文档,PDF文档可免费转换为Word
显示条件 |
帧速率(帧/秒) |
排空系统 |
60 |
数据生成 |
52-55 |
嵌入式信号显示 |
59-60 |
打开对话框显示窗口 |
58-60 |
直接绘制波束 |
56-57 |
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。