加特兰Demo点迹数据Python读取和显示

news2025/1/11 7:41:45

        加特兰当前主推的芯片,拿到了样件做了几个基本Demo测试,录取的点迹数据为txt文档,数据格式如下:

FT =  0.10 CMN1 = 263 CMN2 = 150 BNK 0
--- F 0 O 140/2/140!0/0/0/0/0/0.00! ---
BK
	00: P  25.67, R   4.11, V   0.00, A -39.04, E  -7.04, RCS  25.67, RI 011, VI 000, F 3, C 1.00
	01: P  37.64, R   5.27, V   0.00, A -32.14, E  -7.08, RCS  37.64, RI 013, VI 000, F 3, C 1.00
	02: P  46.10, R   6.13, V -10.33, A  50.44, E   2.99, RCS  46.10, RI 015, VI 438, F 1, C 1.00
	03: P  27.36, R   6.51, V  -6.05, A  45.52, E  -4.39, RCS  27.36, RI 016, VI 469, F 1, C 0.92
	04: P  43.76, R   6.43, V  -9.98, A  51.48, E   2.89, RCS  43.76, RI 016, VI 440, F 1, C 1.00
	05: P  39.81, R   6.46, V  -9.67, A  52.81, E   2.54, RCS  39.81, RI 016, VI 443, F 1, C 0.99

        这些数据可以通过python或c++读取解析。

1 数据读取和解析

        python可以通过基本的open函数、read函数读取txt文件,设置好文本路径,通过下面函数即可读取所有点迹行的数据和帧数。

# 读取所有点迹数据
def DetectInputData(filename):
    data = []
    frame_count = 0
    file = open(filename,'r')       # 打开文件
    file_data = file.readlines()    # 读取所有行
    for row in file_data:
        if len(row) > 90:
            data.append(row)
        if row == 'BK\n':
            frame_count += 1
    return data, frame_count

        c++可以通过文件输入流进行读取,主要通过getline()函数,依次读取txt文档的每一行数据,同样可以根据标识信息获取帧数。

// read detect files
void ReadTxtFile(std::ifstream& file_name, std::vector<std::vector<std::string>>& file_array, uint32_t& detect_frame_num)
{
	std::string file_str;
	uint64_t file_row = 0;
	while(getline(file_name, file_str)) {					// get information
		std::string tmp_str;
		std::stringstream file_data(file_str);				// all of the data read into file_data
		std::vector<std::string> file_line;
		if (file_str.size() > 90) {
			while(getline(file_data, tmp_str, ':')) {			
				file_line.push_back(tmp_str);
			}
			file_array.push_back(file_line);			// use "," to separate id and detect information 
			uint32_t test = 0;
		}
		if (file_str == "BK"){
			detect_frame_num++;
		}
		// std::cout << file_str  << " size:" << file_str.size() << std::endl;					// get header
		file_row++;
	}
}

        再对读取后的数据提取信息,可以根据关键字和","分割符提取。文本中功率为P,距离为R,径向速度为V,方位角度为A,俯仰角度为E,雷达散射截面积为RCS(这里不准确),距离单元索引为RI,速度单元索引为VI,模糊系数为F,点迹概率为C。

00: P  25.67, R   4.11, V   0.00, A -39.04, E  -7.04, RCS  25.67, RI 011, VI 000, F 3, C 1.00

        这里主要提取前面几个点迹信息,如距离、速度等,由于雷达固定不动,可以通过径向速度门限区分运动点迹和静止点迹,python和c++版本分别如下,两个函数名一样,代表用途一致。

# 提取点迹信息
def GetDetectInfo(data, detects, speed_thres):
    for detect_info in data:
        power = 0
        distance = 0
        vr = 0
        azi = 0
        ele = 0
        for i in range(0, len(detect_info)-1):
            if detect_info[i] == 'P':
                power = GetValueResult(detect_info, i+1)
            if detect_info[i] == 'R' and detect_info[i+1] == ' ':
                distance = GetValueResult(detect_info, i+1)
            if detect_info[i] == 'V' and detect_info[i+1] == ' ':
                vr = GetValueResult(detect_info, i+1)  
            if detect_info[i] == 'A':
                azi = GetValueResult(detect_info, i+1)*DEG2RAD
            if detect_info[i] == 'E':
                ele = GetValueResult(detect_info, i+1)*DEG2RAD
        rcs = 10.0
        snr = power - 10.0
        x = distance*np.cos(ele)*np.cos(azi)
        y = distance*np.cos(ele)*np.sin(azi)
        detects.x.append(x)
        detects.y.append(y)
        detects.speed.append(vr)
        detects.snr.append(snr)
        detects.rcs.append(rcs)
        detects.power.append(power)
        # 用径向速度筛选动静点迹
        if abs(vr) > speed_thres:
            detects.move_x.append(x)
            detects.move_y.append(y)
        else:
            detects.static_x.append(x)
            detects.static_y.append(y)

        c++版本由于接入目标跟踪框架,无需做动静分离处理。

