信号处理之(文件批处理+小波分解+波形图的生成)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本文介绍了信号上的一些处理也就是对波的一些处理如地震波,电磁波,地磁波、声波等一系列问题的处理及信号提取加分解。


一、前期准备工作之数据自动读取

  • 以下代码是实现波形数据也就是一维数据的自动读取
  • 以下是批次读取文件数据的代码
python 复制代码
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import pywt
from scipy.signal import spectrogram
from scipy.io import wavfile

a = list(np.linspace(0,86401,10000))
def read_txt_files(folder_path):
    txt_files = glob.glob(os.path.join(folder_path, "*.dat"))  # 获取文件夹中所有的txt文件路径
    for file_path in txt_files:
        with open(file_path, 'r') as file:
            lines = file.readlines()
        waveform_data = []
        # 遍历每一行数据
        for line in lines:
            # 去除行末尾的换行符
            line = line.strip()
            line = line.split(' ')
            # 将字符串类型的数据转换为浮点数,并添加到列表中
            waveform_data.append(line)
# 调用函数并传入文件夹路径
folder_path = r"F:\wave\data"
read_txt_files(folder_path)

二、前期准备工作之信号分解(小波分解)

  • 小波分解能将特定频率范围内的波数据分解出来存储到小波系数当中
  • 小波重构能将小波系数在转回到波数据
python 复制代码
# 设置小波类型和分解层数
wavelet = 'db4'
level = 16
signal = wave_data_H
# 进行小波分解
coeffs = pywt.wavedec(signal, wavelet, level=level)
# 设置要保留的频率范围
desired_freq_range = (0.5, 35)
# 对每个频率范围内的系数进行处理
for i in range(1, len(coeffs)):
    # 获取当前频率范围内的系数
    current_coeffs = coeffs[i]
    # 将不在目标频率范围内的系数置零
    current_coeffs[np.abs(current_coeffs) < desired_freq_range[0]] = 0
    current_coeffs[np.abs(current_coeffs) > desired_freq_range[1]] = 0
    # current_coeffs[:] = 0
    # 更新系数
    coeffs[i] = current_coeffs
# 重构信号
reconstructed_signal = pywt.waverec(coeffs, wavelet)

三、前期准备工作之数据可视化(波形图展示)

  • 波形图是一种能很好展示波数据频率的一种可视化方式
python 复制代码
 plt.figure(figsize=(13, 7))
 plt.plot(t, reconstructed_signal)
 plt.title('Reconstructed Signal')
 plt.xlim(0,86400)
 plt.xticks(np.arange(0,86401,3600),np.arange(0,86401,3600),fontsize=8)
 #plt.savefig(r"F:\wave\data_image" + file_name + ".jpg")
 plt.show()

四、总代码合并展示

python 复制代码
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import pywt
from scipy.signal import spectrogram
from scipy.io import wavfile

a = list(np.linspace(0,86401,10000))
def read_txt_files(folder_path):
    txt_files = glob.glob(os.path.join(folder_path, "*.dat"))  # 获取文件夹中所有的txt文件路径
    for file_path in txt_files:
        with open(file_path, 'r') as file:
            lines = file.readlines()
        waveform_data = []
        # 遍历每一行数据
        for line in lines:
            # 去除行末尾的换行符
            line = line.strip()
            line = line.split(' ')
            # 将字符串类型的数据转换为浮点数,并添加到列表中
            waveform_data.append(line)
        # 打印提取的波形数据
        wave_data = waveform_data[0][9:]
        wave_data_H = []
        for i in range(len(wave_data) // 4):
            wave_data_H.append(wave_data[i * 4])
        wave_data_H = np.array(wave_data_H).astype(np.float32)
        # 设置小波类型和分解层数
        wavelet = 'db4'
        level = 16
        signal = wave_data_H
        # 进行小波分解
        coeffs = pywt.wavedec(signal, wavelet, level=level)
        # 设置要保留的频率范围
        desired_freq_range = (0.5, 35)
        # 对每个频率范围内的系数进行处理
        for i in range(1, len(coeffs)):
            # 获取当前频率范围内的系数
            current_coeffs = coeffs[i]
            # 将不在目标频率范围内的系数置零
            current_coeffs[np.abs(current_coeffs) < desired_freq_range[0]] = 0
            current_coeffs[np.abs(current_coeffs) > desired_freq_range[1]] = 0
            # current_coeffs[:] = 0
            # 更新系数
            coeffs[i] = current_coeffs
        # 重构信号
        reconstructed_signal = pywt.waverec(coeffs, wavelet)
        t = np.linspace(0, 86400, num=86400, endpoint=False)
        sample_rate = 44100  # 设置采样率
        file_name = "\\" + file_path.split('\\')[-1].split('.')[0]
        plt.figure(figsize=(13, 7))
        plt.plot(t, reconstructed_signal)
        plt.title('Reconstructed Signal')
        plt.xlim(0,86400)
        plt.xticks(np.arange(0,86401,3600),np.arange(0,86401,3600),fontsize=8)
        plt.savefig(r"F:\wave\data_image" + file_name + ".jpg")
        # plt.show()

# 调用函数并传入文件夹路径
folder_path = r"F:\wave\data"
read_txt_files(folder_path)

总结

以上的三大部分单拿出一个都可以去干别的,如文件自动化处理、信号处理和可视化图表,合起来用就可以将n个数据分解并保存到图片当中,威力无穷。

相关推荐
MPCTHU几秒前
预测分析(三):基于机器学习的分类预测
人工智能·机器学习·分类
2401_840192273 分钟前
如何学习一门计算机技术
开发语言·git·python·devops
巷北夜未央17 分钟前
Python每日一题(14)
开发语言·python·算法
大模型真好玩21 分钟前
理论+代码一文带你深入浅出MCP:人工智能大模型与外部世界交互的革命性突破
人工智能·python·mcp
梅子酱~21 分钟前
Vue 学习随笔系列二十二 —— 表格高度自适应
javascript·vue.js·学习
_一条咸鱼_23 分钟前
LangChain 入门到精通
机器学习
s_little_monster25 分钟前
【Linux】进程信号的捕捉处理
linux·运维·服务器·经验分享·笔记·学习·学习方法
JackmoodCC1 小时前
Java学习总结-递归-递归寻找文件绝对路径
学习
3DVisionary1 小时前
3D-DIC与机器学习协同模拟材料应力-应变本构行为研究
人工智能·机器学习·3d·3d-dic技术 机器学习·应力-应变本构行为·卷积神经网络(ecnn)·数字图像相关法(dic)
神经星星1 小时前
无需预对齐即可消除批次效应,东京大学团队开发深度学习框架STAIG,揭示肿瘤微环境中的详细基因信息
人工智能·深度学习·机器学习