通信设计练习M序列1.docx
《通信设计练习M序列1.docx》由会员分享,可在线阅读,更多相关《通信设计练习M序列1.docx(17页珍藏版)》请在冰豆网上搜索。
![通信设计练习M序列1.docx](https://file1.bdocx.com/fileroot1/2023-2/3/c154f27a-7a82-4dd8-8a42-963ba947b8e7/c154f27a-7a82-4dd8-8a42-963ba947b8e71.gif)
通信设计练习M序列1
通信系统电路设计练习:
M序列编码/解码器的设计
作业的背景及训练目的
为了给通信专业的同学们提供一个设计实践的机会,在最短的时间段内掌握数字设计的动手能力,提高Verilog语言的使用能力,所以专门设计了这样一个难度适中的数字通信系统设计练习。
本练习是根据工程实际问题提出的,但为了便于同学理解,对设计需求指标做了许多简化。
希望同学们在设计范例和老师的指导下,一步一步地达到设计目标。
期望同学们能在两至三周内,参考设计范例,独立完成自己的设计任务,在这一过程中学习用Verilog编写RTL代码和仿真验证用测试代码技术,以及用综合器进行综合的技术、并熟练掌握较复杂数字系统的多层次的仿真验证的方法,以逐步提高同学在设计工作中的自信心。
1.1M序列介绍:
M序列是PN(pseudonoise)伪随机噪声中最广为人知的一种,主要用在扩频率通信中,先简要介绍一下扩频通信工程的原理,然后分析M序列的数学特性从而回答即为什么要选择M序列,然后再谈谈M序列在扩频应用中的局限性。
有了一定的理论基础后,我们就可以开始讨论怎样用具体的硬件实现应用M序列的扩频通信的发射端和接收端电路。
1.2扩频通信的短暂的历史
有关扩频通信技术的观点是在1941年由好莱坞女演员Hedy Lamarr 和钢琴家GeorgeAntheil提出的。
基于对鱼雷控制的安全无线通信的思路,他们申请了美国专利#2.292.387。
不幸的是,当时该技术并没有引起美国军方的重视,直到20世纪八十年代才引起关注,将它用于敌对环境中的无线通信系统。
扩频通信技术解决了短距离数据收发信机、如:
卫星定位系统(GPS)、3G移动通信系统、WLAN (IEEE802.11a, IEEE802.11b,IEE802.11g)和蓝牙技术等应用的关键问题。
扩频技术也为提高无线电频谱的利用率(无线电频谱是有限的因此也是一种昂贵的资源)提供帮助。
1.3扩频技术理论证明
在Shannon和Hartley信道容量定理中可以明显看出频谱扩展的作用:
C= B
Log2(1+S/N)
式中:
C是信道容量、单位为比特每秒(bps),它是在理论上可接受的误码率(BER)下所允许的最大数据速率;B是要求的信道带宽,单位是Hz;S/N是信噪比。
C表示通信信道所允许的信息量,也表示了所希望得到的性能,带宽(B)则是付出的代价,因为频率是一种有限的资源,S/N表示周围的环境或者物理特性(障碍物、干扰发射台、冲突等)。
用于恶劣环境(噪声和干扰导致极低的信噪比)时,从上式可以看出:
为了提高信息的传输速率C,可以从两种途径实现,既加大带宽W或提高信噪比S/N。
换句话说,当信号的传输速率C一定时,信号带宽W和信噪比S/N是可以互换的,即增加信号带宽可以降低对信噪比的要求,当带宽增加到一定程度,允许信噪比进一步降低,有用信号功率接近噪声功率甚至淹没在噪声之下也是可能的。
扩频通信就是用宽带传输技术来换取信噪比上的好处,这就是扩频通信的基本思想和理论依据。
1.4扩频技术的优点
1、抗干扰性强,误码率低ﻫﻫ如上所述,扩频通信系统由于在发送端扩展信号频谱,在接收端解扩还原信息,产生了扩频增益,从而大大地提高了抗干扰容限。
根据扩频增益不同,甚至在负的信噪比条件下,也可以将信号从噪声的淹没中提取出来,在目前商用的通信系统中,扩频通信是唯一能够工作于负信噪比条件下的通信方式。
ﻫ2 、易于同频使用,提高了无线频谱利用率ﻫ
无线频谱十分宝贵,虽然从长波到微波都已得到开发利用,仍然满足不了社会的需求。
为此,世界各地都设计了频谱管理机构,用户只能使用申请获得的频率,依靠频道划分来防止信道之间发生干扰。
ﻫﻫ由于扩频通信采用了相关接收这一高技术,信号发送功率极低(<1W,一般为1~100mW),且可工作在信道噪声和热噪声背景中,易于在同一地区重复使用同一频率,也可以与现今各种窄带通信共享同一频率资源;ﻫﻫ.3、抗多径干扰
在无线通信中,抗多径干扰问题一直是难以解决的问题,利用扩频编码之间的相关特性;在接收端可以用相关技术从多径信号中提取分离出最强的有用信号,也可把多个路径来的同一码序列的波形相加使之得到加强,从而达到有效的抗多径干扰。
ﻫ
4、扩频通信是数字通信,特别适合数字话音和数据同时传输,扩频通信自身具有加密功能,保密性强,便于开展各种通信业务。
扩频通信容易采用码分多址、语音压缩等多项新技术,更加适用于计算机网络以及数字化的话音、图像信息传输;ﻫﻫ.5、扩频通信绝大部分是数字电路,设备高度集成,安装简便,易于维护,也十分小巧可靠,便于安装,便于扩展,平均无故障率时间也很长;ﻫﻫ6、另外,扩频设备一般采用积木式结构,组网方式灵活,方便统一规划,分期实施,利于扩容,有效地保护前期投资。
1.5频谱的扩展的实现和直接序列扩频
频谱的扩展是用数字化方式实现的。
在一个二进制码位的时段内用一组新的多位长的码型予以置换,新码型的码速率远远高出原码的码速率,由傅立叶分析可知新码型的带宽远远高出原码的带宽,从而将信号的带宽进行了扩展。
这些新的码型也叫伪随机(PN)码,码位越长系统性能越高。
通常,商用扩频系统PN码码长应不低于12位,一般取32位,军用系统可达千位。
目前常见的码型有以下三种:
ﻫ1)M序列,即最长线性伪随机系列;
2)GOLD序列;ﻫ3)WALSH函数正交码。
ﻫ
2.M序列的产生调制和解调原理
M序列是对最长线性反馈移位寄存器序列的简称,它是一种由带线性反馈的移位寄存器所产生的序列,并且具有最长周期。
带线性反馈的移位寄存器设定各级寄存器的初始状态后,在时钟触发下,每次移位后各级寄存器状态都会发生变化。
观察其中一级寄存器(通常为末级)的输出,随着移位时钟节拍的推移会产生一个序列,称为移位寄存器序列。
可以发现序列是一个周期序列,其周期不但与移位寄存器的级数有关,而且与线性反馈逻辑有关。
在相同级数情况下,采用不同的线性反馈逻辑所得到的周期长度不同。
此外,周期还与移位寄存器的初始状态有关。
一般情况下,用于产生M序列的n级线性反馈移位寄存器的结构图如下:
表示模2相加
图中的
作为输出信号所得到的就是我们需要的M序列了,可以看出一个完整的n级M序列是由一个相应的线性反馈逻辑表达式来得到的:
将左边的
移到等号右边可以写成为:
为了便于计算我们通常将上式与一个多项式项(即本原多项式)对应起来以简便得到M序列:
基于不同级的线性反馈逻辑表达式,我们可以得到不同长度的M序列的本原多项式如下(表1):
n
代数式
3
4
5
6
从表1中我们可以查到5级M序列所对应的本原多项式为
从而得到其线性反馈逻辑表达式为a4=a1
a0,更进一步得到下面的M序列产生的结构图:
可以看出我们在这里只需要设定好a4 到a0初始值(不能为00000),就能够得到一组5级31位的M序列了。
在此我们将其初始值设为10000(a4a3a2a1a0),通过上面结构图的推算可以得到其31位M序列编码为:
110100001(由右至左依次按顺序生成),发送端需要调制的信号,与这31位数进行异或运算。
我们实际在发送信号的时候采用相位调制(PSK)方法,即将1相应的调制为1,0调制为-1;则可以得到传输中的M序列。
以需要发送的信号是1为例,具体调制解调步骤如下(假设没有噪声情况下):
1、1分别与31位M序列进行异或运算,得到111111110
2、将第一步得到的M序列中的1相应的调制为01(1),0调制为11(-1)后输出01,01,11,01,11,11,01,01,11,11,11,11,11,01,01,01,11,11,01,11,11,11,01,11,01,11,01,01,01,01,11,而输出的顺序依次为11,01,01,01……11,01,01。
同理可知0经过调制得到的序列会与1经过调制得到的序列相反。
3、接收端知道发送端的M序列为110100001(a30a29……a2a1a0),将收到的第一个数的符号位与a0相比较如果是相同则在基值(为了方便讨论基值可取0)上加上一个正数(为接收端接收到的数的绝对值)不同的话则减去一个正数,同理第二个数的符号位与a1比较若相同则在上一个累加值上相加一个正数,不同的话则减去一个正数,依此类推,当第31个数与a30比较完后,若发送端的发送数据1的话此时的累加值为31,若发送端的发送数据0的话此时的累加值为-31,通过判断在第31个数时的累加值,我们可以知道发送是1还是0,当第31个数与a30比较过后,第32个数与a0比较,就这样依此规律,每隔31个数就判断输出是1还是0。
但实际的通信信道中有各种各样的噪声,通常有加性噪声信道,线性滤波器信道,以及线性时变滤波器信道,上述的三个信道数学模型,足以概括实际应用中遇到的大多数物理信到特性。
在本文中主要考虑的是加性噪声信道。
并且通过实验程 序证明,上文中所提到的M序列有抗干扰性强,误码率低这一特性。
通信系统最简单的数学模型就是加性噪声信道,在此模型中,发送信号s(t)受到加性随机噪声过程n(t)的损伤。
送物理意义上看,加性噪声过程可能来自通信系统接收端的电子元件和放大器等,也可能来自无线信号传送过程遇到的干扰。
如果噪声主要是由接收机的电子元件和放大器引起的,则它具有热噪声的性质,这类热噪声都具有高斯噪声过程的统计特性,因而信道的数学模型通常称为加性高斯噪声信道,接收端接收信号的表达式为:
r(t)=s(t)+(t)(不考虑信道衰减)。
在下面将要介绍的实验中加入随机噪声信号,此信号的最小值为-2,最大值为2,但通过仿真我们可以发现解调后误码率很小。
从频域上解释M序列有抗干扰性强,误码率低这一特性,是由于在发送端PN码序列用来将携带信息的基带信号扩展至宽带信号以便在信道上传输。
在接收端,接收的信号与PN码一个同步的副本相乘,得到解扩的窄带信号,与此同时各种干扰信号将扩展至宽带。
最终的影响是干扰信号功率降低了W/R,正好等于扩频系统的处理增益。
PN码序列的的副本只对特定的接收机已知,不知道该PN码序列的接收机不能解调信号。
因此,PN码序列的使用提供了普通调制无法实现的隐秘(安全)性。
这种安全性以及抗干扰性能增益是以信道带宽和通信系统复杂程度的增加来换取的。
3.具体的FPGA实现
对于不同级别的M序列来说,抗噪声能力是不一样的,级数越高所能承受的外界干扰幅度越大。
在这次实验设计中我们选取的是从2倍噪声中将5级31位M序列信号恢复出来。
利用Verilog分别编写 coder、add_noise、decoder、 correct、Correct_Decoder、top这六个模块,其中coder、decoder、correct 、是可综合模块,其中decoder、correct 这两个模块组成为Correct_Decoder,add_noise,是不可综合的,用以模拟信道的加性噪声,top是测试文档。
具体各个模块的作用如下:
coder模块:
此模块的基本功能按照上文所说的方法将待调信号与 M序列的每一位进行异或,到达扩频的目的,而后为了实际需要将扩频结果的1调制为01
(1)0调制为11(-1)。
但是一个工程系统只有这个基本功能是不够的,由于我们面对的是非理想的信道模型必需还要有一些附加的功能:
1、在发送数据之前先发11111111110用与给接收端捕捉同步头。
2、每发送512个字节,就发送0000,来检测接收双方是否依旧保持同步。
3、在介绍M序列的产生原理及具体的调制和解调原理时,知道通过扩频可以在有噪信道中大大降低误码率,但是仍有误码,具体是传1万个2位的十六进制数就有50多个错误的数据。
能不能进一步减少误码率呢?
。
为了减少误码率,通过分析数据,我们可以发现误码分布的比较散,所以选择汉明码就能达到纠错的目的。
在每发送四位信息位(a6a5a4a3)后我们发送三位监督位(a2a1a0)从而达到纠错的目的。
汉明码是一种能纠一位错的线性分组码,由于它的编译码简单,在数据通信和计算机存储系统中广泛应用,如在蓝牙技术和硬盘阵列中。
它的最小码距为3,可以纠正一位错误,但对于两位错不能检测,还可能会造成误纠。
尽管发生一位错的概率相对最高,但在一些要求较高的应用中汉明码不能满足要求。
用一个例子说明汉明码的具体原理及方法:
我们用a0 a1a2 a3a4a5a6 表示七个码元,用S1S2S3表示由三个监督方程式计算得到的校正子,并假设S1S2S3三位校正子码组与误码位置的对应关系如下表所示:
表A
S1S2S3
误码位置
S1 S2S3
误码位置
001
010
100
011
a0
a1
a2
a3
101
110
111
000
a4
a5
a6
无错
由表可知,当误码位置在a2a4 a5 或a6时,校正子S1=1;否则S1=0。
因此有
S1=a6+a5+a4+a2
(1)(以下运算均为模二运算)
当误码位置在a1a3 a5或a6时,校正子S2=1;否则S2=0。
因此有
S2=a6+a5+a3+a1 (2)
同理,有
S3=a6+a4+a3+a0 (3)
在编码时,a6a5a4a3为信息码元,取决于被传输的信息。
由
(1)
(2)(3)可知,监督码元a2 a1 和a0应根据以下监督方程确定:
a6+a5+a4+a2=0
a6+a5+a3+a1=0
a6+a4+a3+a0=0
即
a2=a6+a5+a4
a1=a6+a5+a3
a0=a6+a4+a3
由此得到的16个许用码组列于表中
表B
信息位
监督位
信息位
监督位
a6a5a4a3
a2a1a0
a6a5a4a3
a2a1a0
0000
0001
0010
0011
0100
0101
0110
0111
000
011
101
110
110
101
011
000
1000
1001
1010
1011
1100
1101
1110
1111
111
100
010
001
001
010
100
111
接收端收到每个码组后,计算S1 S2 和S3,如不全为0,则可按表A确定误码位置,然后予以纠正。
例如,接收码组为0000011,可以算出S1S2S3=011,可知在a3位置上有一误码。
由于(7,4)码的最小码距为Dmin=3,它能纠正一个误码或检测两个误码,如超过纠错能力,则反而会因“乱纠”而增加新的误码,在本例中若测出a2 a1或a0有错,信息位 a6a5a4a3继续保持原值。
若通过计算S1S2S3的值,得到信息位有错,则将相应的出错位的值取反,在上例中由于a3上有误码,所以只要将a3的值取反即可。
由于汉明码只能纠正单个错误,在实际的运用中,若出现多个错误的情况,可采用BCH码,BCH码是循环码的一个重要子类,它具有纠多个随机错误的能力。
Add_noise模块:
此模块是一行为模块,模拟的是实际传输过程。
这个模块相对比较简单:
将前一个coder模块多产生的M序列串(unnoised_data)读入之后加入带符号的2倍噪声(noise<=random %3产生最大值为
2的随机数),这样所得到的就是加入噪声的接收端信号(noised_data)。
noised_data=unnoised_data+noise。
Correct_Decoder模块:
此模块包括两个可综合模块decoder模块和 correct模块,实现的最基本的功能是解调,以31为一个循环,将接收到的信号的符号位与存储器中的31位M序列依次相比,来判断是加上一个正数还是减去一个正数,每输完31个数将此时的累加值与我们所设定的阀值相比较,大于此阀值的话取1,否则取0。
比较完31个数后和将累加的值重新设为初始值。
除了解调这个基本功能以外,还有一些附加的功能,如同步头的捕捉,核对同步检测信号,对错误数据进行纠错。
其过程如流程图所示:
在具体的实现过程中,累加器所赋的初始值都为50。
这样做的目的很简单,为了方便计算和相应的判断。
因为输入的信号可能是正的也可能是负的;所做的运算也可能是加法和减法。
如果我们把基准值都赋为0,那么在电路实现的过程中会遇到一些麻烦,举个很简单的例子:
9位的累加结果寄存器如果为0(二进制表示为2’b000000000),加上输入信号-2(即带符号的3’b110),本应当产生-2的结果,但是在实际硬件实现的时候却不能得到我们所要的答案,它的运算方法为:
ﻩﻩsum:
ﻩ9’b000000000 (0)
ﻩﻩindata:
ﻩ+ﻩ3’b 110(-2)
ﻩﻩﻩsum:
9’b000000110 (3 )
可以从上边的运算结果中清楚的看出,直接在0的基础上进行加减运算会出现预料之外的结果。
这种方法只有通过相应的扩位运算才可以达到我们所要的结果。
也就是说对于输入的3位信号(indata),我们必须将其扩充成为相应的9位值才可以跟sum进行加减运算。
还是以上边数据为例,我们在indata(2’b110)数据一进来就将其扩展成为带符号位9位的数据(9’b111111110),两者都是表示带符号位的数据-2,但是后者和sum进行加减时就不会出现上边的问题:
ﻩﻩﻩsum:
ﻩﻩ9’b000000000( 0)
ﻩﻩﻩindata:
+ﻩ9’b111111110 (-2)
ﻩﻩsum:
9’b111111110(-2 )
但是这种方法,远不如我们直接将累加器sum的初始值设定为50方便,因为这样一来我们就只在正数的范围内进行考虑。
同样的到达同步解码状态后,实际也不是将0定为判断基准,而是50。
通过下边的图像可以看出来(图3.7):
图3.7
上边的图形是在找到同步头之后进行同步解码的开始情况。
最上边两个信号是输入信号indata和将输入信号经过绝对值运算得到的结果psumi,将带符号的3位信号转化为不带符号的2位数据,再根据与第j位+M序列符号位与输入数据符号位的比较,选取相应的加法或者减法运算。
从上图中还可以看出,累加器sum的开始的基准值为50。
每进入一个数据就在50的基准上进行加减法运算。
最后当计数器j从0累加到31之后,就做一次相应的判决输出:
如果sum值大于50就输出信号为1,如果小于50就输出为0。
见下图(图3.8):
图3.8
图中在计数器j达到30的时候,对应的sum值为12(小于50),于是outdata进行判断输出,输出信号为0(低电平)。
这样就完成了计数累加判断的过程。
上述过程只是完成了最基本的功能,在coder模块中我们提到一个工程系统只有这个基本功能是不够的,由于我们面对的是非理想的信道模型必需还要有一些附加的功能,相应的解调模块还需要有些附加功能。
1、同步头的捕捉。
为了捕捉同步头我们在发送端发送11111111110,用于接收端来捕捉同步。
在介绍M序列的特性时,我们提到PN码序列的的副本只对特定的接收机已知,不知道该PN码序列的接收机不能解调信号。
理想情况下接收到的第一个数据与接收端的M序列的第一位相比较,但是在非理想情况下,接发双方的时钟频率及相位都会有差异,有可能出现实际上接收到的第一个数据是与接收端的M序列的第二位相比较这样一来会有灾难性的后果,几乎不能正确译码。
若有同步头的捕捉这个功能,即使发生接收信号与解调端的M序列不同步,也能正确解调。
将顺序不同的31个M序列储存在31个寄存器中,捕捉同步头时输入的数据同时与这31个M序列作用进行累加,通过与阀值比较大小,从而在顺序不同的31个M序列中找出与接收数据同步的M序列。
具体的过程读者可以通过实验好好体会。
在寻找同步的过程中,如果接收到的31个信号和本地的31位M序列没有完全同步,那么由于M序列的性质使得累加的结果比较小,一般小于10,即使在噪声的干扰下也不会超出20的水平;但是如果两者完全同步,累加的结果应当在30左右。
所以我在这里所选取的阈值为28,又由于为了方便计算我们将累加器的初始数值设为50当累加器的值大于或等于78时,我们则认为同步,当收到0时我们则认为用于捕捉同步的头文件传完。
进入实际的数据传输阶段。
在本实验程序中用了31个加法器并行计算。
如果我们称一个数经过调制后为一个M序列组,通过移位累加判断找同步头有一个弊端就是会挪用到别的组的M序列位。
虽然最后是通过31次累加判断阀值,只要我们保证“大主流”不是挪用其它组的M序列就可以,但是不可否认的是在没有挪用其它组的M序列位而找到同步头的误码率最低。
例如在实验中当Decoder.en实际上是en_coder时,sum0处取得最大值时的误码率最小。
若在非理想情况下如en为en_coder1此时就不是sum0处取得最大值,此时误码率比理想情况下大。
总之同步头捕捉这个功能使我们的这个小通信系统强健(Robust)。
2、上文提到,当收到0时我们则认为用于捕捉同步的头文件传完。
进入实际的数据传输阶段,当实际过程中由于噪声的影响,有可能使同步头的0不能正确译出,无法正确判断出传输数据从何时开始,至使输出数据全部错位。
为了避免此情况发生我们在发完11111111110先传输数据0000再传输待传数据,接受端收到0000,后才认为开始接收到正确数据,否则认为不同步。
而且在实际应用中收发双方的晶体振荡器不可能完全一样,于是就造成了接收双方的时钟频率不相等,传输一定数后会由于累积误差使收发双方无法同步,所以需要每传输一定的数据后,都要传送一些收发双方约定好的信息,来检测是否维持在同步状态。
这里收发双方约定每传512bit信息位(64个字节)后就发送双方约定好的信号(0000),如果每隔512个信息位后,接收端没有收到0000,则将asyn_flag置为高电平,从而告诉接收系统已经无法正确的接收信号。
在给出的程序中在我们是把收发双方的时钟周期设为相等,读者可以试试将其改为不等,如:
在Top模块中做以下改动:
always #100coder_clk_31<=~coder_clk_31;
always #100.001decoder_clk_31<=~decoder_clk_31;
always#(31*100) coder_clk_1<=~coder_clk_1;
always #(31*100.001)decoder_clk_1<=~decoder_clk_1;
(注意:
此时要将`timescale 1ns/1ns 改为`timescale1ns/1ps)
改动后再仿真我们可以发现从第229个数就开始出错,第257个数后由于不同步接收端无法正确的收到同步检测信号(0000),故asyn_flag置为高电平,从而告诉接收系统已经无法正确的接收信号。
此时接收端asyn_flag信号发