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 Normal View History

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