并行多通道

2024-09-12

并行多通道(精选5篇)

并行多通道 篇1

0 引 言

软件无线电(Software Radio),也称软件定义的无线电(Software Defined Radio),是一种既能够兼容多种制式的无线通信设备,也能够满足未来个性化通信需求的无线通信体系结构及技术。20世纪90年代初,美国MITRE公司的首席科学家J.Mitola首先提出这个概念。它是将模块化、标准化和通用化的硬件单元以总线或者交换方式连接起来构成的通用平台,通过在这种平台上加载模块化、标准化和通用化的软件,实现各种无线通信功能的一种开放体系结构及技术[1]。

促使软件无线电产生和发展的原因主要包括军事、民用、技术和市场需求在内的现实需求以及大规模集成电路、个人计算机及其网络、高速数字信号处理、新型软件工程方法、现代控制论等技术进步的产物[1]。

1 中频接收机总体设计

软件无线电的基本思想就是尽可能地简化射频模拟前端,使A/D变换尽可能地靠近天线,尽早地完成模拟信号的数字化,并对其尽可能多地用软件进行处理。可以看出,A/D起着最为关键的作用,但目前A/D的性能无法实现射频直接采样,所以目前的软件无线电接收机采用了折衷方案,大都是在中频上完成数字化。本研究针对的是已完成模拟下变频的70 MHz或者140 MHz的中频信号。硬件的总体设计框图如图1所示。4路A/D对中频信号进行采样,并送入GC5016完成数字下变频,FPGA完成部分基带信号处理,在PCI9054桥接芯片的控制下通过PCI总线将处理后的数据送入PC机进行再处理。同时,PC上位机通过PCI总线控制CPLD对GC5016和FPGA进行配置和重配置,具有一定的可重构性。

尽管采用了中频带通采样技术,但相对于FPGA或者DSP处理能力来说,数据速率仍然太高,很难满足实时性要求。一个实际的无线信号带宽有限,对单信号采样时所需的采样率并不高,对采样数据进行抽取,以降低采样率是完全可行的。多速率信号处理中的抽取理论是软件无线电接收机的理论基础。图2是一个完整的D倍抽取器结构图,图中HLP(ejω)为其带宽小于π/D的低通滤波器,是滤除信号频谱中高于π/D的部分,用以防止采样率降低后信号频谱造成的混叠。

2 模块功能描述

2.1 数字下变频(DDC)

GC5016是一种灵活的宽带四信道数字上下变频器,可设计用于高速、高带宽的数字信号处理应用,例如3G蜂窝收发基站的发送和接收信道,也可用于通用目的的数字滤波。四个相同的处理信道可以独立地配置为上变频,下变频或者两上两下的组合。本文将它们配置为四个下变频通道,作为通用的数字滤波器使用。在四信道模式下输入速率高达160 MSPS,无杂散动态范围为115 dB,16个255阶的FIR滤波器,64个并行输入/输出位,提供灵活的I/O选项。

在下变频模式中,信道接收实数据或者复数据,在选定的载波频率上解调,并进行抽取,自动增益放大,产生20位的输出。信道的输出信号经过格式化后,以实数或者复数的形式加到四个输出端口,完成数字下变频。

下变频信道处理流程中,首先经过接收输入格式器(Receive Input Formatter,RINF)将ADC采样的数据格式转化为复输入格式。在混频段,通过接收输入信道选择(Receiver Input Selection,RSEL)、数控振荡器(Numerically Controlled Oscillator,NCO)和复混频逻辑,将中频信号载波频率混频搬移至0 Hz,形成零中频信号或称基带信号。混频之后是5级的积分梳状(Cascade Integrator Comb)抽取滤波器,提供1~256的整数倍抽取和复滤波。可编程的有限冲击响应滤波器(Programmable Finite Impulse Response Filter,PFIR)提供CIC的矫正,频谱锐化以及进一步的抽取,PFIR的抽取率是1~16倍。复功率计对信号增益进行监视,输出下变频之后的信号。

2.2 基带处理

软件无线电的基带处理需要具有如下特征:强大的运算能力、完全的灵活性、模块化、可增减性和开放的体系结构。FPGA以很高的集成度和灵活的可重新配置功能,非常适合软件无线电基带处理领域。在FPGA中可以完成信号的载波估计和同步,符号时钟估计和同步,信道均衡,信号的解调、解扩等等。通过上位机的控制和交互,完成部分乃至全部的基带处理,并将数据通过PCI总线送入计算机,依靠廉价的PC以及其组成的计算机网络完成部分基带和上层数据的处理工作。

2.3 重配置电路

软件无线电要求在一个通用的硬件平台上实现各种通信功能,因此可重构性必然成为软件无线电的根本特性。FPGA可以根据不同的配置信息构建不同的硬件电路,再配合微处理器或者其他可编程器件来模拟FPGA的配置时序,这就可以实现对FPGA重配置的控制。在此思想指导下,本文利用CPLD的通用I/O口产生配置时序,通过PCI总线传送新的配置文件,在上位机的控制下,实现了对FPGA的重新配置。上/下变频芯片GC5016的重配置与FPGA相同,被控芯片和上位机的相互配合即在一定程度上实现了系统的在线重构技术。PCI9054芯片用于FPGA,CPLD和PCI总线之间的桥接工作,已经相当成熟,在此不再赘述。

3 滤波器理论分析

GC5016芯片包含两类滤波器,CIC(级联积分梳状)滤波器和PFIR(可编程有限冲击响应)滤波器。CIC滤波器已被证明在高速抽取或插值系统中是非常有效的单元。在下变频中CIC可以将中频采样的信号按需要降低到基带。CIC滤波器是IIR和FIR滤波器的组合,它能用简单的结构、较少的资源灵活地实现输入、输出数字信号的速率变换,往往在DDC中用作第一级处理[2]。

FIR滤波器,即有限冲击响应滤波器是指冲激响应函数h(n)为有限个值的数字滤波器。FIR滤波器具有许多独特的优越性,除了可以做成具有严格的线性相位外,还可以满足任意的幅度特性要求,也不存在不稳定问题,且设计相对成熟。

理论分析中采用了实信号形式进行分析,而实际的芯片处理通过模块复制实现了复信号的处理。

