python 读取二进制 bin 文件,解析为数字信息, 缩放到某一范围且画图


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()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值