具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中提供的查表方法所用的查找表为二维查找表根据二维索引的奇偶性按照(偶,偶)、(偶,奇)、(奇,偶)和(奇,奇)拆分而成。拆分而成的4个所述查找表分别存储在4个RAM中,所述4个RAM的查找表中存储数据的地址addr满足以下公式:addr=((a>>1)*k+b>>1),其中(a,b)为所述二维索引,a>>1和b>>1表示a和b右移1位,k为所述二查找表宽度值的一半。
假设有6*6二维查找表表1,如下所示:
(a,b) |
|
|
|
|
|
|
|
0,0 |
0,1 |
0,2 |
0,3 |
0,4 |
0,5 |
|
1,0 |
1,1 |
1,2 |
1,3 |
1,4 |
1,5 |
|
2,0 |
2,1 |
2,2 |
2,3 |
2,4 |
2,5 |
|
3,0 |
3,1 |
3,2 |
3,3 |
3,4 |
3,5 |
|
4,0 |
4,1 |
4,2 |
4,3 |
4,4 |
4,5 |
|
5,0 |
5,1 |
5,2 |
5,3 |
5,4 |
5,5 |
其中(a,b)为二维查找表的二维索引,根据现有的二维查找方法,输入的(a,b)在该二维查找表中查找,可以查找到所述查找表中(a,b)对应的地址中的数据。
将上述的二维查找表按照a,b的奇偶性进行拆分,如图1所示将a,b都是偶数的即(a,b)为(偶,偶)分成一个查找表,存储在RAM00中。同样对(a,b)为(偶,奇)、(奇,偶)和(奇,奇)的分别划分在不同的查找表中并按照其奇偶性分别存储在RAM01、RAM10和RAM11中。至此,将二维查找表拆分成了4个图1所示的一维表,存储在4个不同的RAM中。所述4个RAM的查找表中存储数据的地址addr满足以下公式:addr=((a>>1)*k+b>>1),其中(a,b)为所述二维索引,a>>1和b>>1表示a和b右移1位,k为所述二维查找表宽
的一半。在这里表1所示的二维表为6*6的二维表,即该二维表的宽度值为6,故k=0.5*6=3。假设(a,b)=(2,4),则(2,4)对应的数据存储在RAM00中的查找表中,地址addr=((a>>1)*k+b>>1)=((2>>1)*3+4>>1)=1*3+2=5。即索引为(2,4)所对应的数据存储在RAM00的地址5中。
由上所述,本发明实施例中用到的查找表已生成并存储在RAM中。根据该查找表,本发明实施例提供了一种查表方法,如图2所示,所述方法包括以下步骤:
201、将输入索引进行加1运算得到加1输入索引。
用户在进行一维查找时,用户通过终端输入需要查找的一个数字,对应在查表装置相当于输入一维索引S_i。此时,查表装置会将图2所示的查找表的索引(a,b)中的b设置为0,仅用索引a,此时a=S_i。所述查表装置获得输入索引S_i后会对所述输入索引S_i进行加1运算得到加1输入索引S_i_1。
若用户要进行二维查找,用户通过终端输入需要查找的两个数字,对应在查表装置相当于用户在查表装置中输入二维索引(i,j)。所述查表装置获得输入索引(i,j)后会对所述输入索引(i,j)进行加1运算得到加1输入索引(i,j+1)、(i+1,j)和(i+1,j+1)。
202、根据所述输入索引和加1输入索引选择得到对应的RAM中的索引地址。
可选的,所述查表装置在获得一维的输入索引和加1输入索引后可以根据所述输入索引和加1输入索引选择得到对应的虚拟地址;然后,根据所述虚拟地址计算得到所述虚拟地址对应的RAM中的索引地址。
在获得一维的输入索引和加1输入索引S_i和S_i_1后,查表装置会根据所述S_i和S_i_1,选择得到所述S_i和S_i_1对应的虚拟地址。在获得一维索引对应的虚拟地址后,所述查表装置会根据一维地址计算公式由所述虚拟地址计算得到所述虚拟地址对应的RAM中的索引地址;其中,S_i或S_i_1对应的所述虚拟地址为xxh,xx表示对应的RAM,所述一维地址计算公式为:addr1=h>>1,addr1为S_i或S_i_1对应的索引地址,h>>1表示h右移一位。
可选的,如图3所示,为一种一维虚拟地址选择方法,图中S_i[0]表示S_i的最低bit值,S_i_1[0]表示S_i_1的最低bit值,若S_i为偶数,则S_i[0]=0,选择得到的虚拟地址为00S_i和01S_i,S_i_1[0]=1,选择得到的虚拟地址为10S_i_1和11S_i_1。同理,若S_i为奇数,则S_i[0]=1,选择得到的虚拟地址为00S_i_1和01S_i_1,S_i_1[0]=0,选择得到的虚拟地址为10S_i,和11S_i。在这里选择得到S_i和S_i_1对应的所述虚拟地址xxh为00S_i和01S_i以及10S_i_1和11S_i_1。其中xxh的前两位xx表示对应的RAM,即00S_i对应RAM00中的地址,01S_i、10S_i_1和11S_i_1分别对应RAM01、RAM10和RAM11中的地址。可由00S_i计算得到RAM00中的索引地址addr1=h>>1=S_i>>1,同理,可由01S_i计算得到RAM01中的索引地址addr1=h>>1=S_i>>1,由10S_i_1计算得到RAM10中的索引地址addr1=h>>1=S_i 1>>1,由11S_i_1计算得到RAM011中的索引地址addr1=h>>1=S_i_1>>1。
在获得二维的输入索引和加1输入索引(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)后,查表装置会根据所述(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)选择得到对应的虚拟地址。在获得二维索引对应的虚拟地址后,所述查表装置根据二维地址计算公式由所述虚拟地址计算得到所述虚拟地址对应的RAM中的索引地址;其中,(i,j)、(i,j+1)、(i+1,j)或(i+1,j+1)对应的所述虚拟地址为(xxm,xxn),xx表示对应的RAM,所述二维地址计算公式为:addr2=((m>>1)*k+n>>1),其中addr2为所述(i,j)、(i,j+1)、(i+1,j)或(i+1,j+1)对应的索引地址,m>>1和n>>1表示m和n右移1位,k为所述二维查找表宽度值的一半。
可选的,如图4所示,为一种二维虚拟地址选择方法,图中所示的X[0]表示X的最低bit值,X_1表示X加1,若i和j都为奇数,则(i[0],j[0])=(1,1)通过选择器选择到(i_1,j_1),得到的虚拟地址为(00i_1,00j_1)。同理,(i[0],j_1[0])=(1,0)选择得到的虚拟地址为(01i_1,01j),(i_1[0],j[0])=(0,1)选择得到的虚拟地址为(10i,10j_1),(i_1[0],j_1[0])=(0,0)选择得到的虚拟地址为(111,11j)。当然,i和j都为偶数或一个为奇数一个为偶数也可以通过图4所述的选择器选择到虚拟地址,在这里不再详述。查表装置在选择得到(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)的虚拟地址(xxm,xxn)为(00i_1,00j_1)、(01i_1,01j)、(10i_1,10j_1)和(111,11j),其中(xxm,xxn)中的xx表示对应的RAM,即(00i_1,00j_1)、(01i_1,01j)、(10i,10j_1)和(111,11j)分别对应RAM00、RAM01、RAM10和RAM11中的地址。可由虚拟地址(00i_1,00j_1)计算得到RAM00中的索引地址addr2=((m>>1)*k+n>>1)=((i_1>>1)*k+j_1>>1),同理,可由(01i_1,01j)计算得到RAM01中的索引地址addr2=((m>>1)*k+n>>1)=((i_1>>1)*k+j>>1),由(101,10j_1)计算得到RAM10中的索引地址addr2=((m>>1)*k+n>>1)=((i>>1)*k+j_1>>1),由(111,11j)计算得到RAM011中的索引地址addr2=((m>>1)*k+n>>1)=((i>>1)*k+j>>1)。
203、根据所述索引地址查找所述对应的RAM中存储的查找表,输出所述对应的RAM的查找表中所述索引地址内的数据。
这里所述的查找表是由二维查找表拆分而成。在步骤203中计算得到所述索引地址后,查表装置会根据所述对应的索引地址addr1查找所述对应RAM中存储的查找表,输出所述对应RAM的查找表中所述索引地址内的数据;或根据所述对应的索引地址addr2查找所述对应RAM中存储的查找表,输出所述对应RAM的查找表中所述索引地址内的数据。
204、根据所述输入索引及加1输入索引选择所述对应RAM中输出的数据的次序。
在进行一维查找时,在进行而为查找时,所述查表装置在步骤204中已输出了各RAM中索引地址内的数据,在获得这些数据后,查表装置会根据输入的表号以及所述S_i和S_i_1选择所述对应RAM中输出的数据的次序;其中,根据所述输入的表号选择对应的RAM,所述S_i对应的RAM中输出的数据的次序为第一,所述S_i_1对应的RAM中输出的数据的次序为第二。
可选的,如图5所示,一种一维输出数据选择方法,在这里仍假设S_i为偶数,则输出的数据有RAM00和RAM01中地址S_i>>1的数据,以及RAM10和RAM11中地址S_i_1>>1的数据,在这里查找装置会输入一个表号,对各RAM中输出的数据进行一个选择,可选的,若所述表号为0则选择RAM00和RAM10中输出的数据,若所述表号为1则选择RAM01和RAM11中输出的数据。在这里假设表号为0,因S_i为偶数,则S_i[0]=0,则其对应的RAM-RAM00中输出的数据的次序为第一,所述S_i_1[0]=1则RAM10中输出的数据的次序为第二。当然若S_i为奇数,则S_i[0]=1,RAM10中输出的数据的次序为第一,S_i_1[0]=0,RAM,00中输出的数据的次序为第二。
在进行二维查找时,所述查表装置在步骤204中已输出了各RAM中索引地址内的数据,在获得这些数据后,查表装置根据所述(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)选择所述对应RAM中输出的数据的次序;其中,所述(i,j)对应的RAM中输出的数据的次序为第一,所述(i,j+1)对应的RAM中输出的数据的次序为第二,(i+1,j)对应的RAM中输出的数据的次序为第三,所述(i+1,j+1)对应的RAM中输出的数据的次序为第四。
可选的,如图6所示,为一种二维输出数据选择方法,在这里仍假设i和j为奇数,则(i[0],j[0])=(1,1)通过选择器选择到RAM11,则RAM11中输出的数据的次序为第一。同理,(i[0],j_1[0])=(1,0)通过选择器选择到RAM10,则RAM10中输出的数据的次序为第二,(i_1[0],j[0])=(0,1)通过选择器选择到RAM01,则RAM01中输出的数据的次序为第三,(i_1[0],j_1[0])=(0,0)通过选择器选择到RAM00,则RAM00中输出的数据的次序为第四。当然,i和j都为偶数或一个为奇数一个为偶数也可以通过图6所述的选择器选择个RAM的输出次序,在这里不再详述。
205、将对应RAM中输出的数据按照所述次序进行内插得到最终输出值。
将对应RAM中输出的数据按照所述次序进行二维内插得到最终输出值。若假设S_i为偶数,则查表装置依次将RAM00和RAM10中输出的数据进行一维内插得到最终输出值。
将对应RAM中输出的数据按照所述次序进行二维内插得到最终输出值。若仍假设i和j为奇数,则查表装置依次将RAM11、RAM10、RAM01和RAM00中输出的数据进行二维内插得到最终输出值。
具体的,依照上述方法,用户若要进行一维查找,则输入一维索引S_i=2,则进行加1计算的,加1输入索引S_i_1=3,通过图3所示的虚拟地址选择方法,选择得到的虚拟地址为002,012,103,113。接着计算对应的RAM的索引地址,002对应RAM00的索引地址addr1=S_i>>1=2>>1=1,同理012对应RAM01的索引地址addr1=S_i>>1=2>>1=1,103对应RAM10的索引地址addr1=S_i_1>>1=3>>1=1,113对应RAM11的索引地址addr1=S_i_1>>1=3>>1=1。接着查找输出RAM00中地址1的数据,RAM01中地址1的数据,RAM10中地址1的数据,RAM11中地址1的数据。按照图5所示的输出数据选择方法,若表号为0则选择RAM00和RAM10输出的数据,且以RAM00中输出的数据为第一个数据,RAM10中输出的数据为第二个数据进行一维内插的到最终输出值。
若依照上述方法进行二维查找,则用户输入二维输入索引(i,j)=(1,3),则进行加1计算的到加1输入索引(1,4),(2,3),(2,4)。通过图4所述的虚拟地址选择方法,选择得到的虚拟地址为(002,004),(012,013),(101,104)和(111,113)。接着按照公式计算得到虚拟地址对应RAM中的索引地址,(002,004)对应RAM00中的索引地址addr2=((2>>1)*3+4>>1)=5,(012,013)对应RAM01中的索引地址4,(101,104)对应RAM10中的索引地址2和(111,113)对应RAM 11中的索引地址1。接着查找输出RAM00中地址5内的数据,RAM01中地址4内的数据,RAM10中地址2内的数据,RAM11中地址1内的数据。最后通过图6所示的输出数据选择方法按照RAM11中输出的数据为第一个数据,RAM 10中输出的数据为第二个数据,RAM01中输出的数据为第三个数据,RAM00中输出的数据为第四个数据进行二维内插的到最终输出值。
需要说明的是,本发明中进行一维内插和二维内插时应用的内插算法为现有的内插算法,如取算数平均值等内插算法。应用上述方法,在进行一维查表时,将查到的两个输出数据进行内插的到最终输出值;在进行二维查表时,将查到的四个输出数据进行内插的到最终输出值;这样可以比现有技术更加精确。在这里我们可以举例说明,假设查找表内存储的是余弦算法的查找数据,用户想要查找cos0.5的值,故用户输入0.5进行查找,若应用现有的一维查表方法,用户输入0.5对应在查找表中时为输入索引0,最终的到输出值为cos0=1;若应用本发明提供的查表方法,用户输入0.5对应在查找表中时为输入索引0,最终的到输出值为cos0+cos1=(1+cos 1)/2;比现有的查找方法更精确。
上述的查表方法可以应用在通信***中的任一需要查表的地方,可以兼容一维和二维的查找。例如,可以应用在数字预失真***中,现有技术中,传统网络中的数字预失真***针对的是单一的信号频段,可以应用基于DPD(Digital Pre-Distortion,数字预失真)算法的一维查找表对单频段信号进行数字预失真处理,而随着通信技术的不断发展,现有的TD-SCDMA(Time Division-Synchronous CodeDivision Multiple Access,时分同步码分多址)和LTE(Long TermEvolution,长期演进)网络中的常采用双频段传输,这里的数字预失真***应用基于DPD(Digital Pre-Distortion,数字预失真)算法的一维查找表对单频段信号进行数字预失真处理。在这里若应用本发明实施例提供的查表方法,既可以满足双频段的应用需求,又可以兼容单频段的应用。
本发明实施例还提供了一种查表装置,用于完成上述的查表方法,如图7所示,所述查表装置包括:加1计算单元701,地址获得单元702,查找输出单元703,次序选择单元704,内插计算单元705。
加1计算单元701,用于将输入索引进行加1运算得到加1输入索引。
当用户输入索引S_i即进行一维查找时,所述加1计算单元701,具体用于将输入索引S_i进行加1运算得到加1输入索引S_i_1。在用户输入索引(i,j)即进行二维查找时,所述加1计算单元701,具体用于将输入索引(i,j)进行加1运算得到加1输入索引(i,j+1)、(i+1,j)和(i+1,j+1)。
地址获得单元702,用于根据所述输入索引和加1输入索引选择得到对应的RAM中的索引地址。
查找输出单元703,用于根据所述地址计算单元703算出的所述索引地址查找所述对应的RAM中存储的查找表,输出所述对应的RAM的查找表中所述索引地址内的数据。
在进行一维查找时,所述查找输出单元703,具体用于根据所述对应的索引地址addr1查找所述对应RAM中存储的查找表,输出所述对应RAM的查找表中所述索引地址addr1内的数据;在进行二维查找时,所述查找输出单元704,具体用于根据所述对应的索引地址addr2查找所述对应RAM中存储的查找表,输出所述对应RAM的查找表中所述索引地址addr2内的数据。
次序选择单元704,用于根据所述加1计算单元701获得的所述加1输入索引和所述输入索引选择所述对应RAM中输出的数据的次序。
在进行一维查找时,所述次序选择单元704,具体用于根据所述S_i和S_i_1选择所述对应RAM中输出的数据的次序;其中,所述S_i对应的RAM中输出的数据的次序为第一,所述S_i_1对应的RAM中输出的数据的次序为第二;在进行二维查找时,所述次序选择单元705,具体用于根据所述(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)选择所述对应RAM中输出的数据的次序;其中,所述(i,j)对应的RAM中输出的数据的次序为第一,所述(i,j+1)对应的RAM中输出的数据的次序为第二,(i+1,j)对应的RAM中输出的数据的次序为第三,所述(i+1,j+1)对应的RAM中输出的数据的次序为第四。
内插计算单元705,用于将所述查找输出单元703的所述对应RAM中输出的数据按照所述次序选择单元704选择的次序进行内插得到最终输出值。
在进行一维查找时,所述内插计算单元705,具体用于将所述对应RAM中输出的数据按照所述次序进行一维内插得到最终输出值。在进行二维查找时,所述内插计算单元705,具体用于所述将对应RAM中输出的数据按照所述次序进行二维内插得到最终输出值。
进一步的,如图8所示,所述地址获得单元702具体包括:地址选择单元7021,地址计算单元7022。
地址选择单元7021,用于根据所述输入索引和加1输入索引选择得到对应的虚拟地址;地址计算单元7022,地址计算单元7022,用于根据所述地址选择单元7021选择到的所述虚拟地址计算得到所述虚拟地址对应的RAM中的索引地址。
在进行一维查找时,所述地址选择单元7021,具体用于根据所述S_i和S_i_1以及所述S_i和S_i_1的奇偶性选择得到所述S_i和S_i_1对应的虚拟地址;所述地址计算单元7022,具体用于根据一维地址计算公式由所述虚拟地址计算得到所述虚拟地址对应的RAM中所述S_i和S_i_1分别对应的索引地址;其中,所述S_i或所述S_i_1对应的所述虚拟地址为xxh,xx表示对应的RAM,所述一维地址计算公式为:addr1=h>>1,addr1为所述虚拟地址xxh对应的索引地址,h>>1表示h右移一位。
在进行二维查找时,所述地址选择单元7021,具体用于根据所述(i,j)、(i,j+1)、(i+1,j)和(i+1,j+1)选择得到对应的虚拟地址,在进行二维查找时,所述地址计算单元7022,具体用于根据二维地址计算公式由所述虚拟地址计算得到所述虚拟地址对应的RAM中的索引地址;其中,(i,j)、(i,j+1)、(i+1,j)或(i+1,j+1)对应的所述虚拟地址为(xxm,xxn),xx表示对应的RAM,所述二维地址计算公式为:addr2=((m>>1)*k+n>>1),其中addr2为所述虚拟地址(xxm,xxn)对应的索引地址,m>>1和n>>1表示m和n右移1位,k为所述二维查找表宽度值的一半。
本发明实施例中提到的查找装置主要集成在FPGA(Field-Programmable Gate Array,即现场可编程门阵列)或ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)中。
本发明实施例提供了一种查表方法及装置,通过将输入索引进行加1运算得到加1输入索引,并根据所述输入索引和加1输入索引选择得到对应的RAM中的索引地址,并根据所述索引地址查找所述对应的RAM中存储的查找表,输出所述对应的RAM的查找表中所述索引地址内的数据;然后按照选择的所述对应RAM中输出的数据的次序,将对应RAM中输出的数据进行内插得到最终输出值,依照上述查表方法,即可以输入一维索引进行一维查找,也可以输入二维索引进行二维查表,兼容实现一维查找和二维查找。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。