掌桥专利:专业的专利平台
掌桥专利
首页

一种基于查找表的复杂函数输出方法及其装置

文献发布时间:2024-04-18 19:52:40


一种基于查找表的复杂函数输出方法及其装置

技术领域

本发明属于数字电路技术领域,具体涉及一种基于查找表的复杂函数输出方法及其装置。

背景技术

在数字信号处理、图像处理、人工智能以及雷达等领域,常需要使用到如指数、对数、三角函数等比较复杂的数学函数运算。常用的实现这些复杂函数的方法有CORDIC算法、泰勒展开以及使用LUT(Look-Up-Table,查找表)等。由于LUT本质上是一组RAM(RandomAccess Memory,随机存取存储器),通过离线的方式对LUT中的RAM进行配置,可以使用LUT对上述复杂函数进行拟合。LUT在实现上逻辑简单,由于其本质上是RAM,对同一套硬件电路中的相同RAM经过不同的配置可以实现对不同复杂函数的拟合,因此使用LUT对复杂函数进行拟合成为一种主流的方法。研究LUT的实现方法也成为研究复杂函数实现的重点。

各家LUT均使用固定深度的RAM,要想达到高的拟合精度通常需要增加RAM深度。但由于资源受限,RAM深度无法任意增加,因此有必要提出一种在有限RAM深度下,获得更高精度函数拟合的方案。

在现有技术中,使用LUT实现复杂函数时根据输入数据在x坐标的位置,在查找表中查找得到输出值做为复杂函数的输出。对于LUT,如果LUT在x轴方向的覆盖范围为MIN~MAX,LUT的RAM深度为N,则x轴方向的步进step以及LUT的RAM中每个地址存储的数据如下公式①所示:

在公式①中LUT(0)用于表示LUT的RAM的地址0存储的数据,LUT(1)用于表示LUT的RAM的地址1存储的数据,依此类推LUT(N-1)用于表示LUT的RAM的地址N-1存储的数据。上式中f(x)为要拟合的复杂函数,拟合的范围为MIN≤x≤MAX,其中x为复杂函数f(x)的自变量。将f(0*step+MIN)的函数值存储到LUT(0),将f(1*step+MIN)的函数值存储到LUT(1),依此类推f((N-1)*step+MIN)的函数值存储到LUT(N-1)。公式①中step用于表示相邻LUT RAM地址所对应的实际的相邻自变量的间隔。

具体来说,当输入的真实数据x满足0*step+MIN≤x<1*step+MIN时,选择LUT(0)的数据做为复杂函数的结果;当输入的真实数据x满足1*step+MIN≤x<2*step+MIN时,选择LUT(1)的数据做为复杂函数的结果;依次类推当输入的真实数据x满足(N-2)*step+MIN≤x<(N-1)*step+MIN时,选择LUT(N-1)的数据做为复杂函数的结果。

当输入的真实数据x<MIN或者x>MAX时,采用外延的方法获得自变量在x处的复杂函数的结果。其按照如下公式②实现,所述公式②中k1为当x<MIN时的外延系数,k2为当x>MAX时的外延系数。

在采用现有技术时,复杂函数存储在同一块存储器中,复杂函数的任何部位按照等步长的方式在存储器中存储。这将导致复杂函数在变化较为显著的区域的输出精度不够理想,在变化较为平缓的区域的输出精度过于冗余。

同时在采用现有技术时,当自变量x满足M*step+MIN≤x<(M+1)*step+MIN时,选择LUT(M)的数据做为复杂函数的结果,0≤M≤N-1;此时属于一个范围的任意自变量x都等于LUT(M),存在一定的误差。

发明内容

针对现有技术中所存在的不足,本发明提供了一种能够有效提高复杂函数输出精度的基于查找表的复杂函数输出方法及其装置。

第一方面,一种基于查找表的复杂函数输出方法,包括如下步骤:

建立所述复杂函数的查找表,所述查找表在所述复杂函数的显著变化区域较平缓变化区域分配有更多的存储空间;

接收所述复杂函数的输入数据,并根据所述查找表和插值算法,获得所述复杂函数的输出数据。

作为优选方案,根据所述复杂函数的输入数据,得到所述复杂函数的查找表地址及运算参数;

