在维特比译码器中储存路径量度的方法

文档序号:55179阅读:393来源:国知局
专利名称:在维特比译码器中储存路径量度的方法
技术领域
本发明涉及一项在维特比译码器中储存路径量度(Pfadmetriken)的新方法,该方法特别适合于移动无线电接收机中的维特比译码对通道编码的移动无线电信号执行译码。
背景技术
在大多数的知名数字移动无线电接收机中都使用了维特比译码器。维特比译码器是一种所谓的“最大似真性译码器”(Maximun-LiklihoodDecodierer),一般用于对通道编码的、特别是对卷积编码的(faltungscodiert)移动无线电信号执行译码。在通道编码情况下,发射机常需在传输的符号上附加冗余的信息来提高传输的安全性。然而,这种附加的冗余信息会在传输移动无线电信号时迭加噪音。因此,接收机应具有的功能在于凭借接收的顺序要从全部可能的发射顺序中挑选出好些与具有最大可能的概率的实际发射顺序相符的发射顺序来。而这个任务就要由维特比译码器来实现。
在通道编码情况下使用的编码规范可用适当的格栅图(Trellis-Diagramm)来说明。通过计算所谓的“路径量度”,维特比译码器就能计算出格栅图中那些具有最大或最小量度的路径来,而这些路径的量度是与相应译码器的结构相关的。借助于格栅图的路径人们乃能求出译码的顺序并予以表达。
下面将简要地细说维特比译码的基本原理在图4中典型地示出一个相对于时间点t......t+3的四种不同状态的格栅图,这些状态例如可相当于“00”、“10”、“01”和“11”的二进制数位状态。在该格栅图中的每一个符号顺序都指定了相应的路径。每一条路径包含着一系列的在时间上相互跟随的两个状态之间的分支。每一个分支标志着在时间上互相跟随的两个状态之间的一种状态转移(Zustandiibergang),对比举例来说从某一状态出发的上面分支用一二进制“0”来作为接收符号,从同一状态出发的下面分支则用二进制“1”来作为接收符号。每一个状态转移、称之为“分支量度”(BM)λt,相当于一个发射符号。
分支量度λt的定义如下λt=|yt′-rt2|]]>在上式中,γt相当于在时刻t的接收符号,而yt′则是作为其在时刻t的函数的发射信号。
除此之外,通过格栅图,每一条路径在时间点或时间步长t都有一个路径量度γt。
图4所示的格栅图是一个特别涉及具有称为蝶形结构的格栅图,它意味着该格栅图的某一时间步长t+1的两个状态必有其先前时间步长t的两个状态与之相对应,而且它们的分支可导向时间步长t+1的前述状态,而且从不同状态出发的分支的两个分支量度可能是一致的。例如在图4所示的各个状态具有γt(1)、γt(3)、γt+1(2)和γt+1(3)的路径量度,就构成了这样的蝶形结构,从具有路径量度γt(1)的状态到具有路径量度γt+1(2)的状态的分支的分支量度就相当于从具有路径量度γt(3)的状态到具有路径量度γt+1(3)的状态的分支的分支量度λt(3);而另一方面,从具有路径量度γt(1)的状态到具有路径量度γt+1(3)的状态的分支的分支量度也与从具有路径量度γt(3)的状态到具有路径量度γt+1(2)的状态的分支的分支量度λt(1)相当。因此,通常用γt(S)来标志状态S在时间步长t的路径量度,而用λt(S)来标志与信号S相当的状态转移在时间点t的分支量度。
现在,维特比译码器必须借助于一个与该格栅图相应的算法来求出具有最佳路径量度的路径。一般而言,根据定义的最佳路径是具有最小路径量度的路径。
导至某一定状态的路径的每一个路径量度都是由一个先前时间的状态的路径量度和从该先前状态导至该一定状态的分支的分支量度所组成。因此,人们并不一定需要求出格栅图上的所有可能的路径和路径量度,而只需对格栅图上每一种状态和每一个时间步长直至该时间点求出其中具有最佳路径量度的路径来。这条路径可称之为“存活路径”(Survivor Path),只有这种存活路径和它的路径量度才必须储存起来,所有其它导致这个状态的路径都可以忽略不计。但要注意的是根据这个原则,在每一个时间步长上有多少个不同的状态,就会相应地有相同数目的这种“存活路径”。
上面的叙述清楚表明路径量度γt+1(S)的计算取决于通过一个分支与状态S相关联的先前时间步长t的各项路径量度。因此这些路径量度的计算可以用一种递推的算法来实现,这个算法可在维特比译码器中由一个具有称为加法比较选择(ACS)单元执行。
图5示出一种维特比译码器的典型结构。在这个结构中,ACS单元2带有一个存储器(或称寄存器)3,除了ACS单元2还设有一个分支度量单元(BMU)1和一个存活记忆单元(Survivor Memory Unit即SMU)4。分支度量单元BMU的功能是计算各项分支量度λt(S),而这些分支量度就是一个接收符号与在格栅图中产生相应状态转移的那个符号之间的差别的一种量度。由分支度量单元BMU1计算出来的分支量度将输入到ACS单元2来求出最佳路径(即存活路径),与此同时存活记忆单元4会把这些存活路径储存起来,从而能接着借助那条具有最佳路径量度的存活路径进行译码。与这条具有最佳路径量度的存活路径相对应的符号顺序就最大地似真于实际发射的顺序。
ACS单元2包含多个处理器元件(Prozessorelemente),一般而言格栅图中的每一个状态都是由一个独立的处理器元件来计算的。每一单个的处理器元件的任务是要从两条互相竞争的路径(即存活路径)中选出一条具有最佳(即最小)路径量度的路径(即存活路径)来,这两条竞争路径都会在格栅图中导至一个状态。紧接着导至这个状态的“存活路径”及其路径量度的存储数值就可以更新了。
从图4所示的格栅图中可以看出时间点t+1上的每一个状态S都是通过一个上面分支和一个下面分支而与一个相应的先前的状态相联系的。因此在求取与这个状态S相关的“存活路径”时,必须把通过上面分支导至状态S的路径的路径量度与通过下面分支导致状态S的路径的路径量度相比较,也就是说,每一个处理器元件的任务在于为了求取具有路径量度γt+1(s)的“存活路径”,选出通过具有路径量度γt(u)的先前上面状态和具有分支量度λt(u)的上面分支而引导的路径,其路径量度相当于γt(u)+λt(u)之和;或者选出通过具有路径量度γt(l)的下面状态和具有分支量度λt(l)的下面分支而引导的路径,其路径量度相当于γt(l)+λt(l)。
因属于每一个为在时间步长t中的某一状态计算出来的结果γt(s)同时也是计算在时间上随后出现的状态的路径量度的基础,所以在图5中所示的ACS单元2的反馈必须通过存储器3,使计算出来的路径量度能在存储器3内储存。
存储器3的结构必须根据相应的格栅图的结构来设计和建造。在每一个符号周期期间必须要能将格栅图中的状态数相对应的路径量度数从存储器3中读出并再写入存储器3内去。对于格栅图中每一个蝶形而言,要能同时处理两个状态,使能从存储器3中读出两个初始路径量度,并能将由此计算出来的两个路径量度写入存储器3。
然而由此产生的问题是在路径量度未读出之前,不能将它们重写。
为了更清楚地说明这个问题,在图6中示出另一个具有8个状态的格栅图。这个格栅图也具有已介绍的蝶形结构,这个典型的蝶形以虚线示出,它包含初始状态St的No.1和No.5与目的状态St+1的No.2和No.3。为了计算目标状态No.2和3的路径量度,必须首先读出初始状态No.1和No.5的路径量度。
这种在读出过程和写入过程之间形成的竞争态势使人们设计出一种在文献中又称之为“乒乓”(“Ping-Pong”)自动编码结构形式的存储器3,这种存储器被分成两个存储库,其中一个存储库仅用于读出过程,另一个仅用于写入过程。
借助于这种技术虽能可靠地避免了那些不良的竞争,然而存储器3的体积却必须增大一倍,因为它的两个存储库必须要能储存全部状态St和St+1的路径量度。
另一个与路径量度存储器相关的问题是在存储器上的路径量度的布局问题。也就是说要按不同的存储器地址安排好各个路径量度。根据现有技术来选择,这种布局的选择使路径量度的读出过程和写入过程使用不同的存储区域,从而使读出过程和写入过程之间的矛盾得到可靠的避免。

