CN1945725A - 一种高码率游长受限码的编码方法 - Google Patents
一种高码率游长受限码的编码方法 Download PDFInfo
- Publication number
- CN1945725A CN1945725A CN 200610124661 CN200610124661A CN1945725A CN 1945725 A CN1945725 A CN 1945725A CN 200610124661 CN200610124661 CN 200610124661 CN 200610124661 A CN200610124661 A CN 200610124661A CN 1945725 A CN1945725 A CN 1945725A
- Authority
- CN
- China
- Prior art keywords
- sub
- piece
- output
- sequence number
- conflict
- 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.)
- Granted
Links
Images
Landscapes
- Signal Processing For Digital Recording And Reproducing (AREA)
- Time-Division Multiplex Systems (AREA)
Abstract
本发明公开了一种数据编解码的方法,即在数据存储和数据通信环境中进行高码率游长受限编码和解码的方法。在本发明中,定义了一套编/解码规则和方法,包括:对输入数据进行子块分割;测试每个子块的值是否有冲突;根据测试值执行无冲突映射;或由输出数据的标志子块指示有冲突子块的序号,并给出了标志子块的排队规则;剩余输入数据的无冲突子块依次按顺序将内容赋值给空余输出子块;对特殊状态建立了加10的处理方法。根据提出的规则和方法,本发明设计了码率为32/33(d=0,k=6)的游长受限码编码方法和解码方法,并进一步结合子块交叉插入技巧设计了码率为128/129(d=0,k=14)的游长受限码码字映射方法。本发明提出的方法具有编码效率高、易扩展、易实现的优点。
Description
技术领域
本发明属于数据存储与数据通信技术领域,具体涉及一种高码率游长受限码的编码方法,该方法能适用于如磁存储、数据回放系统等环境。
背景技术
长期以来,基于游长受限(RLL-Run Length Limited)序列的编码都是磁盘或光盘记录设备中编码的基础。以通道位表示的两个相邻跳变之间的长度就是通常所说的游程。RLL序列用(m,n,d,k)四个参数来表示其特征,m表示输入序列的位数,n表示输出码字的位数,d、k两个参数分别规定了可能出现在序列中的最小和最大游程。d参数表示两个逻辑“1”至少被长度为d个连续的“0”分隔开,k参数表示任意连续“0”的长度至多为k。通常参数d控制着最高传输频率,因此可能影响序列通过带限信道传输时的码间串扰。在二进制数据传输中,通常希望接收到的信号是能够自同步的,同步常利用锁相环实现,而锁相环按照接收到的波形的跳变来调整检测时刻的相位。参数k就是用来确保适当的跳变频率以满足读取时钟同步的需要。
通常形式的RLL编码,是由Berkoff,Freiman,Wyner,Kautz,Gabor,Tang和Bahl,以及Franaszek等在20世纪60年代率先提出的。自RLL编码的基本思想提出以来,基于RLL序列的记录码就在各种形式的记录设备中得到了普遍应用。如用于CD的EFM编码(码率为8/17,d=2,k=10)和用于DVD中的EFM+编码(码率为8/16,d=2,k=10),以及早期用于硬盘中的码率8/9,d=1,k=7的RLL编码。
但是这些以前的RLL编码方法存在的一个问题就是码率比较低,浪费了有效的存储空间。某种编码的码率的定义是指未编码的数据位数与编码后的码字数据位数之比,即R=m/n。如码率2/3是把2位用户数据位转化为3位码字,编码效率仅为66.7%,33.3%的空间用来保存冗余位。而码率8/9的编码方法效率则提高至88.9%,只需要11.1%的空间存储冗余位。因此码率也是衡量编码方法效率的重要参数,一般把效率高于88.9%的编码称为高码率编码。
随着技术的发展,现代存储设备的容量越来越大,如单个硬盘的容量就超过了400GB。在这种大容量背景下,提高编码码率所带来的好处是显而易见的。如把400GB硬盘的码率从8/9(88.9%)提高到32/33(96.97%),将使可用容量增加约8.07%,即约32GB。即在不改变任何媒介和其他记录技术的条件下,仅通过提高码率,就可以大幅度增加可用存储空间。这种变化无论是对普通个人消费者还是像航空航天领域这样对容量/重量(或体积)很敏感的应用都非常有吸引力。
Fisher在美国专利U.S.Pat.NO.5,757,822“Bit-Interleaved Rate 16/17Modulation Code with Three-Way Byte-Interleaved EC”中提出的一种码率为16/17的游长受限编码方法。Fitzpatrick在美国专利U.S.Pat.NO.5,635,933“Rate 16/17(D=0,G=6/I=7)Modulation Code for a Magnetic RecordingChannel”中提出了能同时满足G/I限制的码率为16/17的游长受限编码方法。这些方法将码率从8/9提高到了16/17。
Fisher还在美国专利U.S.Pat.NO.5,737,594“Rate 24/25ModulationCode for PRML Recording Channels”中提出了码率为24/25的编码方法,使编码效率进一步提高。在Wijinggaarden和Immink发表的文章“Combinatorial Construction of High Rate Runlength-limited Codes”(IEEEProceedings of Globecom 1996,343-347页)中,描述了几种构建高码率的基本技巧,并在文中提出了包括码率16/17(d=0,k=4)和16/17(d=0,k=6)的编码方法。
图1描述了当前磁存储设备读写通道的结构。用户数据12首先经过循环冗余校验码编码器13和检纠错码编码器14编码后被附加少量的控制位来帮助检错和纠错,至于检纠错码编码方法完全与传统方法相同,它们不是本发明要关注的内容。检纠错码编码后的数据接着送入加乱器15。加乱器15的作用是把数据源信息变换成近似于白噪声的数据序列,其结构如图2所示,它主要由一个移位寄存器构成的M序列发生器151和按位异或电路组成。取M序列发生器151循环移位生成的低8位与送入的8位用户数据按位异或,异或结果送入数据成帧模块153,拼装成32位用户数据帧继续传送。需要提及的是数据成帧模块153不仅限于拼装成32位,也可以按要求设计成其他位数,如48位、64位等。正是由于加乱器对原始用户数据的加乱作用,使得数据中出现连续个1或连续个0的概率大为减少,这一点是充分发挥本发明作用的一个重要前提条件。
拼装为帧的用户数据16接着被送入游长受限码(Runlength LimitedCodes)RLL编码器17进行编码。本发明即是针对RLL编码器提出了一种易于扩展的高效率编码方法,将在下文详细阐述。RLL编码器编码后输出的码字18经串并转换模块19转成串行数据,然后送入预编码器20作1/(1+D2)变换以抑制误差传播,变换后的数据再通过写均衡与预补偿模块21对写头电流做补偿和均衡,最后通过驱动放大器22驱动磁头23上的写头向磁盘盘片24写入数据。
读回数据时,磁头23上的读头扫描盘片24,找到需要的数据后利用巨磁阻效应(GMR)或隧道巨磁阻效应(TGMR)等原理,将变化的磁场信息耦合到读头并转换为电流波形,再经前置放大器25送入读通道的模拟前端电路进行处理。模拟前端的输入阻抗匹配网络26提供对不同频率不同阻抗的输入信号的匹配,如伺服信号、数据信号等。可变增益放大器27实现自动增益控制,经过放大后的信号还要由幅度校正模块28对信号中由于读头内的电子自旋效应引起的幅值偏差进行校正。模拟连续时间滤波器29用来消除信号中的高频噪声,通常它由高阶(如6阶以上)的巴特沃斯滤波器实现。经整形后的模拟信号被送入模数转换器30转换成数字信号,以便后续过程的数字化处理。模拟连续时间滤波器、VGA、采样设备、和自适应滤波器将共同把信号均衡为部分响应特性的波形,如均衡成PR4、EPR4、E2PR4、ME2PR4等形状的波形,均衡器一般由基于最小均方算法的多抽头有限冲激响应滤波器实现,如10~20抽头的FIR自适应滤波器等。自适应滤波器31输出的结果一路送入时钟恢复环路32,以提取自同步时钟信息。为了保证自同步时钟不失步,就必须要求信号翻转满足一定限制条件,而RLL编码恰好能解决这一问题。自适应滤波器31输出的结果另一路送入维特比译码器进行码字的初步检测与判决,判决结果由后处理器继续进行比较和检查,如果找到匹配的错误事件,则对码字进行校正然后输出最终的判决结果。后编码是预编码的反过程,它将判决结果做1+D2变换,输出码字36。随后码字36被送入RLL解码器37进行解码,本发明提到的高码率编码/解码方法就可以用在解码器37中,后文将有详细讨论。RLL解码器37的输出经自同步解乱器39解乱和检纠错码解码器40解码,输出最终的原始用户数据41。同样的,检纠错码解码方法也完全与传统方法相同,它们也不是本发明要关注的主要内容。
图1中提到的读写通道结构可由多个具有不同编解码功能的芯片组合实现,而更普遍的情况是整个读写通道由一个大规模集成的单芯片实现,并且每个芯片内部还常常包含多个完全相同的可以选择的读写通道。
上述这些例子中所用到的编码方法存在的一个共同问题是它们都是针对特定的码率(低于32/33)设计的,在设计过程中需要用到复杂的卡诺图简化与合并技巧,如果需要设计更高码率的编码器,这些方法就不容易扩展,只能整体重新设计,而且硬件实现也相当复杂。
发明内容
本发明的目的在于提供一种高码率游长受限码的编码方法,该方法能满足扩展性要求,可以通过简单的扩展用于设计更高码率的编码,并且便于用硬件实现。
本发明提供的一种高码率游长受限码的编码方法,其步骤为:
(1)取位数为2m位的数据帧作为输入码字;
(2)将输入码字划分为2m-x个输入子块n1,n2,......n(2m-x),每个子块位数为2x位,其中,5≤m≤8,2≤x≤6,使2x位的长度等于计算机的半字或字的长度;
(3)对各输入子块是否满足受限条件逐一测试,并将标志寄存器的对应标志位置位;输入子块是否满足受限条件定义为:如果输入子块内的所有位不全为0,则认为该输入子块满足受限条件;如果输入子块内的所有位全部为0,则认为该输入子块与受限条件冲突;如果输入子块存在冲突,将标志位寄存器的相应位置1;
(4)检测一帧中的输入子块是否已经全部测试完毕,如果是,进入步骤(5),否则转到步骤(3);
(5)创建一个空的长度为2m的输出码字;将该输出码字划分为2m-k个输出子块q1,q2,......q(2m-k);
(6)按照下式计算标志寄存器的带权累加和Flag,然后判断Flag是否等于0,若等于0,进入步骤(7),否则,进入步骤(8);
(7)将输入子块按序号依次赋值给对应序号的输出子块;将额外标志位插入至在输出码字的第2m-1与2m-1+1位中间,并将该额外标志位置1;然后进入步骤(9);
(8)按照下述步骤进行编号、排队和赋值:
(8.1)通过带权累加和Flag的值定位冲突位和冲突子块的编号,冲突子块的总数赋值给中间变量R;冲突子块的编号赋值给Wj;
(8.2)按照下述规则将输出子块q1,q2,......q(2m-k)中的R个子块作为标志子块Tj,j=0、1、......、R,并将标志子块进行排队:
排队规则:
(A1)将额外标志位左边紧邻的输出子块n(2m-x-1+1)作为第一个标志子块T0,设标志子块所对应的输出子块的序号为uj,j=0,1,...,R-1,uj+1以二进制表示;令初始值Index=u0=2m-x-1+1,P=R;z=0;
(A2)令P=P-1,z=z+1,Index=Index+(-1)z*z,z=0,1,...,R-2,所得到的Index的值就是下一个标志子块Tj+1所对应的输出子块的序号uj+1;循环执行此步骤直至P=0;由q(u0)、q(u1)、......、q(uR-1)组成的队列就是标志子块队列即T0、T1、...、TR-1;
(8.3)将Wj的值赋给标志子块Tj即q(uj)的前2x-1位,标志子块Tj内的最低位作为子块标志位;
(8.4)判断是否为特殊状态:R=2和T1=n(4);如果是特殊状态则进入步骤(8.5),否则直接进入步骤(8.6);
(8.5)对T1赋值后的内容作加10(二进制)的处理,然后再进入步骤(8.6);
(8.6)无冲突输入子块序号依次按顺序将内容赋值给空余输出子块中;
(8.7)将额外标志位插入至在输出码字的第2m-1与第2m-1+1位中间,并将该额外标志位清零;
(9)将插入有额外标志位的输出码字输出到输出缓冲器中;
(10)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
上述一种高码率游长受限码的解码方法,其步骤包括:
(1)取位数为2m+1位的数据帧作为输出码字;取输出码字的第2m-1与第2m-1+1之间的位作为额外标志位;
(2)创建一个空的长为2m的译码数据;
(3)将译码码字划分为2m-x个输入子块y1,y2,......y(2m-x);
(4)将剔除额外标志位后的输出码字划分为2m-x个输入子块p1,p2,......p(2m-x),每个子块位数为2x位,其中,5≤m≤8,2≤x≤6,使2x位的长度等于计算机的半字或字的长度;
(5)创建一个序号队列C(0)~C(2m-x);C(0)=2m-x+1,其他的序号值为按照前述排队规则建立的序号值;再创建一个空的缓存队列B;令中间变量i=0;
(6)检查额外标志位,若为1,则进入步骤(7),否则进入步骤(8);
(7)将输出子块按序号依次赋值给对应序号的译码子块,然后进入步骤(14);
(8)令B(i)=P(C(i))[3:1];
(9)判断p(C(i))[0]的值是否等于1,若等于1,则进入步骤(10),否则进入步骤(11);
(10)根据冲突子块队列中的元素C(i)的值找到冲突的序号,然后将与冲突序号相同的译码子块填充0,无冲突子块按序号大小赋值给剩余译码子块;然后进入步骤(14);
(11)令i=i+1;
(12)判断i是否等于2m-x-1;若否则进入步骤(8);若是则进入步骤(13);
(13)判断p1[0]的值是否为1,若是则所有译码子块全部填充0,然后进入步骤(14);否则按出错处理;
(14)由全部译码子块拼接成一个完整的译码数据输出;
(15)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
本发明对于输入为N位的数据字,输出码字为N+1位,能容易的设计出高码率的RLL编码,而且本发明方法还可以简单的加以扩展用于设计更高码率的RLL编码。具体而言,本发明具有以下技术效果:
(1)编码效率与理论极值接近。由香农定理可以推导出RLL(m,n,d,k)编码的容量,即R=m/n所能取到的极大值为:
当d=0时,有C(0,k)≈1-2-k/4ln2。当k=6时,码率的极大值为99.42%,而依据本发明设计的32/33(0,6)编码的码率为96.97%,与极大值接近。与其他编码设计方法相比,本发明提出的方法易于实现,并能推广至更高码率的编码,如能设计出128/129(0,14)的RLL编码,其码率R=99.2%,与极大值99.99%更接近。
(2)本发明的编码方法和编码规则具有良好的扩展性,可以容易快捷的编出码率更高的编码器。在掌握本发明的规则之后,设计更高码率的编码器既简单又快捷。
(3)能结合子块交叉插入的技巧更灵活的设计其他码率的编码方法和解码方法。子块交叉插入的编码技巧指的是将源数据序列分成两个部分,其中一部分可以利用已知的编码器进行编码,另一个部分则再次进行子块分割,并将分割后的子块交叉插入到前一部分已编码的码字之间,通过这种子块交叉插入的编码技巧可以快速构造出码率更高的n/(n+1)RLL编码器。
附图说明
图1为磁存储读写通道结构示意图;
图2为数据加乱器的结构示意图;
图3为n/(n+1)码率的编码流程示意图;
图4为标志子块的排队规则算法;
图5为n/(n+1)码率的编码器子块排队顺序示意图;
图6为32/33(0,6)RLL解码流程;
图7为32/33(0,6)RLL编码器子块分解及测试的结构示意图;
图8为32/33(0,6)RLL解码器子块分解及测试结构示意图;
图9为32/33(0,6)RLL编码流程图;
图10为48/49(0,8)编码方法示意图;
图11为64/65(0,10)编码方法示意图;
图12为64/65(0,10)RLL解码方法示意图;
图13为32位数据中冲突子块的个数与出现的概率;
图14为32/33(0,6)RLL编码规则映射表;
图15为128/129(0,14)RLL编码映射规则表。
具体实施方式
下面结合附图和实例对本发明作进一步详细的说明。
本发明能把输入的n位用户数据字编码为n+1位码字,相应的解码方法也做了阐述。具体的编码方法可以参照图3,为了不失一般性,假设输入的用户数据有2m位,且2m=n。则编码流程按照以下步骤进行:
(1)输入的数据首先保存到输入缓冲器中,每次从输入缓冲器中取一帧长为2m位的数据帧作为输入码字;
(2)数据分割:对输入码字进行子块分割,把这2m位数据划分为个2m-x个子块,每个子块位数为2x位。将每个子块标号,由低位到高位分别为n1,n2,......n(2m-x),x可取2、4等值,使2x位的长度等于计算机的半字或字的长度,但不宣太大,以免超出游长受限的控制范围。
(3)子块模式测试:对各子块是否满足受限条件逐一测试并置标志位。为了能标识可能出现冲突的全部子块,标志位寄存器设为2m-x位长。各子块依次按顺序进行测试,如果发现有子块冲突,就把标志位寄存器的相应位置1,如只有第一个子块n1冲突,则标志位寄存器等于00....001,如果有第一个和第三个子块n1和n3冲突,则标志位寄存器等于00....0101。
(4)检测一帧中的输入子块是否已经全部测试完毕,如果是,进入步骤(5),否则转到步骤(3);
(5)首先创建一个空的输出码字,该码字的长度为2m,然后把该输出码字也按照相同的子块大小进行分割和编号为2m-x个输出子块q1,q2,......q(2m-x),可以看出输出码字的子块数目与输入码字的子块数目是相等的;
(6)求标志寄存器的带权累加和。带权累加方法能判断标志位寄存器是否等于0,并判断标志寄存器中出现的1的位置。标志寄存器的带权累加和等于0表示所有码字都不冲突,不等于0则表示至少有一组子块冲突。除了采用带权累加的判断方法以外,还可采用对标志位寄存器的各个位进行累加的方法以定位具体是哪一位为1。带权值累加的计算式为:
其中Sj表示标志寄存器第j位的值,如果所有码字都无冲突,则Flag=0;
根据标志寄存器带权累加和的值对子块开始执行码字映射。首先判断Flag是否等于0,若等于1,则进入步骤(8),若等于0则表示所有输入子块都不冲突,进入步骤(7),执行无冲突映射规则算法;
(7)将输入子块按序号依次赋值给对应序号的输出子块;待赋值完毕,最后在输出码字的第2m-1与第2m-1+1位中间插入一个额外标志位,并将该额外标志位置1,输出码字和额外标志位共同组合得到一个n+1位的输出码字;然后进入步骤(9)。
对于32位用户输入数据{n8,n7,n6,n5,n4,n3,n2,n1},若无冲突则经过变换后的33位码字为:{n8,n7,n6,n5,1,n4,n3,n2,n1}。
(8)按照下述步骤进行编号、排队和赋值:
(8.1)若标志位寄存器的累加和Flag等于1,则表示有冲突子块存在,执行有冲突映射规则算法,参见图3。首先通过带权累加和Flag的值定位冲突位和冲突子块的序号以及冲突子块的总数,例如若Flag=1,表示n1输入子块冲突,若Flag=3,表示n1和n2两个输入子块冲突;
(8.2)冲突子块的总数赋值给中间变量R;冲突子块的序号按从大到小赋值给变量Wj,j=0,1,...,R-1,且最小序号WR-1以全0表示;
(8.3)按照下述排队规则将输出子块q1,q2,...,q(2m-x)中的R个子块作为标志子块Tj进行排队:
排队规则可参见图4:
(A)将额外标志位左边紧邻的输出子块n(2m-x-1+1)作为第一个标志子块T0,设标志子块所对应的输出子块的序号为uj,j=0,1,...,R-1,uj+1以二进制表示;令初始值Index=u0=2m-x-1+1,P=R;z=0;
(B)令P=P-1,z=z+1,Index=Index+(-1)z*z,z=0,1,...,R-2,所得到的Index的值就是下一个标志子块Tj+1所对应的输出子块的序号uj+1;循环执行此步骤直至P=0;由q(u0)、q(u1)、......、q(uR-1)组成的队列就是标志子块队列即T0、T1、...、TR-1;
各子块排队的次序可参见图5,按照箭头顺序子块序号依次为n(2m-k-1+1),n(2m-k-1),n(2m-k-1+2),n(2m-k-1-1),...,n(2m-k),n(1);
(8.4)将Wj的值赋给标志子块Tj(即q(uj))的前2x-1位,标志子块Tj内的最低位作为子块标志位,该位不能对其赋值,它用来指示是否已到标志子块队列的最后一个子块,若为1,表示本标志子块为最后一个标志子块,若为0,则表示后面还有标志子块;然后判断条件R=2,T1=2m-x-1是否成立,如是,则进入步骤(8.5),否则进入步骤(8.6);
(8.5)需要注意的是,当R=2,T1=2m-x-1时在特殊情况下会超出受限参数k,因此这时要统一对第二个标志子块的赋值后的内容作加10(二进制)的特殊处理。例如当有n1、n2两个输入子块冲突时,T1应赋值的是n1的序号:000,T1赋值后的内容为0001,作加10处理后,T1内容变为0011。
(8.6)未冲突的输入子块有各种策略填入空余的输出子块中,但最简单的策略是根据无冲突输入子块序号从小到大(或逆序)将内容赋值给从小到大排列的空余输出子块中。
(8.7)输出子块全部赋值后,在输出码字的第2m-1与第2m-1+1位中间插入一个额外标志位,并将该额外标志位清0。输出码字和额外标志位共同组合得到一个n+1位的输出码字。
(9)将插入有额外标志位的输出码字输出到输出缓冲器中;
(10)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
按照以上编码流程,如对于32位用户输入数据,若只有第3个子块n3冲突,则经过变换后的码字为:{n8,n7,n6,‘0...0101’,0,n5,n4,n2,n1}。若有1、3子块n1、n3冲突则经过变换后的码字为:
{n8,n7,n6,‘00...0100’,0,‘0...0011’,n5,n4,n2}。
由以上编码流程可以看出,映射规则和指示子块排队规则共同确保了d、k参数能满足设计要求。由于编码后的子块中没有限制1的个数,因此允许出现连续的多个1,即d=0;经过映射后,输出的码字中,任一个子块不会为全0,至少包含一个1,两个1之间最多0的个数为2×2x-2=2x+1-2,即满足d=0,k=2x+1-2的RLL编码器设计参数。
由上述编码流程很容易推导出解码流程,参见图6,其步骤包括:
(1)取位数为2m+1位的数据帧作为输出码字;
(2)创建一个空的长为2m的译码数据;
(3)将译码码字划分为2m-x个输入子块y1,y2,......y(2m-x);
(4)将输出码字划分为2m-x个输入子块p1,p2,......p(2m-x),每个子块位数为2x位,其中,5≤m≤8,2≤x≤6,使2x位的长度等于计算机的半字或字的长度;把输出码字的第2m-1+1位作为额外标志位;
(5)创建一个序号队列C(0)~C(2m-x);C(0)=2m-x+1,其他的序号值为按照前述排队规则建立的序号值;再创建一个空的缓存队列B;令中间变量i=0;
(6)检查最中间的额外标志位,若为1,则进入步骤(7),否则进入步骤(8);
(7)将输出子块按序号依次赋值给对应序号的译码子块,然后进入步骤(14);
(8)令B(i)=P(C(i))[3:1];
(9)判断p(C(i))[0]的值是否等于1,若等于1,则进入步骤(10),否则进入步骤(11);
(10)根据冲突子块队列中的元素C(i)的值找到冲突的序号,然后将与冲突序号相同的译码子块填充0,无冲突子块按序号大小赋值给剩余译码子块;然后进入步骤(14);其间当冲突数为2时,对第二个冲突子块的值要作减10(二进制)处理;
(11)令i=i+1;
(12)判断i是否等于2m-x-1;若否则进入步骤(8);若是则进入步骤(13);
(13)判断p1[0]的值是否为1,若是则所有译码子块全部填充0,然后进入步骤(14);否则按出错处理;
(14)由全部译码子块拼接成一个完整的译码数据输出;
(15)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
实例:
为了说明编码规则的应用方法,图7和图9列举了本发明的一个优选实例32/33(0,6)RLL编码器的编码过程。图7描述了一种可以实现的编码器结构。该编码器从输入缓冲器中读取待编码的码字,32位用户数据160首先传送到RLL编码器170的子块分割模块1710,将32位数据分割成子块1721~子块1728等8个子块,每个子块4比特,并分别命名为n1~n8。然后各子块逐一通过路径如1731经复用总线1740进入模式测试模块1750,测试各子块是否有冲突。如果测试发现有子块冲突,则把标志寄存器1760的相应位置1。一组输入的全部子块测试结束后,即开始码字映射过程1770。码字映射完成后,即输出码字180。
32/33(0,6)RLL编码器的具体编码流程如图9示。首先从输入缓冲器中取32位数据,然后按照每块4位分割为8个输入子块,接着检测输入子块中有无冲突子块,并依据检测结果设置标志寄存器的标志位,直至检测完所有输入子块。然后检测标志寄存器的值是否等于0,若等于0则将输入子块按序号依次赋值给对应序号的输出子块,并插入额外标志位,合并成一个输出码字输出。若标志寄存器的值不等于0,则利用带权累加的方法定位冲突子块的位置(序号)以及冲突总数,并对标志子块排队,然后将冲突子块的序号(二进制)赋值给标志子块的前3位,接着对是否处于特殊状态(R=2,T1=n(4))进行判断,若无特殊状态,则直接将无冲突子块按序号从小到大赋值到剩余输出子块中,若处于特殊状态则先对T1做加10(二进制)处理,再对剩余子块赋值。全部赋值完后,在第四个子块和第五个子块之间插入一个额外标志位并清零。码字映射完成之后输出码字,并返回输入缓冲器取下一个输入数据进行处理,若全部数据已处理完则停止。按照标志子块的排队规则,假如有8个子块都冲突,则标志子块的队列顺序由先到后依次为:G5-G4-G6-G3-G7-G2-G8-G1。
由32/33(0,6)RLL编码过程可以看出,经过映射后,输出的码字中,任一个子块不会为全0,至少包含一个1,任意两个子块组成的序列内,两个1之间最多0的个数为6,即满足d=0,k=6的RLL编码器设计参数。
图13描述了在输入用户数据序列中,当0和1按照等概率出现时,会出现不同数目冲突子块的概率。由于数据在送入RLL编码器之前已经经过了加乱器的加乱,其效果近似与使0和1按照等概率出现,因此可认为图13的概率结果在此环境下是成立的。由图13可见,不冲突的概率为59.7%和31.8%,两者之和超过90%。从概率结果来看,采用本发明提出的方法编码,只有不到10%的序列需要较多编码计算量(对超过两组冲突子块进行映射),而超过90%的序列仅需要很小的运算量(直接映射或对一个冲突子块进行映射)。
图14给出了32/33(0,6)RLL编码器的详细映射关系。图14按照冲突组数分类显示了各种情况下的码字映射规律。该规律与前述的码字映射规则是一一对应的。需要特别注意的是有两组子块冲突时,会出现特殊情况,可能导致游长受限参数k不能满足设计条件。具体的说,若当n1,n5两个子块冲突时,按照原编码映射规则,两个指示子块G5G4分别等于′1000′,′0001′,如果把最中间的标志位0插入的话,将形成一个序列{1000,0,0001},可以看到序列的两个1中间出现了连续7个0,违背了k=6的限制条件。为了解决这个问题,编码映射规则必须专门针对两组子块冲突这种特殊情况做修改,即:当冲突子块数为2组时,对额外标志位右边的指示子块(第二个指示子块)在用二进制数指示冲突子块时,必须对赋值后的输出子块加10,即若冲突子块序号为100,则加10后输出子块值为1011。在译码时,如果有两组冲突,则必须对该指示子块的值减10,才能转换为指示的编号值。由于指示子块的排队规则的辅助,可以保证第二个指示子块加10和减10之后都不会超过其表示范围。
图8描述了一种可以实现的RLL(32,33,0,6)解码器结构。该解码器将33位码字360在子块分割模块371中做子块分割,最中间的一位提取出来作为额外标志位F,其余等分为4位长的子块p1~p8;接着测试模块373对额外标志位F进行测试,定位模块374根据测试结果定位冲突子块,反映射模块376根据解码流程执行反映射,最后输出译码数据380。
对应上述解码过程的流程为:首先取一帧2m+1位输出数据,再创建一个空的长度为32位的译码数据,再将译码数据分割成4位长的译码子块,接着将33位输出数据的最中间的位提取出来作为额外标志位。分割完成后,创建一个空的缓存队列和序号队列,接着测试最中间的额外标志位F,若F=1,则表示无冲突,则执行无冲突反映射规则算法,直接将输出子块赋值给相同序号的译码子块。
若F=0,则表示有冲突,此时的解码流程描述如下:先检测p5[0]是否等于1,若等于1表示只有一组子块冲突,然后定位冲突子块的位置:即取出p5[3:1]的值,该值即等于冲突子块的编号。例如p5[3:1]=001,表示码字的第二个子块冲突。32位输出数据子块位置为p5[3:1]所指示的那个译码子块全部填充0,确定了冲突子块为第二个子块后,则其他的输出子块按照序号大小从小到大对应为第一个子块、第三个~第八个子块,分别映射到译码子块相同序号的位置上。例如p5[3:1]=4,则32位输出数据的第四个子块全部填充0。然后将p1p2p3p4p6p7p8映射到译码子块的n1n2n3n5n6n7n8子块上。
依次类推,解码过程依次判断:
p5[0]-p4[3]-p6[0]-p3[0]-p7[0]-p2[0]-p8[0]-p1[0]的各位值,可以看出标志位的排列顺序是与前述排队规则一致的。检测到额外标志位为0,则根据标志子块的排队顺序依次查找输出子块的最低位,这些输出子块实际上充当的是标志子块,若输出子块的最低位为0,则将序号与标志子块内容值相等的解码子块赋全0,并继续检查下一个标志子块的最低位,直到找到最低位为1的子块。记录下标志子块的总数与序号值,则剩余输出子块的序号与数目根据从小到大的次序可容易求出,再将剩余输出子块按求出的序号赋值给解码子块的剩余子块即可实现一个码字的解码。其间当标志子块总数为2,对第二个标志子块的数据要作减10(二进制)处理。需要注意的是,当有2组子块冲突时,根据修改的编码规则,p4[2:0]中的值必须减10才等于所指示的冲突子块编号。
如果结合子块交叉插入的编码技巧可以更快捷的设计出码率更高的编码方法。图10和图11分别用48/49(0,8)RLL编码器和64/65(0,10)RLL编码器这两个实例为例,说明子块交叉插入的编码技巧是如何运用的。
图10说明了如何基于32/33(0,6)RLL编码器构造48/49(0,8)RLL编码器的步骤。48位输入数据500首先被分成2个部分,其中511~518共8个子块组成第一部分,每个子块4比特,另一个部分分成521~528共8个子块,每个子块2比特。511~518共8个子块组成一个32位数据序列送入32/33(0,6)RLL编码器编码,该编码器可以是本发明提出的编码器,也可以是用其他实现方法设计的编码器。521~528子块按图11所示间隔经路径532的插入32/33(0,6)RLL编码器输出的8个子块和中间位之间,组成49位输出码字540。由图12可以看出,由于32/33(0,6)RLL编码器能保证在任意的4比特子块中至少有一个1,因此当2比特子块插入之后,任意的两个4比特子块两个1之间最大0的个数不超过8,即可以构成一个48/49(0,8)RLL编码器。
图11说明了如何基于32/33(0,6)RLL编码器构造64/65(0,10)RLL编码器的步骤。64位输入数据600首先被分成2个部分,其中611~618共8个子块组成第一部分,每个子块4比特,另一个部分分成621~628共8个子块,每个子块也是4比特。611~618共8个子块组成一个32位数据序列送入32/33(0,6)RLL编码器编码,该编码器可以是前述本发明提出的编码器,也可以是用其他实现方法设计的编码器。621~628子块按图12所示经路径632间隔的插入32/33(0,6)RLL编码器输出的8个子块和中间位之间,组成65位输出码字640。由图12可以看出,由于32/33(0,6)RLL编码器能保证在任意的4比特子块中至少有一个1,因此当4比特子块插入之后,任意的两个4比特子块两个1之间最大0的个数不超过10,即可以构成一个64/65(0,10)RLL编码器。
图12以64/65(0,10)RLL解码器为例描述了按照上述子块交叉插入技巧如何构造解码器。65位码字输入数据700首先被提取出最中间的标志位,然后其余64位被分解成4位的子块,按图13所示,一部分子块和额外标志位被送入32/33(0,6)解码器,解出32位部分原始数据填充到64位输出数据750的高32位,另一部分子块直接拼接成32位数据填充到64位输出数据750的低32位,共同解出64位用户数据。
图15以128/129(0,14)RLL编码器为例,说明了如何通过扩展编码规则,构造更高码率的映射规则。设128位用户数据被分割成8位宽度的子块,共16个子块,命名为n1~n16,而把映射后的子块按位置命名为G1~G16。利用上述的编码规则,可以很容易的构造出图15那样的映射规则表。各指示子块按照上述的排队规则可以定出先后出现的次序是G9-G8-G10-G7-G11-......G1,各种检测与映射过程可以完全按照上述编码规则构造出来。唯一不同的是,在128/129(0,14)RLL编码映射过程中,不会出现类似32/33(0,6)RLL编码器中的特殊情况,因为整个需要映射的子块最多只有16个,因此第一个指示子块的最大值只可能是00011110,不可能为1000000,这样“第一个指示子块,中间指示位,第二个指示子块”三者结合的序列就不可能出现′10000000 0 00000001′这种情况,而这种情况下,k=15,超过设计参数限制。运用修改的编码规则(对有2组子块冲突的情况加1处理)完全可以应付128/129(0,14)的编码设计,而为了简便起见,不使用修改的编码规则也能更方便的完成设计过程。综上所述,经过映射后,输出的码字中任一个8位子块不会为全0,至少包含一个1,任意两个子块组成的序列内,两个1之间最多0的个数为14,即满足d=0,k=14的RLL编码器设计参数。可以看出本发明提供的编码规则,使得128/129(0,14)RLL编码器的设计过程与32/33(0,6)RLL编码器的设计过程差别很小。
本发明提出的编码方法其错误传播的特性依赖于指示标志位出错的概率。当Viterbi译码器33和后处理器34的输出出现一个错误位时,错误信息会继续向后传递并进入后编码器35,由于后编码器35执行1+D2变换,因此1个错误事件会被派生出2个错误位。当错误事件进入RLL解码器37时,还会引起译码器37译码出更多的位错误。这种错误范围在传播中不断放大延伸的现象就是错误传播。本发明提出的编码方法和编码规则具有一定的限制错误传播的能力。确切的讲,本发明提出的编码方法其错误传播的特性依赖于指示标志位出错的概率。当子块无冲突时,且额外标志位译码正确时,每一个子块内部的错误至多只能影响子块自身或跨两个子块的边界,而不会更进一步的扩散。如果有冲突子块,而各指示标志位译码正确,则错误将被限制在子块自身内部。而如果有冲突子块,且额外标志位译码出错,则最糟糕的情况可能是整个码字的所有子块都可能译码错误,需要重传。
本发明提出的编/解码方法和各种规则、流程,可以用如Verilog或VHDL等硬件描述语言描述其算法,如果将编写好的代码导入计算机综合工具软件,如synosys工具、quartus工具等,则可以转化为等效的硬件电路。附录A列出了用verilog描述的本发明的优选实例32/33(0,6)RLL编码器的一个实现,通过分析与综合,该实例可用532个门实现。
虽然本发明已经参照优选实施例而具体说明而示出,本领域的技术人员应当理解可以在不脱离所附的权利要求书中所限定的本发明的精神和范围的情况下在形式和细节上进行各种改变。
Claims (2)
1、一种高码率游长受限码的编码方法,其步骤包括:
(1)取位数为2m位的数据帧作为输入码字;
(2)将输入码字划分为2m-x个输入子块n1,n2,……n(2m-x),每个子块位数为2x位,其中,5≤m≤8,2≤x≤6,使2x位的长度等于计算机的半字或字的长度;
(3)对各输入子块是否满足受限条件逐一测试,并将标志寄存器的对应标志位置位;输入子块是否满足受限条件定义为:如果输入子块内的所有位不全为0,则认为该输入子块满足受限条件;如果输入子块内的所有位全部为0,则认为该输入子块与受限条件冲突;如果输入子块存在冲突,将标志位寄存器的相应位置1;
(4)检测一帧中的输入子块是否已经全部测试完毕,如果是,进入步骤(5),否则转到步骤(3);
(5)创建一个空的长度为2m的输出码字;将该输出码字划分为2m-k个输出子块q1,q2,……q(2m-k);
(6)按照下式计算标志寄存器的带权累加和Flag,然后判断Flag是否等于0,若等于0,进入步骤(7),否则,进入步骤(8);
(7)将输入子块按序号依次赋值给对应序号的输出子块;将额外标志位插入至在输出码字的第2m-1与第2m-1+1位中间,并将该额外标志位置1;然后进入步骤(9);
(8)按照下述步骤进行编号、排队和赋值:
(8.1)通过带权累加和Flag的值定位冲突位和冲突子块的编号,冲突子块的总数赋值给中间变量R;冲突子块的编号赋值给Wj;
(8.2)按照下述规则将输出子块q1,q2,……q(2m-k)中的R个子块作为标志子块Tj,j=0、1、......、R,并将标志子块进行排队:
排队规则:
(A1)将额外标志位左边紧邻的输出子块n(2m-x-1+1)作为第一个标志子块T0,设标志子块所对应的输出子块的序号为uj,j=0,1,...,R-1,uj+1以二进制表示;令初始值Index=u0=2m-x-1+1,P=R;z=0;
(A2)令P=P-1,z=z+1,Index=Index+(-1)z*z,z=0,1,...,R-2,所得到的Index的值就是下一个标志子块Tj+1所对应的输出子块的序号uj+1;循环执行此步骤直至P=0;由q(u0)、q(u1)、......、q(uR-1)组成的队列就是标志子块队列即T0、T1、...、TR-1;
(8.3)将Wj的值赋给标志子块Tj即q(uj)的前2x-1位,标志子块Tj内的最低位作为子块标志位;
(8.4)判断是否为特殊状态:R=2和T1=n(4);如果是特殊状态则进入步骤(8.5),否则直接进入步骤(8.6);
(8.5)对T1赋值后的内容作加二进制的10处理,然后再进入步骤(8.6);
(8.6)无冲突输入子块序号依次按顺序将内容赋值给空余输出子块中;
(8.7)将额外标志位插入至在输出码字的2m-1与2m-1-1位中间,并将该额外标志位清零;
(9)将插入有额外标志位的输出码字输出到输出缓冲器中;
(10)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
2、一种高码率游长受限码的解码方法,其步骤包括:
(1)取位数为2m+1位的数据帧作为输出码字;
(2)创建一个空的长为2m的译码数据;
(3)将译码码字划分为2m-x个输入子块y1,y2,……y(2m-x);
(4)将输出码字划分为2m-x个输入子块p1,p2,……p(2m-x),每个子块位数为2x位,其中,5≤m≤8,2≤x≤6,使2x位的长度等于计算机的半字或字的长度;把输出码字的2m-1+1位作为额外标志位;
(5)创建一个序号队列C(0)~C(2m-x);C(0)=2m-x+1,其他的序号值为按照前述排队规则建立的序号值;再创建一个空的缓存队列B;令中间变量i=0:
(6)检查最中间的额外标志位,若为1,则进入步骤(7),否则进入步骤(8);
(7)将输出子块按序号依次赋值给对应序号的译码子块,然后进入步骤(14);
(8)令B(i)=P(C(i))[3:1];
(9)判断p(C(i))[0]的值是否等于1,若等于1,则进入步骤(10),否则进入步骤(11);
(10)根据冲突子块队列中的元素C(i)的值找到冲突的序号,然后将与冲突序号相同的译码子块填充0,无冲突子块按序号大小赋值给剩余译码子块;然后进入步骤(14);其间当冲突数为2时,对第二个冲突子块的值要作减10(二进制)处理;
(11)令i=i+1;
(12)判断i是否等于2m-x-1;若否则进入步骤(8);若是则进入步骤(13);
(13)判断p1[0]的值是否为1,若是则所有译码子块全部填充0,然后进入步骤(14);否则按出错处理;
(14)由全部译码子块拼接成一个完整的译码数据输出;
(15)判断所有数据帧是否处理完毕,如果是,结束,否则进入步骤(1)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101246610A CN100547672C (zh) | 2006-09-30 | 2006-09-30 | 一种高码率游长受限码的编码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101246610A CN100547672C (zh) | 2006-09-30 | 2006-09-30 | 一种高码率游长受限码的编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1945725A true CN1945725A (zh) | 2007-04-11 |
CN100547672C CN100547672C (zh) | 2009-10-07 |
Family
ID=38045077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101246610A Expired - Fee Related CN100547672C (zh) | 2006-09-30 | 2006-09-30 | 一种高码率游长受限码的编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100547672C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129875A (zh) * | 2011-02-22 | 2011-07-20 | 武汉纺织大学 | 二维游程长度受限约束的块编解码装置及其使用方法 |
CN106530769A (zh) * | 2016-10-27 | 2017-03-22 | 晋城市通平交通科技有限公司 | 太阳能道路警示灯及电波对时信号解码方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI437828B (zh) * | 2011-02-11 | 2014-05-11 | Realtek Semiconductor Corp | 傳輸介面的阻抗與增益補償裝置與方法 |
-
2006
- 2006-09-30 CN CNB2006101246610A patent/CN100547672C/zh not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129875A (zh) * | 2011-02-22 | 2011-07-20 | 武汉纺织大学 | 二维游程长度受限约束的块编解码装置及其使用方法 |
CN102129875B (zh) * | 2011-02-22 | 2013-04-24 | 武汉纺织大学 | 二维游程长度受限约束的块编解码装置及其使用方法 |
CN106530769A (zh) * | 2016-10-27 | 2017-03-22 | 晋城市通平交通科技有限公司 | 太阳能道路警示灯及电波对时信号解码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100547672C (zh) | 2009-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1252714C (zh) | 信息记录和再现装置、评估方法以及信息记录和再现介质 | |
KR101114057B1 (ko) | Rll 인코딩 | |
EP0751522A2 (en) | A rate 16/17 (d=0, G=6/I=7) modulation code for a magnetic recording channel | |
CN1881477A (zh) | 编码数据的错误检测和校正 | |
CN1140363A (zh) | 纠错编码译码方法和利用这种方法的电路 | |
CN1808610A (zh) | 使用周期性变化的符号映射对数据施加调制约束的技术 | |
CN1314045C (zh) | 数据比特流转换方法及相应的编解码设备 | |
CN1832027A (zh) | 用于数据位反相的电路单元 | |
CN1145146A (zh) | 数据编码方法及数据译码方法 | |
CN1945725A (zh) | 一种高码率游长受限码的编码方法 | |
CN1112770C (zh) | 维特比译码方法及适用于该方法的电路 | |
CN102270481A (zh) | 基于极限距离度量的位置检测同步标记的方法与装置 | |
TW501098B (en) | Method and apparatus for correcting C1/PI word errors using error locations detected by EFM/EFM+ decoding | |
CN1515007A (zh) | 数据记录介质、数据记录方法及其装置 | |
CN1275255C (zh) | 在记录介质上形成数据的方法 | |
CN1494766A (zh) | 调制设备和方法以及dsv控制比特产生方法 | |
CN1107309C (zh) | 光信息重放方法和设备 | |
CN1145956C (zh) | 光盘装置以及数据读取方法 | |
CN101452722B (zh) | 错误检测码产生电路和使用该电路的编码电路及相关方法 | |
CN1627646A (zh) | 运行长度有限码的编码解码方法及相关装置 | |
CN1444221A (zh) | 盘驱动器读写通道中的Turbo编码和解码方法和设备 | |
CN1460329A (zh) | 用于转换以及解码数据比特流的方法和设备及信号和记录载体 | |
CN1530935A (zh) | 盘片录放装置 | |
TW200616344A (en) | Method and apparatus for decoding multiword information | |
CN1143305C (zh) | 记录装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091007 Termination date: 20200930 |