根据所述查找表地址输出对应的查找表数据;其中所述查找表在所述复杂函数的显著变化区域分配的存储空间比平缓变化区域更多;

根据所述运算参数及所述查找表数据进行计算,获得所述复杂函数的输出数据。

作为优选方案,所述获得所述复杂函数的输出数据,通过线性插值方法得到:

f(x)=(N-x)/(N-M)*RAM(m)+(x-M)/(N-M)*RAM(m+1);其中M≤x≤N。

作为优选方案,所述复杂函数为f(x)=2

所述N-M的值为2的p次幂。

第二方面,一种基于查找表的复杂函数输出装置,包括地址范围选择逻辑模块、查找表模块及运算处理模块;

所述地址范围选择逻辑模块,用于根据所述复杂函数的输入数据,得到所述复杂函数的查找表地址及运算参数并分别输出至所述查找表模块和所述运算处理模块;

所述查找表模块,用于存储所述复杂函数的查找表,并根据接收到的查找表地址输出对应的查找表数据至所述运算处理模块;其中所述查找表在所述复杂函数的显著变化区域分配的存储空间比平缓变化区域更多;

所述运算处理模块,用于接收所述运算参数及所述查找表数据并进行计算,输出所述复杂函数的运算结果。

作为优选方案,所述运算处理模块采用线性插值方法进行计算:

f(x)=(N-x)/(N-M)*RAM(m)+(x-M)/(N-M)*RAM(m+1);其中M≤x≤N。

作为优选方案,所述运算处理模块,包括:

第一反相器,用于接收所述运算参数的M数据,将其反相处理并输出;

第一加法器,用于将所述复杂函数的输入数据及所述第一反相器的输出数据相加并输出;

第一乘法器,用于将所述查找表数据中的RAM(m+1)数据与所述第一加法器的输出数据相乘并输出;

第二反相器,用于接收所述复杂函数的输入数据,将其反相处理并输出;

第二加法器,用于将所述运算参数的N数据与所述第二反相器的输出数据相加并输出;

第二乘法器,用于将所述查找表数据中的RAM(m)数据与所述第二加法器的输出数据相乘并输出;

第三加法器,用于将所述第一乘法器和所述第二乘法器的输出数据相加并输出;

除法器,用于将所述第三加法器的输出数据与N-M数据相除,输出运算结果。

作为优选方案,所述除法器包括右移模块;

所述右移模块,用于接收所述运算参数的p数据并根据所述p数据对所述第三加法器的输出数据进行右移操作,其中N-M=2

相比于现有技术,本发明具有如下有益效果:

1、当复杂函数的某些区域变化较为显著,某些区域变化较为为平缓时,本发明通过对显著变化区域和平缓变化区域采用不同的步长在存储器中存储,将有限的存储资源中将更多的存储空间分配给函数中变化较为显著的区域,使得在相同的存储空间下LUT获得更高的精度。

2、本发明采用线性插值的办法使得x在M*step+MIN≤x<(M+1)*step+MIN的任意位置都可以得到唯一的函数,而不是得到同一个数值,可以使LUT获得精度的进一步提高。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一种基于查找表的复杂函数输出方法的一种流程示意图;

图2为本发明一种基于查找表的复杂函数输出装置的结构示意图;

图3为本发明一种基于查找表的复杂函数输出装置的一种实施例结构示意图;

图4为本发明一种基于查找表的复杂函数输出方法的又一种流程示意图。

其中,1地址范围选择逻辑模块;

2查找表模块;

3运算处理模块;31第一反相器;32第一加法器;33第二反相器;34第二加法器;35第一乘法器;36第二乘法器;37第三加法器;38右移模块。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

第一方面,一种基于查找表的复杂函数输出方法,如图1所示,包括如下步骤:

S101:建立所述复杂函数的查找表,所述查找表在所述复杂函数的显著变化区域较平缓变化区域分配有更多的存储空间。

本步骤中,所述显著变化区域,是指所述复杂函数的函数值随自变量的变化而变化较为显著的区域;所述平缓变化区域,是指所述复杂函数的函数值随自变量的变化而变化较不显著的区域。根据具体的复杂函数的不同,其显著变化区域和非显著变化区域也不同,本领域技术人员可根据实际需要进行具体设定和选择。