3.1 CIC滤波器

CIC滤波器用来实现第一级的整数倍抽取,如图3所示。该滤波器的冲激响应具有如下形式:

式中:D即为抽取因子,也是CIC滤波器的阶数。其z变换为:

总的频率响应为:

第一旁瓣电平为:undefined,当D≫1时,undefined,它与主瓣电平(D)的差值为13.46 dB。可见,单极CIC滤波器的旁瓣电平较大,阻带衰减很差。为了降低旁瓣电平,可以采用多级CIC滤波器级联的方法,如图4所示,GC5016采用五级级联的方式,提供1~256级的抽取率,具有67 dB左右的阻带衰减,基本满足实际需求。其频率响应为:

由于CIC滤波器的通带倾斜较大,信号通过CIC滤波器之后,频谱会产生一定的倾斜,且伴有较大损耗,所以后端的PFIR滤波器在继续对信号进行抽取降速的基础上,还要对信号进行一定程度的补偿,以便抵消CIC滤波器的通带倾斜。

3.2 PFIR滤波器

用一个已知的窗函数ω(k)去截取一个理想滤波器的冲激函数hid(k),就能得到一个实际可用的FIR滤波器冲击函数h(k),即窗函数法,这是最简单、最常用的设计FIR滤波器的方法。常用的窗函数ω(k)有矩形窗、汉宁窗、海明窗、布-哈窗(Blackman-Harris)以及凯撒(Kaiser)窗等。除此之外,还有等波纹最佳一致逼近法(Parks-Mcclellan最优法)及频域采样法等。

FIR滤波器的阶数即窗函数长度是由滤波器的实际需求决定的,对于某些类型的窗函数,给定δp,δs,fC,fA等滤波器参数就可确定所需的滤波器阶数。例如对凯撒窗,当δ=δp=δs时,则N由下式给出:

式中:Δf,fC,fA分别为实际模拟带宽和频率值;fs为采样频率。由上式可见,数字滤波器的阶数N与滤波器的归一化过渡带宽度成反比,与滤波器带内波动的对数值成正比,过渡带越窄带内波动越小,所需的滤波器阶数越大,实现起来也越困难,所以实际应用中,需要对三者进行权衡折衷。目前有很多商用滤波器设计软件包可供选择,Matlab的信号处理和滤波器设计工具箱,提供了强大的设计和仿真功能。本文使用Matlab对GC5016的滤波器设计进行了仿真。

4 仿真及结果

仿真实用Matlab的滤波器设计工具箱,假设抽取因子M=8,差分延时D=1,信号通带为2 MHz,阻带衰减Ast为80 dB,采样率fs为100 MHz,则CIC滤波器的幅频响应如图5所示。

假设FIR滤波器的抽取因子M2=4,阻带为4.25 MHz,通带为2.25 MHz,通带纹波Ap为0.1 dB,则FIR滤波器的幅频响应如图6所示,级联之后的幅频响应如图7所示。

滤波器设计工具箱可以直接导出上述滤波器的系数,通过相应的开发工具写入GC5016的配置文件,即完成了从仿真到实践的开发过程。

5 结 语

软件无线电以可升级和可重配置的软件来实现各种无线电功能的新架构,在军用和民用领域越来越显示出强大的生命力。本文介绍了以数字上下变频器GC5016和可重配置的FPGA为核心的多通道接收机设计。实验表明,该多通道接收机具有一定的灵活性和开放性。未来还可以在4通道的基础上,利用多个多通道接收机实现新一代阵列处理系统,具有较强的生命力和广泛的应用前景。

摘要:给出了并行多通道接收机方案,以多速率信号处理理论为基础,采用了宽带中频带通采样的软件无线电架构。使用TI的数字上/下变频转换器GC5016作为接收机的核心芯片,主要介绍了GC5016的结构和功能,及其作为数字下变频器的使用,重点对CIC和PFIR两种滤波器在抽取重采样和滤波整型中的作用进行了理论分析和仿真研究。CPLD作为主要的外围器件,产生配置时序,在上位机的控制下完成重配置功能。设计大量采用可编程器件,具有较高的集成度、灵活性和广泛的应用前景。

关键词:软件无线电,多速率信号处理,CIC滤波器,PFIR滤波器,GC5016

参考文献

[1]粟欣,许希斌.软件无线电原理与技术[M].北京:人民邮电出版社,2010.

[2]张公礼.全数字接收机理论与技术[M].北京:科学出版社,2004.

[3]邵震洪,李玉生,沈连丰,等.基于GC5016的数字上变频电路设计[J].信息化研究,2010,36(11):45-46.

[4]张惠军,程翥,皇甫堪.GC5016中滤波滤波器的理论分析与综合设计[J].电视技术,2007,47(2):144-148.

[5]李苗,陈健.基于AD9244和PCI9054的虚拟无线电接收子系统[J].现代电子技术,2005,28(21):19-21.

[6]程明,毕立恒,杨晓光.用CPLD和FLASH存储器配置FP-GA[J].微计算机信息,2007(20):171-173.

[7]任菊,吴波,张红雨.基于软件无线电的多通道数字接收机的实现[J].现代电子技术,2006,29(7):55-59.

[8]许军,汪芙平,王赞基.基于软件无线电的数字侦听接收机研究[J].电子技术应用,2007(8):110-112.

[9]王江,姚远程.软件无线电接收机多速率信号的多段处理方法研究[J].现代电子技术,2010,33(1):46-49.

[10]亓洪,曹杰.一种数字化接收机的实现方案研究[J].现代电子技术,2004,27(21):100-102.

并行多通道 篇2

哈特曼波前传感器是自适应光学系统中最广泛使用的波前传感器。在基于哈特曼波前传感器的波前复原运算中, 首先要计算波前斜率, 而计算波前斜率的关键步骤就是质心运算。目前针对于哈特曼波前传感器的质心运算多通过在可编程逻辑器件中建立流水线架构实现, 但是目前仅见到针对单个像素顺序输出的探测器设计运算流水线结构[1,2], 不能适用于在一个像素时钟内通过多个通道并行输出一行内相邻多个像素的焦平面阵列探测器, 需要开发新的流水线架构以适应这一要求。

2 哈特曼-夏克波前传感器概述

