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

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

文章目录


前言

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


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

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

相关推荐
coberup8 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
龙哥说跨境40 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
数据与后端架构提升之路1 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
小白学大数据1 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9111 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
一行11 小时前
电脑蓝屏debug学习
学习·电脑
星LZX1 小时前
WireShark入门学习笔记
笔记·学习·wireshark
阑梦清川1 小时前
在鱼皮的模拟面试里面学习有感
学习·面试·职场和发展
qq_433099401 小时前
Isaac Gym学习笔记——概述
学习