物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  其他  >  正文

一种改进的RFID中的密勒解码方法

作者:方洪灿,张福洪,陈胜康
来源:RFID世界网
日期:2015-07-02 16:38:11
摘要:在分析密勒调制副载波技术的基础上,根据其编码特征,设计了一种简单的解码器。首先对来自标签的突发数据帧进行异或运算,然后根据异或运算结果解码,最后根据解出码判断数据帧的开始与结束。

  超高频射频识别UHF RFID技术具有可读距离长、阅读速度快、防碰撞能力强及作用范围广的特点,可广泛应用于物流管理、交通管理、物品跟踪等领域。在实际应用中,为实现电子标签和读写器之间的数据通信,需要对数据进行编码。密勒(Miller)编码含有丰富的时钟信息且具有较好的抗干扰能力,因此是RFID中进行数据通信的优选码型。为改善读写器在拥堵环境或容易发生干扰环境中的工作能力,ISO/IEC 18000-6C协议规定,电子标签返回读写器的数据除可以选用FM0编码外,还可以选用密勒调制副载波序列(M=2、4、8),以改变编码速率[3]。在射频通信领域,有少量文献对密勒解码进行研究,但总体上缺乏对密勒解码技术尤其是对密勒调制副载波序列解码技术的详细研究。本文分析ISO/IEC 18000-6C协议中采用的密勒调制副载波技术,设计并实现一种符合该协议的密勒解码器。

  1 密勒码[3]

  1.1 Miller基本功能和状态图

  图1显示了生成Miller编码的基本功能和状态图。基带Miller按顺序在2个数据0之间变换相位。基带Miller还在数据1符号的中间放置一个相转化。图1(b)所示的状态图描绘了基带Miller基本功能的逻辑数据序列。S1~S4状态标记表明4种可能的Miller编码符号,代表各Miller码基本功能的2个相位。这些状态标签还表示键入状态后即传输的Miller波形。状态转换标签表示被编码的数据序列的逻辑值。例如,从状态S2转换到状态S3是不允许的,因为由此产生的传输在数据0和数据1之间的符号边界上没有相转化。图1(b)所示的状态图不暗示任何特殊执行。

   一种改进的RFID中的密勒解码方法

  1.2 副载波序列和结尾特征

  Miller调制副载波序列,每位应包含2、4或8个副载波周期,具体情况视启动该盘存周期的Query命令规定的M值而定。在调制器输出时测得的0或1符号的工作循环最低为45%,最高为55%,标称值为50%。Miller发信应始终在每次传输结束时以“dummy”数据-1结尾[3]。

  2 解码器的设计与实现

  传统的密勒解码是根据一个同步时钟和一个计数器计值来判断输出,通过对输入信号进行异或运算,结合编码特征,判断输出,实现比较复杂。

  2.1 异或运算

  首先,通过时钟的上升沿来激励,一旦数据开始,就将输入的数据与时钟异或。如图2,M=2(2个副载波周期),输入data_in(010111000),与clk异或,结果就是re_mark。re_mark的波形与图1 Miller基本功能的波形相似,从而可以解出的码为‘010111000’,如图2。

   一种改进的RFID中的密勒解码方法

  2.2 密勒解码

  整个解码过程用一个有限状态机控制,图3为解码状态机的程序说明图。M_value的值表示副载波周期的个数,计数器counter用来记录clk的周期数,pre_one记录当读到re_mark=1时,之前有几个re_mark=1,pre_zero记录当读到re_mark=0时,之前有几个re_mark=0。其中State<={M_value,counter,pre_one,pre_zero}。

   一种改进的RFID中的密勒解码方法

  2.3 帧头检测

  根据Miller副载波前同步码的特性,解码出的数据首先要进行前同步码的检测。程序中定义2个寄存器TRext、register。前同步码的帧头0的个数由TRext所决定。帧头检测模块如图4。当帧头检测到时,输出data_begin_valid=1,否则data_begin_valid=0。

   一种改进的RFID中的密勒解码方法

  2.4 数据零的相位判断

  根据编码特征:符号‘0’期间不发生相位翻转;符号‘1’中间处发生相位翻转;只有在相邻符号都为‘0’时,符号分界处才发生相位翻转,解出的码,要进行0相位的判断。

  2.4.1 数据存储

  模块的程序流程图如图5。其中newdata0_zero_flag、newdata1_zero_flag、zero_flag、one_flag来自解码模块。newdata0_zero_flag是数据0由连续低电平解码的标志位;newdata1_zero_flag是数据0由连续高电平解码的标志位;zero_flag是数据0的标志位;one_flag是数据1的标志位。

   一种改进的RFID中的密勒解码方法

  2.4.2 相位判断

  数据储存模块有2个功能,一个功能是储存用于帧头检测的数据,另一个功能用于零相位的判断。其中寄存器data_begin_valid、counter_zero0、counter_zero1、zero_flag、data_valid来自数据存储模块。counter_zero0表示连续几个时钟周期(具体个数,由M_value决定)的低电平而输出的解码数据0。counter_zero1表示连续几个时钟周期(具体个数,由M_value决定)的高电平而输出的解码数据0。模块程序流程图如图6。

   一种改进的RFID中的密勒解码方法

  2.4.3 帧尾检测

  解码过程中,当输出数据为100时,如果符号0之间发生相位翻转了,则error=0,反之,error=1。之后再判断解码数据是否为连续的低电平。如果是,则判断1为结束位,反之则判断相位翻转错误。输出data_over脉冲表示解码结束,同时error=1,然后停止解码,等待下一帧数据的到来。

  2.5 解码器的实现

  数据由data_in输入,由data_begin控制数据的开始;由data_out输出,同时data_out_valid必须等于1,error必须等于0,否则0的相位有错。整个模块如图7。

   一种改进的RFID中的密勒解码方法

  3 仿真结果

  本文设计的密勒调制副载波序列解码器采用数字逻辑设计,用Verilog HDL对该方法进行编程实现。为了验证设计的正确性,本文使用Altera的Quartus II(V6.1)对设计进行电路综合。 由于前同步码格式,副载波数取值的难易关系到仿真图的坐标长短,本文为便于解释,M取2,即M_value=0,TRext=0。

  3.1 帧头检测测试

  当检测到帧头时,输出data_begin_valid=1。如果输入data_in只是一个前同步码,则data_begin_valid输出,如图8。

   一种改进的RFID中的密勒解码方法

  3.2 数据输出仿真结果

  数据‘10110001’从同步码后输入,即从215 ns后输入。解码后,从端口data_out输出,如图9。同时data_out_valid必须为高电平,error必须为低电平。每来一个时钟上升沿,从端口读取解码后的数据。

   一种改进的RFID中的密勒解码方法

  3.3 相位出错仿真

  数据从395 ns之后就输入一串如同时钟一样的电平。根据编码特性,符号0之间必须相位翻转,否者就违反编码规则。数据符号0之间没有相位翻转,结果仿真就输出error置高电平了,如图10。

   一种改进的RFID中的密勒解码方法

  3.4 帧尾检测仿真

  帧尾检测,用到一个5位的寄存器register_data。其功能是存储解码输出数据,一旦出现error=1,便判断其存储值是否为‘10000’。结果为1就是结束标志。从395 ns后,输入1,之后的数据如同时钟数据。符号0相位未翻转,之后再存储几个解码数据,判断是相位翻转错误还是帧结尾标志。如图11,出现了帧结尾标志。

   一种改进的RFID中的密勒解码方法

  本文分析了应用于超高频RFID数据通信的密勒调制副载波技术的特点,并基于该特点设计了一种密勒调制副载波序列解码器。该设计采用硬件描述语言编程实现,并进行FPGA硬件验证。硬件测试结果验证了该方法能够正确地对副载波密勒编码数据进行解码。