微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于CUDA技术模拟雷达余辉的方法

基于CUDA技术模拟雷达余辉的方法

时间:11-08 来源:互联网 点击:

在建立雷达虚拟操作系统或维修训练系统时,显示器的仿真效果直接影响模拟器的训练效果。目前制约余辉实现的主要瓶颈是余辉效果带来的庞大的计算量,使得效果较好的余辉扫描线转速难以超过10转/s,如果要提高转速,则需要以牺牲显示画质为代价。基于光栅扫描余辉模拟的主流方法有画线法、固定扇扫法、逐点消隐法,由于前两者图像易出现辐射状花纹及扫描速率不稳定,因此后者的应用较多,效果也明显强于前者[1]。本文在逐点消隐法的基础上应用CUDA技术,解决了运算量巨大的问题,在光栅显示器上得到了余辉效果逼真、画面流畅的余辉图形。
1 余辉仿真的瓶颈
传统的雷达P显采用示波管作为显示终端,其内部荧光材料具有指数型衰减的余辉效应,电子束扫描线圆周扫过屏幕将留下逐渐消隐的余辉[2]。但光栅显示器无法自动产生荧光粉的余辉效应,因此必须人为地模拟余辉效应。
软模拟通常采用光栅显示器,用计算机编程实现。光栅扫描显示器具有高亮度、高稳定度、大容量显示的图文处理能力、丰富的色彩及多灰度等级的优点。一般采用以下三种方法实现[3-4]。
(1)画线法较容易实现,原理是在屏幕上以画直线的方式画出每一角度的扫描线,形成每次画一个扇面的灰度递减的直线簇。但是当程序运行时,扫描线轨迹不断地在屏幕上转动,该方法不能无缝地覆盖整个扇扫区域,从而产生一个辐射状的固定花纹。
(2)固定扇扫法是在画线法基础上改进的一种仿真方法,控制扇形区域的圆心角,依次使不同扇形区域亮度减少。它虽然消除了辐射状花纹,但在没有目标到有目标信号时,由于数据量的增加会造成扫描线的转速不同。
(3)逐点消隐法,主要原理是将每个方位像素的亮度逐次递减,即每个点都必须被修改,这样整个屏幕画面亮度逐渐衰减。其产生的余辉效果比较逼真,扫描线转速也较稳定。
模拟逼真的余辉效果,一般采用逐点消隐法,十分逼真的余辉仿真需要非常高的数据吞吐率,要求在每一显示帧的时间内(一般为60 Hz的倒数约16 ms)对屏幕中所有像素进行一次衰减运算。以公认的高效算法,即查表法为例:对于一个像素点而言,最少需要1次读和2次写操作,分辨率为1 024×1 024的屏幕中会有1 024×1 024个像素点参与雷达回波的显示,数量约为1 M。即在16 ms的时间内需要进行1 M次读操作和2 M次写操作,分给每个像素点的时间为16 ns。由于Windows属于通用型操作系统,硬件操作过程极其复杂,无论如何也无法在16 ns内完成1次读和2次写操作。需要说明的是,现有的用PC实现的余辉仿真算法都是以牺牲画质为前提条件的,例如有的算法降低角度分辨率,有的算法只运算部分像素。
2 瓶颈的解决方案
为了解决此瓶颈,本文将国外主要应用于3D游戏设计的CUDA技术移植到余辉的模拟上。CUDA(统一计算设备架构)是NVIDIA公司在2007年推出的针对GPGPU(通用计算GPU)的一个全新构想,使专注于图像处理的GPU超高性能在数据处理和科学计算等通用计算领域发挥优势[5]。
GPU特别适合并行数据运算问题,同一个程序可操作许多并行数据元素,并具有高运算密度(算术运算与内存操作的比例),且在高密度运算时,GPU访问内存的延迟可以被掩盖。目前高端GPU计算性能已达到Teraflops(每秒万亿次浮点运算)级别,其运算速度远远高于CPU的速度[6-7]。2008年初国内建成的首套实验系统,其计算性能的理论峰值124 Teraflops,可用峰值82 Teraflops。
但是常规的GPU通用计算还存在以下问题[7]:编程过于繁杂,难以学习与使用,在非图形领域应用很不充分;GPU编程缺乏灵活性,对GPU性能的发挥有很大的限制。
而CUDA采用GPU+CPU的方式,通过标准C语言将GPU的众多的计算特性结合到一起,由线程来创建应用程序。程序代码在实际执行中分为两种,一种是运行在CPU上的主机代码,另一种是运行在GPU上的设备代码。它类似于CPU上的多线程程序,但与仅能有很少线程同时工作的多核CPU相比,GPU可以同时执行成千上万个线程[8-9]。CPU程序以异步的方式调用GPU核程序,GPU作为CPU的协处理器(CoProeessor)提供服务。
当前CUDA提供的主要功能如下[7]:
(1)在GPU上提供标准C编程语言。
(2)为在支持CUDA的NVIDIA GPU的并行计算提供统一的软硬件解决方案。
(3)支持CUDA的GPU能进行并行数据缓存和线程执行管理。
(4)经过优化的,从CPU到支持CUDA的GPU的直接上传、下载通道。
(5)CUDA驱动与DirectX和OpenGL等图形驱动程序兼容。
为了解决巨大计算量的问题,主要采用CPU+GPU的编程模式来模拟余辉,在GPU中为每一个像素点创建一个线程独立进行亮度衰减处理。由于每个像素的线程并行执行,完成整个屏幕像素的数据处理几乎不需要计算时间,真正花费时间的是画面绘制和翻转。因此绘制画面在后台表面进行,绘制完成后翻转到前台显示,这样绘制和显示可以同时进行,既为画面的绘制留足了时间,又能得到流畅不闪烁的画质。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top