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

76 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 设计需求文档
## RSSI 扫频算法设计
### RSSI分布描述
<img src="docs/pic/image.png"/>
该图为频率范围$f\in[87MHz,108MHz]$下的RSSI的对数坐标分布$RSSI_{log}=10\times\log{RSSI}$。
此设计的目的是**利用编写的接口函数,筛选出图中标出的频点**。
### 需求描述
#### 输入
##### RSSIType
上图中对应的RSSI数据存放在下述定义的数据结构中
```c
typedef struct{
int index; //存放每个采样点的索引值
int RSSI; //存放RSSI的值
}RSSIType;
```
❤**注意此处的RSSI不是图中所示的对数形式请不要对RSSI的值进行Log运算尽量不要进行任何运算因为数据量大延迟很高。**
构成结构数组定义如下:
```C
#define NUM 1060
#define STEP 0.02
RSSIType rssilist[NUM];
```
不推荐更改`NUM`数组长度设定为1060`STEP`扫频步长设定为0.02MHz的数值。由于不可名状的BUG在第一次运行扫频函数时`rssilist[0]`的RSSI值为0。因此可以使用的数据为`rssilist[1]`~`rssilist[1050]`共1050个RSSIType数据结构。由于C的浮点数特性导致频率为108时仍然可以运行扫频程序因此会比期望的数量多一个
##### 门限值Thresh
`RSSI>Thresh`时对应的频率才可能成为频点,**但若该门限过低导致输出的频点多于16个时仅输出最高的16个。**
#### 输出
观察数据规律输出RSSI值最高的频点**精度要求为0.1MHz**),将所有频点的频率**从小到大**存放在以下数据结构中。
```C
typedef struct{
unsigned int channel_no; //存放频道号从1开始递增编号
float freq; //存放频点频率
unsigned int INT; //存放整数部分
unsigned int FRAC; //存放小数部分
}ChannelControlType;
```
其中`INT``FRAC`与频率的转换公式如下:
```C
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行完成函数构建。