84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
# coding:utf-8
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
RECORD_RESULT_DIR = os.path.join(sys.path[0], "DebugRecord")
|
|
if not os.path.exists(RECORD_RESULT_DIR):
|
|
os.makedirs(RECORD_RESULT_DIR)
|
|
|
|
file_list = os.listdir(RECORD_RESULT_DIR)
|
|
|
|
for file_name in file_list:
|
|
with open(os.path.join(RECORD_RESULT_DIR, file_name), "r", encoding="utf-8_sig") as file:
|
|
data = json.load(file)
|
|
|
|
# 对数据进行排序
|
|
data = sorted(data, key=lambda x: x['record_time'])
|
|
# 修复测距失败的数据
|
|
result = []
|
|
last_distance = {}
|
|
last_correct_time = {}
|
|
for row in data:
|
|
is_successful = row["is_successful"]
|
|
tag_id = row["tag_id"]
|
|
distance = row["distance"]
|
|
first_rssi = row["first_rssi"]
|
|
total_rssi = row["total_rssi"]
|
|
record_time = row["record_time"]
|
|
if distance > 3000:
|
|
continue
|
|
# case1 差距过大
|
|
if abs(first_rssi - total_rssi) < 5:
|
|
continue
|
|
if is_successful:
|
|
last_distance[tag_id] = distance
|
|
last_correct_time[tag_id] = record_time
|
|
result.append({
|
|
"distance": distance,
|
|
"first_rssi": first_rssi,
|
|
"total_rssi": total_rssi,
|
|
"error": 0
|
|
})
|
|
else:
|
|
if tag_id in last_correct_time.keys() and record_time - last_correct_time[tag_id] < 1:
|
|
result.append({
|
|
"distance": last_distance[tag_id],
|
|
"first_rssi": first_rssi,
|
|
"total_rssi": total_rssi,
|
|
"error": distance - last_distance[tag_id]
|
|
})
|
|
print(len(result) / len(data))
|
|
# 统计数据
|
|
first_rssi_data_list = [
|
|
fail_data["first_rssi"]
|
|
for fail_data in result
|
|
]
|
|
total_rssi_data_list = [
|
|
fail_data["total_rssi"]
|
|
for fail_data in result
|
|
]
|
|
distance_data_list = [
|
|
fail_data["distance"]
|
|
for fail_data in result
|
|
]
|
|
error_data_list = [
|
|
fail_data["error"]
|
|
for fail_data in result
|
|
]
|
|
desire_data_list = [
|
|
[
|
|
[fail_data["distance"], fail_data["distance"]],
|
|
[fail_data["first_rssi"], fail_data["total_rssi"]]
|
|
]
|
|
for fail_data in result
|
|
]
|
|
plt.scatter(x=distance_data_list, y=total_rssi_data_list, c="hotpink", alpha=0.5, linewidths=0, s=32)
|
|
plt.scatter(x=distance_data_list, y=first_rssi_data_list, c="cornflowerblue", alpha=0.5, linewidths=0, s=32)
|
|
# plt.scatter(x=distance_data_list, y=error_data_list, c="red", alpha=0.5, linewidths=0, s=32)
|
|
# for desire in desire_data_list:
|
|
# plt.plot(desire[0], desire[1], c="green", alpha=0.1)
|
|
plt.show()
|