现以复杂函数f(x)=2

表1

在现有技术中,考虑到存储资源有限,假设LUT的硬件资源只有深度为8的RAM,对于所述表1的函数值变化情况,会选择将深度为4的RAM地址空间分配给-16≤x≤-1之间的所有数据,将深度为4的RAM地址空间分配给0≤x≤15之间的所有数据。现有技术中所述LUT的RAM中的8个地址存储的数据可如下表2所示。

表2

而在本步骤中,对于所述表1的函数值变化情况,可选择在有限的地址存储空间内,将较少的存储空间分配给平缓变化区域,将较多的存储空间分配给显著变化区域。举例来说,可选择将深度为2的RAM地址空间分配给-16≤x≤-1之间的所有数据,将深度为6的RAM地址空间分配给0≤x≤15之间的所有数据。此处所述LUT的RAM中的8个地址存储的数据可如下表3所示。

表3

其中,对于x<-16时的所有数据,可采用外延的办法根据所述表3中的RAM(0)获得所述复杂函数的输出结果;对于-16≤x≤-9之间的所有数据,可根据所述表3中的RAM(0)和RAM(1)获得所述复杂函数的输出结果;对于-8≤x≤-1之间的所有数据,可根据所述表3中的RAM(1)和RAM(2)获得所述复杂函数的输出结果;对于0≤x≤2之间的所有数据,可根据所述表3中的RAM(2)和RAM(3)获得所述复杂函数的输出结果;对于3≤x≤5之间的所有数据,可根据所述表3中的RAM(3)和RAM(4)获得所述复杂函数的输出结果;对于6≤x≤8之间的所有数据,可根据所述表3中的RAM(4)和RAM(5)获得所述复杂函数的输出结果;对于9≤x≤11之间的所有数据,可根据所述表3中的RAM(5)和RAM(6)获得所述复杂函数的输出结果;对于12≤x≤14之间的所有数据,可根据所述表3中的RAM(6)和RAM(7)获得所述复杂函数的输出结果;对于x≥15的所有数据,可采用外延的办法根据所述表3中的RAM(7)获得所述复杂函数的输出结果。

S102:接收所述复杂函数的输入数据,并根据所述查找表和插值算法,获得所述复杂函数的输出数据。

本步骤中,为了获得f(x)的函数值,本发明可采用插值的方法实现。具体地,f(x)的函数值可通过如下线性插值公式③得到:

f(x)=(N-x)/(N-M)*RAM(m)+(x-M)/(N-M)*RAM(m+1)③。

其中,在M≤x≤N区域,所述M对应LUT中的RAM值为RAM(m),N对应的LUT中的RAM值为RAM(m+1)。对于所述表1可按照如下方式划分:在-16≤x≤-8的区域,x=-16对应的函数值f(-16)存储在LUT中的RAM(0),x=-8对应的函数值f(-8)存储在LUT中的RAM(1),此时M对应-16,N对应-8,m对应0,N-M=8,-16≤x≤-8中的任意x点可通过公式③获得。为了便于计算,可按照N-M的值等于2的p次幂的方式对x轴进行分割,此时公式③的除法运算可等效为移位运算。

按照同样的方法,如下表4所示,可将x继续划分为-8≤x≤0的区域、0≤x≤4的区域、4≤x≤8的区域、8≤x≤10的区域、10≤x≤12的区域以及12≤x≤14的区域。当x在上述区域内时,即-16≤x≤14,使用插值的方法获得各函数值。当x不属于-16≤x≤14时,可利用公式②,使用外延的方法获得各函数值。

表4

例如,若计算f(2),由于0≤2≤4,其中0对应LUT的RAM(2),4对应LUT的RAM(3),则f(x)处的函数值如下式④所示,此时公式③中的M对应2,N对应4,m对应2,则:

f(2)=(4-2)/(4-0)*RAM(2)+(2-0)/(4-0)*RAM(3)=8.5④。

可以理解,本实施例中的一种基于查找表的复杂函数输出方法,采用函数f(x)=2

