CN102223149A - 基于概率聚合的算术编码器 - Google Patents

基于概率聚合的算术编码器 Download PDF

Info

Publication number
CN102223149A
CN102223149A CN 201010146578 CN201010146578A CN102223149A CN 102223149 A CN102223149 A CN 102223149A CN 201010146578 CN201010146578 CN 201010146578 CN 201010146578 A CN201010146578 A CN 201010146578A CN 102223149 A CN102223149 A CN 102223149A
Authority
CN
China
Prior art keywords
logprob
probability
logarithm
interval
value
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.)
Pending
Application number
CN 201010146578
Other languages
English (en)
Inventor
朱洪波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN 201010146578 priority Critical patent/CN102223149A/zh
Publication of CN102223149A publication Critical patent/CN102223149A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明公开了一种适于并行解码的单字节或多字节输入输出的二值算术编码器。在本算法中,每个输入符号的MPS和LPS根据其概率分别分配一个对数概率索引,并在算术编码中用对数概率索引来表示区间大小。本算法通过查表来实现对数概率索引和区间大小之间的映射,并利用移位操作减少了静态表大小。本算法通过对数概率索引的加法实现了区间细分。

Description

基于概率聚合的算术编码器
技术领域
本发明属于数据压缩领域,如数字视频的编码和压缩。具体涉及一种使用对数概率的二值算术编码器。
背景技术
算术编码是一种高效的熵编码方法,能有效压缩信源冗余度,尤其是对于高概率符号或与之对应的低概率符号,它有更高的效率。其基本原理是,根据待编码符号的概率,将当前区间划分成互不重叠的几个子区间,每个区间对应一个符号,且子区间的长度恰好就是符号概率和原区间的乘积。编码一个符号就是选择它对应的那个区间,然后根据下一个符号的概率分布,划分这个子区间,编码下一个符号。最后选择一个最短的字符串,它能唯一表达最后的那个子区间。算术解码就是算术编码的逆过程,根据读入的字符串,确定它属于那个区间,然后解出相应的码字。在具体的实现中,由于无法保证无限精度的计算,所以算术编码必须定期放大子区间并输出高位不再变化的比特。在所有算术编码器中,一种很重要的算术编码器是二值算术编码器,在这种算术编码器中,符号只有两种,低概率符号叫LPS,高概率符号叫MPS。
在实际使用中,算术编码往往和自适应概率估计结合使用。在当前最先进的国际视频编码标准H.264所使用的二值算术编码器M-coder中,符号的概率被量化为64个状态,分别表示LPS的概率为
Figure GSA00000089666200011
其中i为概率索引,其取值为0-63。每个符号和一个概率状态索引(state)连接,索引值随编码符号的值自动跳转。当一个LPS被编码以后,则概率状态索引跳转到一个更小的值(对应LPS的概率增加),反之如果一个MPS被编码,那么概率状态索引跳转到一个更大的值(对应LPS概率较小)。
M-coder及其变种的一个缺点在于并行性差。每当一个符号编码结束,其区间大小会发生变化,而且往往伴随着归一化操作,然后下一个符号的解码需要用到这个区间大小,这种依赖性给并行多符号解码带来了很大的障碍。本发明使用对数概率索引来表示区间大小,大大降低了这种依赖性,使多符号并行算术解码变得更加容易。
发明内容
如图1所示,在本发明中,原始区间Range总是取一个固定值,如果需要一个字节为单位输入输出的算术编码器,那么原始区间Range取为0x10000,如果需要一个字为单位输入输出的算术编码器,那么原始区间Range取为0x1000000。在本文中以iobits表示输入输出单位的位数,如8,16等。本发明中所有的概率索引均为对数概率索引,在图1中,logbase(p1)、logbase(pLPS)和logbase(pMPS)均为对数概率索引。当前区间大小为Rprev,它所对应的概率是p1,即Rprev=Range×p1=I(logbase(p1)),其中I(log Pr ob)为取区间大小的运算,base为对数基,在本发明中,它一般取为0.51/t,其中t通常为64、128或256。因为I(x+n×t)=I(x)>>n,所以我们只需要做有t个元素的表Tabtrvl(y),y∈[0,t),表中每一项表示I(x)的一个某一精度的近似,我们就能求出所有对数概率所对应的区间大小I(x)=Tabtrvl(x&(t-1))>>(x>>msb(t)),其中msb(t)表示t-1的位数。
使用对数概率索引另一个好处是只要通过加法既能计算新区间的对数概率索引。如图1所示,当一个LPS发生时,新区间RL所对应的概率是p1×pLPS,而其对数概率则是原对数概率logbase(p1)加上LPS符号对应的对数概率logbase(pLPS)。对于MPS符号,其计算类似。在本发明中,每一个输入的二值编码符号都有一个对应的概率状态,且概率状态数目固定,如在H.264中,共有64个概率状态符号。对于每一个概率状态,我们给它的MPS符号和LPS符号分别分配一个对数概率索引MPSlogProb和LPSlogProb,且对数概率索引要满足如下所列条件:
1.对数概率索引所对应的概率和概率状态所对应的概率尽可能接近
2.I(x)≥I(x+MPSlogProb)+I(x+LPSlogProb),x∈[0,maxlogprob),其中I(maxlogprob)=0x100。
对于MPSlogProb和LPSlogProb,一种可能的计算方法就是首先根据当前LPS和MPS的概率pLPS和pMPS求出logbase(pLPS)和logbase(pMPS),然后编程在范围[logbase(pLPS)-rng,logbase(pLPS)+rng]和[logbase(pMPS)-rng,logbase(pMPS)+rng]中穷尽搜索所有情况,找到与符号熵最接近且符合上面两个条件的对数概率索引组合,其中mg是一个足够大的整数。
在实际实现中,对数概率索引必须使用整数来表示,为了保证精度,通常对其乘以一个常数如32后取整。这时I(x)=Tabtrvl((x>>5)&(t-1))>>(x>>msb(t)+5))。选取t为128,Range为0x10000,M-coder所用64个概率状态对应的MPSlogProb和LPSlogProb如图2所示,其中lgprobaddvl[state][0]为LPSlogProb,lgprobaddvl[state][1]为MPSlogProb。Tabtrvl如图3所示。
下面讲编码端操作。编码端数据结构如图4所示。编码基本过程如图5所示。在本算术编码器中,当前区间大小R用对数概率索引logProb表示,即区间大小R=I(logProb)。Low表示区间的下届的位置。在算术编码器启动时,初始化所有变量为0,然后迭代下面的过程进行编码(其中LPSlogprob和MPSlogprob是当前编码符号的LPS和MPS概率所对应的对数概率索引):
●如果当前输入符号是MPS,那么使用下式更新logProb:logProb=logProb+MPSlogprob;即使当前概率索引logProb对应于MPS符号的区间大小,low对应于MPS区间的下届。
●如果当前输入符号是LPS,那么使用下式更新low和logProb使之对应于LPS的区间:low=low+I(logProb+MPSlogprob),logProb=logProb+LPSlogprob。
●如果logProb大于等于maxlog prob,当前状态如图6所示。接下来扩张区间以便于下一步编码。首先计算logProb=logProb-maxlogprob;即当前区间扩张了iobits位。这时虚拟区间也扩张到了Range。接着计算code=(code<<iobits)+low;low=0;bytesofcode=byteofcode+iobits/8。向码流中输出code高位不再变化的字节。因为I(logProb-maxlogprob)≥I(logProb)<<iobits,为了保证区间的嵌套性,必须适当增大logProb的值使得I(logProb-maxlogprob)≤I(logProb)<<iobits。这个过程的复杂度和Tabtrvl设计、Range的大小相关,如果设计得当,复杂度可以很低。
当所有符号编码完毕,算出code+low和code+low+I(logProb),在这个区间中取最短的一个数字输入码流。
解码器是编码器的逆。解码器包括value和logProb两个数据。Value表示当前区间中的当前值,logProb表示当前区间的对数概率索引。解码器初始化时读入iobits+8位表示value,logProb初始化为0。然后迭代运用下述过程解码符号,如图7所示:
●首先对value和I(logProb+MPSlogprob)作比较,如果大于等于,那么输出LPS,并作如下更新:value=value-I(logProb+MPSlogprob);logProb=logProb+LPSlogprob。
●否则输出MPS,并作如下更新:logProb=logProb+MPSlogprob
●如果logProb大于等于maxlogprob,那么logProb=logProb-maxlogprob,value=(value<<iobits)+readbitstreams(iobits),并以和编码器中相同的方式增大logProb以满足嵌套区间要求。
图8和图9是快速解码算法示意图。图8是一个3符号解码示意图。通过更多的细分区间和更多的比较器能构造更多符号的并行解码图。图中lP即logProb,Mi和Li分别表示第i个符号概率状态的MPSlogprob和LPSlogprob,根据3符号对整个区间的所有可能划分点和当前value的比较结果,找出小于等于value的最大值,此划分点就是最终区间的下届。由此可以一次解码3个符号。
图9是另一个快速解码算法示意图。在第i个比较器中,假设前面i-1个全部都是MPS,然后求出当前概率索引对应的划分点值,并和value比较。在这种配置中,只要比较器数目够多,那么一次能解码到一个LPS符号。
附图说明
图1为区间大小及其对应的概率和对数概率索引之间关系的说明图。
图2为t为128,Range为0x10000,M-coder所用64个概率状态对应的MPSlogProb和LPSlogProb。
图3是t为128,Range为0x10000时Tabtrvl表。
图4为算术编码器数据结构。
图5为算术编码过程示意图。
图6为编码和解码过程中的区间放大示意图。
图7算术解码过程示意图。
图8为3符号并行解码图
图9为一次解码一个LPS的算法示意图
实施方式
下面用代码来说明编解码器。但本发明并不仅限于软件方式,如定制集成电路和FPGA,或者其他可配置处理器等都可以是本发明的实现载体。另外本发明也不限于字节基的输入输出,采用其他配置完全可以实现基于字或双字输入输出的算术编解码器。设Range=0x10000,则iobits=8,即字节输入输出。选取t为128。以下是编码器的c示例代码,其中value,bytesOutstanding,backbyte,currpos都是用来表示code的。
typedef struct
{
unsigned int low,logProb,endhigh;
unsigned int value,bytesOutstanding,backbyte,currpos;
}EncodingEnvironment,*EncodingEnvironmentPtr;
typedef struct
{
char state;//符号概率状态
unsigned char MPS;           //符号MPS的值
}BiContextType;
#define dvsn_interval(x)(subinterval_division[127&((x)>>5)]>>((x)>>12))
//初始化编码器
void arienco_start_encoding(EncodingEnvironmentPtr eep)
{
eep->low=0;
eep->logProb=0;
eep->bytesOutstanding=eep->value=eep->backbyte=0;
eep->currpos=16;
}
//增加logProb使满足区间嵌套
void renorm_logprob(EncodingEnvironmentPtr parth)
{
int logprb=parth->logProb>>5;
int sel=logprb&127,shft=logprb>>7,rsft=7-shft;
unsigned int val22=subinterval_division[sel]>>shft,valact=val22&0xff00,val33;
int diff2;
val22&=0xff;
diff2=((val22+(1<<rsft))>>(1+rsft))+1;
logprb+=diff2;
val33=subinterval_division[logprb&127]>>(logprb>>7);
if(val33>valact)
diff2+=((diff2+shft+1)>>2);
else if(sel<30)
diff2-=(diff2>>3);
parth->logProb+=(diff2<<5);
}
//重新放大区间时输出码流
void encode_bitstream(EncodingEnvironmentPtr parth)
{
parth->value+=parth->low;
if(parth->value&0x1000000)
{
输出字节(parth->backbyte+1);
parth->bytesOutstanding--;
if(parth->bytesOutstanding)
{
do
{
输出字节(0);
parth->bytesOutstanding--;
}
while(parth->bytesOutstanding);
}
}
parth->value<<=8;
parth->currpos+=8;
if(parth->currpos==32)
{
if((parth->value&0xff0000)!=0xff0000)
{
parth->currpos-=8;
if(parth->bytesOutstanding)
{
输出字节(parth->backbyte);
parth->bytesOutstanding--;
if(parth->bytesOutstanding)
{
do
{
输出字节(0xff);
parth->bytesOutstanding--;
}
while(parth->bytesOutstanding);
}
}
输出字节(parth->value>>24);
parth->value&=0xffffff;
}
else
{
parth->currpos-=8;
if(parth->bytesOutstanding)
{
parth->bytesOutstanding++;
parth->value&=0xffffff;
}
else
{
parth->bytesOutstanding=1;
parth->backbyte=parth->value>>24;
parth->value&=0xffffff;
}
}
}
}
//以概率状态bi_ct编码符号symbol
void biari_encode_symbol(EncodingEnvironmentPtr eep,int symbol,BiContextTypePtr bi_ct)
{
if(symbol==bi_ct->MPS)//MPS
{
Eep->logProb+=lgprobaddvl[bi_ct->state][1];
}
else         //LPS
{
eep->low+=dvsn_interval(eep->logProb+lgprobaddvl[bi_ct->state][1]);
eep->logProb+=lgprobaddvl[bi_ct->state][0];
}
if(eep->logProb>=0x8000)
{
eep->logProb-=0x8000;
encode_bitstream(eep);
eep->low=0;
renorm_logprob(eep);
}
}
//编码结束时调用这个函数来写入最终剩余的code
void encode_btrmend(EncodingEnvironmentPtr parth)
{
unsigned int interval=dvsn_interval(eep->logProb),prvlow=parth->low,
lowbound=prvlow+parth->value,upbound=lowbound+interval,iterd,valuelow=lowbound;
for(iterd=15;iterd>=1;iterd--)
{
if((lowbound&(1<<iterd))==0)
{
unsigned int valuetmp=lowbound|(1<<iterd),upvltmp;
valuetmp&=~((1<<iterd)-1);
upvltmp=valuetmp;
if(iterd>=8)
upvltmp+=0xff;
if(upvl tmp<upbound)
{
valuelow=valuetmp;
break;
}
}
}
parth->value=valuelow;
if(parth->value&0x1000000)
{/
输出字节(parth->backbyte+1);
parth->bytesOutstanding--;
if(parth->bytesOutstanding)
{
do
{
输出字节(0);
parth->bytesOutstanding--;
}
while(parth->bytesOutstanding);
}
}
parth->value<<=8;
if(parth->bytesOutstanding)
{
输出字节(parth->backbyte);
parth->bytesOutstanding--;
if(parth->bytesOutstanding)
{
do
{
输出字节(0xff);
parth->bytesOutstanding--;
}
while(parth->bytesOutstanding);
}
}
if(parth->currpos==24)
输出字节(parth->value>>24);}
parth->value<<=8;
输出字节(parth->value>>24);
parth->value<<=8;
if(iterd<8)
{
输出字节(parth->value>>24);
}
}
下面是解码器的c示例代码。
typedef struct
{
unsigned int logProb;
unsigned int value;
}DecodingEnvironment;
typedef DecodingEnvironment*DecodingEnvironmentPtr;
//初始化解码器
void arideco_start_decoding(DecodingEnvironmentPtr dep)
{
dep->logProb=0;
dep->value=(读入第一个字节<<8)+读入第二个字节;
}
//解码符号
unsigned int biari_decode_symbol(DecodingEnvironmentPtr dep,BiContextTypePtr bi_ct)
{
unsigned int state=bi_ct->state;
int MPSlogprob=lgprobaddvl[bi_ct->state][1];
int logProb=dep->logProb;
unsigned int thrshld=dvsn_interval(MPSlogprob+logProb);
int symbol=bi_ct->MPS;
if(thrshld<=dep->value)//LPS
{
int LPSlogprob=lgprobaddvl[bi_ct->state][0];
dep->value-=thrshld;
dep->logProb+=LPSlogprob;
symbol^=1;
}
else //MPS
dep->logProb+=MPSlogprob;
if(dep->logProb>=0x8000)
{
dep->logProb-=0x8000;
dep->value=(dep->value<<8)+读入下一个字节;
renorm_logprob(dep);
}
return symbol;
}

