一种基于块交织的交织或解交织方法及其装置
【技术领域】
本发明属于数字通信领域,具体是指一种基于块交织的交织或解交织方法及其装置。
【背景技术】
一些数字通信系统中,经常采用交织或解交织来将连续的错误打散,便于纠错,提高系统的可靠性。发送的数据在信道编码后,经过交织将原来的顺序打乱传输,这样当传输的信号受到突发干扰产生连续错误时,由于接收端要先进行解交织,连续错误就会被打散,有利于信道解码模块进行纠错。
块交织就是将发送的数据分块,交织只在块内进行。例如,中国移动多媒体广播(CMMB)中的比特交织就采用了块交织。CMMB中LDPC(低密度奇偶校验)编码后的比特输入到比特交织器进行交织,在8M带宽模式时,比特交织器采用384×360的块交织器。LDPC编码后的二进制序列按照从上到下的顺序依次写入块交织器的每一行,直至填满整个交织器,再从左到右按列依次读出,进行星座映射。而在读出数据进行星座映射的同时,后面的数据又会继续写入块交织器。由于读出和写入的顺序不同,如果写入的数据还是存储在该交织器中,除非读出的速度比写入快几百倍,否则某些数据在还未读出时就会被冲掉。因此,目前一般用两个交织器,采用乒乓的方法来解决该问题,而在接收端的比特解交织也存在同样的问题,这就大大增加了发射机调制芯片和接收机基带解调芯片的存储器大小。
现有技术都是采用乒乓存储的方法来进行CMMB中的比特交织或解交织,因此会大大增加存储器的大小。CMMB的发射机调制芯片在比特交织处耗费的存储器大小就要有384×360×2比特;CMMB的接收机基带解调芯片在比特解交织处耗费的存储器大小要有384×360×2×量化比特数。这对于调制芯片和基带解调芯片来说,都是一个相当大的资源耗费。
【发明内容】
本发明所要解决的技术问题在于提供一种新的基于块交织的交织或解交织方法及其装置,能够减少近一半的存储器需求。
本发明采用以下技术方案解决上述技术问题:
该方法包括如下步骤:
将a×b大小的交织器或解交织器扩展为(c×d)×(c×e),即c×d行,c×e列,使d和e尽量小的情况下满足c×d≥a,c×e≥b;交织器或解交织器看成是一个c×c大小的正方形,正方形的每个元素是一个d×e的小矩阵;
将奇数块数据和偶数块数据按相反顺序写入同一块交织器或解交织器;
在一整个交织或解交织块数据写满后,按与写入顺序相反的顺序读出交织器或解交织器。
所述相反顺序是:
如果奇数块数据是按行写入交织器或解交织器,则奇数块数据是按列读出交织器或解交织器,偶数块数据是按列写入交织器或解交织器,按行读出交织器或解交织器;
如果奇数决数据是按列写入交织器或解交织器,则奇数块数据是按行读出交织器或解交织器,偶数块数据是按行写入交织器或解交织器,按列读出交织器或解交织器。
在一整个交织或解交织块数据写满后,读出当前块数据与写入下一块数据基本同时进行,只要有数据被读出,被读出的数据对应的存储器都可以用来写入下一块的数据。
对最后一行和最后一列存在填不满的情况进行特殊处理,写入一整个交织或解交织块数据后即认为交织器或解交织器填满,读出时也只读出有写入部分的数据。
进一步包括步骤:
在数据写入交织器或解交织器前,先将数据写入一块小缓存。小缓存的大小可以根据需求选取,为了控制的方便,如果是要按行写入按列读出,就选取b×d的整数倍;如果是要按列写入按行读出,就选取a×e的整数倍。
小缓存使用内部乒乓方式读写,在写到一定程度时开始读取已经写满的部分到大的存储器中,同时继续写未写满的部分,未写满的部分写满后原来写满的部分已经读空,可以继续往里面写数据,同时开始继续读后来写的数据;
小缓存只在大存储器有足够空间且小缓存内有足够数据的时候,开始读取数据到大存储器中;只在小缓存未满且前面模块处理完成后写入数据;如果交织器的大小不是小缓存的整数倍,则最后一块小缓存在收到可以填满交织器的数据后就认为小缓存满了,将数据搬到大存储器中。
根据上述方法,本发明还提供了一种基于块交织的交织或解交织装置,该装置包括小缓存、大存储器和控制模块;所述小缓存连接所述大存储器,所述控制模块分别连接小缓存和大存储器;
小缓存:先进行部分行列的交织或解交织,提高交织或解交织输出数据的速率,缓存了部分数据,使大存储器中对同一个地址数据的读取先于写入一段时间,避免数据被冲;
大存储器:是交织或解交织的主存储器,对整个交织或解交织块大小的数据进行交织或解交织;
控制模块:控制小缓存和大存储器数据的读写过程,完成交织或解交织。
本发明的优点在于:将交织或解交织的块扩展为一个正方形,如果第一次是按行写入按列读出,则第二次按列写入按行读出,这样第二次写入与第一次读出在同一块存储器中基本同时进行而又不会将第一次未处理的数据冲掉。如此一直交替下去,就只需要一块扩展后的存储器来完成交织/解交织,大大降低了需要的存储器的大小。同时在存储器的前面加一块小缓存,来增加存储器的位宽,便于处理。
【附图说明】
下面参照附图结合实施例对本发明作进一步的描述。
图1是本发明中交织/解交织模块与前后端模块的连接图。
图2是本发明中交织/解交织装置内部框图。
图3是本发明中扩展后的交织/解交织器的形状。
图4是本发明具体实施例中CMMB比特解交织模块小缓存结构图。
图5是本发明具体实施例中CMMB比特解交织模块中大存储器按列写入顺序示意图。
图6是本发明具体实施例中CMMB比特解交织模块中大存储器按行读出顺序示意图。
图7是本发明具体实施例中CMMB比特解交织模块中大存储器按行写入顺序示意图。
图8是本发明具体实施例中CMMB比特解交织模块中大存储器按列读出顺序示意图。
【具体实施方式】
本发明适用于所有按行写入按列读出,或者按列写入按行读出的块交织的交织和解交织。交织/解交织模块与前后端模块的连接如图1所示。整个交织或解交织装置由三部分组成:小缓存、大存储器和控制模块。小缓存连接大存储器,控制模块分别连接小缓存和大存储器,如图2所示。
小缓存:先进行部分行列的交织或解交织,提高交织或解交织输出数据的速率,缓存了部分数据,使大存储器中对同一个地址数据的读取先于写入一段时间,避免数据被冲;
大存储器:是交织或解交织的主存储器,对整个交织或解交织块大小的数据进行交织或解交织;
控制模块:控制小缓存和大存储器数据的读写过程,完成交织或解交织。
控制模块输出忙标志信号busy_flag到前端的模块,前端的模块在处理完一块数据后根据该信号来输出交织或解交织的输入数据data_in(在忙标志信号为低时输出,否则不输出)到小缓存,同时将输入到控制模块的数据有效信号data_in_valid拉高,控制模块根据data_in_valid来控制小缓存的写入。在小缓存填满部分块后如果大存储器有足够的空余空间,则控制模块将小缓存的数据按部分解交织后的顺序读出,按行或按列的顺序写到大存储器的空余空间中(第一次的顺序可以任选,后面每填满一次,行列交替一次)。后端的模块输出数据请求信号data_req到控制模块,在需要数据进行运算时,将data_req信号拉高;控制模块在大存储器存满后改变大存储器的读写顺序,同时将内部的数据准备好信号data_ready信号拉高;在data_ready信号为高且data_req信号为高时,控制模块按新的读顺序读取大存储器中的一块数据到后端的模块,读取数据的多少由后端模块的需求决定。同时,控制模块将输出给后端模块的数据有效信号data_out_valid拉高,后端模块根据该信号来控制数据的写入。在大存储器的一整块交织或解交织大小的数据读完后,data_ready信号拉低。
具体交织或解交织的方法包括如下步骤:
将a×b大小的交织器或解交织器扩展为(c×d)×(c×e),即c×d行,c ×e列,使d和e尽量小的情况下满足c×d≥a,c×e≥b;交织器或解交织器看成是一个c×c大小的正方形,正方形的每个元素是一个d×e的小矩阵;如图3所示。
将奇数块数据和偶数块数据按相反顺序写入同一块交织器或解交织器;
在一整个交织或解交织块数据写满后,按与写入顺序相反的顺序读出交织器或解交织器。
以下以CMMB接收机基带解调芯片中的比特解交织在8M带宽模式下的应用对该方法进行说明。由于比特交织的顺序是从上到下按行写入,从左到右按列读出,因此,比特解交织的顺序是从左到右按列写入,从上到下按行读出。
在8M带宽模式时,假设量化位数为5比特,则原先比特解交织器大小为384×360×5比特,对其进行扩展,得到384×384×5比特大小的存储器。为了提高后端LDPC解码模块的输入数据的速率,将位宽变为30比特,则大存储器的大小为64×6×64×30比特,可以看成64×64的正方形,正方形的每个元素是一个6×1×30比特的小矩阵。
前端模块输出数据的位宽为5比特,小缓存需要将数据转换为30比特位宽输出,因此至少要先对6列数据进行解交织。同时,为了进行乒乓方式的读写,小缓存由12块192×5比特的存储器组成一个384×6×5比特的缓存,其结构见图4。数据按1、2、……11、12块的顺序逐块写入,块内按列顺序写入。当第11块写满时,第1、3、5、7、9、11块数据可以组成192个30比特的数据读出到大存储器中;输入数据可以继续写入第12块存储器,当第12块写满时,第2、4、6、8、10、12块数据可以组成192个30比特的数据读出到大存储器中;如果第1、3、5、7、9、11块数据已经全部输出,则输入数据可以继续写入第1块存储器,但写第2块存储器需要等到第2、4、6、8、10、12块数据全部输出。
大存储器的第一次写入是按列,第一次读出和第二次写入的顺序都是按行,第二次读出和第三次写入的顺序又是按列,如此一直交替下去,直到连续要解的数据解完。按列写入的顺序如图5所示,按行读出的顺序如图6所示,按行写入的顺序如图7所示,按列读出的顺序如图8所示。数值的大小代表写入的顺序,数值越小,表示越早写入,每个数代表一个30比特的输入数据(即6个数据),因此一个解交织块有384×360/6=23040个30比特的输入数据。每个解交织块填满23040个30比特的输入数据即认为填满,而不是整个大存储器填满,实际上无论是按行写入还是按列写入都有64×6×4×30比特的空余空间。
控制模块工作流程如下:
步骤1:初始化。小缓存、大存储器全为空,busy_flag拉低,data_ready拉低,data_out_valid拉低,大存储器的读写地址生成都选择按列生成。
步骤2:当data_in_valid为高时将输入数据按列顺序逐块写入小缓存,当小缓存的数据快满时,拉高busy_flag,前端的模块就会将data_in_valid拉低,暂停输入数据。其中,小缓存的数据快满是指第12块存储器快填满而第1、3、5、7、9、11块存储器还未搬空,或者第1块存储器快填满而第2、4、6、8、10、12块存储器还未搬空。
步骤3:小缓存写满第11块存储器时,如果大存储器可以写入,就开始读取第1、3、5、7、9、11块存储器的数据写到大存储器中;小缓存写满第12块存储器时,如果大存储器可以写入,就开始读取第2、4、6、8、10、12块存储器的数据写到大存储器中。大存储器的写入顺序按选择好的顺序(按行或者按列)。其中,大存储器可以写入是指大存储器在写入新的数据时不会冲掉上个交织或解交织块还没有使用的数据且大存储器不在读取数据。
步骤4:大存储器写满后,data_ready拉高,大存储器写入和读出的顺序进行改变(如果原来是按列,就改成按行;如果原来是按行,就改成按列)。此时,如果data_req信号为高,开始按改变后的顺序读取大存储器中的一块LDPC解码模块需要的数据到LDPC解码模块,同时,将输出给LDPC解码模块的数据有效信号data_out_valid拉高。LDPC解码模块在收到一块数据后就会将data_req信号拉低,等处理完后再拉高data_req信号。其中,大存储器写满是指存满一个交织或解交织块的数据,即23040个30比特的数据,而不是存满存储器大小的数据。
然后,在步骤2到步骤4间不停循环,直到需要处理的数据被处理完。
这样,该比特解交织器需要的存储器大小为384×384×5+384×6×5=384×390×5比特,而如果用乒乓的方式,则需要384×360×2×5=384×720×5比特,用本发明中的方法相对乒乓方式的方法将CMMB的比特解交织器大小减少了46%左右,大大节约了存储器资源。