具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本发明实施例的PDCCH盲检测装置的结构框图。如图1所示,该PDCCH盲检测装置包括:解速率匹配模块10和维特比解码器12;
其中,解速率匹配模块10,可以进一步包括以下单元:
第一确定单元100,用于根据当前等级确定需要从搜索空间随机存取器(Random AccessMemory,简称为SDRAM)中读取的数据个数;
读取单元102,用于从搜索空间RAM和所述维特比解码器的共享RAM中读取数据;
合并单元104,用于在需要进行数据合并时,依次将从所述搜索空间RAM和所述共享RAM中读取的需要合并的数据进行合并,直至读取模块读取完需要从搜索空间RAM中读取的数据;
其中,维特比解码器12,可以进一步包括以下单元:
共享RAM 120,用于依次将合并模块104合并后的数据进行保存;
解码单元122,用于在读取模块读取完需要从搜索空间RAM中读取的数据时,对共享RAM中保存的数据进行解码处理。
相关技术中,在解速率匹配模块和维特比解码器中均需要设置一块缓存器,解速率匹配模块在进行数据合并后,需要将数据发送至维特比解码器中的缓存器,由此耗费时间比较长,且占用较多缓存资源。采用图1所示的盲检测装置,将解速率匹配和维特比解码器无缝结合,通过共享同一块缓存Buffer,并采用新的Buffer调度方式将两个过程有机联合起来,在解速率匹配的同时向维特比解码器存储数据,完成解速率匹配的时刻即可启动维特比解码器;该方法不同于以往调度维特比解码的方法。在解速率匹配模块中可以采用假双口RAM,对数据进行合并操作,不需要计算需要合并的次数、需要合并的数据个数以及停止的时刻,只需要从搜索空间中依次读取数据即可。在不改变硬件结构的前提下,利用维特比解码器中的RAM,降低了控制模块以及解速率匹配模块的复杂度。
在优选实施过程中,解速率匹配模块10的读取模块102可以根据当前的等级(Level),从搜索空间RAM中读取LLR数据(不同Level读取的LLR数据量如表1所示);并根据tb_size(由软件提供)来判断是否需要合并。维特比模块中的共享RAM作为循环buffer来使用;在实现合并运算时,预先从该共享RAM中读取需要合并的数据,然后与从搜索空间RAM读取的新的LLR数据合并再写入该共享RAM中。直到读取完本Level所需要的数据即完成了解速率匹配和解交织,可以启动本次的维特比解码器。具体可以参见图2。
表1不同Level读取的LLR数量
下面以tb_size=31,Level=4时为示例进行数据存储说明。
在Level=4时,需读取288个数据,而31(tb_size)+16(crc)=47,需要将288个数据进行解速率匹配最终得到47*3=141个数据。288>141,很容易判断需要合并,而且有141个数据仅合并了一次,有288-141-141=6个数据合并了第二次。在本发明中,不需要计算有多少数据需要合并,也不需要计算需要合并多少次。只需要从CCE搜索空间中读取完这288个数据即可。需要注意的是,下文中的数字计算仅仅为了说明运算过程和本发明优点。
读取单元102从CCE搜索空间RAM中读取LLR数据,写到共享RAM中。写RAM地址从0增加到140后再次从0开始;当写RAM地址快要增加到140时,读地址从0开始增加,这个预先读取的数据与到来的新LLR数据合并。将合并结果写入共享RAM中,地址仍然是由递加的写地址决定(该写地址不需要等待)。第1次合并运算的结果覆盖掉第一次写入的数据。当进行完一次合并后,一共从CCE搜索空间RAM中读取了141*2=282个数据。
但还有288-282=6个数据需要进行第2次合并。写地址依然从0开始递加,读地址和上一步骤相同。将这6个数据第二次合并后写入共享RAM中,这6个数据继续覆盖掉第1次合并结果的前6个数据,此时已读取完288个LLR数据,即完成解速率匹配操作,从0-140地址中存储的就是提供给维特比解码器的数据。后续的141-6=135个数据并不需要转存到Viterbi解码器中。
启动维特比(Viterbi)解码器即可。不需要转存剩下的数据。
以上实例仅说明了采用新的调度方式,使用共享RAM的过程。优选地,还可以采用乒乓缓冲器(Buffer)作为共享RAM,减少解速率匹配和维特比解码器之间的等待时间,更加有效地实现了解速率匹配和维特比解码的无缝接合。
优选地,如图3所示,上述装置还可以包括:解交织模块14;其中,解交织模块14,可以进一步包括:反相单元140(图3中未示出),用于对数据的列索引进行转换,获取解交织后的列索引;识别单元142(图3中未示出),用于识别解交织后的列索引对应的各列是否有插入的填充比特;行索引获取单元144,用于在识别单元输出为是时,将该列中各个数据对应的行索引row_addr从1增加至数据的行总数row_num与1的差值,在识别单元输出为否时,将该列中各个数据的行索引row_addr从0增加至数据的行总数row_num与1的差值;地址获取单元146(图3中未示出),用于通过获取的列索引、行索引以及填充比特数计算得到解交织后数据的地址。
上述解交织模块14结构简单,可以使得数据实时处理,使解交织地址的计算能一拍输出一个结果,保证译码器数据流的线速率;且不需任何缓存和查表操作,可以节省硬件资源。
以下结合示例详细描述上述优选实施过程,LTE协议规定的子块交织表格如表2所示。
表2
根据上述LTE协议的交织表格,可以将交织前的数据列索引与交织后的数据列索引进行比较,具体可以参见表3。
表3
十进制数 |
二进制数 |
变换后的十进制数 |
变换后的二进制数 |
0 |
00000 |
1 |
00001 |
1 |
00001 |
17 |
10001 |
2 |
00010 |
9 |
01001 |
3 |
00011 |
25 |
11001 |
4 |
00100 |
5 |
00101 |
5 |
00101 |
21 |
10101 |
6 |
00110 |
13 |
01101 |
7 |
00111 |
29 |
11101 |
8 |
01000 |
3 |
00011 |
9 |
01001 |
19 |
10011 |
10 |
01010 |
11 |
01011 |
11 |
01011 |
27 |
11011 |
12 |
01100 |
7 |
00111 |
13 |
01101 |
23 |
10111 |
14 |
01110 |
15 |
01111 |
15 |
01111 |
31 |
11111 |
16 |
10000 |
0 |
00000 |
17 |
10001 |
16 |
10000 |
18 |
10010 |
8 |
01000 |
19 |
10011 |
24 |
11000 |
20 |
10100 |
4 |
00100 |
21 |
10101 |
20 |
10100 |
22 |
10110 |
12 |
01100 |
23 |
10111 |
28 |
11100 |
24 |
11000 |
2 |
00010 |
25 |
11001 |
18 |
10010 |
26 |
11010 |
10 |
01010 |
27 |
11011 |
26 |
11010 |
28 |
11100 |
6 |
00110 |
29 |
11101 |
22 |
10110 |
30 |
11110 |
14 |
01110 |
31 |
11111 |
30 |
11110 |
通过观察可以发现交织后的列号如下:
<1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31,0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30>是交织前的列号<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31>的二进制数值高低位转换后,对最低位取反。在优选实施过程中,采用一个反向器即以完成上述变换。即对每个二进制从{A4,A3,A2,A1,A0}变为{A0,A1,A2,A3,~A4}。
基站侧插入的Null bit在维特比解码器中是不需要的,上述解交织可以在不影响数据吞吐率的前提下将Null bit去掉。可按下面的叙述处理:
令k_w=(tb_size+crc(16))*3,就是需要解交织的有效数据个数。row_addr和col_addr分别表示数据的行号和列号。
可以计算出填充的填充比特数null_bits:
当k_w!=0时,null_bits=32-k_w[4:0];(其中,协议规定每行最多32个数据)
当k_w==0时,null_bits=0,这时没有null bit。
解交织矩阵的行数可以用row_num=k_w[9:5]+(k_w[4:0]!=5’d0)计算。
P(col_addr)={A0,A1,A2,A3,~A4},{A4,A3,A2,A1,A0}是col_addr的二进制表示。
col_addr依次从0增加到31。当row_addr增加到row_num时,col_addr加1。
当P(col_addr)<null_bits时,表示此列有插入的填充比特。row_addr需要跳过第一行,从1增加到row_num-1;
当P(col_addr)>null_bits时,表示此列没有插入的填充比特。row_addr从0增加到row_num-1;
addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits就是解交织的地址。上述过程具体可以参见图4。
如图5所示,图5中的标号是交织前的地址,即解交织后的地址。
k_w=10’b1100100=10’d100,k_w[4:0]=5’b00100,可知null_bits=5’d32-k_w[4:0]=5’d28,就是填充的null bit数。
行数row_num=k_w[9:5]+(k_w[4:0]!=5’d0)=5’b00011+5’b00001=5’d4,可知有4行。
如果P(col_addr)<5’d28,该列有插入的填充比特,row_addr从1开始增加到3;
如果P(col_addr)>5’d28,该列没有插入的填充比特,row_addr从0开始增加到3;
初始时,col_addr=5’d0。
那么第1个数据(标号5),P(0)<5’d28,则row_addr从1开始;解交织后的地址就是
addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits
={1,4’b0000}+P(0)-5’d28=9’d32+5’d1-5’d28=5’d5
然后row_addr加1;
第2个数据(标号37),P(0)<5’d28,则row_addr从1开始;解交织后的地址就是
addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits
={2,4’b0000}+P(0)-5’d28=9’d64+5’d1-5’d28=9’d37
然后row_addr加1;
做完第3个数据后,row_addr==row_num-1,这时col_addr加1。
第4个数据(标号21),P(1)<5’d28,则row_addr从1开始;解交织后的地址就是
addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits
={1,4’b0000}+P(1)-5’d28=9’d32+5’d17-5’d28=9’d21
然后row_addr加1;直到最后一个数据。
第22个数据(标号1),这时col_addr已经增加到7,P(7)=29,P(1)>5’d28,则该列没有插入的填充比特。row_addr从0开始;解交织后的地址就是
addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits
={0,4’b0000}+P(7)-5’d28=5’d29-5’d28=9’d1。和数据标号完全对上。
优选地,如图3所示,上述PDCCH盲检测装置还可以包括:控制模块16,用于通过以下公式计算获取搜索次数search_num:
其中,M
(L)为预定的搜索次数,N
CCE,k为当前搜索空间的大小,L为等级数。
表4是LTE协议规定的在不同搜索空间下不同Level的搜索次数。然而,在分配给本UE的PDCCH资源比较少时,搜索空间Ncce,k比较小,如果采用协议规定的搜索次数进行搜索,可能会出现对某些CCE重复搜索的情况。为减少功耗,需要对搜索次数进行计算。
在硬件设计时,总共需要的搜索次数就是:
通过将N
CCE,k/L的商取整,并将取整后的数值与协议规定的M
(L)值取较小值,可以减小功耗,避免重复搜索。在具体实施过程中,N
CCE,k/L可以通过对N
CCE,k截位实现,操作简单。
表4
优选地,控制模块16还可以包括以下单元:
接收单元160(图3中未示出),用于接收来自于维特比解码器的最大路径值max_metric和绝对路径值sum_absolute;
第一比较单元162(图3中未示出),用于将最大路径值和绝对路径值的比值与预设门限值进行比较;
第二比较单元164(图3中未示出),用于在比值大于预设门限值,且在CRC校验正确时,比较本次搜索得到的控制信息指示DCI的起始CCE地址与已经保存的起始CCE地址是否相同;
第二确定单元166(图3中未示出),用于在第二比较单元输出的比较结果相同时,确定本次搜索的DCI与已经保存的DCI是相同的DCI;
乘法单元168(图3中未示出),用于在第二比较单元输出的比较结果不同时,获取本次搜索得到的DCI对应的max_metric1与已经保存的DCI对应的sum_absolute2的第一乘积值,并获取本次搜索得到的DCI对应的sum_absolute1与已经保存的DCI对应的max_metric2的第二乘积值;
第三比较单元170(图3中未示出),用于将第一乘积值与第二乘积值进行比较;
更新保持单元172(图3中未示出),用于在第一乘积值大于等于第二乘积值时,确定本次搜索更满足门限要求,更新DCI和起始CCE地址;在第一乘积值小于第二乘积值时,保持已经保存的DCI和起始CCE地址不变;
装置还包括:CRC校验模块18,还用于在比值大于预设门限值时,执行CRC校验处理。
以下结合图6描述上述优选实施方式。如图6所示,上述控制模块16和CRC校验模块18执行的处理主要包括以下步骤:
步骤S602:通过接收维特比解码器反馈的最大路径值max_metric和绝对路径值sum_absolute,结合软件提供的预设门限值threshold来进行判断。
需要注意的是,上述预设门限值threshold可以根据实际情况动态设置。
如果不满足threshold<max_metric/sum_absolute,则流程结束,即不需要进行CRC校验;否则,执行步骤S604,即进行CRC校验。
步骤S604:CRC校验模块18执行CRC校验处理。
当通过门限值并且CRC校验正确后,就将解码得到的DCI暂存在寄存器中,并且保存该次搜索的起始CCE地址。
步骤S606:当下次搜索得到同一类的DCI时(通过门限和CRC校验)。首先比较新DCI的起始CCE地址与已保存的CCE地址,当这两个地址相同时,就认为是相同的DCI;当地址不同时,执行步骤S608。
步骤S608:比较哪个更满足门限。通过比较两次的max_metric/sum_absolute的值,来确定更新或者保持寄存器中的DCI值。
优选地,比较两次的max_metric/sum_absolute的值,并不采用传统的除法运算,而是通过转化为乘法运算实现,可以进一步节省了硬件资源和功耗。因为比较第一次满足门限程度max_metric1/sum_absolute1,第二次满足门限程度max_metric2/sum_absolute2的数值都是正数;可以通过比较max_metric1*sum_absolute2和max_metric2*sum_absolute1的值来判断:
如果max_metric1*sum_absolute2>=max_metric2*sum_absolute1,即有max_metric1/sum_absolute1>=max_metric2/sum_absolute2,可知第一次搜索得到的DCI更满足门限;反之,是第二次搜索得到的DCI更满足门限。
步骤S610:如果第一次搜索得到的DCI更满足门限,则保持寄存器中的DCI值,如果第二次(即本次)搜索得到的DCI更满足门限,则更新寄存器中的DCI值。
上述处理过程中,除了采用LTE协议规定的CRC校验对数据进行检查外,还采用了门限和比对起始CCE搜索地址两种方法降低PDCCH盲检测的误检率,有效提高了系统性能。
图7是根据本发明实施例的PDCCH盲检测实现方法的流程图。如图7所示,该PDCCH盲检测实现方法主要包括以下处理:
步骤S702:根据当前等级确定需要从搜索空间RAM中读取的数据个数;
步骤S704:从搜索空间RAM中读取数据并保存在维特比解码器的共享RAM中;
步骤S706:在需要进行数据合并时,依次从搜索空间RAM和共享RAM中读取需要合并的数据进行合并并保存在共享RAM中,直至读取完上述需要从搜索空间RAM中读取的数据;
步骤S708:启动维特比解码器对共享RAM中保存的数据进行解码处理。
采用图7所示的盲检测方法,将解速率匹配和维特比解码器无缝结合,通过共享同一块缓存Buffer,并采用新的Buffer调度方式将两个过程有机联合起来,在解速率匹配的同时向维特比解码器存储数据,完成解速率匹配的时刻即可启动维特比解码器;该方法不同于以往调度维特比解码的方法。在解速率匹配模块中可以采用假双口RAM,对数据进行合并操作,不需要计算需要合并的次数、需要合并的数据个数以及停止的时刻,只需要从搜索空间中依次读取数据即可。在不改变硬件结构的前提下,利用维特比解码器中的RAM,降低了控制模块以及解速率匹配模块的复杂度。
优选地,在执行步骤S708之前,即在执行数据合并存储处理的同时,还可以包括以下处理:
(1)采用反相器对数据的列索引进行转换,获取解交织后的列索引;
(2)识别解交织后的列索引对应的各列是否有插入的填充比特;
优选地,识别解交织后的列索引对应的各列是否有插入的填充比特可以进一步包括以下处理:当P(col_addr)<null_bits时,则P(col_addr)对应的列有插入的填充比特;当P(col_addr)>null_bits时,则P(col_addr)对应的列没有插入的填充比特;其中,P(col_addr)为解交织后的列索引,null_bits为填充比特数。
(3)如果有,则将该列中各个数据对应的行索引row_addr从1增加至数据的行总数row_num与1的差值;
(4)如果没有,则将该列中各个数据的行索引row_addr从0增加至数据的行总数row_num与1的差值;
(5)通过获取的列索引、行索引以及填充比特数计算得到解交织后数据的地址。
优选地,可以通过以下公式计算得到解交织后数据的地址Addr_wr:
Addr_wr={row_addr,4’b0000}+P(col_addr)-null_bits。
在优选实施过程中,上述填充比特数null_bits可以通过以下公式获取:
当k_w!=0时,null_bits=32-k_w[4:0];
当k_w==0时,null_bits=0;
其中,k_w为需要解交织的有效数据个数。
优选地,在执行步骤S708之后,还可以通过以下方式计算获取搜索次数search_num:
其中,M
(L)为预定的搜索次数,N
CCE,k为当前搜索空间的大小,L为等级数。
优选地,在执行步骤S708之后,还可以包括以下处理:
(1)接收来自于维特比解码器的最大路径值max_metric和绝对路径值sum_absolute;
(2)将最大路径值和绝对路径值的比值与预设门限值进行比较;
(3)在比值大于预设门限值时,执行CRC校验处理;
(4)在CRC校验正确时,比较本次搜索得到的控制信息指示DCI的起始CCE地址与已经保存的起始CCE地址是否相同;
(5)在比较结果相同时,确定本次搜索的DCI与已经保存的DCI是相同的DCI;
(6)在比较结果不同时,通过乘法器获取本次搜索得到的DCI对应的max_metric1与已经保存的DCI对应的sum_absolute2的第一乘积值,并获取本次搜索得到的DCI对应的sum_absolute1与已经保存的DCI对应的max_metric2的第二乘积值;
(7)将第一乘积值与第二乘积值进行比较;
(8)在第一乘积值大于等于第二乘积值时,可知本次搜索得到的DCI更满足门限,更新DCI和起始CCE地址;反之,是上一次搜索得到的DCI更满足门限,保持已经保存的DCI和起始CCE地址不变。
对应不同搜索空间的起始搜索地址(由软件提供),分别检测出同一类PDCCH时,采用置信度信息对CRC校验结果进行判断,并比对两次符合门限的情况,上报最准确的DCI,提高系统性能。同时,对于可能发生误检的另一种场景:同一搜索空间的起始搜索地址,不同Level都检测出PDCCH,通过记录每次的起始地址,进行比对即可判断是否同一个PDCCH。通过上述处理,可以有效降低PDCCH盲检测的误检率,提高系统性能。
经过实验,采用本发明提供的上述PDCCH盲检测方法,对于LTE协议中20M带宽下4发射天线端口的场景进行盲检测,只需要16968个clock(245.76MHz时钟),却处理了多达5328*2=10656个LLR。在达到盲检测目标的前提下,给予了软件和其他子系统更多的时间去处理业务信息。
综上所述,借助本发明提供的上述实施例,可以有效提高PDCCH盲检测的正确率,提高了上、下行的吞吐率;节省了盲检测时间,避免了PDCCH的重复检测,简化了软硬件接口,降低了软件处理开销。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。