哈特曼波前传感器工作原理是利用一个微透镜阵列将波前分割成许多个局部波前, 然后在微透镜阵列焦平面上放置焦平面阵列探测器, 从而通过光电转换, 将聚焦后的入射波前以光斑图像的形式输出, 再进一步通过对图像进行处理获得波前信息。工作原理示意如图1所示[3,4]。

根据微透镜阵列每个孔径位置, 在探测器靶面上划分对应每个子孔径的区域。对于理想的平面波, 成像光斑将落在每个子孔径对应区域的中心, 而当波前发生畸变时, 光斑中心位置相对于区域中心会产生一定的偏差。通过探测这些偏差, 进一步即可获得对应每个子孔径的波前斜率, 再通过波前复原矩阵运算可以求得完整的波前信息。

计算光斑质心位置的最常用算法是一阶矩质心算法, 如公式 (1) 所示。

上式中, 子孔径在探测器上的对应区域为L×M, i=1~M, j=1~N, xi, yj分别表示像素 (i, j) 的坐标, Ni, j代表灰度值。该算法运算简单, X和Y方向质心运算互不耦合, 目前应用最为广泛。

计算得到质心位置后, 可通过公式 (2) 计算子孔径斜率:

(x0n, y0n) 表示第n个子孔径的理想波前光斑的中心, (xn, yn) 表示实际波前计算得到的质心位置, f是透镜阵列焦距。

3 实时质心运算流水线结构设计

本文设计的实时质心运算流水线结构如图2所示:

由于X和Y方向质心运算的对称性, 除了像素地址和控制信号的差异。X和Y方向具有相同的运算结构, 且其中乘法器组单元、累加单元等组成部分的结构也相同, 因此该流水线结构具有良好的可实施性和维护性。

为了实现X方向和Y方向的乘法运算后的结果累加, 分别设置了两个累加单元, 其中累加单元1用于完成子孔径序号为奇数值的子孔径内结果累加, 同时累加单元0用于偶数序号的子孔径累加。这样设计的目的是当同时输出的多个像素分别属于不同的子孔径时, 也能同时完成对应不同子孔径结果的累加且不会引入额外的延时。

乘法器组单元的结构在图3中给出, 其包括若干个并行的乘法器, 乘法器的数目与探测器并行输出像素的通道数保持一致, 可以同时完成所有并行输出像素值和像素地址的对应乘法运算。

累加单元的结构如图4所示, 图中的像素输出通道数为8。在运算过程中, 子孔径的奇偶标志作为每个像素对应的控制字中的1个bit, 当该像素属于一个奇数序号的子孔径时, 该bit值为1, 反之则为0。当乘法运算后的结果到达累加单元1后, 首先与子孔径奇偶标志相与后才继续进行累加操作。对于累加单元2, 首先对子孔径奇偶标志取反后再与乘法结果相与。这一操作的目的是保证当前并行输出的多个像素值即使对应两个不同的子孔径, 也能够同时完成累加操作而不会产生混乱。

对于不同的输出通道数, 倒金字塔结构加法器组的层数可以确定为log2 (N) , N表示大于输出通道数M, 且可表示为N=2k最小的正整数, 其中k为整数。

由于单个子孔径在一个方向上通常都包括数十个像素, 因此一个子孔径的一行可能需要若干个时钟来完成输出, 因此在累加单元的最后采用了一个累加器来实现对应当前子孔径的一行像素运算结果的累加。当前像素行结果累加完成后, 结果会暂存在一块双口RAM中, 如果当前像素行是子孔径的最后一行, 则输出控制单元将累加结果输出至除法器, 否则将中间结果暂存至RAM中以备下次累加使用。

除法器可根据系统需求设计为定点运算或浮点运算, 目前的主流FPGA中都提供了相关的除法器IP核, 可以方便使用。

地址和控制单元中的控制表单元组成如图5所示, 其包括一个双口RAM和配套控制电路。每个像素的控制字向量包括三部分:若干bit的X方向地址, 1bit的像素有效位以及1bit的子孔径奇偶标志。X方向地址的长度由哈特曼波前传感器的子孔径区域大小决定。一个时钟内并行输出的M个像素控制字被储存在RAM中的一行内, 在一个时钟内同时被输出。双口RAM的A口输出控制字, B口用于进行控制字的初始化输入和更新, 从而在输出控制字的同时, 还可进行控制字的更新。

哈特曼波前传感器的子孔径有效区域通常使用探测器靶面的中心部分, 边界部分会存在无用的像素, 为节省存储空间, 控制表中仅存储了包括有效像素的像素行控制字, 有效区域之上/下的像素行控制字没有进行存储。因此, 控制表单元需要Y方向的像素地址来产生RAM的访问地址和相应控制信号。

Y方向地址产生单元的结构如图6所示。子孔径开始计数器在一帧图像的初始开始对行有效信号LV计数, 到第一个有效像素行之前的像素行结束, 并输出开始信号到Y方向地址计数器。当子孔径开始的信号出现时, Y方向地址计数器开始根据预先设定的子孔径大小, 对行有效信号进行循环计数, 其计数结果即为Y方向地址。

子孔径结束计数器从帧开始计数, 到最后一行有效像素行结束, 并输出结束信号到Y方向地址计数器, 而后Y方向地址计数器停止计数并将计数值清零, 等待下一帧图像数据的到来。

4 实时质心运算流水线结构的FPGA仿真实现

在Xilinx ISE 12.3开发环境中, 以Virtex-5 LX220T FP-GA作为目标器件, 使用VHDL语言进行编程仿真实现。

对于乘累加单元, 其运算延时为7个clock, 除法器IP的理论延时为28个clock, 加上控制延时和时序对准的延时, 整个流水线的运算时间约为40个clock。

通过Model Sim进行了仿真, 延时结果约为41个时钟周期, 不超过0.5us, 与分析吻合得很好。

5 总结

针对像素横向多通道并行输出特点的高帧频哈特曼波前传感器, 设计了基于流水线和并行处理的实时质心运算流水线结构, 并且通过编写VHDL程序, 对上述质心运算结构进行了FPGA上的仿真实现。分析和仿真结果表明, 该实时处理流水线结构完全能够满足质心运算的实时性要求, 同时可根据输出通道数目变化灵活扩展, 具有较好的实用性。