// get detect info 
void GetDetectInfo(std::vector<std::string>& detect_line , RadarTarget& radar_target)
{
	radar_target.timestamp = 0.0f;
	radar_target.amb_speed = 100.0f;
	RadarPoint tmp_radar = { 0 };
	tmp_radar.id = std::atoi(detect_line[0].c_str());
	std::string detect_info = detect_line[1];
	for (int i = 0; i < detect_info.size() - 1; i++) {
		if (detect_info[i] == 'P') {
			
			tmp_radar.power = GetValueResult(detect_info, i+1);
		}
		if (detect_info[i] == 'R' && detect_info[i+1] == ' ') {
			
			tmp_radar.distance = GetValueResult(detect_info, i+1);
		}
		if (detect_info[i] == 'V' && detect_info[i+1] == ' ') {
			
			tmp_radar.vr = GetValueResult(detect_info, i+1);
		}
		if (detect_info[i] == 'A') {
			
			tmp_radar.azimuth = GetValueResult(detect_info, i+1)*DEG2RAD;
		}
		if (detect_info[i] == 'E') {
			
			tmp_radar.elevation = GetValueResult(detect_info, i+1)*DEG2RAD;
		}
	}

	tmp_radar.rcs = 10.0f;
	tmp_radar.snr = tmp_radar.power - 10.0f;
	tmp_radar.x = tmp_radar.distance * cosf(tmp_radar.elevation) * cosf(tmp_radar.azimuth);
	tmp_radar.y = tmp_radar.distance * cosf(tmp_radar.elevation) * sinf(tmp_radar.azimuth);
	tmp_radar.z = tmp_radar.distance * sinf(tmp_radar.elevation) + OFFSET_Z;
	radar_target.points.push_back(tmp_radar);
}

        这里都用到了GetValueResult()函数,用来从txt文本中提取数值,两个版本基本一样。

# 获取txt中的数值
def GetValueResult(detect_info, start_pos):
    value = ''
    for i in range(start_pos, start_pos+10):
        if (detect_info[i] == ','):
            break
        if (detect_info[i] != ' '):
            value += detect_info[i]
    result = float(value)
    return result
// 获取txt中的数值
float GetValueResult(std::string& detect_info, int start_pos)
{
	std::string value;
	float result = 0.0f;

	for (int i = start_pos; i < start_pos + 10; i++){
		if (detect_info[i] == ',')
		{
			break;
		}
		if (detect_info[i] != ' ') {
			value += detect_info[i];
		}
	}
	result = (float)std::atof(value.c_str());
	return result;
}

2 数据显示

        数据读取后,即可调用画图显示,这里仅使用python。可以看到,用蓝色和红色区分运动和静止点迹,运动目标点迹整体波动不大,精度较高,更精细的评估需要真值设备,这里不再讨论。

# 显示点迹
    plt.figure()
    plt.scatter(detects.move_y,detects.move_x,s=10,color="b",label="move detect")
    plt.scatter(detects.static_y,detects.static_x,s=10,color="r",label="static detect")
    plt.legend()
    plt.grid(True)
    plt.title("Calterah Detect Test")
    plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AR室内导航如何实现?技术与原理分析

随着科技的进步&#xff0c;我们生活中许多方面正在被重新定义。其中之一就是导航&#xff0c;尤其是室内导航。增强现实&#xff08;AR&#xff09;技术的出现为室内导航带来了革命性的变革。本文将深入探讨AR室内导航的技术与原理&#xff0c;以及它如何改变我们的生活方式。…

bat批处理:git上传更新

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 批处理背景批处理代码代码说明&#xff1a;使…

Hadoop Single Node Cluster的安装

Hadoop Single Node Cluster的安装 安装JDK查看java -version更新本地软件包安装JDK查看java安装位置 设置SSH无密码登录安装hadoop下载安装设置hadoop环境变量修改hadoop配置设置文件设置core-site.xml设置YARN-site.xml设置mapred-site.xml设置HDFS分布式文件系统创建并格式化…

[ CTF ]【天格】战队WriteUp-第七届“强网杯”全国安全挑战赛

第七届“强网杯”全国安全挑战赛 2023.12.16~2023.12.17 文章目录 【Misc】Pyjail ! Its myFILTER !!!easyfuzz谍影重重2.0签到Pyjail ! Its myRevenge !!!server_8F6C72124774022B.py 问卷调查 【Reverse】ezre 【Web】happygame 【强网先锋】石头剪刀布TrieSpeedUpezreez_fmt…

翻译: LLMs新的工作流程和新的机会 New workflows and new opportunities

生成人工智能正以多种方式引领着不仅仅是成本节约&#xff0c;更是收入增长。但是&#xff0c;就像生成人工智能这样的通用技术创造价值的方式有很多&#xff0c;谈论这些方式是很多的。但在这个视频中&#xff0c;我想看看一些我看到的新兴的&#xff0c;或者更常见的走向这种…

Java 8 中的 Stream:优雅的集合处理

