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

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

文章目录


前言

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


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

  • 以下代码是实现波形数据也就是一维数据的自动读取
  • 以下是批次读取文件数据的代码
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个数据分解并保存到图片当中,威力无穷。

相关推荐
苏州邦恩精密3 分钟前
江苏三维扫描仪定制:制造企业如何提升检测效率?
人工智能·科技·机器学习·自动化·制造
用什么都重名6 分钟前
Python文本匹配利器:FlashText与RapidFuzz深度对比
python·flash text·rapidfuzz
@Ma7 分钟前
Python 实现企业微信外部群主动消息发送及成功接入后如何避坑,避免风控封号
开发语言·python·企业微信
DXM05217 分钟前
第10期| 卷积神经网络CNN通俗详解:AI遥感的底层核心
人工智能·python·神经网络·机器学习·arcgis·cnn·文心一言
Hello:CodeWorld9 分钟前
AI Agent:从核心原理、架构框架到工程实战,大模型时代的自主智能革命
大数据·人工智能·python·架构
-To be number.wan10 分钟前
计算机组成原理 | 虚拟存储器
学习·计算机组成原理
DA022111 分钟前
01-Python-数据类型和语法
开发语言·python
装不满的克莱因瓶14 分钟前
掌握空间注意力 STN 模型结构——让神经网络学会自动“看准位置”
人工智能·python·深度学习·神经网络·机器学习·ai
AI玫瑰助手18 分钟前
Python函数:函数的文档字符串(docstring)编写
android·java·python
暖馒19 分钟前
WPF-Prism学习入门步骤记录
学习·wpf