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

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

文章目录

  • 前言
  • 一、前期准备工作之数据自动读取
  • 二、前期准备工作之信号分解(小波分解)
  • 三、前期准备工作之数据可视化(波形图展示)
  • 四、总代码合并展示
  • 总结


前言

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


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

  • 以下代码是实现波形数据也就是一维数据的自动读取
  • 以下是批次读取文件数据的代码
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import pywt
from scipy.signal import spectrogram
from scipy.io import wavfilea = 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)

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

  • 小波分解能将特定频率范围内的波数据分解出来存储到小波系数当中
  • 小波重构能将小波系数在转回到波数据
# 设置小波类型和分解层数
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]] = 0current_coeffs[np.abs(current_coeffs) > desired_freq_range[1]] = 0# current_coeffs[:] = 0# 更新系数coeffs[i] = current_coeffs
# 重构信号
reconstructed_signal = pywt.waverec(coeffs, wavelet)

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

  • 波形图是一种能很好展示波数据频率的一种可视化方式
 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()

在这里插入图片描述

四、总代码合并展示

import os
import glob
import numpy as np
import matplotlib.pyplot as plt
import pywt
from scipy.signal import spectrogram
from scipy.io import wavfilea = 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 = 16signal = 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]] = 0current_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个数据分解并保存到图片当中,威力无穷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596908.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日

1.题目描述 2.知识点 &#xff08;1&#xff09;执行步骤如下&#xff1a; 初始化 s “abcdefg” 和 k 2 将字符串分割成长度为 2k 4 的块。 对每个块中的前 k 2 个字符进行反转。 执行过程 1&#xff09;第一次循环&#xff08;i 0&#xff09; start 0 end Math.min(0…

RobotFramework测试框架(12)--第三方库

Library 关于射频指南 |机器人框架 (robotframework.org) 使用RF需要使用Library&#xff0c;常用的第三方库如下&#xff1a; 在web浏览器中进行web应用程序测试可以使用的库是 Selenium Library 在内部使用流行的 Selenium 工具的 Web 测试库Browser Library 由 Playwri…

JavaWeb前端基础(HTML CSS JavaScript)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. HTML 1.1 HTML基础 结构 头<head>身体<body> 内容 图片<img>段落<p>图标<link> 标签 单标签双标签 常用标签 div&#xff1a;分割块span&#xff1a;只占需要的大小p&…

【C++】背包问题

目录 背包问题01 背包背包不装满问题背包必须满问题 完全背包 背包问题 背包问题属于动态规划的一类题型 01 背包 背包不装满问题 背包必须满问题 #include <iostream> using namespace std; const int N 1010; #include <vector> int main() {int n , V;int v[…

【深度学习】从基础原理到未来挑战的全面探索

深度学习的基本原理 深度学习&#xff0c;一种模拟人脑分析和处理数据的机器学习技术&#xff0c;已成为人工智能研究中最令人兴奋的进展之一。其核心在于构建和训练神经网络&#xff0c;这些网络由多个层次组成&#xff0c;每一层都能从输入数据中提取并转换特征。随着数据层层…

【C语言】猜数字小游戏(并讲解随机数相关知识)

前言 一、游戏菜单 二、游戏逻辑 1.用户选择 2.开始游戏 2.1 生成1~100的随机数 总结 前言 本文讲解使用C语言写一个猜数字小游戏(1~100)&#xff0c;涉及到的语法为&#xff1a;循环、分支、随机数、函数 一、游戏菜单 一个游戏的最开始&#xff0c;往往是一个菜单&…

51单片机学习笔记14 LCD1602显示屏使用

51单片机学习笔记14 LCD1602显示屏使用 一、LCD1602介绍1. 简介2. 引脚定义3. DDRAM4. 字模5. 指令&#xff08;1&#xff09;清屏指令 0x01&#xff08;2&#xff09;光标归位指令 0x02&#xff08;3&#xff09;进入模式设置指令 0x06&#xff08;4&#xff09;显示开关控制指…

Springboot相关知识-图片描述(学习笔记)

学习java过程中的一些笔记&#xff0c;觉得比较重要就顺手记录下来了~ 目录 一、前后端请求1.前后端交互2.简单传参3.数组集合传参4.日期参数5.Json参数6.路径参数7.响应数据8.解析xml文件9.统一返回类10.三层架构11.分层解耦12.Bean的声明13.组件扫描14.自动注入 一、前后端请…

IPSEC VPN双机热备份的配置讲解一

IPSEC VPN双机热备份的配置讲解一 VPN 是一种专用网络&#xff0c;可使用公共网络连接两个或两个以上的远程站点。VPN 可使用通过公共网络路由&#xff08;以隧道方式发送&#xff09;的虚拟连接&#xff0c;而非网络之间的专用连接。IPsec VPN 是一项协议&#xff0c;由建立 …

数据结构--树和二叉树

树和二叉树 1.树概念及结构树的概念树的相关概念树的表示 2.二叉树概念及结构概念特殊的二叉树二叉树的性质 3.二叉树顺序结构及实现4.二叉树链式结构及实现二叉树的顺序结构二叉树的前&#xff0c;中&#xff0c;后序遍历层序遍历 1.树概念及结构 树的概念 树是一种非线性的…

数据库之DCL操作(用户、访问权限。)

DCL英文全称是Data control language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1.管理用户 1.1查询用户 select * from mysql.user; 其中 Host代表当前用户访问的主机&#xff0c;如果为localhost&#xff0c;仅代表只能够在当前本机访问&…