收藏 分享(赏)

TD-SCDMA—信道译码概述.doc

上传人:hwpkd79526 文档编号:8099962 上传时间:2019-06-08 格式:DOC 页数:16 大小:479.50KB
下载 相关 举报
TD-SCDMA—信道译码概述.doc_第1页
第1页 / 共16页
TD-SCDMA—信道译码概述.doc_第2页
第2页 / 共16页
TD-SCDMA—信道译码概述.doc_第3页
第3页 / 共16页
TD-SCDMA—信道译码概述.doc_第4页
第4页 / 共16页
TD-SCDMA—信道译码概述.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、TD-SCDMA信道译码概述信道译码是信道编码的逆过程,作用是从编码后的序列恢复出原始的信息序列。主要过程包括: 物理信道解映射 第二次解交织 解比特加扰 传输信道解复用 解速率匹配 第一次解交织 无限帧解均衡 信道解码 编码块分割逆过程 CRC 校验 CCTrCH 的译码过程 经过解调后的数据首先需要进行物理信道解映射,把各个码道上的数据恢复到 CCTrCH 上,以 10ms 无线帧为单位。 然后对每个 CCTrCH 的 10ms 数据进行第二次解交织,解交织使用与发送端相同的算法。 解交织后的数据需要进行比特解扰,解扰是加扰的逆运算。 最后需要把 CCTrCH 上的数据进行 TrCH 解复

2、用,从而以10ms 无线帧为单位,把数据分到各个 TrCH 上去,解复用的顺序完全对应复用时的顺序。 TrCH 译码过程 经过 TrCH 解复用后数据被分到各个 TrCH 上进行计算,首先需要进行速率解匹配,使用与发送端相同的速率匹配算法,把 10ms 数据速率恢复到速率匹配以前的水平。 无线帧分割的逆过程就是把数据按照各个 TrCH 上的 TTI 大小进行合并。 之后进行第一次解交织,交织长度为 TTI 内的数据长度,算法与发送端相同。 无线帧解均衡需要把发送端加入的多余比特删除。 信道解码算法对应发送端的信道编码方式,从加入冗余的序列中解码得到原始的信息序列。 对信道解码后的序列进行 CR

3、C 校验得到 FER 判决结 解速率匹配 经过 TrCH 解复用,数据就被分配到各个 TrCH 上,对应发送端首先需要对经过速率匹配的数据进行恢复,恢复为原来的比特数。 计算参数完全对应于业务参数,与发送端完全一致。 对应于发送端的处理,解速率匹配的处理也分为三种: 对于没有进行速率匹配处理的数据块,接收端也不做处理; 对于速率匹配进行重复处理的数据块,接收端需要对相应位置进行删除; 对于速率匹配进行删除处理的数据块,接收端需要对相应位置进行补足,一般来讲,应该在相应位置填“0”; 解速率匹配速率匹配为重复方式的示例,其中下图一中为发送端进行重复的图样,下图二为接收端进行删除恢复的图样,以为标

4、记的即为被删除的比特位置: 速率匹配为打孔方式的示例,其中下图一中为发送端进行删除的图样,以为标记的即为被删除的比特位置,下图二为接收端进行恢复的图样:对应信道编码,信道译码的处理分为三种: 对于未编码的数据块,不做任何处理 对于采用卷积码编码的数据块,一般采用 VITERBI 解码算法; 对于 TURBO 码编码的数据块,译码算法主要有 MAP 算法和 SOVA算法,考虑到性能和实现的综合因素,一般采用 MAP 算法进行TURBO 译码;在 3G 中信道编码方式中应用了卷积码和 TURBO 码,TURBO 码虽然在1993 年才被提出,但以其接近香农限的优越性能而在 3G 系统中被广泛使用。

5、对于不同的业务需求,信道编码的方式也不同。一般卷积码被用于话音和低速数据业务中,而 TURBO 码则被用于高速数据业务。 卷积译码(一)卷积码译码通常采用最大似然算法,其基本思想是:把接收序列与所有可能的发送序列相比较,选择码距最小的序列作为发送序列。这类算法中,由维特比(Viterbi)提出的简化算法应用最多。 码距用以表示两个等长序列之间的差异,通常采用的是汉明距离,即两个长度相同的序列之间对应位取值不同的数目。例如,序列 0 1 1 0 与序列1 0 1 1 的汉明距离为 3。 维特比译码算法的流程是:不断计算每条路径(即可能的发送序列)相应的输出与输入之间的汉明距离和(即路径度量);在

