Give me a piece sky! Give you one Creation! Give us one invention!
  • 2009-01-04

    SRD短距离无线通讯的几种常用的编解码方法 - [技术话题]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://taurusboy.blogbus.com/logs/33405448.html

    SRD短距离无线通讯的几种常用的编解码方法

      随着无线通讯应用的日益普及,SRD应用随之增多。在应用中会遇到无线通讯相关的很多设计问题,比如调制方式,基带的编码方式,网络匹配,天线设计等等。这里笔者但就SRD(SHORT RANGE DISTANCE)无线产品应用中必须面对的基带数据编解码方式,搜集几种常用的方式,供大家参考。
      SRD应用中编码方式有以下几种:
    1.曼切斯特编码及反曼切斯特编码
    2. 差分曼切斯特编码
    3.双相位编码
    4.PWM编码方式
    5.拆分编码方式
      
    一、编码方式
    1. 曼切斯特编码—Manchester Code
    曼切斯特编码 (也称为相位编码,简称PE),是一个线性码,该编码在每个数据位时间段内至少有一次电平跳变。因此 它也是自我时钟同步,意味着接收方可以在接收编码数据位同时可恢复时钟信号。
     
    图1—曼切斯特、反曼切斯特编码
    original data = clock XOR Manchester value
      0 0 0
      0 1 1
      1 0 1
      1 1 0

    特点:
    1) 每个数据位以固定时间单位被发送。
    2) 曼切斯特编码,数据位‘0’,表示为HIGH 到 LOW 的电平跳变; 数据位‘1’,表示为LOW 到 HIGH 的电平跳变。
    反向曼切斯编码,数据位‘0’,表示为LOW 到 HIGH 的电平跳变; 数据位‘1’,表示为HIGH 到 LOW 的电平跳变。
    3) 电平跳变在每个数据位时间宽度的中间进行。
    4) 在数据位的起始点跳变是没有数据意义的。
    2. 差分曼切斯特编码
      差分曼切斯特编码在前面1)节基础上稍微改变一下。编码规则如下:
    1) 当前发送数据位是“1”,则当前信号的前半部分信号同上一次信号发射的后半部分信号,即在数据位的开始不需要信号转变,仅在数据位时间的中间转变一次。
    2) 当前发送数据为“0”,则当前信号的前半部分信号与上一次信号发射的后半部分信号相反,即在数据位的开始先转变一次,随后在数据位时间中间点再转变一次。

     
    特点:
    1) 噪音环境具有很低误码。
    2) 重要的特性是只需信号的转变,同时不需判断信号极性。

    3. 双极性编码方式
    双极性编码方式
    1) 在BIPHASE 0 模式下,数据位“1”,信号与上次发送的信号相反。数据“0”,信号在起始处与上次发送的信号相反,而且在信号周期的中间,信号再转变一次。
    2) BIPHASE 1 模式下,数据位“0”,信号与上次发送的信号相反。数据“1”,信号在起始处与上次发送的信号相反,而且在信号周期的中间,信号再转变一次。

     


    4. PWM 编码方式
     PWM 编码方式如下:数据位“1”、“0”在数据位周期内采用不同MARK,SPACE 比例来表示。
    下图示意一个PWM编码。
    1) 数据位“1”, 在数据位周期内采用比例3:1的占空比,3X”MARK”: 1X”SPACE”.
    2) 数据位“0”, 在数据位周期内采用比例1:3的占空比,1X”MARK”: 3X”SPACE”.
     


    5. 拆分编码方式
      拆分编码法,采用把一个数据字节分成两部分,奇数位部分、偶数位部分或高、低半字节,每位的数据按标准曼切斯特进行编码,“1”—》10;“0” ---01 。组合后的数据为两个字节。采用这种编码方式主要借用UART的格式进行数据发送。

    奇偶拆分法: 
    b7b6b5b4b3b2b1b0.--> 
    odd_b=(data &0xaa) |(~(data&0xaa>1)); // b1,3,5,7
    even_b=(data&0x55)<1;
    even_b=(~ even_b &0x55)|( even_b &0x55); // b0,2,4,6
      return ( (odd_b<<8)|even_b);
     
     举例:
    0XC7=0b11000111-> 1x0x0x1x.->10010110
      x1x0x1x1->10011010.

    半字节拆分法:
    高半字节(msb nibble)、低半字节(lsb nibble)。
    b7b6b5b4 b3b2b1b0
    举例: 
     0x34高半字节0X3 –〉0X01011010
      低半字节 0X4 –〉0X01100101
    编码表如下:

    Nibble = 0 -> 01010101 , 0X55
    Nibble = 1 -> 01010110, 0X56
    Nibble = 2 -> 01011001, 0X59
    Nibble = 3 -> 01011010, 0X5A
    Nibble = 4 -> 01100101, 0X65
    Nibble = 5 -> 01100110, 0X66
    Nibble = 6-> 01101001, 0X69
    Nibble = 7 -> 01101010, 0X6A
    Nibble = 8 -> 10010101, 0X95
    Nibble = 9 -> 10010110, 0X96
    Nibble = A -> 10011001, 0X99
    Nibble = B -> 10011010,0X9A
    Nibble = C -> 10100101, 0XA5
    Nibble = D -> 10100110, 0XA6
    Nibble = E -> 10101001, 0XA9
    Nibble = F -> 10101010, 0XAA



    参考文献:
    1) WIKIPEDIA, http://en.wikipedia.org/wiki/Manchester_coding
      2)  


    收藏到:Del.icio.us