This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/4.MISC/ADS1278_manualclock/ADS1278_Draw.py

78 lines
2.7 KiB
Python
Raw Permalink 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.

import matplotlib.pyplot as plt
def decimal_to_8bit_binary(decimal_number):
if decimal_number < 0 or decimal_number > 255:
raise ValueError("十进制数必须在0到255之间。")
return f'{decimal_number:08b}' # 使用8位表示
def read_numbers_from_file(filename):
with open(filename, 'r') as file:
binary_numbers = [int(line.strip()) for line in file.readlines() if line.strip().isdigit()]
return binary_numbers
def to_signed_decimal(binary_str):
# 将二进制字符串转换为有符号十进制数
if binary_str[0] == '1':
# 如果最高位是1表示是负数
return int(binary_str, 2) - (1 << len(binary_str))
else:
return int(binary_str, 2)
def main():
filename = "E:\\02.JobFile\\01.项目资料\\03.风电机组三合一采集器项目开发\\01.机舱采集器\\01.软件\\others\\ADS1278_manualclock\\ADS1278.txt"
# 从文件读取十进制数
decimal_numbers = read_numbers_from_file(filename)
# 列表以存储结果
binary_numbers = []
# 每三个十进制数组合成一个24位的二进制数
for i in range(0, len(decimal_numbers), 3):
chunk = decimal_numbers[i:i+3]
if len(chunk) == 3: # 确保是三个数
# 转换每个十进制数为8位二进制数并连接
binary_number = ''.join(decimal_to_8bit_binary(num) for num in chunk)
signed_decimal = to_signed_decimal(binary_number)
scaled_value = signed_decimal / 8388607 * 2.5 * 4
binary_numbers.append(scaled_value)
else:
print(f"剩余的数字不足3个, 忽略: {chunk}")
# 计算平均数
average = sum(binary_numbers) / len(binary_numbers)
# 计算最大值和最小值
maximum = max(binary_numbers)
minimum = min(binary_numbers)
# 计算中位数
sorted_numbers = sorted(binary_numbers)
n = len(sorted_numbers)
if n % 2 == 0: # 偶数个数
median = (sorted_numbers[n // 2 - 1] + sorted_numbers[n // 2]) / 2
else: # 奇数个数
median = sorted_numbers[n // 2]
# 输出结果
for value in binary_numbers:
print(value)
print(f"平均值: {average}")
print(f"最大值: {maximum}")
print(f"最小值: {minimum}")
print(f"中位数: {median}")
# 绘制时域图
plt.figure(figsize=(10, 5))
plt.plot(binary_numbers, label='Scaled Values', color='b')
plt.title('Time Domain Signal')
plt.xlabel('Sample Index')
plt.ylabel('Amplitude')
plt.grid(True)
plt.legend()
plt.show()
if __name__ == "__main__":
main()