Claims (8)

1.一种通过查表实现的二值算术编码器,其迭代运用下述步骤来编码符号:
(1)如果输入符号是MPS,更新logProb=logProb+MPSlogprob;
(2)如果输入符号是LPS,更新
low=low+I(logProb+MPSlogprob),logProb=logProb+LPSlogprob;
(3)如果logProb大于等于maxlogprob,那么logProb=logProb-maxlogprob,扩大区间并输出高位不再变化的码字,然后设low=0,其中I(maxlogprob)=0x100。
2.根据权利要求1所述算术编码方法,其中logProb为对数概率索引,它是当前区间所对应概率的对数,low是当前区间的下届,当扩大区间时输出码流和它相加构成新的输出码流,low然后重设为0。
3.根据权利要求1所述算术编码方法,其特征在于,每个输入符号有一个对应的概率状态,其MPS和LPS分别分配一个对数概率索引MPSlogprob和LPSlogprob,它们接近于MPS和LPS概率的对数。
4.如权利2和3所述,对数的基一般选取为
Figure FSA00000089666100011
其中t通常为64、128或256。
5.根据权利要求1所述算术编码方法,I(x)=Tabtrvl((x>>c)&(t-1))>>((x>>c)>>msb(t)),它通过查表和移位映射对数概率索引到区间大小,其中Tabtrvl(z),z∈[0,t-1]是一个静态常量表,它是对数概率索引到区间大小的映射。c是一个精度常数。
6.一种通过查表实现的二值算术解码器,其迭代运用下述步骤来解码符号:
(1)如果value<I(logProb+MPSlogprob),更新logProb=logProb+MPSlogprob,输出MPS;
(2)否则输出LPS,更新
value=value-I(logProb+MPSlogprob);logProb=logProb+LPSlogprob;
(3)如果logProb大于等于maxlogprob,那么logProb=logProb-maxlogprob,扩大区间并读入码流填充value低位,其中I(maxlogprob)=0x100。
7.如权利6所述,其中logProb为对数概率索引,它是当前区间所对应概率的对数,MPSlogprob和LPSlogprob是当前输入符号的MPS和LPS概率的对数的一个近似,对数的基一般选取为其中t通常为64、128或256。
8.根据权利要求6所述算术编码方法,I(x)=Tabtrvl((x>>c)&(t-1))>>((x>>c)>>msb(t)),它通过查表和移位映射对数概率索引到区间大小,其中Tabtrvl(z),z∈[0,t-1]是一个静态常量表,它是对数概率索引到区间大小的映射。c是一个精度常数。
CN 201010146578 2010-04-14 2010-04-14 基于概率聚合的算术编码器 Pending CN102223149A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010146578 CN102223149A (zh) 2010-04-14 2010-04-14 基于概率聚合的算术编码器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010146578 CN102223149A (zh) 2010-04-14 2010-04-14 基于概率聚合的算术编码器