发明内容
本发明的任务在于提供一种在维特比译码器中储存路径量度的新型方法,这种方法要能在一个较小存储器的需求条件下实现,并能可靠地避免各种写入/读出矛盾。
本发明的上述任务已通过一种在维特比译码器储存路径量度的方法的各项特征而获得了解决。本专利还阐明了本发明的各项优点及各种优先采用的结构形式。
借助于本发明的内容,我们介绍一种在维特比译码器中的储存路径量度的方法,这种方法是建立在时间变化的格栅图的原理基础上的,而且特别适于具有蝶形结构和相应的加法比较选择单元(ACS-Einheiten)的格栅图的情况。
根据本发明的目的,提供一种在维特比译码器储存路径量度的方法,路径量度是借助一个与维特比译码器相适应的格栅图来确定,在该格栅图中某一特定时间步长的两个目标状态与其先前时间步长的两个初始状态构成一个蝶形结构,通过这个蝶形结构,该特定时间步长的两个目标状态通过当时存在的一个状态转移分支而与先前时间步长的两个初始状态连接起来;对每一个时间步长,每一个目标状态的路径量度(γt+1)都取决于与该目标状态构成一个蝶形结构的先前时间步长的那个初始状态的路径量度(γt)的函数;为此需从存储器(3)中读出相应的两个初始状态的路径量度(γt),从而作为路径量度(γt)的函数确定时间步长的目标状态的路径量度(γt+1),将该目标状态的路径量度(γt+1)储存在存储器(3)中;其特征在于每个时间步长的格栅图的蝶形结构都至少成对地组合起来,对于时间步长的每一双蝶形结构对而言,格栅图中的两个蝶形结构的目标状态同时成为随后时间步长的两个蝶形结构的初始状态,而且在确定一对蝶形结构对的两个蝶形结构的目标状态的路径量度后,将该蝶形结构对的两个蝶形结构的目标状态的路径量度以一个共同的存储字的形式储存在存储器(3)中,所述的该蝶形结构对的目标状态同时也成为随后时间步长的两个蝶形结构的初始状态。
本发明的方法需要一个存储器并可使路径量度的读出和储存在相同的存储器区域内实现,也就是说根据两个初始路径量度计算出来的相应于目标状态的路径量度可以在读出先前两个初始路径量度的那个存储器地址上储存起来。存储器的容量不取决于格栅图选定的平行度而且必须只相当于由各种格栅状态的数目和每一个存储字的二进制数位的数目构成的乘积。特别是当需要把多个处理器元件的路径量度综合起来储存,也只需要使用一个存储器就够了。
写入/读出矛盾可得到可靠的避免。
本发明为维特比译码所使用的芯片的面积需求和功率消耗都极小,因为为储存两个路径量度只需要一个存储器地址。本发明既适合于正向编码(Feedforward Codes),例如SDSL,也适合于反向编码(FeedbackCodes),而且可使用可编程维特比译码器,对于每一个蝶形图形都可以将相应的路径量度很容易编制出程序。



