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

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

文章目录


前言

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


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

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

相关推荐
cnxy1884 小时前
围棋对弈Python程序开发完整指南:步骤1 - 棋盘基础框架搭建
开发语言·python
落叶,听雪4 小时前
河南建站系统哪个好
大数据·人工智能·python
石像鬼₧魂石5 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
非凡ghost5 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
橙汁味的风5 小时前
1隐马尔科夫模型HMM与条件随机场CRF
人工智能·深度学习·机器学习
极客小云5 小时前
【生物医学NLP信息抽取:药物识别、基因识别与化学物质实体识别教程与应用】
python·机器学习·nlp
南_山无梅落5 小时前
12.Python3函数基础:定义、调用与参数传递规则
python
蓝桉~MLGT5 小时前
Ai-Agent学习历程—— 阶段1——环境的选择、Pydantic基座、Jupyter Notebook的使用
人工智能·学习·jupyter
武子康6 小时前
大数据-197 K折交叉验证实战:sklearn 看均值/方差,选更稳的 KNN 超参
大数据·后端·机器学习
油泼辣子多加6 小时前
【信创】算法开发适配
人工智能·深度学习·算法·机器学习