最近通信课作业要在Android上模拟出支持105信道同时通信的CDMA系统。我负责CDMA核心编解码部分,好久没用java,真的生疏了-_-! 作业还要写文档,所以趁热先弄些图出来:

CDMA 通信模拟(基于Android平台)

CDMA编码过程(限定用java搞的,没法)

CDMA 通信模拟(基于Android平台)

CDMA解码过程

  • 关键实现代码
/*!
UserKey类的编码方法
\return byte[] 编码后的字节序列(4字节,末尾4位未使用)
*/
public byte[] encode() {
    byte[] result = new byte[4];                    ///< 4 × 8 = 32bit > 28bit    
    final int mask = 15;                            ///< 0x0000000F
        
    for(int i = 0; i < size/* key length */; ++i) {
        if(i % 2 == 0)
            result[i / 2] |= (mask & key[i]) << 4;  ///  写入byte高位
        else
            result[i / 2] |= (mask & key[i]);       ///  写入byte低位
    }
        
    return result;
}
 
/*!
UserKey类的解码方法
\param byte[] 多用户混合编码1个位的字节序列
\return int 本key与混合编码字节序列点乘后的和
*/
public int decode(final byte[] main) {
    int result = 0;
        
    for(int i = 0; i < size/* key length */; ++i) {
        int decoded;
            
        if(i % 2 == 0)
            /* 解析byte高位到decoded,有符号位移 */
            decoded = ((main[i / 2] & 0xF0) << 24) >> 28;
        else
            /* 解析byte低位到decoded,有符号位移 */
            decoded = ((main[i / 2] & 0xF) << 28) >> 28;
                
        result += decoded * key[i];                 ///  点乘相加
    }
        
    return result;
}

相关文章: