CN103699518A - 一种三角函数的近似计算方法 - Google Patents
一种三角函数的近似计算方法 Download PDFInfo
- Publication number
- CN103699518A CN103699518A CN201310740098.XA CN201310740098A CN103699518A CN 103699518 A CN103699518 A CN 103699518A CN 201310740098 A CN201310740098 A CN 201310740098A CN 103699518 A CN103699518 A CN 103699518A
- Authority
- CN
- China
- Prior art keywords
- numerical value
- approximate
- cos
- trigonometric function
- calculation method
- 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.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本发明涉及一种三角函数的近似计算方法,该方法包括:构建任意角P的近似三角函数C的计算公式为:C=(215-1)×cos(P)=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)以m为地址从存储单元中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B;将n×2π/65536与数值B相乘得到乘积;以及将数值A减去所述乘积得到近似三角函数C。本发明所述方法优点在于:可减小粗大偏差,降低存储器使用量;采用简单的加法和乘法计算,减少运行时间,在保持高精度的基础上,提高运算速度,本方法可在短时间内将正、余弦计算精度达到16bit以上;本方法还可以扩展到计算坐标旋转、双曲函数等复杂函数的计算。
Description
技术领域
本发明涉及一种计算的方法,特别是一种三角函数的近似计算方法。
背景技术
目前,FPGA(在线可编程逻辑阵列)已经广泛应用于各种数字信号处理领域中,用于各种数学计算、信号滤波计算等,其中三角函数计算是数学计算中的一个重要方面。由于FPGA的内部存储器件数量和数据总线宽度的限制,一些数值或数值的计算结果均往往只能以近似形式表示,结果准确性较差。比如常见的三角函数计算,由于受到存储器容量和数据总线宽度的限制,通常只能用10bit数据线宽来近似表示,近似的结果与实际的准确值有2-10(约为0.1%)左右的相对偏差,这样的偏差在很多场合(比如调频波的计算)是不能接受的。如果想采用较宽的数据线宽表示,则又可能面临内部存储空间不够的问题,因为计算时存储器件数量大致是以线宽的2的指数变化,即线宽每增加一位,存储器增加一倍,数据精度也提高一倍。
目前三角函数计算方案大致有两种:一种方案采用直接数据查表的方法,将三角函数值的结果存储于FPGA内部存储器件上。地址对应角度,存储内容代表三角函数值,这种方式速度快,只需一个时钟脉冲即可得到结果,但精度不高;另一种方案是CORDIC算法,这种方案使用内存较少,计算结果精度相对较高一些,但需要很多个时钟脉冲,重复迭代计算,精度越高,需要的时钟脉冲越多。在对计算时间要求较高的情况下,很难满足要求。
发明内容
本发明要解决的技术问题是提供一种三角函数的近似计算方法,以解决数字信号处理技术中用FPGA实现三角函数计算的精度低和速度慢的问题。
为解决上述问题本发明提供一种三角函数的近似计算方法,对于角度P,
P=m×2π/1024+n×2π/65536,其中m=0~1023,n=0~63;
该角度P的近似三角函数C的计算公式为:
C=(215-1)×cos(P)=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)
该方法包括以下步骤:
以m为地址从存储单元中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B;
将n×2π/65536与数值B相乘得到乘积;以及
将数值A减去所述乘积得到近似三角函数C。
优选的,该方法以一个时钟脉冲完成数值查找步骤,以及以一个时钟脉冲完成乘法计算步骤。
一种用于近似计算三角函数的FPGA,该FPGA包括
函数表储存模块,包括1024×16bit存储区,用于存储(215-1)×cos(m×2π/1024)的数值A和(215-1)×sin(m×2π/1024)的数值B,其中m=0~1023;
数据读取单元,以m为地址从所述存储模块中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B,其中n=0~63
乘法器,用于将n×2π/65536与数值B相乘得到乘积;
加法器,用于将数值A减去所述乘积得到近似三角函数C,
C=(215-1)×cos(P),=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)
其中,P=m×2π/1024+n×2π/65536。
优选的,该FPGA包括输入和输出线宽均为16bit的数据线。
优选的,该所述乘法器的输出数据线线宽为16bit。
优选的,所述数据读取单元以一个时钟脉冲读取数据;所述乘法器以一个时钟脉冲计算乘积。根据本发明所述方法优点在于:
1、可减小粗大偏差,降低存储器使用量;
2、采用简单的加法和乘法计算,减少运行时间,在保持高精度的基础上,提高运算速度,本方法可在短时间内将正、余弦计算精度达到16bit以上;
3、本方法还可以扩展到计算坐标旋转、双曲函数等复杂函数的计算。
附图说明
图1示为一种三角函数的近似计算方法示意图;
图2示为一种近似计算三角函数的小型FPGA的示意图。
1、函数表储存模块,2、数据读取单元,3、乘法器,4、加法器。
具体实施方式
本发明提供一种三角函数的近似计算方法,该方法包括以下步骤:对于角度P,P=m×2π/1024+n×2π/65536,其中m=0~1023,n=0~63;该角度P的近似三角函数C的计算公式为:
C=(215-1)×cos(P) (S1);=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)
以m为地址从存储单元中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B(S2);将n×2π/65536与数值B相乘得到乘积,以及将数值A减去所述乘积得到近似三角函数C(S3)。
本发明提供一种计算三角函数的FPGA,该FPGA包括函数表储存模块1、数据读取单元2、乘法器3和加法器4;所述函数表储存模块1用于查询并调取正、余弦值;所述乘法器3用于通过数据读取单元2从所述函数表储存模块中调取正弦值与偏移量相乘;所述加法器4用于通过数据读取单元2从所述函数表储存模块中调取余弦值减去正弦值与n×2π/65536的乘积。
下面结合附图对本发明做进一步描述。
本发明所述的一种计算三角函数的小型FPGA包括函数表储存模块1、数据读取单元2、乘法器3和加法器4,输入输出均采用16bit表示。以下将以计算一个0~2π角度的余弦值为例对本发明作进一步描述。
函数表储存模块1是一个1024×16bit的存储区,地址用10bit数据线宽,余弦值用16bit表示,地址为a的位置,余弦值为b,那么a、b的关系为:
b=(215-1)×cos(a/1024×2π),a=0,1,2,…,1023;这样就得到一个具有1024个存储单元的基本正、余弦表,利用这个表也可以查出正、余弦值。这个表的最小相位分辨力只有2π/1024rad.,为了提高计算精度,本发明将原来的相位最小分辨量2π/1024rad再平均分成64(即26)等分,这时0~2π角度就需要用16bit (1024×64=210×26=216)表示,分辨力就可达到2π/65536 rad.带来的效果是所表示相位的准确度由2π/1024rad提高到2π/65536 rad,即准确度提高64倍。而这个改进需要的硬件只是增加一个6bit(64=26)的存储器,用来存储16bit相位量值中的最低的6bit。用来参与下面的计算之用。
此时需要计算的任意一个相角P都可以表示为:
P=m×2π/1024+n×2π/65536,m=0,1,2,…,1023;n=0,1,2,…,63;即将相角表示为一个2π/1024 倍数的整数部分的角度m×2π/1024和小于2π/1024 的小数部分的角度n×2π/65536的和。而整数部分的角度m×2π/1024的正、余弦可以利用前面提到的1024个三角函数存储单元1得到;小数部分的角度可以利用泰勒公式在整数部分的角度附近展开得到。因此,任意相角P的三角函数C的计算公式可表示为:C=(215-1)×cos(P)=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)。实际取值中,根据要获取的精度要求仅取展开式的前两项即可,随后的所有项对最终结果不会产生严重影响。
其中(215-1)×cos(m×2π/1024)和(215-1)×sin(m×2π/1024)可以利用数据读取单元2从函数表存储器模块中分别获得数值A和数值B。这样三角函数C的结果就可以利用数值A减去数值B与n×2π/65536的乘积获得。全部过程包括一次查表、一次相乘、一次相加,分别需要1个时钟脉冲、1个时钟脉冲、0个时钟脉冲。总共需要2个时钟脉冲即可完成,相位精度达到2π/65536rad.,计算结果的精度达到2/65536以上(含舍去的高阶项)。表示相位的数据线宽度和计算结果使用的数据线宽度为16bit;过程中间乘法计算线宽24bit,得到最终结果时略去低8bit(等效数学计算时略去小数位一样),占用存储区:1024×16bit加上少量乘法计算存储区。如果完全采用查表方式,则需要1个时钟完成,相位精度达到2π/65536rad,计算结果的精度达到1/65536以上,使用线宽16bit,占用存储区:65536×16bit。
如果采用CORDIC算法,存储器用量少,要达到计算结果的精度达到1/65536以上,理论上至少需要16个时钟脉冲,实验中发现需要27个时钟脉冲,速度大为降低。并且中间的乘法运算也需要非常宽(32bit以上)的数据线宽,这样的数据线宽在小型FPGA中也是难以实现的,因此,利用现有方法难以在小型FPGA中实现65536×16bit大小的存储和较宽的数据线宽。而本发明所述方法及计算单元可大幅度提高余弦函数的计算精度和计算速度,特别适合在小型FPGA上实现高精度快速计算。
实际调频时,如果相对频偏量为500时,需要计算cos[500*cos(P)],上例中查表所带来的偏差被放大500倍,再进行一次余弦计算,所得结果的偏差将不可接受,而本发明通过泰勒级数展开的方法,结合低精度的正(余)弦表,将查表和计算结合起来实现高精度的正、余计算,既具备有查表的速度又有计算带来的简便及少量存储器占用。这样整个计算既提高了计算精度又保持了计算速度,同时还节省了存储器。实施例1
相角P=(2π/1024)*128.25rad,如果直接查具有1024个存储单元的基本余弦表时,因小于2π/1024rad的相位无法表示,首先必将相位截为(2π/1024)*128rad,再查表得到65536*cos(P)=46340(而真实值应为46269);
而采用本发明时,相位值可准确的表示为P=(2π/1024)*128.4=(2π/1024)*128+(2π/65536)*16;计算65536*cos(P)=cos[(2π/1024)*128+(2π/65536)*16]≈cos[(2π/1024)*128]-16×2π/65536*sin[(2π/1024)*128]=46340-16×2π/65536*46340=46268(而真实值应为46269),结果要精确许多。
综上所述,利用本发明所述方法可减小粗大偏差,降低存储器使用量;基于简单的加法和乘法计算,减少运行时间,在保持高精度的基础上,提高运算速度,同时还可在短时间内将正、余弦计算精度达到16bit以上;本发明不仅限于计算三角函数还可以扩展到计算坐标旋转、双曲函数等复杂函数的计算。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细描述说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所述技术领域的普通技术人员来说在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (6)
1.一种三角函数的近似计算方法,其特征在于:对于角度P,
P=m×2π/1024+n×2π/65536,其中m=0~1023,n=0~63;
该角度P的近似三角函数C的计算公式为:
C=(215-1)×cos(P)=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)
该方法包括以下步骤:
以m为地址从存储单元中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B;
将n×2π/65536与数值B相乘得到乘积;以及
将数值A减去所述乘积得到近似三角函数C。
2.根据权利要求1所述的三角函数的近似计算方法,其特征在于:该方法以一个时钟脉冲完成数值查找步骤,以及以一个时钟脉冲完成乘法计算步骤。
3.一种用于近似计算三角函数的FPGA,其特征在于:该FPGA包括
函数表储存模块,包括1024×16bit存储区,用于存储(215-1)×cos(m×2π/1024)的数值A和(215-1)×sin(m×2π/1024)的数值B,其中m=0~1023;
数据读取单元,以m为地址从所述存储模块中查找(215-1)×cos(m×2π/1024)的数值A并以n为地址从存储单元中查找(215-1)×sin(m×2π/1024)的数值B,其中n=0~63
乘法器,用于将n×2π/65536与数值B相乘得到乘积;
加法器,用于将数值A减去所述乘积得到近似三角函数C,
C=(215-1)×cos(P),=(215-1)×cos(m×2π/1024)-n×2π/65536×(215-1)×sin(m×2π/1024)
其中,P=m×2π/1024+n×2π/65536。
4.根据权利要求3所述的FPGA,其特征在于:该FPGA包括输入和输出线宽均为16bit的数据线。
5.根据权利要求4所述的FPGA,其特征在于:该所述乘法器的输出数据线线宽为16bit。
6.根据权利要求3所述的FPGA,其特征在于:
所述数据读取单元以一个时钟脉冲读取数据;
所述乘法器以一个时钟脉冲计算乘积。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310740098.XA CN103699518A (zh) | 2013-12-26 | 2013-12-26 | 一种三角函数的近似计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310740098.XA CN103699518A (zh) | 2013-12-26 | 2013-12-26 | 一种三角函数的近似计算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103699518A true CN103699518A (zh) | 2014-04-02 |
Family
ID=50361050
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310740098.XA Pending CN103699518A (zh) | 2013-12-26 | 2013-12-26 | 一种三角函数的近似计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103699518A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636632A (zh) * | 2015-03-10 | 2015-05-20 | 中国人民解放军国防科学技术大学 | 高精度相位小存储量查表计算方法 |
CN105138305A (zh) * | 2015-09-25 | 2015-12-09 | 上海兆芯集成电路有限公司 | 高精度的三角函数计算方法以及装置 |
CN114707110A (zh) * | 2022-06-07 | 2022-07-05 | 中科亿海微电子科技(苏州)有限公司 | 一种三角函数和双曲函数扩展指令计算装置及处理器核 |
-
2013
- 2013-12-26 CN CN201310740098.XA patent/CN103699518A/zh active Pending
Non-Patent Citations (6)
Title |
---|
SHYUE-KUNG LU等: "《Testing configurable LUT-Based FPGAs》", 《JOUNAL OF INFORMATION SCIENCE AND ENGINEERING》 * |
刘小明等: "基于查找表和Taylor展开的正余弦函数的实现", 《现代电子技术》 * |
孙宇峰等: "一种高精度正余弦函数的FPGA实现方法", 《信息工程大学学报》 * |
王超等: "一种新型的三角函数快速生成方法", 《微计算机信息》 * |
胡修林等: "基于FPGA的大规模查找表设计与实现", 《计算机应用》 * |
许俊: "用改进的查表法实现高速模运算电路", 《微电子学与计算机》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636632A (zh) * | 2015-03-10 | 2015-05-20 | 中国人民解放军国防科学技术大学 | 高精度相位小存储量查表计算方法 |
CN105138305A (zh) * | 2015-09-25 | 2015-12-09 | 上海兆芯集成电路有限公司 | 高精度的三角函数计算方法以及装置 |
CN105138305B (zh) * | 2015-09-25 | 2018-11-27 | 上海兆芯集成电路有限公司 | 高精度的三角函数计算方法以及装置 |
CN114707110A (zh) * | 2022-06-07 | 2022-07-05 | 中科亿海微电子科技(苏州)有限公司 | 一种三角函数和双曲函数扩展指令计算装置及处理器核 |
CN114707110B (zh) * | 2022-06-07 | 2022-08-30 | 中科亿海微电子科技(苏州)有限公司 | 一种三角函数和双曲函数扩展指令计算装置及处理器核 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI731543B (zh) | 計算機資料處理方法及裝置 | |
CN103699518A (zh) | 一种三角函数的近似计算方法 | |
CN109814836A (zh) | 一种基于区间划分和cordic的三角函数计算方法及装置 | |
CN103970720A (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
CN102542336A (zh) | 一种基于fpga 的三角函数实现方法 | |
CN104063847A (zh) | 一种基于fpga的引导滤波器及其实现方法 | |
CN101930351A (zh) | 转换运算方法、装置和坐标旋转的数字计算方法、装置 | |
WO2018040726A1 (zh) | 一种获取角度相关值的方法、装置及计算机存储介质 | |
US20120121165A1 (en) | Method and apparatus for time of flight sensor 2-dimensional and 3-dimensional map generation | |
JP2016062404A (ja) | 演算処理方法及び演算処理装置 | |
CN107436619B (zh) | 一种高精度低代价数字正弦波发生装置 | |
CN103809931A (zh) | 一种专用高速浮点指数运算器的设计 | |
CN103645883A (zh) | 基于fpga的高基模乘器 | |
RU167428U1 (ru) | Преобразователь синусно-косинусного сигнала в код положения | |
Chekushkin et al. | Improving polynomial methods of reconstruction of functional dependences in information-measuring systems | |
CN103365827A (zh) | 一种高精度正弦/余弦函数的计算方法 | |
CN103713878B (zh) | 一种应用补码方法的正余弦cordic算法在fpga实现的方法 | |
US9213639B2 (en) | Division of numerical values based on summations and memory mapping in computing systems | |
CN105988399B (zh) | 采用现场可编辑逻辑门阵列实现电子齿轮输出的方法 | |
CN103729867A (zh) | 基于bp反投影成像算法的硬件加速器以及数据处理方法 | |
US8275821B2 (en) | Area efficient transcendental estimate algorithm | |
RU2616877C1 (ru) | Цифровой генератор гармонических сигналов | |
CN114710139A (zh) | 一种apf控制系统的谐波提取及合成器 | |
CN103049426A (zh) | 一种数字脉冲压缩处理的方法及设备 | |
CN116388754A (zh) | 一种基于改进cordic算法的数控振荡器的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140402 |