# 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()