78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
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() |