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