在下面将利用各附图借助于一个优选实施例对本发明的内容做比较详细的说明图1示出一个包含8个状态的格栅图,用来说明本发明对一个SDSL-维特比译码器所设定的原理。
图2示出一个示意图,用来说明一个函数,借助于这个函数依靠一个计数器读出可以求出一个状态,这个状态根据本发明的一个优选实施例对于把各个路径量度布置在ASC单元的存储器的各不同存储地址上是起决定性作用的。
图3示出一个示意图,用来说明根据本发明的另一种方法。
图4示出一个具有蝶形结构和4种状态的典型的格栅图。
图5示出一种维特比译码器的一般结构。
图6示出一个具有蝶形结构的格栅图,用来说明与现有技术相关的问题。
具体实施方式
在比较详细说明本发明的各项细节之前,还应在下面简要地介绍一下几个专门名词,因为在以后说明本发明的各项内容时还需要使用这些专门名词。
假设一个具有总储存容量为Mt储存字的格栅编码器,可获得一个具有NTS=2Mt的格栅码,其中的NTS是在相应的格栅图中绘出的各种不同的状态的数目。对于一个编码率为1/2的正向编码而言,其脉冲应答词的长度为MT+1。在格栅图中的各个状态转移如前介绍的那样是取决于某些编码的二进制数位B的,而且时间点t+1的状态是St+1是按下列关系式从先前状态St产生的S(t+1)=(2·St)mod(NTS)+B设若格栅图具有在图6中所示的典型蝶形结构(前面已经介绍过),那么每一个蝶形都会有两个初始状态和两个目标状态与之相关,而且根据格栅图的几何形状可以区分为一个用标记(u)(为上面)标识的上面状态和一个用标记(1)(为下面)标识的下面状态。在图6中用虚线示出的蝶形中,例如状态St(u)=1,St(1)=5,和状态St+1(u)=2,St+1(1)=3,其中St(u)和St(1)是初始状态,而St+1(u)和St+1(1)=1则是目标状态。
从图6中还可以看出一个蝶形的下面初始状态St(1)和目标状态St+1(u)及St+1(1)是取决于上面初始状态St(u)的,而且具有下列的关系O≤St(U)≤NTS2-1]]>St(l)=St(U)+NTS2]]>St+1(U)=(2·St(U))mod(NTS)+0]]>St+1(l)=(2·St(U))mod(NTS)+1=(2·St(l))mod(NTS)+1]]>在用NTS=8和St(U)=1]]>来评价上列公式时,对于图6用虚线所示蝶形图形而言,修正值St(l)=5,]]>St+1(u)=2,]]>St+1(l)=3]]>本发明是以这样一个“设想”作基础的即为目标状态计算出来的某个蝶形图形的各个路径量度都应当储存在其相应的各个初始路径量度被读出来的相同的储存地址上,才能避免在存储器3中不必要地重迭写入路径量度。这个措施可导致格栅图的结构随时间而改变,使由此产生的格栅图可以称之为随时间变化的格栅(TVT)。
在图6中示出的格栅结构的TVT示于图3。由图3可以看出虽然各个蝶形的状态转移是与图6中示出的状态转移相一致,但随着每一个时间步长或随着每一次迭代各个状态的顺序都会重新排列,使某个蝶形的每一个目标状态由一条水平分支与该蝶形的相应的初始状态相联系。在图3中,对各次迭代都有两个蝶形,它们分别包含初始状态No.2、No.6和No.3、No.7以及目标状态No.4、No.5和No.6和No.7,它们分别用短横线和点划线表示出来,于是特别借助于这些蝶形,就可以清楚理解格栅结构随时间重排的原理了。
在图3中示出的格栅图的每一行列相当于存储器3的一个储存地址,举例来说可在某一储存地址及其随后的储存地址中写入No.2、No.4、No.1和No.2等状态的路径量度(即图3中所示格栅图的第3行列)。可以证明经过MT次迭代后(对上述例子而言,MT=3次迭代),又可以获得原来的状态顺序。
上面介绍的TVT设计防止了在存储器3中不必要地重迭写入路径量度。然而还存在这样一个问题,那就是为了使用ACS单元2可以按蝶形结构原理来计算路径量度起见,还必须同时读出和写入两个路径量度,为此就必须将存储器相应地划分开来,然而,这对采用TVT设想来说是不可能实现的。
因此,这个TVT设计还必须为适应蝶形结构而另行开发设计,我们在下面将借助于图1和图2来说明这个可称之为蝶形导向的随时间变化的格栅(BFTVT)的设计方案。
与上面介绍的TVT设计主要相关连的问题在于用ACS单元2计算出来的某个蝶形的目标状态的路径量度不能同时代表另一个蝶形的初始路径量度。为了说明这事实起见,在下面将把某个蝶形的初始路径量度和目标的路径量度分别写作[St(u),St(1)]和[St+1(u),St+1(1)]的形式。对于图3所示格栅图的各个蝶形(迭代1)来说,据此就产生了下列的几个状态转移[0,4]→[0,1][1,5]→[2,3][2,6]→[4,5][3,7]→[6,7]可以看出举例而言,具有初始状态[0,4]的蝶形的目标状态[0,1]不同时代表迭代2的一个共同蝶形的初始状态。因此,若把每一个蝶形的各个初始路径量度和目标路径量度都以一个共同的储存字形式储存起来就是毫无意义的了。
然而,另一方面很清楚的是举例来说,分别具有初始状态[0,4]和[2,6]的两个蝶形的目标状态[0,1]和[4,5]可以同时利用来作为格栅图中随后的分别具有初始状态[0,4]和[1,5]的两个蝶形的初始状态。人们可证明全部2MT-1个蝶形都可以按此规则成对地组合起来,使某对蝶形的目标状态的路径量度同时被利用作为两个其它蝶形的初始路径量度,只要把为目标状态求出的路径量度做出适当的重新排列即可。
图1用来示明这一新的设计。存储器3的每一个储存字的字宽可根据现有技术成倍加大,因此,两个成对的蝶形的目标状态的路径量度至少可以每个储存字为两个路径量度的方式储存起来是可能的,特别值得指出的是存储器的容量不取决于所使用的处理器元件的数目,只是写入/读出过程的数目会改变。
在图1中每一个圆圈相当于一个蝶形的两个初始状态或它们的初始路径量度,以S(u)/S(1)形式表示。通过把各个蝶形成对组合就得出图1所示的上位的蝶形格栅结构,通过图1所示的格栅图可以确定几个成对组合的原始的蝶形有哪些目标状态的路径量度可以用做那些随后的蝶形的初始状态的路径量度。例如在图1中有一个用虚线标出的蝶形,它就是由具有初始状态分别为[0,4]和[2,6]以及目标的状态分别为[0,1]和[4,5]的两个原始蝶形组成的,把由此合成的两个目标状态成对重新排列为[0,4]和[1,5],从而使这对重新排列的目标状态对可以同时用作随后两个蝶形的初始状态(请参见图6所示的蝶形结构,由此图可见初始状态[0,4]和[1,5]原是与一个蝶形相对应的)。
另外一个例子以下是相似于图3所示由TVT结构形式的重新的上位的格栅结构。图1所示格栅图的每一个行列相当于存储器3的一个存储地址,因而举例说明从所示格栅的第2行列看,状态对[1,5],[2,6]和[1,5]的路径量度可以一个接一个地被储存在同一个存储地址上。
从图1的说明可以看出,设若由于各个“蝶形”的成对组合而使格栅图的容积与图3相比减至2M-1T个状态,那么迭代的数目与图3相比相应地也会减少1个,这是直至重新恢复原始状态顺序所需要的。其结果是,由于存储器3地址的再生,可以相应地把编制地址耗费降低。
前面已经指出一个蝶形的全部状态可以从这个蝶形的上面初始状态S(u)推导出来。因此图1所示的各成对路径量度的适合的储存地址就可以通过相对简单的方法求得这个方法需要使用一个计数器,其计数范围C可以在[0...NTS2-1]]]>之间调节。于是人们可以借助于一个函数fS(u)(C)求出各蝶形对的上面初始状态S(u),因为S(u)是与瞬时计数C相关的;然后接着借助于一个地址编制函数faddr(S(u),I),从已求出的上面状态S(u)和当时的实际迭代数I确定各个适当的储存地址。对于各路径量度需要由多个处理器元件来组合的情况而言,计数器的计数范围必须要给在[0...NTS2ld(NPE)-1]]]>之间调节,其中NPE代表处理器元件的数目,1d(x)则代表对数log2(x)。
函数fS(u)(C)是非线性的。可以证明这个函数可以一个简单的二进制数位图解来实现,如图2所示。图中的MSB代表最高价有效数位,LSB则代表最低价有效数位。
地址编制函数faddr(S(u),I)可以根据正向格栅编码器的性质用下列的关系式来描述ADDR=[(21·S(u))mod(NT-1)]+[21-MT+1·S(u))]此式中的ADDR代表取决于S(u),MT和I的某个路径量度对的储存地址的函数,这个路径量度对具有I∈[0...MT-1]。这个地址编制函数甚易实现,因为它相当于式中所示的第1项和第2项的(MT-1)次的数位相加,而不必考虑会发生某种可能的溢出。所列式中的所有乘法都可以用简单的数位位移运算来实现。
对于要把本发明的方法用在多个处理器元件的情况而言,地址编制函数faddr(S(u),I)可以用下列的关系式来描述 本发明的方法在前面已对使用各种正向编码器的情况,例如使用一个SDSL编码器,做了说明。然而,本发明的方法也可以应用于反向编码器的情况。反向编码器的维特比译码器的格栅结构与正向编码器的维特比译码器的虽然有很大的区别,但反向编码器也可以在格栅蝶形方面也可以这样成对地组合,使各个目标状态的相应路径量度同时代表在格栅图中两个随后的蝶形的初始路径量度。与正向编码器情况相反的只是在反向编码器的情况下,直至在特立期图中再次出现原始状态顺序所需要进行的迭代的次数不直接取决于MT的值。在反向编码器情况下也可以用类似于在正向编码器情况下所采取的实施方式来求得fS(u)(C)和faddr(s(u),I)两个函数的关系式,但在此处我们不再陈述其推导和演算。
权利要求
1.一种在维特比译码器储存路径量度的方法,路径量度是借助一个与维特比译码器相适应的格栅图来确定,在该格栅图中某一特定时间步长的两个目标状态与其先前时间步长的两个初始状态构成一个蝶形结构,通过这个蝶形结构,该特定时间步长的两个目标状态通过当时存在的一个状态转移分支而与先前时间步长的两个初始状态连接起来;对每一个时间步长,每一个目标状态的路径量度(γt+1)都取决于与该目标状态构成一个蝶形结构的先前时间步长的那个初始状态的路径量度(γt)的函数;为此需从存储器(3)中读出相应的两个初始状态的路径量度(γt),从而作为路径量度(γt)的函数确定时间步长的目标状态的路径量度(γt+1),将该目标状态的路径量度(γt+1)储存在存储器(3)中;其特征在于每个时间步长的格栅图的蝶形结构都至少成对地组合起来,对于时间步长的每一双蝶形结构对而言,格栅图中的两个蝶形结构的目标状态同时成为随后时间步长的两个蝶形结构的初始状态,而且在确定一对蝶形结构对的两个蝶形结构的目标状态的路径量度后,将该蝶形结构对的两个蝶形结构的目标状态的路径量度以一个共同的存储字的形式储存在存储器(3)中,所述的该蝶形结构对的目标状态同时也成为随后时间步长的两个蝶形结构的初始状态。
2.如权利要求
1所述的方法,其特征在于同属于一个蝶形结构的在某一时间步长上两个初始状态的路径量度以一个共同的存储字形式储存在存储器(3)中,在确定蝶形结构对的两个蝶形结构的目标状态的路径量度后,该蝶形结构对的两个目标状态同时也是随后时间步长的蝶形结构的初始状态,将两个目标状态的路径量度储存在存储器(3)中与初始状态的路径量度的地址相同的地址上,作为两个初始状态的路径量度,该两初始状态与两目标状态构成一个蝶形结构。
3.如权利要求
1或2所述的方法,其特征在于每一个目标状态的路径量度(γt+1)都作为相应的蝶形结构的两个初始状态的路径量度(γt)和与该蝶形结构的两个状态转移分支相对应的分支量度(λt)的函数来确定。
4.如权利要求
3所述的方法,其特征在于在每一个蝶形结构中,用于把第一个初始状态与第一个目标状态连接起来的状态转移分支和把第二个初始状态与第二个目标状态连接起来的状态转移分支的第一个分支量度具有相同的大小;用于把第一个初始状态与第二个目标状态连接起来的状态转移分支和把第二个初始状态与第一个目标状态连接起来的状态转移分支的第二个分支量度也具有相同的大小。
5.如权利要求
3所述的方法,其特征在于所述的方法用于对用正向编码编码的信号执行译码。
6.如权利要求
5所述的方法,其特征在于所述的方法用于对单线数字信号线编码的信号执行译码。
7.如权利要求
3所述的方法,其特征在于所述的方法用于对用反向编码编码的信号执行译码。
专利摘要
本发明涉及在维特比译码器中储存路径量度的方法。对于一个维特比译码器而言,将其相关的格栅图中的各个蝶形结构这样地成对组合起来使在格栅图中的两个蝶形结构的目标状态的路径量度同时构成了另两个蝶形结构的初始状态,在确定该蝶形结构对的两蝶形结构的目标状态的路径量度之后,该蝶形结构对的两目标状态的路径量度以一个共同的存储字的形式储存,该两目标状态同时形成另一蝶形结构的初始状态。
文档编号H03M13/41GKCN1165193SQ01109374
公开日2004年9月1日 申请日期2001年3月2日
发明者马里奥·特雷贝尔, 马里奥 特雷贝尔 申请人:印菲内奥技术股份有限公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1