CN111984057B - 基于gpu的数字nco高精度并行实现方法 - Google Patents
基于gpu的数字nco高精度并行实现方法 Download PDFInfo
- Publication number
- CN111984057B CN111984057B CN202010662328.5A CN202010662328A CN111984057B CN 111984057 B CN111984057 B CN 111984057B CN 202010662328 A CN202010662328 A CN 202010662328A CN 111984057 B CN111984057 B CN 111984057B
- Authority
- CN
- China
- Prior art keywords
- lookup table
- value
- segment
- nco
- sine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03D—DEMODULATION OR TRANSFERENCE OF MODULATION FROM ONE CARRIER TO ANOTHER
- H03D7/00—Transference of modulation from one carrier to another, e.g. frequency-changing
- H03D7/16—Multiple-frequency-changing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Power Engineering (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了基于GPU的数字NCO高精度并行实现方法,属于通信技术领域,能够设计实现高效高精度的数控振荡器NCO。方法具体为:构建正弦查找表LUT,并利用图形处理器GPU的纹理缓存存储正弦查找表LUT。图形处理器GPU接收输入数据并进行分段处理。每个分段内,确定当前分段的初始相位之后,对分段内各数据点按照采样点相位差值计算各数据点的相位值;并对分段内末位数据点的相位值进行消整周操作后加上采样点相位差值作为下一分段的初始相位;由此得到输入数据各数据点的累加相位值。利用数据点的累加相位值构建查找表索引值index(iL),从纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交数控振荡器NCO信号。
Description
技术领域
本发明涉及通信技术领域,具体涉及基于GPU的数字NCO高精度并行实现方法。
背景技术
数字下变频(Digital Down Converter,DDC)系统是现代航天测控系统的重要子系统。在典型的DDC系统中,数字本振是其最复杂的核心器件。
在传统的DDC系统中,数字本振主要由数控振荡器(Numerical ControlOscillator,NCO)实现。典型的NCO由N位相位累加器,相位寄存器,M位正弦查找表构成。增加N和M的位数可有效提高频率和相位分辨率,但查找表的相位分辨精度却受到FPGA片上存储空间的制约,无法有效提高。近年来随着片上存储空间的增加,查找表法因占用计算资源少和高速特性而得到广泛应用,但以上问题却没有得到根本性解决。Jack Voldertic于1959年提出的COORDIC(Coordinate Rotation Digital Computer)算法为这一问题的解决提供了可供选择的方案。该算法通过移位加减和迭代运算近似计算出所要计算函数的值,取代了查找表运算,有效节省了十分有限的片上存储资源,但额外的迭代运算需要消耗更大的资源。目前为止,高精度相位分辨率的获得依然须在运算资源与存储空间之间进行折中。
GPU为问题的解决提供了有效方案,CUDA可利用其高效的浮点运算能力和多层次存储体系为数字本振的实现提供高效高精度正弦函数查找表。CUDA纹理内存为查找表的实现提供了有效的解决途径,2016年,四川大学团队采用查找表法设计了数字本振,实现了相比于直接计算4倍的速度提升,然而该方法频率精度受限于同一block内线程数,难以提高[1]。Scott C.Kim[2]等分别使用纹理内存最近邻和线性插值实现了任意带宽的输出,结果显示纹理插值与传统重采样均方误差(Mean Square Error,MSE)约为4.11e-4,而最近邻和线性插值MSE约为1e-5,且线性插值的MSE略优于最近邻插值,但该方法未解决相位累加误差问题,精度较低。
基于GPU的NCO实现方法虽然具有灵活高效的优势,但是GPU基于浮点数的运算方法在相位累加过程中将因为浮点数的对阶操作存在的舍入误差出现误差累积。尤其是当相位累加的点数较多时,误差累积将变得显著,需要针对性研究合适的算法予以消除。
如何利用图形处理单元(GPU)的高灵活性和高效并行数据处理能力,设计实现高效高精度的数控振荡器NCO,是目前亟待解决的问题。
发明内容
有鉴于此,本发明提供了基于GPU的数字NCO高精度并行实现方法,能够利用图形处理单元(GPU)的高灵活性和高效并行数据处理能力,设计实现高效高精度的数控振荡器NCO。
为达到上述目的,本发明的技术方案包括如下步骤:
步骤一、图形处理器GPU接收输入数据并进行分段处理;
每个分段内,确定当前分段的初始相位之后,对分段内各数据点按照采样点相位差值计算各数据点的相位值;并对分段内末位数据点的相位值进行消整周操作;每个分段中消整周操作之后的末位数据点的相位值加上采样点相位差值作为下一分段的初始相位;由此得到输入数据各数据点的累加相位值;
步骤二、利用数据点的累加相位值分别进行正弦值和余弦值计算获得正弦和余弦两路正交数控振荡器NCO信号。
进一步地,步骤一之前还包括:构建正弦查找表LUT,并利用图形处理器GPU的纹理缓存存储所述正弦查找表LUT;
则所述步骤二具体为:利用数据点的累加相位值构建查找表索引值index(iL),利用所述查找表索引值index(iL)从所述纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交数控振荡器NCO信号;
进一步地,步骤一,具体包括如下步骤:
S101、图形处理器GPU接收输入数据并进行分段处理,共分为M段,其中第i段数据长度为Ni;第i分段内数据索引为ni,ni取值为[0,Ni-1]范围内的整数。
对于第i分段,i初始值为0。
S104、判断i>M是否成立,若成立,则已得到输入数据各数据点的累加相位值,步骤二结束;若不成立,则i自增1返回S102。
进一步地,对于第i分段,若Ni大于设定的长度阈值;长度阈值依经验设定。
则对于第i分段中每个数据点的相位均进行消整周操作。
进一步地,步骤二中,利用数据点的累加相位值构建查找表索引值index(iL),具体为:
进一步地,步骤二中,利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交NCO输出,具体为:
利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找获得正弦NCO输出。
将查找表索引值index(iL)移位1/4周期,从纹理缓存中的正弦查找表LUT上查找获得余弦NCO输出。
进一步地,正弦NCO输出为NCOI(iL)
NCOI(iL)=lookup(LUT,index);
其中lookup为查找表的查找函数;
余弦NCO输出为NCOQ(iL)。
NCOQ(iL)=lookup(LUT,index+nLT/4)。
进一步地,图形处理器GPU的纹理缓存中仅存储正弦查找表中前1/4周期的数据;则步骤二中,利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找之前,将查找表索引值index(iL)转换到前1/4周期对应的角度。
有益效果:
1、本发明提供的基于GPU利用查找表方法实现了NCO的正确输出。在GPU纹理缓存查找表实现NCO过程中,充分利用纹理缓存线性插值优势和高速缓存优势实现了NCO的高效高精度输出。然后针对NCO计算中浮点数相位累加运算累积误差大的共性问题,设计了基于相位消整周的相位累积误差补偿算法,利用该算法将NCO幅度偏差控制在1e-6量级,有效提高了计算精度。
2、同时利用三角函数对称性提高了查找表相位分辨率
附图说明
图1为本发明实施例提供的基于GPU的数字NCO高精度并行实现方法流程图;
图2为本发明实施例提供的实时浮点运算NCO生成过程流程原理框图;
图3为本发明实施例数字NCO变频过程优化算法误差累积仿真示意图;
图4为本发明实施例数字NCO变频过程优化算法仿真验证示意图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供了基于GPU的数字NCO高精度并行实现方法,其流程如图1所示,包括如下步骤:
步骤一、图形处理器GPU接收输入数据并进行分段处理;
每个分段内,确定当前分段的初始相位之后,对分段内各数据点按照采样点相位差值计算各数据点的相位值;并对分段内末位数据点的相位值进行消整周操作;每个分段中消整周操作之后的末位数据点的相位值加上采样点相位差值作为下一分段的初始相位;由此得到输入数据对应各NCO数据点的累加相位值;
本发明实施例中,步骤二具体包括如下步骤:
S201、图形处理器GPU接收输入数据并进行分段处理,共分为M段,其中第i段数据长度为Ni;第i分段内数据索引为ni,ni取值为[0,Ni-1]范围内的整数。
本发明实施例中,为克服浮点数误差累积需要尽可能短的数据分段,然而过多的数据分段将会影响运算效率。另外过长的分段数据将给系统带来巨大的运算资源和存储空间压力,甚至影响实时性。因此设置每个分段的长度可以依据经验设定,依经验设置合适的数据分段长度,在运算精度和运算效率之间寻得平衡。
对于第i分段,i初始值为0。
S204、判断i>M是否成立,若成立,则已得到输入数据各数据点的累加相位值,步骤二结束;若不成立,则i自增1返回S202。
本发明实施例中,对于第i分段,若Ni大于设定的长度阈值;长度阈值依经验设定;则对于第i分段中每个数据点的相位均进行消整周操作。
该算法在每一段数据结束时进行相位去整周操作,避免了每一点判断去整周对资源的过度消耗,同时在每一段初始相位计算累加时保证相位值在一个整周内,确保相加的两个数大小相当,避免了运算精度损失,减小了误差累积。
步骤二、利用数据点的累加相位值分别进行正弦值和余弦值计算获得正弦和余弦两路正交数控振荡器NCO信号。
本发明实施例中,采用查找表的方式进行正弦函数和余弦函数的计算,则在步骤一之前,应当构建正弦查找表LUT,并利用图形处理器GPU的纹理内存存储正弦查找表LUT。
在步骤二中,利用数据点的累加相位值构建查找表索引值index(iL),利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交数控振荡器NCO信号;
利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找获得正弦NCO输出;
将查找表索引值index(iL)移位1/4周期,从纹理缓存中的正弦查找表LUT上查找获得余弦NCO输出。
其中正弦NCO输出为NCOI(iL)
NCOI(iL)=lookup(LUT,index);
其中lookup为查找表的查找函数;
余弦NCO输出为NCOQ(iL);
NCOQ(iL)=lookup(LUT,index+nLT/4)。
根据得到的正弦和余弦两路正交数控振荡器NCO信号,对输入数据进行正交处理得到数控振荡器NCO的输出。
本发明实施例提供的实时浮点运算NCO生成过程流程原理框图如图2所示。
以上实施例中,GPU纹理缓存成功实现了基于正弦查找表的NCO信号输出,然而,该实现中直接存储了一个周期的正弦波数据,未能充分利用正弦信号的对称特性,另外相位值计算过程中,随着数据索引的增加,累加的相位值会不断增加最终可能出现数据溢出。基于以上分析,本发明的一个实施例中,针对步骤一中,图形处理器GPU的纹理缓存中存储正弦查找表的形式进行如下优化:仅存储正弦查找表中前1/4周期的数据,即将1/4周期的数据存储在原整个周期的数据表中。则步骤三中,利用查找表索引值index(iL)从纹理缓存中的正弦查找表LUT上查找之前,将查找表索引值index(iL)转换到前1/4周期对应的角度。
下面用matlab对算法进行仿真,仿真参数为数据采样率1024MHz,信号频率249MHz,NCO频率9MHz,分析数据长度2^20,数据均匀分段,每段长度2^16,分别采用单精度和双精度NCO数据对NCO相位、NCO幅度和采用NCO混频后输出数据幅度进行分析对比,算法仿真结果如图3所示。
从仿真结果可以看出:
1)优化算法对单精度模式下运算偏差影响较大,幅度偏差整体减小了1个数量级且在大量数据点的条件下趋于稳定;
2)优化算法对双精度模式运算偏差影响较小,从优化前后的对比可看出,双精度模式优化结果略优于优化前偏差;
3)从单精度仿真结果可以看出,通过分段循环消整周方法在保证运算效率的前提下,有效压缩了浮点运算的误差累积,将偏差控制在可接收的范围内。可通过改变分段数据长度,进一步压缩累积误差。图4显示了分段长度为2^10时的仿真结果,从结果可验证分析的正确性。
4)双精度模式下数据运算偏差受分段长度影响较小,其本身精度较高,在运算精度要求严格但效率裕量充足的场合可优先采用双精度模式。
基于以上仿真分析结果,可以选择双精度模式进行NCO运算。NCO数据浮点数直接计算实现方法最大的优势在于,其相位分辨率可以不受相位累加器位数的影响,输出频率的设置更加灵活可控,不用固定于一些特定的频点。然而,计算机浮点数的运算过程中自动进行的舍入误差将造成运算末尾产生一定偏差,同时长序列的相位累加运算将导致误差累积,这些误差将给频率的高精度运算带来不确定性。
单精度浮点运算虽然短序列实现精度高,但其单精度量化误差会随着运算点数的增加发生累积,当以此处理的数据点数超过2^20时,这一累积效应将不可忍受,双精度浮点运算由于有效数字的增加虽然可缓解误差累积速度,但无法彻底解决,而本发明解决了该问。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.基于GPU的数字NCO高精度并行实现方法,其特征在于,包括如下步骤:
步骤一、图形处理器GPU接收输入数据并进行分段处理;
每个分段内,确定当前分段的初始相位之后,对分段内各数据点按照采样点相位差值计算各数据点的相位值;并对分段内末位数据点的相位值进行消整周操作;每个分段中消整周操作之后的末位数据点的相位值加上采样点相位差值作为下一分段的初始相位;由此得到输入数据各数据点的累加相位值;
具体包括如下步骤:
S101、图形处理器GPU接收输入数据并进行分段处理,共分为M段,其中第i段数据长度为Ni;第i分段内数据索引为ni,ni取值为[0,Ni-1]范围内的整数;
对于第i分段,i初始值为0;
S104、判断i>M是否成立,若成立,则已得到输入数据各数据点的累加相位值,步骤二结束;若不成立,则i自增1返回S102;
步骤二、利用数据点的累加相位值分别进行正弦值和余弦值计算获得正弦和余弦两路正交数控振荡器NCO信号。
2.如权利要求1所述的方法,其特征在于,所述步骤一之前还包括:构建正弦查找表LUT,并利用图形处理器GPU的纹理缓存存储所述正弦查找表LUT;
则所述步骤二具体为:利用数据点的累加相位值构建查找表索引值index(iL),利用所述查找表索引值index(iL)从所述纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交数控振荡器NCO信号。
3.如权利要求1或2任一所述的方法,其特征在于,对于第i分段,若Ni大于设定的长度阈值;对所述长度阈值进行设定;
则对于第i分段中每个数据点的相位均进行消整周操作。
5.如权利要求2所述的方法,其特征在于,所述步骤二中,利用所述查找表索引值index(iL)从所述纹理缓存中的正弦查找表LUT上查找获得正弦和余弦两路正交数控振荡器NCO输出,具体为:
利用所述查找表索引值index(iL)从所述纹理缓存中的正弦查找表LUT上查找获得正弦NCO输出;
将所述查找表索引值index(iL)移位1/4周期,从所述纹理缓存中的正弦查找表LUT上查找获得余弦数控振荡器NCO输出。
6.如权利要求5所述的方法,其特征在于,正弦NCO输出为NCOI(iL)
NCOI(iL)=lookup(LUT,index);
其中lookup为查找表的查找函数;
余弦NCO输出为NCOQ(iL);
NCOQ(iL)=lookup(LUT,index+nLT/4)。
7.如权利要求2、4、5或6任一所述的方法,其特征在于,图形处理器GPU的纹理缓存中仅存储正弦查找表中前1/4周期的数据;
则所述步骤二中,利用所述查找表索引值index(iL)从所述纹理缓存中的正弦查找表LUT上查找之前,将所述查找表索引值index(iL)转换到前1/4周期对应的角度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010662328.5A CN111984057B (zh) | 2020-07-10 | 2020-07-10 | 基于gpu的数字nco高精度并行实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010662328.5A CN111984057B (zh) | 2020-07-10 | 2020-07-10 | 基于gpu的数字nco高精度并行实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111984057A CN111984057A (zh) | 2020-11-24 |
CN111984057B true CN111984057B (zh) | 2021-04-27 |
Family
ID=73439106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010662328.5A Active CN111984057B (zh) | 2020-07-10 | 2020-07-10 | 基于gpu的数字nco高精度并行实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984057B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114510268B (zh) * | 2021-12-24 | 2022-09-20 | 中国人民解放军战略支援部队航天工程大学 | 一种基于gpu实现下变频中单精度浮点数累积误差控制方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1835389A (zh) * | 2005-03-14 | 2006-09-20 | 华为技术有限公司 | 一种可以消除数控振荡器频率误差的方法及相位累加器 |
CN101345886A (zh) * | 2008-09-03 | 2009-01-14 | 华为技术有限公司 | 一种相位误差校正的方法和设备 |
CN102195565A (zh) * | 2010-03-16 | 2011-09-21 | 川崎微电子股份有限公司 | 使用递推等式用于生成函数值的数控振荡器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106803818B (zh) * | 2016-12-08 | 2020-07-28 | 华中科技大学 | 一种TD-AltBOC信号的接收方法和装置 |
-
2020
- 2020-07-10 CN CN202010662328.5A patent/CN111984057B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1835389A (zh) * | 2005-03-14 | 2006-09-20 | 华为技术有限公司 | 一种可以消除数控振荡器频率误差的方法及相位累加器 |
CN101345886A (zh) * | 2008-09-03 | 2009-01-14 | 华为技术有限公司 | 一种相位误差校正的方法和设备 |
CN102195565A (zh) * | 2010-03-16 | 2011-09-21 | 川崎微电子股份有限公司 | 使用递推等式用于生成函数值的数控振荡器 |
Also Published As
Publication number | Publication date |
---|---|
CN111984057A (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110688088B (zh) | 一种面向神经网络的通用非线性激活函数计算装置和方法 | |
WO2021057085A1 (zh) | 一种基于混合精度存储的深度神经网络加速器 | |
CN111813371B (zh) | 数字信号处理的浮点除法运算方法、系统及可读介质 | |
CN111984057B (zh) | 基于gpu的数字nco高精度并行实现方法 | |
CN104133656A (zh) | 一种尾码采用移位和减法运算的浮点数除法器及运算方法 | |
CN108228136A (zh) | 基于优化查找表法的对数函数计算的方法及装置 | |
CN102566965B (zh) | 一种误差平坦的浮点数对数运算装置 | |
CN110222305B (zh) | 一种基于双曲cordic的对数函数计算系统及方法 | |
CN114996638A (zh) | 一种顺序架构的可配置快速傅里叶变换电路 | |
CN111984056B (zh) | 基于gpu纹理缓存和累积误差补偿的数控振荡器及实现方法 | |
CN111061992A (zh) | 一种基于抛物线的函数拟合方法及其装置 | |
WO2022001722A1 (zh) | 一种用于计算正弦或余弦函数的实现方法及装置 | |
CN102394644B (zh) | 一种余弦信号的拟合方法 | |
CN115022628A (zh) | 基于jpeg-ls的高吞吐率无损图像压缩方法 | |
CN114510268B (zh) | 一种基于gpu实现下变频中单精度浮点数累积误差控制方法 | |
CN108319804B (zh) | 低资源调用的8192点基2 dit asic设计方法 | |
CN109857986A (zh) | 基于概率计算的低开销cordic算法实现方法及装置 | |
CN116578338A (zh) | 一种低延时三角函数硬件加速算法 | |
CN117200809B (zh) | 用于纠两个误码的rs码的低功耗钱搜索和错误估值电路 | |
CN113721885B (zh) | 一种基于cordic算法的除法器 | |
Hou et al. | A Low Latency Floating Point CORDIC Algorithm for Sin/Cosine Function | |
CN109547665B (zh) | 一种计算n次方根的电路 | |
CN111752532B (zh) | 一种高精度实现32位整数除法的方法、系统及装置 | |
CN102832951A (zh) | 一种基于概率计算的ldpc译码公式的实现方法 | |
CN109032562A (zh) | 低时延高频单向旋转的cordic算法装置及算法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |