MMC/设计需求.md
2022-08-16 16:54:00 +08:00

2.3 KiB
Raw Permalink Blame History

设计需求文档

RSSI 扫频算法设计

RSSI分布描述

该图为频率范围$f\in[87MHz,108MHz]$下的RSSI的对数坐标分布$RSSI_{log}=10\times\log{RSSI}$。

此设计的目的是利用编写的接口函数,筛选出图中标出的频点

需求描述

输入

RSSIType

上图中对应的RSSI数据存放在下述定义的数据结构中

typedef struct{
    int index;  //存放每个采样点的索引值
    int RSSI;   //存放RSSI的值
}RSSIType;

注意此处的RSSI不是图中所示的对数形式请不要对RSSI的值进行Log运算尽量不要进行任何运算因为数据量大延迟很高

构成结构数组定义如下:

#define NUM 1060
#define STEP 0.02
RSSIType rssilist[NUM];

不推荐更改NUM数组长度设定为1060STEP扫频步长设定为0.02MHz的数值。由于不可名状的BUG在第一次运行扫频函数时rssilist[0]的RSSI值为0。因此可以使用的数据为rssilist[1]~rssilist[1050]共1050个RSSIType数据结构。由于C的浮点数特性导致频率为108时仍然可以运行扫频程序因此会比期望的数量多一个

门限值Thresh

RSSI>Thresh时对应的频率才可能成为频点,但若该门限过低导致输出的频点多于16个时仅输出最高的16个。

输出

观察数据规律输出RSSI值最高的频点精度要求为0.1MHz),将所有频点的频率从小到大存放在以下数据结构中。

 typedef struct{
    unsigned int  channel_no; //存放频道号从1开始递增编号
    float  freq;		      //存放频点频率
    unsigned int  INT;		  //存放整数部分
    unsigned int  FRAC;		  //存放小数部分
}ChannelControlType;

其中INTFRAC与频率的转换公式如下:

int INT=floor(freq/3);
int FRAC=(freq/3-INT)*3000;

可以使用提供的数据在x86平台进行测试测试完毕后需要按照注释的位置插入相应的代码并Build确认无报错

需要插入的部分包括:

code_def.h第73行声明函数名

code_def.c第13行创建ChannelControlType数组含有16个元素全局变量

code_def.c第239行调用函数

code_def.c第246行完成函数构建。