摘要:基于可编程逻辑器件, 设计了一种针对横向多通道像素并行输出特点的哈特曼波前传感器的实时质心运算流水线架构。该架构由乘法器单元、累加单元和除法单元组成, 各个单元内运算器的数目可根据输出通道数和输出像素顺序自由配置。对于一帧图像的质心运算, 经过该架构处理后延时仅为对最后输出的一个像素处理所需时间。仿真结果表明, 对于以80MHz的时钟频率, 横向8个像素并行输出的哈特曼波前传感器, 其运算延时不超过0.5µs。

关键词:质心运算,并行像素输出,可编程逻辑器件,哈特曼波前传感器

参考文献

[1]周璐春, 王春红, 李梅, 等.基于FPGA技术的波前斜率处理方法[J].光电工程, 2002, 29 (3) :28-31.

[2]C.D.Saunter, G.D.Love, M.Johns and J.Holmes, FPGA Technology for High Speed, Low Cost Adaptive Optics[C], Proc.SPIE, vol.6018G, 2005:1-14.

[3]周仁忠等.自适应光学[M].北京:国防工业出版社, 1996.

基于X264多线程并行编码研究 篇3

随着网络电视、视频会议和高清视频的不断发展,人们对视频编解码的速度和其图像的清晰度提出了越来越高的要求,H.264/AVC作为最新的编码标准,代表着向低码率高质量发展的趋势。虽然H.264/AVC比以往的编码标准节省了码率,但因为其新增的编码特性,使其增加了编码复杂度,使用单处理器的编码速度已经不能满足视频的实时传输和大规模的共享要求,因此研究一种高效的视频并行编码策略是目前的重要课题。

作为一种开放的H.264/AVC编码器,X264比较注重实用性。它在保证了编码效率未明显降低的情况下,舍弃了如多参考帧和帧间预测中不必要的块模式等这些具有极高复杂性的技术;另外X264实现了指令级并行,在此基础上,人们又提出了线程级并行方法,其中包括GOP级、帧级、片级和宏块级并行策略[1,2]。但是其研究方法都不够充分,绝大多数还是针对单一粒度进行并行实施。本文主要研究通过多线程来实现片级和帧间宏块级的并行。

本文介绍片级多线程并行编码算法和帧间宏块级并行编码算法及其实现过程,片级多线程并行编码算法只对一帧图像进行编码,在系统中只需保存与该帧图像编码相关的一些参考帧图像数据便可,所以对内存需要量小[3],同时通过实验表明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度。本文提出可以根据两种算法的特点,运用POSIX线程库,进行多粒度并行编码算法研究,达到视频更好的实时编码的要求。

1 相关知识介绍

1.1 POSIX多线程

IEEE的开放系统接口标准POSIX线程,通常称为Pthreads标准。视频编码多线程应用程序可以在串行计算机上开发,并且不作任何改变地在并行计算机上运行,同时多线程化的视频编码程序要比使用别的并行程序容易编写得多,另外利用多线程能躲避延迟时间,当一个线程在等待通信操作时,其他的线程可以利用CPU,这样可以屏蔽相应的开销,因此本文使用多线程进行视频编码的并行处理[4]。

1.2 片

在视频编码的过程中为了限制误码的扩散和传输,一个图像帧可以被编码成一个或更多个片,编码的各个片之间是相互独立的,在同一帧中每个片的编码不依靠其他片作为参考,一个独立帧的搜索范围也不能超过片的边界[5,6]。

1.3 帧间宏块的关系

为了提高视频编码的性能,H.264/AVC需要以编码帧的重构图像作为参考来处理时间冗余,即帧间预测模式需要先前已经编码过的参考帧。当前帧的当前宏块能够编码之前,至少其参考帧中的对应位置和它附近的8个相邻宏块是可用的[7],如图1所示,因此实现帧间宏块级并行必须要考虑帧间各个宏块之间的依赖性。

1.4 并行编码的加速比

加速比是度量采用多线程并行处理比采用单个线程处理的加速倍数,用来衡量并行算法性能的重要指标,着重于并行处理相对于串行处理的优化效果。在H.264/AVC中加速比主要用来表征采用并行算法后编码帧率前后的变化情况。

加速比undefined

加速比越大,算法的编码速度越快,并行性能越好,视频编解码的实时性越强。

2 X264片级并行编码算法

2.1 片级并行

根据片与片之间相互独立的特点,同一帧内的各个片可以并行编码。每一帧分成固定数量的片,为每个片分配一个线程进行编码[8]。在进行编码之前需要对每个线程进行同步,其中主要操作就是参考图像帧需要同时进行更新。片级并行不用考虑前后帧之间的参考问题,每一帧的分片数可以人为设定,因此使并行编码具有更大的自由度。片级的并行程度理论上取决于帧的分片数,分片数越大,获得的并行加速比越大,但由于在编码过程中要加入片头等信息,这样就增加了系统开销,因而在采取片级并行时,不能无限制地提高分片数目来获取加速比,需要对图像质量、视频压缩率和并行效率三者做权衡,来决定每帧采用的分片数。假如帧I,P和B的排列顺序为IBBPBBP,其N个线程的Slice级并行方法如图2所示。

2.2 算法实现描述

片级多线程并行编码算法实现过程如下:

步1:主线程依次读入帧,对每一帧按照设定的thread来进行slice划分,通过主线程来创建各个片的线程,每个片独立进行编码。

步2:当创建的片级线程数目达到设定的线程数时,主线程将处于堵塞状态,几个slice并行编码,各个片之间不相互参考,仅参考已经编码完的图像。

步3:当所有片级线程都编码完成时返回到主线程,主线程继续读入下一帧,如果所有的帧都编码完成则结束,否则转入步2。

3 帧间宏块级的X264并行编码算法

3.1 帧间宏块级并行

