2.4g无线跳频(一)

2.4g无线跳频(一)
这里是针对一对一无线通信的简单定时跳频。
一、随机种子与序列
无线跳频首选要生成一个随机的频道序列,让通信的双方按照这个序列跳频。利用C语言库函数rand()与srand(SEED)可实现伪随机数的生成。实际上我们只需要库中固有序列,而随机种子才是我们要注意的。一般随机种子可以用单片机AD脚悬空值,像STM32F4系列本身自带硬件随机数生成器,更方便。
只要有了随机种子SEED,无线通信的双方只需交流种子,便可算出一个序列,这个序列可以是无限,也可以是有限长度的。如果使用有限长度的序列进行跳频,需要在上个周期通知对方下个周期的随机种子,以使通信能够维持。
二、代码

void BuildRandomSequence(unsigned char * data,const unsigned int len,const unsigned int seed)
{
    unsigned char temp,xr;
    unsigned int i=0;
    for(i=0; i<len; i++)
    {
        data[i] = i;
    }
    srand(seed);
    for(i=0; i<len; i++)
    {   
        xr=rand()%len;
        temp=data[i];
        data[i]=data[xr];
        data[xr]=temp;
    }
}



BuildRandomSequence()函数可生成一个长度为len,由[0, len-1]的整数组成的不重复序列,序列由种子参数seed决定。
1.在一对一通信开始之前,应避免大量机器开机时同时使用一个通道,所以从机应该随机选择一个规定范围内的频道,因此主机并不知道从机的所在频道。MCU需生成一个真随机数作为种子,利用以上函数再生成随机序列。用序列对应的频道去轮询从机,一旦有回应,则可找到从机的频道。通信就是这样开始。
2.如果使用有限长度的序列,那么此函数可以生成一个周期内的跳频序列,通信中,每一周期,主机负责生成序列,并且需要提前通知从机随机种子SEED。
三、验证:
在电脑上使用DEV-C++验证

可见种子相同,则生成相同的序列,例子程序中排序是为了方便观察对比。

————————————————

版权声明:本文为CSDN博主「林子xxx」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangzibigan/article/details/77479044

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值