6、经过一定时间段后,如 M 时间段后,根据路径度量值最小的原则,对每一个状态只选留一条路径(即幸存路径);再经过一段时间后,状态数量减少,选留路径也相应减少,到最后只剩下一条选留路径(即码输出)。 卷积码/Viterbi 译码卷积码在一个二进制分组码(n,k)当中,包含 k 个信息位,码组长度为 n,每个码组的(n-k)个校验位仅与本码组的 k 个信息位有关,而与其它码组无关。为了达到一定的纠错能力和编码效率( k/n),分组码的码组长度 n 通常都比较大。编译码时必须把整个信息码组存储起来,由此产生的延时随着 n 的增加而线性增加。 为了减少这个延迟,人们提出了各种解决方案,其中卷积码就是一种

7、较好的信道编码方式。这种编码方式同样是把 k 个信息比特编成 n 个比特,但 k 和 n 通常很小,特别适宜于以串行形式传输信息,减小了编码延时。 与分组码不同,卷积码中编码后的 n 个码元不仅与当前段的 k 个信息有关,而且也与前面(N-1)段的信息有关,编码过程中相互关联的码元为 nN 个。因此,这 N 时间内的码元数目 nN 通常被称为这种码的约束长度。卷积码的纠错能力随着 N 的增加而增大,在编码器复杂程度相同的情况下,卷段积码的性能优于分组码。另一点不同的是:分组码有严格的代数结构,但卷积码至今尚未找到如此严密的数学手段,把纠错性能与码的结构十分有规律地联系起来,目前大都采用计算机来

8、搜索好码。 下面通过一个例子来简要说明卷积码的编码工作原理。正如前面已经指出的那样,卷积码编码器在一段时间内输出的 n 位码,不仅与本段时间内的 k 位信息位有关,而且还与前面 m 段规定时间内的信息位有关,这里的 mN-1 通常用(n,k,m)表示卷积码(注意:有些文献中也用(n,k,N)来表示卷积码)。图 1 就是一个卷积码的编码器,该卷积码的 n = 2,k = 1,m = 2,因此,它的约束长度 nN = n(m+1) = 23 = 6。 图 1 (2,1,2)卷集码编码器 在图 1 中, 与 为移位寄存器,它们的起始状态均为零。 、 与 、 之间的关系如下: (1) 假如输入的信息为

9、 D = 11010,为了使信息 D 全部通过移位寄存器,还必须在信息位后面加 3 个零。表 1 列出了对信息 D 进行卷积编码时的状态。 表 1 信息 D 进行卷积编码时的状态 描述卷积码的方法有两类,也就是图解表示和解析表示。解析表示较为抽象难懂,而用图解表示法来描述卷积码简单明了。常用的图解描述法包括树状图、网格图和状态图等。基于篇幅原因这里就不详细介绍了。 卷积码的译码方法可分为代数译码和概率译码两大类。代数译码方法完全基于它的代数结构,也就是利用生成矩阵和监督矩阵来译码,在代数译码中最主要的方法就是大数逻辑译码。概率译码比较常用的有两种,一种叫序列译码,另一种叫维特比译码法。虽然代数