帧间宏块级并行方法如图3所示,当Img0中的第一行已经被处理完的时候,它还不能被立即编码。这是因为运动估计的搜索范围要大于两个宏块大小。为了准确地预测帧的运动区域,必须等去块滤波和四分之一像素插值之后的编码宏块被重构。如果运动估计的搜索范围是宏块的两倍大,那么直到Img0的第三行被编码完成后Img1左上角的第一个宏块才能被编码。在图3中,Img1中当前正在编码的宏块可以和Img0中带有相同颜色的宏块同时进行编码。此后,只要判断宏块间不存在数据依赖性,Img1中的宏块就可以和Img0的一些宏块同时进行编码。通过增加帧间并行,在X264编码器中提供了更多的并行性[9]。此算法的并行机理在于:当前帧要编码的宏块跟其余帧的其他宏块同时编码的条件是必须等当前帧的宏块要参考的其余帧的宏块编码完成。

3.2 算法实现描述

帧间宏块级多线程并行算法实现过程如下:

步1:主线程依次读入帧,然后通过主线程来创建辅助线程,先创建的线程进行编码,随后的帧只有当其参考帧中所依赖的宏块编码完成后才能开始编码。

步2:当创建的辅助线程达到设定的线程数时,主线程将处于堵塞状态,辅助线程并行的编码各帧中没有相互依赖关系的宏块。

步3:当最先被创建辅助线程的帧编码完成时将返回到主线程,主线程继续读入新帧(直到没有新帧转步4)并为其创建新的线程,以保证用于并行编码的线程达到设定的线程数,然后重复步2。

步4:当所有的帧编码完成之后,辅助线程释放,主线程完成后续工作并退出。

4 两种算法实验结果与分析

算法使用VS2008开发平台,以X264为研究对象,实验用C语言编写。实验设备是一台双核PC机:操作系统为Microsoft Windows XP Professional(SP3),CPU规格为Intel Core 2 Duo CPU T5800 (2.00 GHz),内存为2.00 Gbyte,硬盘为160 Gbyte。

实验采用主要编码档次,其主要的编码参数设置为:B帧为2帧;参考图像为1帧;环路滤波可用;CABAC熵编码算法可用;运动估计的搜索范围为正负16个像素点。

实验选取了运动缓慢的Akiyo和运动剧烈的Coastguard两个视频序列,对片级并行编码算法和帧间宏块级并行编码算法分别在QCIF和CIF两种不同的格式下进行测试,测试序列均为300帧,设置keyint_max为250。

表1是片级多线程并行和帧间宏块级多线程并行两种方法在不同线程数下编码帧率(单位为f/s)的测试结果。

图4和图5分别是视频序列Akiyo和Coastguard在两种并行算法实验测试下,不同线程数目对应的加速比的关系图。

由测试结果可以看出,在设定的实验条件下,帧间宏块级多线程并行编码算法比片级多线程并行编码算法具有更高的加速比。另外,对于片级并行算法,并不是设定的线程数越多,得到的加速比就越高,尤其对于运动缓慢的视频序列,而当线程数为2时,加速比达到了最大。

表2是片级并行和帧间宏块级并行两种方法在不同线程数下编码码率(单位为kbit/s)的测试结果。

表3是片级并行和帧间宏块级并行两种方法在不同线程数下峰值信噪比(单位为dB)的测试结果。

由表2的测试结果可知,帧间宏块级多线程并行编码算法得出的编码码率相对恒定,基本保持不变;片级多线程并行编码算法的编码码率随着线程数目的增大先增加后保持不变。由表3可以看出,两种算法下的峰值信噪比变化不大,片级多线程并行编码算法的相对偏低,因片与片之间的独立性破坏了片与片边界处数据的相关性。

通过上面研究和实验可以得出,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度,同时因为片级并行编码方法容易产生条带效应,所以要考虑图像质量,但是片级并行编码因只对一帧图像进行编码,在系统中只需保存与该帧图像编码相关的一些参考帧图像数据便可,对内存需求要少,系统开销要少,所以在进行X264并行编码的过程中,需要对图像质量、内存利用率和并行效率三者做权衡来折中考虑这两种算法,同时也可折中这两种算法的优缺点来研究视频编码的并行处理。

5 结束语

本文分别研究了片级多线程并行编码算法和帧间宏块级并行编码算法,通过实验得出了这两种算法的优劣势。对比实验结果表明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级并行编码具有更高的编码速度,但因其需要对多帧图像进行并行编码,在系统中需保存与多帧图像编码有关的参考帧图像数据,所以占用大量的内存,于是提出可以结合两种算法的特点,将两种算法结合进行多线程并行编码算法研究。另外,因实验条件的限制,没有在更多核上进行这两种算法的比较,所以实验结果不够全面,未来的研究重点是实现X264最大粒度的并行。

摘要:以X264编码器作为研究对象,着重研究片级多线程并行编码算法和帧间宏块级并行编码算法。帧间宏块级多线程并行编码算法需要对多帧图像进行并行编码,在系统中需保存与多帧图像编码有关的参考帧图像数据,所以占用大量的内存。但通过实验证明,在编码码率相对恒定的条件下,帧间宏块级多线程并行编码算法比片级多线程并行编码算法具有更高的编码速度。根据两种算法的特点,提出可以将两种算法结合进行多粒度并行编码算法研究。

关键词:X264,片级,帧间宏块级,多线程

参考文献

[1]蒋兴昌,周军,罗传飞.H.264并行编码算法的研究[J].电视技术,20083,2(2):33-35.

[2]MEENDERINCK C,AZEVEDO A,ALVAREZ Me,t al.Parallel Scalabili-ty of H.264[C]//Proceedings of FirstWorkshop on programmability is-sues for multi-core computers.Goteborg:[s.n].,2008:1-164.

[3]许昌满,李国平,王国中.AVS编码器Slice并行编码算法研究与实现[J].中国图象图形学报,20091,4(6):1108-1113.

[4]BUTENHOF D R.Programming with POSIX threads[M].[S.l].:Addi-son-Wesley1,997.

[5]WIEGAND T,SULLIVAN G J,BJONTEGAARD G,et all.Overview ofthe H.264/AVC video coding standard[J].IEEE Transactions on Cir-cuits and Systems for Video Technology,2003,13(7):560-576.

[6]SULLIVAN G,TOPIWALA P,LUTHRA A.The H.264/AVC advancedvideo coding standard:Overview and introduction to the fldelity range ex-tension[C]//Proceedings of SPIE conference on applications of digitalimage processing XXVII.[S.l].:SPIE,2004:454-474.

