TDOA 之 基站接收数据
2024-08-27 04:54:21
基站主要 接收同步节点发来的同步信号,代码里定义为S信息。 以及标签节点发来的定位信号,代码中定义为T信号。
代码中使用中断以及帧过滤功能,对模块只接收自己关心设定好的信息,通过中断告知上层,而不是长时间轮训方式。
帧过滤参考博文:https://www.cnblogs.com/tuzhuke/p/10503052.html
如下为基站核心代码:
1 使能接收中断
dwt_setinterrupt(DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO /*| DWT_INT_RXPTO*/), );
2 接收信息并记录自己的接收时间戳和 信息发送的时间戳
switch(msg_f->messageData[])
{
case 'S':
//save seq
//save rx timestamp
last_rx_ts = get_rx_timestamp_u64();//获取接收时间戳 // last_rx_ts =0x123456789A;测试数字
//对64位数据移位成两个数字,用来液晶显示
l8_timestamp = last_rx_ts&0xFF;
h32_timestamp= last_rx_ts>>; sprintf(lcd_display_str, "%08X%02X",h32_timestamp,l8_timestamp);
OLED_ShowString(,,(uint8_t *)lcd_display_str); //toggle LED 指示接收成功
ledValue = ~ledValue;
GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3, ledValue); //save delayed tx timestamp
//获取信息中Sync 节点的发送时间戳
//信息起始位置位2,分别在2 3 4 5 6
last_rx_ts=;
final_msg_get_ts(&msg_f->messageData[],&last_rx_ts);
//对64位数据移位成两个数字,用来液晶显示
l8_timestamp = last_rx_ts&0xFF;
h32_timestamp= last_rx_ts>>; sprintf(lcd_display_str, "%08X%02X",h32_timestamp,l8_timestamp);
OLED_ShowString(,,(uint8_t *)lcd_display_str);
break;
上述代码只是简单接收了同步节点发送来的时间信号,通过液晶显示出来,与同步节点显示对比,实际需要做的工作还有很多,总结如下
3 基站接收逻辑功能
除了上面部分,需要实现的逻辑
A. 由原理部分得知,需要接收到连续两个同步信号以及中间的标签定位信号 才能算一个完整的接收序列。
对于接收同步节点信号S来说,需要记录前后两次同步信号的sequence号,两者只能差1,如果出现丢包,需要做丢弃处理
B 对于定位信号,同样由原理部分,定位信号应该夹在同步信号之内,而且需要记录定位信号的sequence。
C 当收到一个同步信号S后,开始接受序列启动,下一个应该接收的信号是定位信号T,如果有,再下一个是其它节点的定位信号T。最后是同步信号S, 标记一个完整的接收序列,通过串口或者网口送给定位引擎。 同时需要将最后一个同步信号用作下一个序列的开始。
最新文章
- CSS3之新UI方案
- appstore不能登陆
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
- (41) Aeroo 模板设计基础教程
- [python]逆水行舟不进则退(1)
- 每天一道LeetCode--371. Sum of Two Integers
- css3学习笔记之图片
- WPF界面设计技巧(10)-样式的继承
- PE文件格式详解(下)
- 影响国内WinCE7发展的最大障碍是没有D版下载
- Android与javascript中事件分发机制的简单比较
- CentOS 7 安装Maven
- 03-django模型(1)
- Java过滤器Filter
- 微信小程序学习 一
- HZAU2018年十大阅读之星演讲稿
- 快速修改数据库日志的增长修改为50M[转]
- mysql8基本配置,差点被各种坑蒙圈
- Atlantis(POJ1151+线段树+扫描线)
- margin外边距问题