import serial import pywt import numpy as np import time # 接收数据 ser = serial.Serial('COM3', 115200) # 115200 是波特率 fi = 0 for turn in range(0, 3): # 设置接收数据轮次 n = 0 Sum = 0 m = 1000 dataset = [1 for i in range(1000)] while True: # 设置接收数据个数 n = n + 1 if n > 1000: break # 开始接收数据 data = ser.readline().strip() # print(data.decode()) if n > 1: if abs(int.from_bytes(data, byteorder='little', signed=False) - int(dataset[n - 2])) < 700: dataset[n-1] = dataset[n-2] else: dataset[n-1] = data # 使用小波分析进行阈值去噪声 w = pywt.Wavelet('db8') # 用Daubechies8小波 maxlev = pywt.dwt_max_level(len(dataset), w.dec_len) # 最大分解的阶数 # print("The maximum level is " + str(maxlev)) threshold = 0.5 # 阈值滤波 coeffs = pywt.wavedec(dataset, 'db8', level=maxlev) # 将信号进行小波分解 for i in range(1, len(coeffs)): coeffs[i] = pywt.threshold(coeffs[i], threshold * max(coeffs[i])) # 将噪声滤波 datarec = pywt.waverec(coeffs, 'db8') # 对信号重构 # print(str(datarec)) fi = datarec + fi print("The final result data is " + str(sum(datarec)/len(datarec))) print("average is " + str(sum(fi)/len(fi) / 3))有报错 if abs(int.from_bytes(data, byteorder='little', signed=False) - int(dataset[n - 2])) < 700: ValueError: invalid literal for int() with base 10: b'1849580.25000\x00'
时间: 2024-04-27 13:23:00 浏览: 97
这个报错的原因可能是因为从串口接收到的数据不是一个整数,而是一个带小数点的字符串,无法用int()函数直接转换。你需要先将接收到的数据转换成浮点数,再进行比较。你可以使用float()函数将字符串转换成浮点数,然后再进行比较,例如:`if abs(float(data.decode()) - float(dataset[n - 2])) < 700:`。另外,你需要注意,串口接收到的数据可能带有一些无关字符,需要进行去除,例如使用strip()函数。
相关问题
import serial import pywt import numpy as np import time # 接收数据 ser = serial.Serial('COM3', 115200) # 115200 是波特率 fi = 0 for turn in range(0, 3): # 设置接收数据轮次 n = 0 Sum = 0 m = 1000 dataset = [1 for i in range(1000)] while True: # 设置接收数据个数 n = n + 1 if n > 1000: break # 开始接收数据 data = ser.readline().strip() # print(data.decode()) if n > 1: if abs(float(data) - float(dataset[n - 2])) < 700: dataset[n-1] = dataset[n-2] else: dataset[n-1] = data # 使用小波分析进行阈值去噪声 w = pywt.Wavelet('db8') # 用Daubechies8小波 maxlev = pywt.dwt_max_level(len(dataset), w.dec_len) # 最大分解的阶数 # print("The maximum level is " + str(maxlev)) threshold = 0.5 # 阈值滤波 coeffs = pywt.wavedec(dataset, 'db8', level=maxlev) # 将信号进行小波分解 for i in range(1, len(coeffs)): coeffs[i] = pywt.threshold(coeffs[i], threshold * max(coeffs[i])) # 将噪声滤波 datarec = pywt.waverec(coeffs, 'db8') # 对信号重构 # print(str(datarec)) fi = datarec + fi print("The final result data is " + str(sum(datarec)/len(datarec))) print("average is " + str(sum(fi)/len(fi) / 3))有报错 if abs(float(data) - float(dataset[n - 2])) < 700: ValueError: could not convert string to float: b'1850035.62500\x00'
这个报错的原因可能是因为从串口接收到的数据是一个带有字节格式的字符串,无法用float()函数直接转换。你需要先将字节格式的字符串转换成普通的字符串,再进行转换。你可以使用decode()函数将字节格式的字符串转化为普通的字符串,例如:`if abs(float(data.decode()) - float(dataset[n - 2])) < 700:`。另外,你需要注意,串口接收到的数据可能带有一些无关字符,需要进行去除,例如使用strip()函数。
代码import serial import pywt import numpy as np import time # 接收数据 ser = serial.Serial('COM3', 115200) # 115200 是波特率 fi = 0 for turn in range(0, 3): # 设置接收数据轮次 n = 0 Sum = 0 m = 1000 dataset = [1 for i in range(1000)] while True: # 设置接收数据个数 n = n + 1 if n > 1000: break # 开始接收数据 data = ser.readline().strip() print(data.decode()) if n > 1: if abs(int.from_bytes(data, byteorder='little', signed=False) - int.from_bytes(dataset[n - 2], byteorder='little', signed=False)) >= 700: dataset[n-1] = dataset[n-2] else: dataset[n-1] = data # 使用小波分析进行阈值去噪声 w = pywt.Wavelet('db8') # 用Daubechies8小波 maxlev = pywt.dwt_max_level(len(dataset), w.dec_len) # 最大分解的阶数 # print("The maximum level is " + str(maxlev)) threshold = 0.5 # 阈值滤波 coeffs = pywt.wavedec(dataset, 'db8', level=maxlev) # 将信号进行小波分解 for i in range(1, len(coeffs)): coeffs[i] = pywt.threshold(coeffs[i], threshold * max(coeffs[i])) # 将噪声滤波 datarec = pywt.waverec(coeffs, 'db8') # 对信号重构 # print(str(datarec)) fi = datarec + fi print("The final result data is " + str(sum(datarec)/len(datarec))) print("average is " + str(sum(fi)/len(fi) / 3))有报错Traceback (most recent call last): File "C:/Users/86138/Desktop/光设校赛/main.py", line 23, in <module> if abs(int.from_bytes(data, byteorder='little', signed=False) - int.from_bytes(dataset[n - 2], byteorder='little', TypeError: cannot convert 'int' object to bytes
这个错误是因为在第23行代码中,你尝试使用 `int.from_bytes()` 函数将一个整数转换为字节,但是该函数只能将字节转换为整数。你应该将 `dataset` 中的数据从字节转换为整数,然后再进行比较。可以使用 `int()` 函数将字节转换为整数,例如将第23行代码修改为:
```
if abs(int.from_bytes(data, byteorder='little', signed=False) - int(dataset[n - 2])) >= 700:
```
同时,你需要注意 `dataset` 列表的数据类型,应该是整数类型而不是字节类型。可以使用以下代码初始化 `dataset`:
```
dataset = [1 for i in range(1000)]
```
另外,你需要确保在接收数据时,每次接收到的数据都是字节类型。
阅读全文