[7]ZHAO Z,LIANG P.Data partition for wavefront parallelization of H.264video encoder[J].IEEE International Symposium on Circuits and Sys-tems,2006(5):21-24.

[8]MEENDERINCK C,AZEVEDO AJ,UURLINK Be,t al.Parallel scalabili-ty of video decoders[J].Journal of Signal Processing Systems,2009,57(2):173-194.

多线程并行快速求解Pi的方法 篇4

随着技术的发展,单片机越来越难满足人们对于大量数据处理的需求,因此,人们越来越依赖于利用并行计算技术来解决程序规模庞大,运算时间长及数据量大的课题。本文即对当下比较常用的几种并行技术Win API、Open MP、MPI三种并行模式进行讨论课研究,并以计算π值为例,将并行模式与串行模式进行对比,研究并行计算的机理、优缺点及一些常见问题。

2模型建立

2.1蒙特卡罗思想,蒲风投针实验

(1)取白纸一张,在上面画许多间距为d的等距平行线;

(2)取一根长为l(l<d)的均匀指针,随机地向画有平行线的纸投去,共投n次,观察针和直线相交的次数m;

(3)直线与针相交概率p的近似值可用m/n得到,进而可得到圆周率的近似值为2nl/md。

2.2级数方法

由泰勒公式,其中有

整理得

整理得,当x=1,得:

2.3并行BBP算法

当今世界在进行计算机性能测试时往往选择在一定时间内计算Pi值得位数,而最常用的算法之一就是BBP算法。该算法不需要多精度浮点算术运算的支持,在支持IEEE浮点运算的通用计算机上即可进行计算而且该算法只需要非常少的内存。BBP算法也是目前算法中非常适用于并行计算的算法。

公式为:

3算法描述与实现

3.1 API实现

Windows实现多线程并行计算时会产生数据竞争,数据竞争(Data racing)导致计算结果不准确。产生错误的原因在于两个线程在同时访问同一内存区域时,且一个线程在进行写操作。为此采用同步技术,利用临界区解决此问题。由于本次试验中,数据计算量较小,所以基本不会产生数据竞争的错误,但是一旦运行计算量较大或者在共享量上运算时间较长的程序时,就会产生数据竞争,在本例中,我们以cout输出程序为引子,观察使用临界区和不使用临界区的区别:

代码如下:

我们将输出程序置于piSum值之前,由于cout运行时,在屏幕上显示需要消耗较大时间,所以就会有机会产生数据重叠或者两者读到了一样的piSum值。(如图1所示)。

所以,当我们使用临界区后结果为:(如图2所示)。

另外,临界区的设定也直接影响计算速度,所以尽量缩小临界区有利于提高运行速度。

线程取值过大的影响:

3.2 OpenMP实现级数方法

OpenMP是一种面向共享内存以及分布共享内存的多处理器多线程并行编程语言,是一种能够被应用于显式指导多线程、共享内存并行的应用程序编程接口(如图3所示)。Open MP具有良好可移植性,支持多种编程语言。parallel for循环并行化利用编译指导语句parallel for并行原理是采用工作分配的执行方式,将循环所需要的工作量按一定方式分配到各个线程,所有线程执行工作总和是原串行完成的工作量。parallel for根据CUP的大小(线程数多少)按工作量平均分配,对于线程数为8个,这里蒙特卡洛方法工作量取num Steps=10,000,000步,则每个线程要计算(1/8)*numSteps步的工作量。要特别注意的是在这里必须避免数据竞争(Data racing),采用的方法是对竞争变量私有化,使用private(t,fun,...)。

核心代码:

这个算法中,我们发现运行后,串行时间和并行时间是基本一致的:

这个问题在于x,sign的值为共享量,当不同的线程在调用时存在等待的时间,所以如果将这些值私有化,则可以解决这些问题。由于使用private时,各个私有变量必须在for中有定义,即在进入并行区时,for循环中的所有私有变量是需要重新定义的,因此我们必须使得x,sign等变量在定义时全部使用已知量来定义

因此程序完美的解决了并行问题。(如表1所示)。

3.3 BBP算法的实现

MPI是专门为集群和多节点并行计算语言,运行效率高,实现方式多样,可以进行主从式、并列式以及流水线式等方式的实现。在利用计算机多核CPU,模拟多个节点的实现方式。改造成主从式程序,利用0号节点作为主节点收发数据,也参与计算,而其他节点只进行计算,为负载均衡选择详尽的计算量运行到不同的节点上。

根据BBP算法(如图4所示)我们将整个运算分成4个部分,分别用一个线程进行运算,其运算总时间约等于线程中运行时间最长的那个(计算结果如表2所示)。

3.4 API、Open MP、MPI对比实验

我们以蒙塔卡罗算法为例,分别采用API、OpenMP、MPI三种并行方式对值进行计算,来对比其运算效率和运算精度(计算结果如表3所示)。

4结论

(1)MPI模拟多节点计算的速度是最快的,而且计算结果也是最接近穿行结果的,所以MPI适合计算大规模的较为精确的求解问题。

(2)WinAPI实现用临界区的效果最差,而且WinAPI的计算速度很大程度也和临界区的设定有关,尽量缩小临界区有利于提高并行速度。

(3)WinAPI实现用线程号为每个线程分配不同的任务,分配过程需要人为干预,对于函数复杂的程序来说,实现繁琐,不利于使用。

(4)数值计算时要根据实际情况选择和改造算法。比如在计算值就比e更适合并行。而且每种并行方法都有它的特使要求,比如在使用parallel for private时,由于变量进入for循环后属于重新定义,所以不能出现自己为自己赋值的情况,需要按照程序一步步展开来写,相对繁琐。

参考文献

[1]多核系列教材编写组.多核程序设计[M].北京:清华大学出版社,2007.

[2]朱建伟,刘荣.多线程并行快速求解e值的六种方法[J].现代计算机,2013.

并行多通道 篇5

随着近年自动化程度的进一步提高, 自动化控制越来越多地出现在交通、医疗等各个领域, 对专用车辆的集中监控也受到越来越多的重视。车载智能监控系统是专用车辆必不可少的一个组成部分, 其开发目的是为了实现对装载平台的各类专用设备: 油机、倒伏机构、升降杆、空调、 球机等进行集中监控, 实现对各类设备的运行状态参数配置与智能管理。

