import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt
import struct
# 小波去噪
def wave_del_zero(ecg):
import matplotlib.pyplot as plt
import pywt
# Get data:
#ecg = pywt.data.ecg() # 生成心电信号
ecg = ecg
index = []
data = []
for i in range(len(ecg) - 1):
X = float(i)
Y = float(ecg[i])
index.append(X)
data.append(Y)
# Create wavelet object and define parameters
db8 = 'db8'
#db8 = 'coif'
w = pywt.Wavelet('db8') # 选用Daubechies8小波
maxlev = pywt.dwt_max_level(len(data), w.dec_len)
print("maximum level is " + str(maxlev))
#threshold = 0.04 # Threshold for filtering
threshold = 0.04 # Threshold for filtering
# Decompose into wavelet components, to the level selected:
coeffs = pywt.wavedec(data, 'db8', level=maxlev) # 将信号进行小波分解
# coeffs = pywt.wavedec(data, 'coif2', level=maxlev) # 将信号进行小波分解
plt.figure()
for i in range(1, len(coeffs)):
coeffs[i] = pywt.threshold(coeffs[i], threshold * max(coeffs[i])) # 将噪声滤波
datarec = pywt.waverec(coeffs, 'db8') # 将信号进行小波重构
mintime = 0
maxtime = mintime + len(data) + 1
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(index[mintime:maxtime], data[mintime:maxtime])
plt.xlabel('time (s)')
plt.ylabel('microvolts (uV)')
plt.title("Raw signal")
plt.subplot(2, 1, 2)
plt.plot(index[mintime:maxtime], datarec[mintime:maxtime - 1])
plt.xlabel('time (s)')
plt.ylabel('microvolts (uV)')
plt.title("De-noised signal using wavelet techniques")
plt.tight_layout()
plt.show()
print()
# 读取数据 bin 文件
def read_data():
"""
:param file_path: file path name
:return: parse data
"""
file_dir = './'
# file_name = 'Raw Data-1-1Y520230404-10-14-03_8192.bin'
file_name = 'Raw Data-1-1Y520230404-00-21-39_8192.bin'
file_path = os.path.join(file_dir, file_name)
data_bin = open(file_path, 'rb+')
data_size = os.path.getsize(file_path)
data_list = []
for i in range(data_size):
data_i = data_bin.read(1) # 每次输出一个字节
print(data_i)
num = struct.unpack('b', data_i) # B 无符号整数,b 有符号整数
data_list.append(num[0])
print(num[0])
data_bin.close()
# return data_list
from sklearn import preprocessing
min_max = preprocessing.MinMaxScaler(feature_range=(-1, 1)) # 缩放到[-1, 1], 增强数据的稳定性
data_list_scale = min_max.fit_transform(np.array(data_list).reshape(-1, 1))
data_list_scale_part = data_list_scale[:2000]
# wave_del_zero(data_list_scale_part)
plt.plot(data_list_scale_part)
plt.show()
print ()
if __name__ == '__main__':
read_data()