1.3 误码仪基本测试过程
m序列发生模块首先根据用户的速率要求发送测试序列。该序列经过被测信道传输后到达接收端,并送入位于FPGA内的位同步模块。位同步模块恢复码元时钟成功后,会将这一时钟送至其它模块,并通知单片机位同步成功。其它模块利用本地时钟完成检验序列恢复、同步及比较,并由此得到误码信息:误码数和总码数。该信息实时传送给单片机后,单片机每隔1秒进行一次误码率的计算,并将具体日期、时间和误码率大小显示在LCD上。如果误码率大于0则认为发生了一次误码事件,单片机会将此事件发生的时间和误码率的大小记录在储存器内,并通过RS232串口上传至PC机。
2 核心部分设计
FPGA中的位同步模块和序列同步模块是实现误码仪的关键。这两个模块设计得好坏直接影响着误码仪的整体性能。同时,误码仪智能能力的实现也离不开单片机的有效工作。
2.1 位同步模块
实际应用中,由于不同的被测信道采用不同的技术,因此其传输方式、传输速率、复杂程度都各不相同。这就要求误码仪中的位同步模块具有较强的适应能力。一般常见的同步方法如插入导频法、滤波法等都无法满足信道多变的要求5。为此,根据数字锁相环的基本原理并结合FPGA的结构特点,研究了一种自适应的智能锁相算法,该算法可使误码仪在较宽的速率范围内对信号时钟进行智能提取和跟踪,具有较高的实用价值。
图2是该位同步模块的结构框图。为了使接收端能快速、准确地提取码元时钟,发送端在发送m序列前应先发送一定数量的0101序列(见图3中的S1),其中“0”和“1”的宽度与单个码元宽度相同。在接收端预先不知道信号单个码元宽度(即码元时钟)的情况下,位同步模块首先进行码元宽度检测。这一工作主要由码元宽度计数器完成。该计数器在高速全局时钟驱动下分别对信号中的“0”、“1”电平进行宽度计数。
由于发送的是0101序列,因此码元宽度计数器的计数值N将保持在一定阈值范围内,这一N值表示了发来信号码元宽度相当于N个全局时钟宽度。由此,位同步模块便获得了发来信号的单个码元宽度信息。之后,位同步模块在传输信号的上升沿或下降沿启动本地N计数器,产生与发端信号同频的本地时钟S2。S2经过一个定值延时器延时Nx个全局时钟宽度后,得到信号S3。S3与S1在鉴相器中进行异或门鉴相,其结果为S4。由图3可见,若S4中高电平宽度等于Nx个全局时钟宽度,则本地时钟S2与发端时钟S1同相。若S4中高电平宽度大于Nx,则本地时钟滞后,反之则超前。由此得到了本地时钟超前或滞后的信息。控制器根据这一信息对本地N计数器进行加、扣脉冲操作,使得本地时钟与发端时钟保持同相。
图4 序列同步模块框图
在m序列中,连0、连1的情况很多,为了防止鉴相器在此期间误操作,设计了判别及控制电路,在信号出现连0或连1时使鉴相器不操作,让本地N计数器始终以N为计数值计数。采用这种同步方法后,不仅误码仪同步适应范围加宽,而且本地恢复时钟的精度也仅与全局时钟有关,而与发端信号速率无关。实际测试证实,在信号存在50个连0时,位同步模块仍能正常工作。
2.2 序列同步模块
前面已经提到,m序列是周期序列,测试序列和检验序列的比较应以周期内的同一位置作为起点。因此,在序列比较前应首先进行序列同步。常见的序列同步方法有:滑动相关捕捉法、序列相关捕捉法、SAW器件捕捉法等6。这些方法都是利用序列的相关特性进行同步的,存在着结构复杂、同步时间较长等缺陷,不适合用FPGA实现。为了使误码仪能在不知道发送端序列发生器初始状态的情况下进行快速盲同步,在实际设计中采用了开关门m序列同步算法7。其原理框图如图4所示。
在初始状态下,开关K置于B位置,发端送来的测试序列在完成位同步后移位送入寄存器an-1…a0。存满后,开关K置于A位置。寄存器an-1…a0和模二加法器在本地时钟的驱动下产生出检验序列。由于m序列的下一存储器状态组合仅取决于当前的状态组合,因此,如果最初的9个接收码元是正确的,则随后产生的所有码元都是与测试序列相同和同步的。之后,测试序列与检验序列需要进行一次相关比较,如在若干个(如5个)码元周期内其相关值超过阈值,则可认为两序列同步,否则需要重新进行同步操作。
采用这一方法后,序列同步时间大大缩短,有利于进行快速测试。