2.4G信道跳频-LFSR-C代码实现

算法原理

抽头

根据设定的多项式进行抽头,然后将抽头的数据异或,放到 移动后的数据最高位。(注意,此最高位表示最靠近 移动方向的第一位数据)

移出的数据必须参与反馈

根据抽头多项式,把移动前的最高位,作为反馈 ,放到移动后的数据 最低位。(注意,此最低位表示移出的那个新的位)

源码实现和运行结果

unsigned short buf[10]={0};
unsigned char LFSR = 0X3a;
unsigned char a;
unsigned char data = 0, d5 = 0, d6 = 0,d7 = 0;
//==========================
// 多项式中的 最高位位置是以你移动的方向来定的,
//向左移 X^7就表示数据的D7 
//向右移 X^7就表述数据的D1
//==========================
void LFSR_Calc_7bit_Res_127_Left_move(int i)
{   

    d7 = d6 = 0;
    data = LFSR & 0x7f;  // 7位,抽头[7,6],x^7+x^6+1
    if(data == 0)       data = 1;   // 不能为0, 不然会进入死循环
    if(data & 0x40)     d7   = 1;   // 取D7
    if(data & 0x20)     d6   = 1;   // 取D6
    data <<= 1;
    data &= 0x7f;
    if(d7)                  // D1 = D7      最后一位必须参与反馈
        data |= 0x01;
    else
        data &= (~0x01);
    if(d7 ^ d6)             // D7 = D7^D6   
        data |= 0x40;
    else
        data &= (~0x40);
    LFSR = data;
    if(i==0)
    {
        a = LFSR;
    }

    printf("%x,",LFSR);
   
}
unsigned char  d2 = 0,d1 = 0;
void LFSR_Calc_7bit_Res_127_right_move(int i)
{   

    d1 = d2 = 0;
    data = LFSR & 0x7f;  // 7位,抽头[7,6],x^7+x^6+1
    if(data == 0)       data = 1;   // 不能为0, 不然会进入死循环
    if(data & 0x01)     d1   = 1;   // 取D1
    if(data & 0x02)     d2   = 1;   // 取D2
    data >>= 1;
    data &= 0x7f;
    if(d1)                  // D7 = D1        最后一位必须参与反馈
        data |= 0x40;
    else
        data &= (~0x40);
    if(d1 ^ d2)             // D1 = D1^D2  
        data |= 0x01;
    else
        data &= (~0x01);
    LFSR = data;
    if(i==0)
    {
        a = LFSR;
    }

    printf("%x,",LFSR);
   
}
int main()
{
  
 
    for(int i=0;i<500;i++)
    {	
    	//LFSR_Calc_7bit_Res_127_right_move(i);
        LFSR_Calc_7bit_Res_127_Left_move(i);
         if(a == LFSR && i!=0) 
         {
            printf("\n Same is :%d\n",i);
            break;
         }
        
    }
}
左移运行结果如下:
74,29,52,65,b,16,2c,58,71,23,46,4d,5b,77,2f,5e,7d,3b,76,2d,5a,75,2b,56,6d,1b,36,6c,19,32,64,9,12,24,48,51,63,7,e,1c,38,70,21,42,45,4b,57,6f,1f,3e,7c,39,72,25,4a,55,6b,17,2e,5c,79,33,66,d,1a,34,68,11,22,44,49,53,67,f,1e,3c,78,31,62,5,a,14,28,50,61,3,6,c,18,30,60,1,2,4,8,10,20,40,41,43,47,4f,5f,7f,3f,7e,3d,7a,35,6a,15,2a,54,69,13,26,4c,59,73,27,4e,5d,7b,37,6e,1d,3a,74,
 Same is :127
有127次结果。


/
右移结果如下:
1d,4f,66,33,58,2c,16,b,44,22,11,49,65,73,78,3c,1e,f,46,23,50,28,14,a,5,43,60,30,18,c,6,3,40,20,10,8,4,2,1,41,61,71,79,7d,7f,7e,3f,5e,2f,56,2b,54,2a,15,4b,64,32,19,4d,67,72,39,5d,6f,76,3b,5c,2e,17,4a,25,53,68,34,1a,d,47,62,31,59,6d,77,7a,3d,5f,6e,37,5a,2d,57,6a,35,5b,6c,36,1b,4c,26,13,48,24,12,9,45,63,70,38,1c,e,7,42,21,51,69,75,7b,7c,3e,1f,4e,27,52,29,55,6b,74,3a,1d,
 Same is :127
 有127次结果。
 ///
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值