Publications (1)

Publication Number Publication Date
CN102223149A true CN102223149A (zh) 2011-10-19

Family

ID=44779590

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010146578 Pending CN102223149A (zh) 2010-04-14 2010-04-14 基于概率聚合的算术编码器

Country Status (1)

Country Link
CN (1) CN102223149A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103096062A (zh) * 2011-11-01 2013-05-08 珠海扬智电子科技有限公司 算术解码方法
CN103428502A (zh) * 2013-09-08 2013-12-04 上海高清数字科技产业有限公司 一种解码方法及解码系统
CN104918049A (zh) * 2015-06-03 2015-09-16 复旦大学 适用于hevc标准的二进制算术编码模块
WO2018127167A1 (en) * 2017-01-06 2018-07-12 Mediatek Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding
CN108989825A (zh) * 2018-07-18 2018-12-11 北京奇艺世纪科技有限公司 一种算术编码方法、装置及电子设备
CN111371460A (zh) * 2020-04-26 2020-07-03 宁夏隆基宁光仪表股份有限公司 一种适用于智能电表的高低频匹配数据压缩方法
US11006117B2 (en) 2017-07-14 2021-05-11 Mediatek Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103096062A (zh) * 2011-11-01 2013-05-08 珠海扬智电子科技有限公司 算术解码方法
CN103428502A (zh) * 2013-09-08 2013-12-04 上海高清数字科技产业有限公司 一种解码方法及解码系统
CN103428502B (zh) * 2013-09-08 2017-02-01 上海高清数字科技产业有限公司 一种解码方法及解码系统
CN104918049A (zh) * 2015-06-03 2015-09-16 复旦大学 适用于hevc标准的二进制算术编码模块
WO2018127167A1 (en) * 2017-01-06 2018-07-12 Mediatek Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding
US11265561B2 (en) 2017-01-06 2022-03-01 Mediatek Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding
US11006117B2 (en) 2017-07-14 2021-05-11 Mediatek Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding
US11425386B2 (en) 2017-07-14 2022-08-23 Hfi Innovation Inc. Method and apparatus for range derivation in context adaptive binary arithmetic coding
CN108989825A (zh) * 2018-07-18 2018-12-11 北京奇艺世纪科技有限公司 一种算术编码方法、装置及电子设备
CN108989825B (zh) * 2018-07-18 2021-05-07 北京奇艺世纪科技有限公司 一种算术编码方法、装置及电子设备
CN111371460A (zh) * 2020-04-26 2020-07-03 宁夏隆基宁光仪表股份有限公司 一种适用于智能电表的高低频匹配数据压缩方法
CN111371460B (zh) * 2020-04-26 2023-05-02 宁夏隆基宁光仪表股份有限公司 一种适用于智能电表的高低频匹配数据压缩方法

Similar Documents

Publication Publication Date Title
CN102223149A (zh) 基于概率聚合的算术编码器
US9577668B2 (en) Systems and apparatuses for performing CABAC parallel encoding and decoding
US7265691B2 (en) Modeling for enumerative encoding
WO2019153700A1 (zh) 编解码方法、装置及编解码设备
CN102498673B (zh) 编码浮点数据的方法、解码浮点数据的方法以及对应的编码器和解码器
CN101147325B (zh) 用于霍夫曼代码的快速小型解码器和解码方法
US7671767B2 (en) LIFO radix coder for electrical computers and digital data processing systems
US20110181448A1 (en) Lossless compression
US20150227686A1 (en) Lossless compression of dna sequences
US20120130965A1 (en) Data compression method
EP2193454A2 (en) Two-pass hash extraction of text strings
CN103248367B (zh) 码流数据的编码、解码方法和装置
CN101017574A (zh) 一种适于jpeg码流的哈夫曼解码方法
WO2016124070A1 (zh) 一种数据处理的方法和设备
CN100423582C (zh) 一种用于将待编码数据进行二进制化编码的方法和装置
US20090195420A1 (en) Fifo radix coder for electrical computers and digital data processing systems
CN101370138B (zh) 一种h.264标准cavlc残差系数的解码方法
US10127913B1 (en) Method of encoding of data stream, method of decoding of data stream, and devices for implementation of said methods
WO2009009602A1 (en) Data coding/decoding for electrical computers and digital data processing systems
WO2019080670A1 (zh) 基因测序数据压缩解压方法、系统及计算机可读介质
JP5570409B2 (ja) データ圧縮装置及びデータ圧縮方法及びデータ圧縮プログラム
CN103974066A (zh) 视频编码方法和设备
CN101878651A (zh) 用于图像和视频压缩的系数族的可变长度编码
CN1766830B (zh) 基于处理器字长的数的二进制表示
CN105791832B (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
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20111019