Java 8 中的 Stream&#xff1a;优雅的集合处理 为什么需要 Stream&#xff1f;Stream 的特性Stream 基本操作1. 创建 Stream2. 中间操作2.1 过滤&#xff08;Filter&#xff09;2.2 映射&#xff08;Map&#xff09;2.3 截断&#xff08;Limit&#xff09; 3. 终端操作3.1 遍历…

STM32内部是怎么工作的

STM32是怎么工作的 1 从孩子他妈说起2 早期计算机的组成2.1 五大元件&#xff08;1&#xff09;第一个出场的是电容元件&#xff08;2&#xff09;第二个出场的是二极管&#xff08;3&#xff09;第三个出场的是电阻元件&#xff08;4&#xff09;第四个出场的是电感&#xff0…

其他配置相关安装

consul安装和配置 docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client0.0.0.0访问&#xff1a;http://192.168.0.102:8500/ DNS查询 dig 192.168.0.102 -p 8600 consul.service.consul SRVnacos安装 ht…

华为OS与麒麟OS:华为自研操作系统的对决

导言 在移动操作系统领域&#xff0c;华为OS和麒麟OS代表了华为在自主研发方面的努力。本文将深入探讨这两个操作系统的特点、竞争关系以及它们在用户体验、生态系统建设等方面的差异。 1. 背景与起源 华为OS的诞生&#xff1a; 华为OS是华为公司为应对外部环境而自主…

12.18_黑马数据结构与算法笔记Java

目录 thinking:orElse? thinking:map.computerifabsent? thinking&#xff1a;subString&#xff1f; 184 哈希表 问2 解释拆分 185 哈希算法 概述 186 哈希算法 Object.hashCode 187 哈希算法 String.hashCode 188 哈希算法 冲突测试 189 哈希算法 MurmurHash 190…

Linux操作系统:自由、稳定、强大的开源之光

导言 Linux操作系统作为一个开源的、多用户、多任务、支持多线程和多CPU的UNIX类操作系统&#xff0c;不仅在服务器领域占有显著份额&#xff0c;也逐渐在桌面和嵌入式系统中崭露头角。Linux操作系统的多样性体现在各种不同的发行版上&#xff0c;而Ubuntu、CentOS和Red Hat可以…

用Python编辑PDF文件:拆分合并、加密解密、页面编辑

文章目录 安装和初步使用合并与拆分页面编辑加密解密 安装和初步使用 PyPDF2支持拆分、合并、页面旋转、添加水印、加密解密等操作。支持pip安装&#xff0c;过程很丝滑。 pip install PyPDF2PyPDF2提供了PdfFileReader类&#xff0c;可用于读取PDF文件&#xff0c;其metadat…

用户行为分析遇到的问题-ubantu16,hadoop3.1.3

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅&#xff1a;大数据课程实验案例&#xff1a;网站用户行为分析&#xff08;免费共享&#xff09; 用户行为分析-小…

使用ffmpeg将图片合成为mp4

首先在在图片文件夹输入cmd 这里确保已经安装ffmpeg并配置好环境变量。 然后这是我的文件夹目录&#xff1a; 将21张图片合成为mp4视频 这里使用如下命令&#xff1a; ffmpeg -framerate 1 -start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4 -framerat…

rabbitmq-常见七种消息队列-控制台界面管理-python-实现简单访问

文章目录 1.消息的基本概念1.1.生产者和消费者1.2.消息队列(Queue)1.3.交换机(Exchange)1.4.消息确认 2.七种队列模式2.1.简单模式(Hello World)2.2.工作队列模式(Work queues)2.3.发布订阅模式(Publish/Subscribe)2.4.路由模式(Routing)2.5.主题模式(Topics)2.6.远程过程调用(…

windows下wsl(ubuntu)ldconfig报错

错误 sudo ldconfig /sbin/ldconfig.real: Cant link /usr/lib/wsl/lib/libnvoptix_loader.so.1 to libnvoptix.so.1 /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link解决&#xff1a; 处理 sudo ldconfig 报错 libcuda.so.1 is not a symbolic …

GZ015 机器人系统集成应用技术样题8-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题8 选手须知&#xff1a; 本任务书共 25页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

RPC(3):HttpClient实现RPC之GET请求

1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能&#xff0c;但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 H…

3.2 内容管理模块 - 课程分类、新增课程、修改课程

内容管理模块-课程分类、新增课程、修改课程 文章目录 内容管理模块-课程分类、新增课程、修改课程一、课程分类1.1 课程分类表1.2 查询树形结构1.2.1 表自连接1.2.2 SQL递归 1.3 Mapper1.4 Service1.5 Controller1.6 效果图 二、添加课程2.1 需求分析2.2 数据表2.2.1 课程基础…

【linux】SSH终端Putty配置:文件上传/下载、显示中文字体、自动登录

文章目录 写在前面putty上传/下载文件1. 下载2. 解压和配置3. 使用sz/rz3.1 下载文件:sz3.2 上传文件:rz 显示中文字体1. 下载合适的字体2. 解压和安装3. putty配置 putty自动登录1. putty配置2. putty快捷方式配置3. 使用putty 写在后面 写在前面 一篇博客介绍了12种SSH终端工…