本实施例与现有技术相比:首先,本实施例中,当复杂函数的某些区域变化较为显著,某些区域变化较为为平缓时,由于LUT总存储空间有限,如表3所示,本技术为显著变化区域分配更多存储空间,使得显著变化区域的精度得以提高;同时为平缓变化区域分配剩余较少的存储空间,由于该区域变化较为平缓,使用较少的存储空间对数据进行表示也不会显著影响该区域的精度。其次,作为对比,从表2可以看出,由于现有技术中采用的是一个函数值对应一个范围的自变量x,而非本实施例所采用插值算法,其复杂函数f(x)的值f(0)、f(1)、f(2)以及f(3)都对应RAM(4),即其值均为1,误差较大。相对于现有技术,本实施例的方案可有效提高复杂函数的输出精度。

本实施例通过对显著变化区域和平缓变化区域采用不同的步长在存储器中存储,使有限的存储资源中将更多的存储空间分配给函数中变化较为显著的区域,可使LUT在相同的存储空间下获得更高的精度。

第二方面,一种基于查找表的复杂函数输出装置,如图2、图3所示,包括地址范围选择逻辑模块1、查找表模块2及运算处理模块3,其中:

所述地址范围选择逻辑模块1,用于根据所述复杂函数的输入数据,得到所述复杂函数的查找表地址及运算参数并分别输出至所述查找表模块和所述运算处理模块;

所述查找表模块2,用于存储所述复杂函数的查找表,并根据接收到的查找表地址输出对应的查找表数据至所述运算处理模块;其中所述查找表在所述复杂函数的显著变化区域分配的存储空间比平缓变化区域更多;

所述运算处理模块3,用于接收所述运算参数及所述查找表数据并进行计算,输出所述复杂函数的运算结果。

本实施例中,以复杂函数f(x)=2

如图3所示,所述运算处理模块可包括两个反相器、三个加法器、两个乘法器以及除法器。所述运算处理模块的结构与具体要实现的计算公式有关,本方案选择公式③来进行说明。

其中,所述M经过第一反相器31输入到第一加法器32的a端口,自变量x输入到所述第一加法器32的b端口,所述第一加法器32输出x-M。

同时,所述自变量x经过第二反相器33输入到第二加法器34的a端口,自变量N输入到所述第二加法器34的b端口,所述第二加法器34输出N-x。

所述RAM采用真双口RAM,可以同时读取两个地址的数据。根据所述地址范围选择逻辑模块1获得的m,从所述RAM中获取公式③中所使用的RAM(m+1)和RAM(m)。

将获取的RAM(m+1)输入到第一乘法器35的a端口,将所述第一加法器32的输出x-M输入到所述第一乘法器35的b端口,所述第一乘法器35输出(x-M)*RAM(m+1)。

将获取的RAM(m)输入到第二乘法器36的a端口,将所述第二加法器34的输出N-x输入到所述第二乘法器36的b端口,所述第二乘法器36输出(N-x)*RAM(m)。

接下来将所述第一乘法器35的输出(x-M)*RAM(m+1)输入到第三加法器37的输入端口a,将所述第二乘法器36的输出(N-x)*RAM(m)输入到所述第三加法器37的输入端口b,所述第三加法器37输出(N-x)*RAM(m)+(x-M)*RAM(m+1)。

在具体的硬件实现中,为简化硬件设计,N-M的值可取2的p次幂,即所述除法器可通过右移模块38来实现,则将所述第三加法器37的输出(N-x)*RAM(m)+(x-M)*RAM(m+1)输入到所述右移模块38,右移的值为p,则所述右移模块38的输出结果为最终LUT的输出结果,如所述公式③所示。

另外,本装置所对应的一种基于查找表的复杂函数输出方法,如图4所示,可包括如下步骤:

S201:根据所述复杂函数的输入数据,得到所述复杂函数的查找表地址及运算参数;

S202:根据所述查找表地址输出对应的查找表数据;其中所述查找表在所述复杂函数的显著变化区域分配的存储空间比平缓变化区域更多;

S203:根据所述运算参数及所述查找表数据进行计算,输出所述复杂函数的运算结果。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

相关技术
  • 基于查找表采用三次Bezier函数的基本三角函数求值器
  • 基于查找表采用三次Bezier函数的基本三角函数求值器
技术分类

06120116332774