串行口作为一种速度快、安全性高、操作便捷的通讯手段, 具备很强的实用性, 通过微控制器对多串口进行控制可以实现对平台设备的集中监控。ARM处理器具备低功耗、高性能、成本低廉等优点, 故而本设计选用ARM作为微处理器。为了对多个设备进行多协议的实时监控, 需要对串行口进行拓展, 串行口拓展芯片虽然使用方便, 但在不改动硬件电路的情况下, 无法随串行口的增减进行灵活的变动, 这使得利用可编程逻辑门电路进行串行口拓展成为了切实可行的方案。

本文提出的多串口拓展方案, 将ARM的一组GPIO引脚与FPGA进行连接, 一次可以传输8位数据, 简化了FPGA的数据处理过程; FPGA在接受ARM的发送信息之后, 将其存入对应的存储队列, 设备发回的信息也将自动存入接受队列, 在需要的时候进行读取, 从而实现了数据的自动收发, 节省了系统资源; 由FPGA控制串行口收发, 可以通过ARM控制自由设置波特率, 提高了系统的通用性。

1总体设计

1. 1系统总体框图

如图1所示, 本系统利用ARM处理器的一组GPIO引脚实现与FPGA的并行通讯, FPGA通过一个总体控制模块对ARM传输的数据进行分配。考虑到需要同时对多个设备进行数据收发, 为了优化系统资源和避免数据冲突, 为每一个设备设置独立的发送队列和接收队列。由于可能存在不同的设备使用不同波特率通信的状况, 给每一个设备配置一个独立的波特率控制单元, 波特率可以通过ARM进行设置改变。

1. 2并行控制系统设计

在ARM与FPGA的并行通讯过程中, 需要传送8位数据及串行口对应的设备号, 本设计采用20芯排线连接ARM核心板与FPGA拓展板, 根据实际功能使用20芯排线的16个引脚, 排线插口引脚的功能分布如图2所示。 CS为使能引脚, 置0表示发送或接收功能开启; Channel引脚共有4位, 可以最多控制16个设备; I/O mode引脚决定当前是发送或是接收模式; WR引脚由ARM置位, RD引脚由FPGA置位, 是ARM与FPGA交互应答的主要引脚, 通过两次握手实现一次数据的收发。

图3为ARM11与FPGA的并行通讯时序图, 在ARM与FPGA进行交互的过程中, 为了避免发生冲突, 指定ARM为主动方, FPGA为从动方, 根据ARM的置位变化进行对应操作。当CS位被ARM置0后, 意味着数据发送接收环节开始, FPGA会根据I/O mode引脚的值确定是数据发送模式还是接收模式: 在发送模式下, FPGA会把ARM传递的数据根据接口信息 ( Channel) 进行分配, 当FPGA捕捉到WR的下跳沿, 表明ARM已经把数据放置在data引脚上, FPGA读取data引脚数值, 并存入对应FIFO, 然后FPGA将RD置0, 表示接收完毕, ARM在RD置0后将WR置1, FPGA随之将RD置1, 一次数据交互结束, 此后, ARM将根据当前数据串是否发送完毕决定是否开始下一轮发送, 全部发送完毕之后将CS置1; 接收模式下为达到ARM主导整个过程的目的, 必须使ARM获取需要读取的设备已发送数据的个数, 因此首先读取的是FIFO长度, 将FIFO长度锁存在8位data引脚后, FPGA将RD置0, ARM读取数据并将WR置0, FPGA捕捉到WR的下跳沿, 将RD置1, 随之ARM将WR置1, 该次数据交互结束, 此后, ARM将进行与FIFO长度对应的数量的数据接收, 直到FPGA将对应FIFO的数据全部取出, CS引脚置1, 数据接收结束。

2硬件设计

2. 1概述

为了实现ARM处理器对多个串行口的控制, 本系统利用FPGA进行串行口拓展, ARM11核心板和FPGA拓展板由2x10的排线连接。ARM11核心板使用飞凌公司的OK6410开发板, FPGA芯片使用Altera公司的Cyclone III EP3C5E144C8, 该芯片通过2个RSM3485D芯片和4个RSM232D芯片对4个RS485设备和8个RS232进行控制。

2. 2硬件电路设计

图4为硬件电路3D预览图, 其主要接口如下: J1为RS232接口, 共4组6芯插座, 每组包含2个接口, 对应RS232的Rx D、Tx D和地; J2为RS485接口, 共2组6芯插座, 每组包含2个接口, 分别对应A、B和G。RS485通讯为半双工通讯方式, A、B为两路差分信号; J3、J4为AS连接口和JTAG连接口; J5为5V电源; J6是FPGA与ARM核心板的连接接口, 20引脚, 间距为2 mm; J7是用于切换AS下载模式与JTAG下载模式的跳线, 短接时为JTAG下载模式。

本设计所用的FPGA芯片是Altera公司的Cyclone III, Cyclone III作为第三代芯片, 其每单位逻辑单元的成本比上代产品便宜20% , 同时, Cyclone III的低功耗特点使整个串口拓展部分的整体功耗降低, 提高了本设计的实用性。EP3C5E是Cyclone III系列的中低端产品, 拥有5 136个逻辑单元 ( logic elements) , 441 Kbits的嵌入式存储器 ( embedded memory) , 46个乘法器 ( multipliers) 资源, 4个锁相环 ( p LLs) 和20个全局时钟网络 ( global clock net- works) 。本设计选用的EP3C5E144C8的封装拥有144个引脚, 其中94个可用I/O口, 完全可以满足多串行口控制器的需要。

3 verilog程序设计

3. 1总体设计

Verilog HDL语言和VHDL语言是FPGA程序开发常用的两种硬件描述语言, VHDL语言在欧美地区使用较多, 国内多使用Verilog HDL语言进行开发。Verilog HDL语言语法格式要求宽松, 便于进行设计, 与VHDL语言相比, Verilog HDL语言更适合进行中小规模硬件控制, 故而本设计使用Verilog HDL语言编写FPGA程序。在本设计中, 将整个系统分为1个总体控制模块, 1个波特率总控制模块, 12个接收队列模块, 12个发送队列模块, 12个串口接收模块和12个串口发送模块。

