1、*实践教学*兰州理工大学计算机与通信学院2012年春季学期 计算机通信 课程设计摘要循环码是线性分组码的一种,它具有线性分组码的一般性质,当然它还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力较强。本说明书介绍了(7,4)循环码的编码与译码原理,用C语言编程实现其编码与译码功能。 通过C语言平台运行所编写的程序,输入任意的数字信息序列,得出了编码结果。另外还分别在无差错和部分差错的情况下进行了译码。关键词:循环码;编码与译码;C语言25前言随着时代的变迁,信息潮流的冲击,通信越来越被人们重视。伴随信息时代的到来,计算机通信技术也在不断地发展。目前,计算机通信技术已广泛应用于办公
2、自动化、企业管理与生产过程控制、金融与商业电子化、军事、科研、教育信息服务、医疗卫生等领域。Internet技术发展迅速,全球性信息高速公路建设的浪潮正在兴起。人们已经意识到:计算机网络正在改变着人们的工作方式与生活方式,网络与通信技术已成为影响一个国家与地区经济、科学与文化发展的重要因素之一。现代社会发展越来越快,这要求通信系统功能越来越强,可靠性越来越高,因此通信系统的构成就越来越复杂。 在计算机通信信息码中循环码是线性分组码的一个重要子集,它的循环码的编码和译码电路比较简单,纠错能力也较强,是目前研究得最成熟的一类码。因此本文运用C语言对(7,4)循环码的编码与译码进行编程及运行仿真。C
3、语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。目录第一章 计算机通信技术的历史和发展41.1 通信的概念及发展史41.2 计算机通信的介绍51.3 计算机通信网络5第二章 纠错码与循
4、环码的介绍62.1 纠错码62.2 纠错码的基本原理和性能参数62.3 循环码的介绍7第三章 设计过程及运行结果103.1 C语言的介绍103.2 循环码编码的设计113.3循环码译码的设计123.4 运行结果143.5 软件的可行性分析17总结18参考文献19附录20第一章 计算机通信技术的历史和发展1.1 通信的概念及发展史通信在不同的环境下有不同的解释,在出现电波传递通信后通信(Communication)被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。然而,通信是在人类实践过程中随着社会生产力的发展对传递消息的要求不断提升使得人类文明不断进步。在各种各
5、样的通信方式中,利用“电”来传递消息的通信方法称为电信(Telecommunication),这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用;在现今因电波的快捷性使得从远古人类物质交换过程中就结合文化交流与实体经济不断积累进步的实物性通信(邮政通信)被人类理解为制约经济发展的阻碍。 afd5a4fK:JFD()本文来自移动通信网,版权所有据信号方式的不同,通信可分为模拟通信和数字通信。什么是模拟通信呢?比如在电话通信中,用户线上传送的电信号是随着用户声音大小的变化而变化的。这个变化的电信号无论在时间上或是在幅度上都是连续的,这种信号称为
6、模拟信号。在用户线上传输模拟信号的通信方式称为“模拟通信”。数字信号与模拟信号不同,它是一种离散的、脉冲有无的组合形式,是负载数字信息的信号。电报信号就属于数字信号。由于人们对各种通信业务的需求迅速增加,数字通信正向着小型化、智能化、高速大容量的方向迅速发展,最终必将取代模拟通信。ds不21fds3a2K:JFD()$#_*(本文来自移动通信网,版权所有人类进行通信的历史已很悠久。早在远古时期,人们就通过简单的语言、壁画等方式交换信息。千百年来,人们一直在用语言、图符、钟鼓、烟火、竹简、纸书等传递信息。在现代社会中,交通警的指挥手语、航海中的旗语等不过是古老通信方式进一步发展的结果。这些信息传
7、递的基本方都是依靠人的视觉与听觉。19世纪中叶以后,随着电报、电话的发有,电磁波的发现,人类通信领域产生了根本性的巨大变革,实现了利用金属导线来传递信息,20世纪60年代以后集成电路、电子计算机的出现,使得数字通信迅速发展。20世纪80年代末多媒体技术的兴起,使计算机具备了综合处理文字、声音、图像、影视等各种形式信息的能力,日益成为信息处理最重要和必不可少的工具,电子计算机和通信技术的紧密结合,标志着数字化信息时代的到来。 1.2 计算机通信的介绍计算机通信是一种以数据通信形式出现,在计算机与计算机之间或计算机与终端设备之间进行信息传递的方式。 计算机通信的基本原理是将电信号转换为逻辑信号,其
8、转换方式是将高低电平表示为二进制数中的1和0, 再通过不同的二进制序列来表示所有的信息。也就是将数据以二进制中的0和1的比特流的电的电压做为表示,产生的脉冲通过媒介(通讯设备)来传输数据,达到通信的功能,这个是osl的物理层,也就是通信的工作原理。1.3 计算机通信网络计算机通信网络是计算机技术和通信技术相结合而形成的一种新的通信方式,主要是满足数据传输的需要。它将不同地理位置、具有独立功能的多台计算机终端及附属硬件设备(路由器、交换机)用通信链路连接起来,并配备相应的网络软件,以实现通信过程中资源共享而形成的通信系统。它不仅可以满足局部地区的一个企业、公司、学校和办公机构的数据、文件传输需要
9、,而且可以在一个国家甚至全世界范围进行信息交换、储存和处理,同时可以提供语音、数据和图像的综合性服务,是未来信息技术发展的必由之路。目前,计算机网络和数据通信发展迅速,各国都通过建成的公用数据通信网享用各数据库资源和网络设备资源。为发展高新技术和国民经济服务。计算机通信技术、数据库技术相基于两者基础上的联机检索技术已广泛应用于信息服务领域。从报刊、人工采集、会员单位组织的传统信息服务方式正逐步被以数据库形式组织的信息通信计算机网络供用户联机检索所代替。信息量和随机性增大,信息更新加快,信息价值明显提高,信息处理和利用更加方便。因此,计算机网络通信系统是信息社会的显著标志,在信息处理和传递中占重
10、要位置。第二章 纠错码与循环码的介绍2.1 纠错码纠错编码又称信道编码,它与信源编码是信息传输的两个方面。它们之间存在对偶的关系。应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。纠错码(error correcting code),在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别 ,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不
11、能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。关系的建立称为编码。码字到达收端后,用编码时所用的规则去检验。如果没有错误,则原规则一定满足,否则就不满足。由此可以根据编码规则是否满足以判定有无错误。当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。纠错并恢复原码字的过程称为译
12、码;码元间的关系为线性时,称为线性码;否则称为非线性码。检错码与其他手段结合使用,可以纠错。检错反馈重发系统(ARQ系统)就是一例。在构造纠错码时,将输入信息分成 k位一组以进行编码。若编出的校验位仅与本组的信息位有关,则称这样的码为分组码。若不仅与本组的 k个信息位有关,而且与前若干组的信息位有关,则称为格码。这种码之所以称为格码,是因为用图形分析时它象篱笆或格架。线性格码在运算时为卷积运算,所以叫卷积码。2.2 纠错码的基本原理和性能参数纠错码能够检错或纠错,主要是靠码字之间有较大的差别。这可用码字之间的汉明距离 d(x,y)来衡量。它的定义为码字x与y之间的对应位取不同值的码元个数。一种
13、纠错码的最小距离 d定义为该种码中任两个码字之间的距离的最小值。一种码要能发现e个错误,它的最小距离d应不小于e+1。若要能纠正t个错误,则d应不小于2t+1。一个码字中非零码元的个数,称为此码字的汉明重量。一种码中非零码字的重量的最小值,称为该码的最小重量。对线性码来说,一种码的最小重量与其最小距离在数值上是相等的。在构造线性码时,数字上是从n维空间中选一k维子空间,且使此子空间内各非零码字的重量尽可能大。当构造循环码时,可进一步将每一码字看成一多项式,将整个码看成是多项式环中的理想,这一理想是主理想,故可由生成多项式决定;而多项式完全可由它的根规定。这样,就容易对码进行构造和分析。这是BC
14、H码等循环码构造的出发点。一般地说,构造一种码时,均设法将它与某种代数结构相联系,以便对它进行描述,进而推导它的性质,估计它的性能和给出它的译码方法。若一种码的码长为n,码字数为M,或信息位为h,以及最小距离为d,则可把此码记作【n,M,d】码。若此码为线性码,常简记作(n,k)或(n,k,d)码。人们还常用R=log2M/n表示码的信息率或简称码率,单位为比特/码元。R越大,则每个码元所携带的信息量越大,编码效率越高。 2.3 循环码的介绍循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误
15、,还可以检错突发的错误。(n,k)循环码可以检测长为n-k或更短的任何突发错误,包括首尾相接突发错误。循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡诺图中依次循环得到。循环码又称格雷码( Grey
16、 Code )。循环码最大的特点就是码字的循环特性,所谓循环特性是指:循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组。2.1.1 循环码的多项式表示设码长为n的循环码表示为 (,,, ,) (1)其中为二进制数,通常把码组中各码元当做二进制的系数,即把上式中长为n的各个分量看做多项式: T(x) =+ (2)的各项系数,则码字与码多项式一一对应,这种多项式中,x仅表示码元位置的标记,因此我们并不关心x的取值,这种多项式称为码多项式。2.1.2 (n,k)循环码的生成多项式(n,k)循环码的生成多项式写为g(x),它是(n,k)循环码码集中唯一的,幂次为n-k的码多项式,则g(x
17、)是一个幂次为n的码多项式。按模(+1)运算,此时: = Q(x)+ (3) 即 g(x)R(x),且因 g(x)也是n阶幂,故Q(x)=1.由于它是循环码,故 g(x)按模(+1)运算后的“余式”也是循环码的一个码字,它必能被g(x)整除,即: =F(x) (4)由以上两式可以得到: g(x)= Q(x)(+1)+R(x) =(+1)+f(x)g(x) (5)和 +1=+f(x)g(x)=h(x)g(x) (6)从上式中可以看出,生成多项式g(x)应该是+1的一个因式,即循环码多项式应该是+1的一个n-k次因式。2.1.3 循环码的生成矩阵和一致校验矩阵对所有的i=0,1,2,k-1,用生成
18、多项式g(x)除,有: =(x)g(x)+(x) (7) 式中(x)是余式,表示为: (x)=+ (8)因此,+(x)是g(x)的倍式,即+(x)是码多项式,由此得到系统形式的生成矩阵为:G= (9)它是一个kn阶的矩阵。同样,由G=0可以得到系统形式的一致校验矩阵为: H= (10)如已知(7,4)循环码的生成多项式和校验多项式分别为:g(x) = x3 + x +1,h(x) = x4 + x2 + x +1。写得其生成矩阵和校验矩阵分别为:G= (11) H= (12) 第三章 设计过程及运行结果3.1 C语言的介绍C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的
19、特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。 具体应用比如单片机以及嵌入式系统开发。1. C语言的发展总的来说,C语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相
20、当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C已经成为当今主流程序设计语言中最复杂的一员。 2. C语言特点C是中级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者
21、是计算机最基本的工作单元。 C是结构式语言,结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 C语言功能齐全,具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 C语言适用范围大,适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
22、C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 3.2 循环码编码的设计由信息码构成信息多项式m(x)= +其中高幂次为k-1;用乘以信息多项式m(x),得到的 m(x)最高幂次为n-1,该过程相当于把信息码(,)移位到了码字的前k个信息位,其后是r个全为零的监督位。用g(x)除 m(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k),将此r(x)加于信息位后做监督位,即将r(x)与 m(x)相加,得到的多项式必为一码多项式。根据上面的讨论,可得到在(7,4)循环码编码的程序流程图如图1 所示: 初始化 确定余式r(x)
23、确定c(x) 储存c(x) 图1 编码程序框图3.3循环码译码的设计纠错码的译码是该编码能否得到实际应用的关键所在。译码器往往比编码较难实现,对于纠错能力强的纠错码更复杂。根据不同的纠错或检错目的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。 通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以确定一种逻辑,来确定差错的位置,从而达到纠错的目的。用于纠错目的的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。而用于检错目的循环码,一般使用ARQ通信方式。检测过程也是将接受到的码组进行除法运算,如果除尽
24、,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。用于这种目的的循环码经常被成为循环冗余校验码,即CRC校验码。CRC校验码由于编码电路、检错电路简单且易于实现,因此得到广泛的应用。在通过MODEM传输文件的协议如ZMODEM、XMODEM协议中均用到了CRC校验技术。在磁盘、光盘介质存储技术中也使用该方法。 当码字c通过噪声信道传送时,会受到干扰而产生错误。如果信道产生的错误图样是e,译码器收到的n,重接受矢量是y,则表示为: y=c+e (13)上式也可以写成多项式形式:y(x)=c(x)+e(x) (14)译码器的任务就是从y(x)中得到,然后求的估值码字 = y(x)+
25、 (15) 并从中得到信息组。 循环码译码可按以下三个步骤进行:(1)由接收到的y(x)计算伴随式s(x);(2)根据伴随式s(x)找出对应的估值错误图样;(3)计算= y(x)+ ,得到估计码字。若=c(x),则译码正确,否则,若c(x),则译码错误。由于g(x) 的次数为n - k 次,g(x) 除E(x) 后得余式(即伴随式)的最高次数为n-k-1次,故S(x) 共有2n-k 个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x) 共有2(7-4) = 8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误,其伴随式如表1所示。BCH(7,4)循环
26、码错误图样表:表1错误图样错误图样码字伴随式S(x)伴随式E6(x)=x61000000x2100E5(x)=x50100000x2+x110E4(x)=x40010000x2+x+1111E3(x)=x30001000x+1011E2(x)=x20000100x2+1101E1(x)=x10000010x010E0(x)=x000000011001E(x)=000000000000上式指出了系统循环码的译码方法:将收到的码字R(x) 用g(x) 去除,如果除尽则无错;否则有错。如果有错,可由余式S(x) 一一找出对应图样,然后将错误图样E(x)与R(x)模2和,即为所求码字C(x) ,从而实
27、现纠错目的。根据前面的讨论,可得(7,4)循环码译码的程序流程图如图2 所示 初始化由R(x)确定S(x):S(x)=0,无误码误码 是否 由S(x)确定错误图样E(x) 否纠错C(x)=E(x)+R(x)存储C(x)图 2 译码程序框图3.4 运行结果1初始化界面图3 初始化界面2正确编码界面图4 正确编码界面3正确译码界面图5 正确译码界面4信息位有一位错误时的译码界面图6 信息位有一位错误时的译码界面5信息位有二位错误时的译码界面图7 信息位有二位错误时的译码界面6信息位有三位错误时的译码界面图8 信息位有三位错误时的译码界面3.5 软件的可行性分析由上述结果可知,该软件的操作方法为程序
28、通过编译运行后,在C环境下,当输入c后按回车键,然后就会提示输入信息,当输入4位的信息位再按回车键,系统就会输出7位的循环编码。当输入d后按回车键,系统会进行译码的操作,当输入的译码信息和编码结果一样时,系统就会正确将信息位从该码组译出来。当输入的译码信息与编码的结果错一位码时,系统就会检测出该错误并将其纠正过来,从而译出真确的信息位。当输入e后按回车,就会退出系统。由此可知,该系统能够实现(7,4)循环码的编码与在无差错和部分差错情况下的译码,因此该软件具有可行性。总结通过本次课设,我对循环码的编码和译码的基本原理有了较深的理解,学到了很多的知识。循环码是线性分组码的一个重要子集,是目前研究
29、得最成熟的一类码。它有许多特殊的代数性质,这些性质有助于按所要求的纠错能力系统地构造这类码,且易于实现;同时循环码的性能也较好,具有较强的检错和纠错能力。我的题目是循环码编译码的软件设计,在这一周中遇到了好多问题,由于以前学习C语言没有用心,编程的过程中出现了很多问题。例如,由于输入法的问题导致程序出现了错误。后来,通过同学的帮助,发现并改正了这个错误。最终实现了循环码编译码的软件设计。这次课设让我受益匪浅,让我理解了纠错码的原理和循环冗余码CRC的原理。真正地做到了输入任意的数字信息序列,得出编码结果。还学会了在无差错和部分差错的情况下进行译码。 最后感谢老师对我们的精心指导和帮助,感谢同学
30、们对我的帮助。参考文献1顾尚杰,薛质编著. 计算机通信基础.北京:电子工业出版社.20002樊昌信 著.通信原理.国防工业出版社.1999.103宋祖顺 著.现代通信原理.电子工业出版社.2001.24谭浩强 著.C程序设计第二版.清华大学出版社.2002.65潘新民主编.计算机通信技术. (第2版).北京.电子工业出版社.20066 美Jean Walrand. 通信网络基础.北京:机械工业出版社.19997卢士文著.计算机通信网络基础教程.北京:科学出版社.20008吴伶达 李国辉 杨冰等著.计算机通信原理与技术.国防科技大学出版社.2003.39满文庆著. 计算机网络技术与设备. 北京:
31、清华大学出版社. 2004附录/*(7,4)循环码的编译及纠检错实现*/#include#include#include/*函数声明*/void Begin();void Code();void Decoding();/*主函数*/main() printf(nThis software main function is carries on the code and the decoding to (7,4) cyclic code.n ); Begin(); /*进行编码*/void Code() int Input4; int Output7; int reg3=0,0,0; int t
32、emp,i,j; printf(Please input the information code :); for(i=0;i4;i+) scanf( %d,&Inputi); /*输入4位信息码*/ for(i=0;i4;i+) /*进行除法操作*/ temp=reg2+Inputi; /*生成多项式为g(x)=x3+x2+1*/ if(temp=2) temp=0; reg2=reg1+temp; if(reg2=2)reg2=0; reg1=reg0; reg0=temp; for(i=0;i4;i+) Outputi=Inputi; /*进行编码操作*/ for(i=4;i0;j-)
33、regj=regj-1; reg0=0; Outputi=temp; printf(_); printf(n); printf( The information code output is: n); for(i=0;i7;i+) printf( %d ,Outputi); /*输出编码结果*/ printf(n); printf(_); printf(n); Begin(); /*译码并进行纠检错*/void Decoding() int Input7,Output7; int reg3=0,0,0; int temp,i,d,x,p; printf(ninput the informati
34、on code of bit7:); for(i=0;i7;i+) scanf( %d,&Inputi); /*输入接受码组*/ for(i=0;i=2 n); getchar(); exit(0); printf(_n); printf(s(x)=); for(i=2;i=0;i-) printf( %d,regi); printf(n); for(i=0;i7;i+) /*纠正一位错误*/ d=reg2*reg1*(!reg0); Outputi=d+Inputi; if(Outputi=2) Outputi=0; temp=reg2; x=0; /*S(x)进行自发运算以求得错误位数*/
35、 reg2=temp+reg1; if(reg2=2)reg2=0; reg1=reg0; reg0=temp+x; /*输出4位信息源*/ printf(The decoding bit4 is:); for(i=0;i4;i+) printf( %d ,Outputi); printf(n); printf(The Decoding bit7 is:); /*输出7位译码结果*/ for(i=0;i7;i+) printf( %d ,Outputi); printf(n); printf(_n); Begin(); /*选择操作*/ void Begin() fflush(stdin);
36、char ch; printf( -); printf(n); printf( - input c to carry on the code -); printf(n); printf( - input d to carry on the decoding code -); printf(n); printf( - input e to exit please to -); printf(n); printf( -); printf(n); ch=getchar(); if(ch=c) Code(); else if(ch=d) Decoding(); else if(ch=n) Begin(); else if(ch=e) exit(0); else printf(input errorn); fflush(stdin);Begin();
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922