10、译码所要求的设备简单,运算量小,但其译码性能(误码)要比概率译码方法差许多。因此,目前在数字通信的前向纠错中广泛使用的是概率译码方法。 维特比译码法简介 viterbi 译码算法是一种卷积码的解码算法。缺点是随着约束长度的增加算法的复杂度增加很快。约束长度 N 为 7 时要比较的路径就有 64 条,为 8 时路径变为 128 条。 (2(N-1)。所以 viterbi 译码一般应用在约束长度小于 10 的场合中。 编码(举例约束长度为 7):编码器 7 个延迟器的状态(0,1)组成了整个编码器的 64 个状态。每个状态在编码器输入 0 或 1 时,会跳转到另一个之中。比如 110100 输入

11、1 时,变成 101001(其实就是移位寄存器)。并且输出也是随之而改变的。 解码的过程就是逆过程。算法规定 t 时刻收到的数据都要进行 64 次比较,就是64 个状态每条路有两条分支(因为输入 0 或 1),同时,跳传到不同的两个状态中去,将两条相应的输出和实际接收到的输出比较,量度值大的抛弃(也就是比较结果相差大的),留下来的就叫做幸存路径,将幸存路径加上上一时刻幸存路径的量度然后保存,这样 64 条幸存路径就增加了一步。在译码结束的时候,从 64 条幸存路径中选出一条量度最小的,反推出这条幸存路径(叫做回溯),得出相应的译码输出。 这样的算法在 TI 的 C54x 的 dsp 上使用 1

12、00M 的速率运行,都无法达到数传速度的要求,主要的时间消耗在每条路径的两次比较上,两次比较的时候一共需要从内存中取 3 个数(上一时刻幸存路径的量度,两个状态跳转相应的输出值),比较结束以后,还需要对内存写入 2 个数(幸存路径新的总量度,下一个跳转的状态),这样,每个时钟节拍需要比较的次数就是 64*2 次,每次存取数就要5 次。一个数据包是 256byte,知道解码一包所大概需要的时间。加上其他的开销,最后实验出来的结果是大概 0.06m,但是用 64k 速率传输的时候只要 0.03m即可传完。 Viterbi 译码 对于卷积码的解码方法中,Viterbi 译码算法是被应用的最广泛的译码

13、算法。是一种最大似然译码算法(MLD,Maximu LikelihoodDecoding)。它接收输人的信息序列后,寻找任何可能的路径值,而后找一条最佳路径值当作解码输出。为了描述 Viterbi 译码算法,常用网格图(Trellis Diagram,根 据时间的增加将网格图扩充所得到的图形,如图 1 所示)来表示演算过程。网格图中的节点,代表编码器中的各个状态, 而在其中的分支代表编码器的所有可能的状态转移情况。图 1 显示为(2,1,3)网格图。 图 1 (2,1,3)网 L=5 时的网格图 此图是 L5 时,该(2,1,3)码的状态转移时间关系图,总共有Lm1 个时间单位(节点),以 0

14、 至 Lm 标号,其中 m k1 为编码存储。若编码器从 SO(00)状态开始,并且结束于 SO 状态,则最先的 m2 个节点(0,1),相应于编码器 由 SO 状态出发往各个状态行进,而最后 m2 个节点(6,7),相应于编码器由各状态返回到 SO 状态。因而,在开始和最后 m 个时间单位,编码器不可能处于任意状态中,而只能处于某些特定状态(如SO,Sl)中之一,仅仅从第 m(2)至第 L(5 )节点,编码器可以处于任何状态之中(即 4 个状态 SO、S1、S2、S3 中之任一个)。编码器从全 0 的 SO 状态出发,最后叉 回到 SO 状态时所输出的码序列,称为结尾卷积码序列。因此,当送完

15、 L 段信息序列后,还必须向编码器再送入 m 段全 0 序列 ,以迫使编码器回到 SO 状态。 网格图中每一状态有两个输入和两个输出分支。在某一节点 i,离开每一状态的虚线分支(下面分支),表示输人编码 器中的信息子组 ml1;而实线分支(上面分支)表示此时刻输人至编码器的信息子组 mlo;每一分支上的2(nO)个数 字,表示第 i 时刻编码器输出的子组 01=(cl(1),cl(2),因此网格图中的每一条路径都对应于不同输入的信息序 列。由于所有可能输人的信息序列共有 2k1条不同的路径,相应于编码器输出的 2k1个码序列。 Viterbi 译码算法考虑的是如何去掉不可能成为最大似然选择对象

16、的格形图上的路径,即如果有两条路径到达同一个状 态,则具有最佳度量的路径被选中,称为幸存路径(survtvmgpath)。对所有状态都将进行这样的选路操作,译码器不 断在格形图上深人,通过去除可能性最小的路径实现判决。较早地抛弃不可能的路径从而降低了译码器上实现的复杂度 。Omura 在 1969 年证明了Viterbi 译码算法其实就是最大似然算法。也就是说,选择最优路径可以表述为选择具有最大似 然度量的码字,或者选择具有最小距离的码字。 Viterbi 译码算法中硬判决 Viterbi 译码和软判决 Viterbi 译码的性能差异。由于对模拟信号的处理比较复杂,因此在软 判决译码之前,一般

17、先要对接收序列进行量化。实际上,可以将硬判决译码看做软判决译码的特殊情况,即采用了 1 比特 量化。而软判决采用的是多比特量化。在理想的软判决情况下,信道接收值直接用于译码器。相应地,卷积码的 Viterbi 译码也有硬判决Viterbi 译码和软判决 Viterbi 译码两种译码方式。从仿真的结果来看,对于高斯信道来说,8 级量化比 2 级量 化的信噪比提高了大约 2dB,这说明了为了获得相同的比特差错性能,8 级软判决需要的 Ec/No 比硬判决低 2dB,模拟装置 比 2 级量化的性能提高 22dB;因此,8 级量化比无穷级量化的性能损失了仅0.2dB。由于这个原因,量化级超过 8 级只

18、能 获得较少的性能提高。因此,软判决 Viterbi 译码算法一般采用 3 比特量化,它比硬判决 Viterbi 算法所要处理的数据量要 多 3 倍。可见,软判决译码的代价是译码器所需存储量的增大。 卷积码的编码码字序列 c 是输入信息序列 m 与编码器冲激响应 g 卷积的结果。码字序列 c 经过信号传输映射并送至有噪信道 传输,在接收端得到接收序列 r。Viterbi 译码算法就是利用接收序列 r,根据最大似然估计准则来得到估计的码字序列 y 。即寻找在接收序列 r 的条件下使条件概率 p(r/y)取得最大值时所对应的码字序列 y。序列 y 必须取自许用码字集合。 对于码率为 R 的(no,

19、k0,m)卷积码,在每个时间单位并行输人 k0 个码元,同时并行输出 no 个码元。一般输人序列表示为: 其中下标中的 m 表示卷积码编码器中寄存单元的个数,L 表示输入信息序列的长度。事实上,最后增加的 m 个码元为零码 元,目的是得到结尾码字,即使编码器在编码结束时的状态回到初始全零状态。相应的接收序列表示为: 类似地,接收序列 r 和估计序列 y 也有类似的表示形式: 对于最大似然译码,Viterbi 算法选择使 p(r/y)最大的 y 作为估计序列。如果假设信道是无记忆的,则噪声对每一位 发送码元的影响都是独立(不相关)的,从而条件概率 p(r/y)就等于每个独立同分布接收码元条件概率

20、的乘积,即 上式即为给定接收序列 r 的条件下序列 y 的似然函数。由于对数函数 lg 是一个单调递增函数,因此使 p(r/y)最大化就等 价于最大化 lg p(r/y)。为降低似然函数的计算复杂性, 常采用如下定义的对数似然函数: 为简化上式中的对数函数求和运算,可以定义如下码元度量: 其中常数 a 和 b 的选取原则是使码元度量值是或者尽可能接近于某个小的正整数。在 BSC 信道或者采用硬判决译码时可以 用不同的方式定义常数 a 和b: 在这种情况下,Viterbi 算法就是在编码格图上选择与接收序列 r 之间汉明(Hamming)距离最大的码字序列作为译码输出。对于一般的信道,可以按照误

21、差最小化的原则选择常数 a 和 b 的值来获得可接受的码 元度量。根据码元度量的定义可以定义格图路径度量: 这意味着在编码格图上译码估计码元序列 y 与接收码元序列 r 之间的总代价。对于 BSC,即两个序列之间的汉明距离。 Vitervi 算法就是利用卷积码编码器的格形图来计算路径度量。算法首先给格图中的每个状态(结点)指定一个部分路 径度量值。这个部分路径度量值由从起始时刻 t0 的 So 状态到当前各个时刻的 So 状态决定。在每个状态,选择达到该状 态的具有“最好”部分路径度量的分支。 最优的部分路径度量根据前述常数 a 和 b 的选择不同,可以是“最大”度量,也可以是“最小”度量。按

22、照所采用的度 量,选择满足条件的部分路径作为幸存路径,而将其他达到该状态的分支从格图上删除。viterbi 算法就是在格形图上选 择从起始时刻到终止时刻的惟一幸存路径作为最大似然路径。沿着最大似然路径,从终止时刻回溯到开始时刻,所走过 的路径对应的编码输出就是最大似然译码输出序列。 硬判决 viterbi 算法可以按照如下步骤实现。 (1)首先以 Skj代表编码器格图中第 t 时刻的状态 Sk。给格形图中的每个状态指定一个度量呈 V(S kj)。 (2)初始化。在时刻 t0,V(So,o)0,其他时刻 V(S kj)为无穷大。(3)t+1t。计算在 t 时刻到达 Sk状态的所有路径的部分路径度

23、量,即首先找到时刻 t 的分支度量,这可以通过计算汉 明距离来完成。其次,计算 t时刻的部分路径度量。 (4)将 V(S kj)设置为 t 时刻到达 Sk状态的“最好”部分路径度量。通常情况下,最优的部分路径度量是具有最小度 量值的部分路径度量;如果有多个最优的部分路径度量,可以选择其中任意一个。 (5)存储最优的部分路径度量及其相应的幸存路径和状态路径。 (6)若 tLm1,返回(3)。 viterbi 算法得到的最终幸存路径在格形图中是惟一的,也就是最大似然路径。 下面给出硬判决 viterbi 算法实现卷积码译码的一个简单例子。考察(2,1,3)卷积码。若输入序列为 m(1011100

24、);相应的码字序列为c(11,10,00,01,10,01,11)。如果经过 BSC 信道传输后得到的接收硬判决序列为 F(10, 10,00,01,11,01,11)。其中两位出现了错误,下面考察通过 viterbi 算法以最小汉明距离为准则实现译码,从而获 得估计信息序列 m 和码字序列 c。 图 2 给出了在编码器格形图上根据接收序列进行 Viterbi 译码的过程。图中用粗线画出了在每一时刻进入每一个状态的 幸存路径。在 t2 时刻以前,进人每一个状态的分支只有一个,因此这些路径就是幸存路径;从 t=2 时刻开始,进入每一 个状态结点的路径有两条,按照最小距离准则,选择一条幸存路径。在

25、 t7 时刻,只剩下惟一的一条幸存路径,即最大 似然路径,与这条似然路径相对应的码字就是译码输出,显然,根据前述该输人序列的编码码字,可知(II,10,00, 01,10,01,II);相应的译码输出信息序列为(1011100)。 图 2 译码过程流程 表 1 进入每个状态节电的幸存路径的部分度量值通常,实现软判决 viterbi 算法是利用欧几里德距离度量代替硬判决时的汉明距离度量,其中接收码元采用多比特量化 ;接收机并不是将每个接收码元简单地判决为 0 或者 1,而是使用多比特量化或者直接使用未量化的模拟信号。理想情况 下,接收序列 r 直接用于软判决 viterbi 译码器。软判决 vi

26、terbi 译码器的工作过程与硬判决 viterbi 译码器的工作过程相 似,惟一的区别是在度量中以欧几里德距离的平方代替汉明距离。 从实现方法来看,硬判决 viterbi 译码算法和软判决 viterbi 译码算法区别主要在加比选部件(ACS,Addition Comparison Selection),路径计算部件(BMG;Bran。h Metric Generation)以及度量储存模块或者寄存器模块的不 同。 Viterbi 译码流程主要有下面几个部分。 (1)量化。将接收机接收的模拟信号转化成数字信号。 (2)码同步。检测码元帧的边界以及码元标志。 (3)分支度量计算。计算各个状态的

27、接收码元和本地码元的汉明距离。 (4)状态度量更新。用各个状态新的路径度量代替前一时刻的路径度量。 (5)幸存路径存储。将 Viterbi 译码所需的网格图上所走过的路径记录下来。 (6)输出判决。根据幸存路径存储的信崽,产生译码序列的输出。 图 3 显示了 Viterbi 译码算法的流程,它是根据上述的几个部分来进行的。整个译码器按照功能主要分成 7 个模块。系统框图如图 4 所示,主要由路径计算模块(BMG,Branch Metric Generation ),加比选模块(ACS,Addition Comparison Selection),状态路径存储管理模块(MMU,Metric Me

28、mory Management Unit),路径回溯模块(TB,Traceback),路径存储模块(SMU,Survivor Memory Management Unit),输人输出模块 再加上一个控制电路模块组成。 图 3 Viterbi 译码算法流程 图 4 Viterbi 译码系统框图 输入输出模块:输入输出部分提供解码器与外部的接口。在无线通信中,接收端从信道中接收到信息序列,然后通过输 入端传入解码器。经过解码之后,最后得到的解码序列从输出端送出,在经过其他处理输出。 ACS 模块:Add Compare Select 模块,即“加比选”模块。它是 Viterbi译码器中运算量最大的

29、部分,大量的运算都是在 这个模块完成的。ACS 接收原来的状态度量和当前的度量路径值,每一状态都有两条路径可以到达,对每一状态的两条路 径的对应值相加,将得到的两个结果进行比较,从中选取较小的一条,将它作为当前的状态度量。 BMG 模块:Branch Metric Generator 模块,即路径度量模块。这个模块计算每一时刻各个状态的路径度量的,在 BSC 信道 的硬判决 Viterbi 译码过程中,就是计算接收值与期望值之间的汉明距离。 TB 模块:Traceback 模块,路径回溯模块。这个模块当译码开始一段序列后,按照路径回溯算法,历经各个状态,得到 译码输出。 MMU 模块:Metr

30、ic Memory Management Unit,路径度量存储管理模块。这个模块主要负责对路径度量的存取进行管理, 为 ACS 模块提供所需的路径度量值以及按时更新路径度量。 SMU 模块:Survivor Memory Management Unit,幸存路径存储管理模块。这个模块负责对幸存路径 RAM 进行管理,负责 幸存路径的存储和读取。 CONTROL 模块:控制电路模块,主要负责提供各种控制信号给各个模块,以保证时钟上同步,流水线不堵塞,提高系统 的并行能力。 由于在卷积码的译码过程中,Viterbi 译码算法的复杂度和寄存器状态数成正比,与约束长度成指数增长关系。因此解 决计算复

31、杂度大的问题是关键,所以整个译码器的重点在 ACS 模块、MMU 模块、SMU 模块和 TB 模块上。 基于 DSP 的 Viterbi 译码实现过程分为欧几里德距离计算、寻找最短距离、计算累加距离、跟踪回溯路径、微分等步 在译码前,首先需要对进入译码器前的比特进行数据分离,根据发送端编码器的复合情况将数据在分离器处重新按照两个 RSC 编码器的输出来作为 MAP 子译码器(Decoder1 和 Decoder2)的输入,即 input1 和 input2。Decoder1 和 Decoder2 均采用软输入、软输出(SISO)的迭代译码算法,每次迭代都有三路输入信息,一是信息码对应原始的信息

32、序列,二是校验码,三是先验信息或称边信息。子译码器的输出为软输出,不仅包含了本次译码对接收码字的硬估值,而且还给出了这些估计的最大似然度。Decoder1 和 Decoder2 是两个独立的编码器产生并分别传输的,所不同的是他们的信息源不同, Decoder2 所对应的信息源比 Decoder1 的信息源多经过一次交织。Decode1 把自己的似然序列经过一次交织作为同信息源序列的软信息输入给 Decoder2,从而使 Decoder2 的信息量增加,提高了译码的正确性。同理, Decoder2 的软输出经过解交织也可以再作为 Decoder1 的输入,这样反复迭代运算最后在完成所有迭代后,得

33、到最后的关于信息序列的软输出,在硬判决之后作为最后译码的结果。 Turbo 码性能 要得到非常好的性能,需要译码过程中进行多次迭代(20次左右),在实现中因为复杂性和时延的原因,一般进行4 次迭代。 对于 TURBO 码来讲,数据块长度越大,性能越好,但是长度有一定的限制,40= L =5114。 长度低于 200 比特的数据块性能与卷积码类似,性能变差。 TURBO 码性能已经接近 Shannon 限,尤其是在低 SNR 条件按下的性能。 CRC 校验和性能估计 对 FER 的统计,是通过 CRC 校验来得到的,因此 CRC 的统计有非常重要的意义。 CRC 校验主要是通过对解码后加在数据块后面的 CRC 校验序列和解码后的数据块重新加上 CRC 校验比特(模拟发送 CRC)来进行比较,通过校验序列是否完全一致来判断该传输块是否为误块。CRC 校验比特长度为 0、12、16、24 四种。 一般需要估计用户业务的实际传输的 BER 和 FER,并进行上报。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报