1 扩频通信技术及理论基础
扩频通信技术一般是将待传送的信息数据被伪随机编码(扩频序列:Spread Sequence)调制,实现频谱扩展后再传输;接收端则采用相同的编码进行解调及相关处理,恢复原始信息数据。
一种典型的扩频系统的物理模型如图1所示。
2 扩频系统的伪随机序列
在扩展频谱通信系统中,伪随机序列起着很重要的作用。在直扩系统中,用伪随机序列将传输信息展宽,在接收时又用它将信号压缩,并使干扰信号功率扩散,提高了系统的抗干扰能力;在跳频系统中,用伪随机序列控制脉冲发送的时间和持续时间。由此可见,伪随机序列性能的好坏是一个至关重要的问题。
m序列是最常用的一种伪随机序列。它是最长线性反馈移位寄存器序列的简称。是由带线性反馈的移位寄存器产生的序列,并且具有最长的周期。
带线性反馈逻辑的移位寄存器设定各级寄存器的初始状态后,在时钟触发下,每次移位后各级寄存器状态会发生变化。观察其中一级寄存器(通常位末级)的输出,随着移位时钟节拍的推移会产生移位寄存器序列。它是一个周期序列,其周期不但与移位寄存器的级数有关,而且与线性反馈逻辑有关。此外,周期还与移位寄存器的初始状态有关。
一般情况下,n极线性反馈移位寄存器的构造如图2所示。
图中,ci(i=0,1,···,n)表示反馈线的连接状态,ci=1表示连接线通,第n-i级输出加入反馈中;ci=0表示连接线断开,第n-i级输出为参加反馈。因此,一般形式的线性反馈逻辑表达式为:
将等式左边的an移至右边,并将an=C0an(C0=1)代入上式,则上式可以改写为:
并称之为线性反馈移位寄存器的特征多项式。特征多项式与输出序列的周期有密切的关系,一个产生最长线性反馈移位寄存器序列(即m序列)的n级移位寄存器,其特征多项式必须是n次的本原多项式。
3 设计模块图
设计选择用(12,8)线性分组码、5级M序列从2倍噪声中恢复原始信号, 整个系统的构架如图3所示。
整个系统分为6大模块,分别实现不同的功能。其中包括两个行为模块:信号产生即顶层测试模块(Signal)、模拟信道加噪模块(add_noise);4个可综合模块:汉明码编码和解码模块(ham_code、ham_decode)、m序列编码和解码模块(m_code、m_decode)。
首先要解决帧同步的问题,即如何在对真正信号进行m序列解码之前判断已经达到完全的同步。在发送实际信号之前,发送一个8位的同步头数据1111110,在接收端开始时每进入一个信号就进行一次乘法加法运算,选取一个比较大的阈值,只有在开始接收到一个超过阈值的信号之后才认定达到了完全的同步;在此之后进行同步解码,等收到第一个0信号之后,进入数据接收状态,这样就解决了如何同步的问题。在进入数据接收状态后,每收到480个(实际发送400个,经汉明码编码后变为480个)信号就进行下一次寻找同步的状态,也就是重新发送一个8位的同步头信号,重复上面的过程,再次达到同步,继续接收下480个信号。这样即使产生频率错位也只会在480个信号的后几个信号产生错误,不会保持很多的错码,是个很好的方案。
3.1 时钟信号
此处把M序列时钟信号连接到FPGA管脚上,clk_1及其31倍频clk_31,其中clk_31时钟频率为20MHz(如图4所示)。为验证此时钟信号,选用RIGOL DS1102CD数字存储示波器。DS1102CD数字存储示波器是可选装16通道逻辑分析仪的混合信号示波器,可以将16路数字信号和2路模拟信号同时显示到屏幕上,它具备400 MSa/s实时采样率、25 GSa/s等效采样率和1M的存储深度,且体积小巧、触发灵敏度可调,很适合日常实验使用。
3.2 ham_code,ham_decode模块
汉明码编解码模块的内部框图如图5所示,其中s_p,p_s分别为串行转并行和并行转串行模块。由于汉明码的编解码过程是对并行数据进行处理,所以需要将输入的串行数据流进行转换,编解码完毕以后再转换为串行。
两个模块联合仿真结果如图6所示,p_out_link信号为并行输出控制信号,error为错误指示位。先把串行数据流依次读入8位移位寄存器,每读入8个数据,产生一个p_out_link脉冲,将移位寄存器中的数据并行输出;经过汉明码编码后变为12位并行数据;在p_s模块,把12位并行数据读入寄存器,再依次移位输出,即完成了编码的过程。解码过程与其类似。从图中可以看到,经编码后8位数据(如11011010)变为12位(1101101011100),之后又可解码出原数据,说明这两个模块的设计达到了预期效果。
3.3 m_code模块
当本模块中的数据采样时钟信号clk_1的上升沿来临的时候,对同步头信号或者要发送的随机数据信号进行采样,并将采样值存在输入数据寄存器indata_buf中。由clk_31控制产生m序列的移位寄存器进行循环,产生相应的m序列串(包含0、1信号),完成编码的过程。在本模块中还同时进行了发送信号的调制过程,也就是在产生m序列串的同时对其完成相应的调制:将信号1调制为2位的01(带符号位的+1)信号;将信号0调制为2位的11(带符号位的-1)信号。
图7中最下边的信号shift_buf就是产生m序列的5级移位寄存器,通过查表知道产生5级m序列的本原多项式为x5+x2+1,推出其线性反馈逻辑表达式为a5=于是将一个+1数据信号编码并调制为相应的+M序列串:1 -1 -1 -1 -1 1 -1 1 -1 1 1 1 -1 1 1 -1 -1 -1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 -1;相应的0信号对应于一个-m序列串。每进来一个clk_31上升沿就根据indata_buf中存的待发数据和移位寄存器的相应关系发送一位信号,将待发送的信号转化为与之对应的±m序列串。
3.4 addnoise模块
此模块是一行为模块,模拟的是实际传输过程。这个模块相对比较简单:将前一个coder模块产生的m序列串(unnoised_data)读入之后加入带符号的2倍噪声(noise<=random % 3产生最大值为2的随机数),这样所得到的就是加入噪声的接收端信号(noised_data)。
图8中可以看到, noised_data=unnoised_data+noise。也就是说在clk_31的上升沿到来的时候,将收到的M序列串与随机噪声相加,得到加噪声的信号,在接收端进行相应的解调,恢复原有信号。