3. 2总体控制模块

总体控制模块负责FPGA与ARM的并行应答交互, 并完成数据到队列的存取。在发送模式下, 模块通过与ARM的应答接收ARM发送的数据, 并将其依次存入发送队列中; 接收模式下, 模块先将ARM需要读取的设备对应的接收队列的数据长度发送给ARM, 再依次读取队列中的数据; 在波特率设置模式下, 模块根据ARM指令对波特率控制模块中的数据进行设置。

3. 3串口接收模块及接收队列模块

串行口通讯的帧格式如图5所示, 当在非数据段捕捉到rx232_rx信号的下跳沿时, 即认为侦测到起始位, 将bps _start信号置1, 该信号是通知波特率模块计时开始, 当波特率模块将clk_bps置1时, 表明计时完毕, 模块将rs232_ rx的数据读取, 即为数据的第一位, 8个数据位加上校验位、停止位, 在clk_bps置1共10次后, 一次数据接收完毕, bps_start置0, 等待下一次下跳沿的到来。串口接收模块及接收队列模块如图6所示, bps_start、clk_bps为波特率相关引脚。当一个数据接收完毕, 串口接收模块对将wrreq引脚置1一个时钟周期, 通过rx_data将数据存入接收队列。usedw引脚的值是当前队列数据的长度, ARM会根据该长度决定数据读取的次数, 因此控制模块会在一串数据读取操作之前将该数据发送给ARM。发送接收队列模块的aclr引脚是异步清零引脚, 置1可清空FIFO。

3. 4串口发送模块及发送队列模块

串口发送模块及发送队列模块如图7所示。发送队列中存在数据时, empty引脚会置0, 我们可以以此作为发送的标志。当捕捉到empty引脚的下跳沿时, 串口发送模块将rdreq置1, 从队列中取出一个数据, 并按照帧格式将数据从rs232_tx发送出去, 发送模块波特率的控制与接收模块相同。

3. 5波特率控制模块

波特率控制模块分为12个部分, 对应12个串行口设备, 每一部分具备独立的参数。当CS引脚为1时, FPGA捕捉到WR引脚的下跳沿即进入波特率设置模式, 总体控制模块会根据data接口的值向波特率控制模块发送数据, 波特率控制模块根据该数据设置波特率计数器的值, 实现波特率的改变, 举例说明: 把计数器的上限设置为2 083, 由于外置时钟晶振频率为20 MHz, 2*107/2 083=9 600, 即可得到9 600的波特率, 想要得到4 800的波特率, 就把计数器上限设置为4 166, 2*107/4 166=4 800。

3.6程序仿真

图8是使用modelsim对verilog程序进行简单仿真的波形, 如图8所示, clk为20 MHz的时钟激励, rst_n为复位信号, 置0复位, rs232_tx1、rx232_tx2、rs232_tx分别为3个设备的通信接口, 在仿真中, 命令1、3号接口发送0xAA, 2号接口发送0x55, 设置1、2号接口波特率为9 600, 3号接口波特率为19 200。通过波形可以看到, 本系统仿真效果良好, 可以实现对多串行口的多协议、多波特率控制。

4系统实物图及调试

FPAG多串口板实物如图9所示, 图片左上方的排线即为FPGA与ARM的连接接口, 左上方的绿色插口为5 V电源, 右侧及右下的绿色插口为设备接口。

图10为FPGA与ARM的整体连接实物图, 根据环境需要, 两块电路板被安装在1 U高度的铁匣内部并排放置, 外部接220 V交流电压, 所有设备串行口从匣体后部统一引出。

实际调试过程中使用Qt制作的上位机控制软件, 上位机通过web与串行口控制ARM11处理器, 通过多串口拓展对设备进行控制。下面以升降杆调试过程为例:

图11是升降杆设备的控制界面, 图12为升降杆控制电路, 该电路接收来自FPGA拓展串口的信息, 控制电路中4个继电器 (红框中为左路升降杆的两个继电器) 的通断。点击左路升降杆的“升”按钮, 可明显听到左上方继电器的接通声响, 左路升降杆随即上升, 点击“停”, 左上方继电器再次发出声响, 表示断开, 可使升降杆停止上升, 点击“降”, 左下方继电器接通, 左路升降杆持续下降。

通过实验, 本系统可同时对球机、油机、升降杆、起伏装置、车载空调等设备进行实时控制, 没有出现丢包、失控等现象, 系统运行效果良好。目前本设计已经通过项目甲方验收, 各项指标均达到设计要求。

5结语

基于并行控制的FPGA多串口拓展板, 通过ARM11与FPGA的交互以及独立的收发队列实现了微控制器对多串行口设备的多协议实时控制, 在实际实验中取得了良好的使用效果。通过本系统, 可以实时快速地对大量车载设备进行控制, 节省了人力, 提高了效率, 该设计同样可以使用在其他需要控制大量串行口的情形下, 具有良好的市场前景。

参考文献

[1]李金力, 刘文怡, 彭旭峰, 等.基于FPGA的RS232异步串行口IP核设计[J].电子设计工程, 2009, 17 (8) :31-32, 35.

[2]徐慧, 王金海, 王巍, 等.基于FPGA的8051IP核的设计与实现[J].计算机技术与发展, 2009, 19 (3) :42-45.

[3]张雪, 徐晓苏, 张国龙, 等.基于DSP和FPGA的高速串行通信系统设计[J].舰船电子工程, 2009, 29 (5) :66-69.

[4]粟慧龙, 肖辽亮.基于CPLD/FPGA的多串口设计与实现[J].电子设计工程, 2011, 19 (7) :77-80.

[5]李海洋.基于DSP和FPGA的多功能嵌入式导航计算机系统设计[D].南京航空航天大学, 2005.

[6]章鸣嬛.基于FPGA的可编程技术的应用[D].复旦大学, 2006.

[7]袁本荣, 刘万春, 贾云得, 等.用Verilog HDL进行FPGA设计的一些基本方法[J].微计算机信息 (测控仪表自动化) , 2004, 20 (6) :93-94, 14.

[8]沈理.Verilog RTL模型[J].同济大学学报 (自然科学版) , 2002, 30 (10) :1194-1198.

上一篇:围术期疗效下一篇:视频通信网