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

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

文章目录

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


前言

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


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

  • 以下代码是实现波形数据也就是一维数据的自动读取
  • 以下是批次读取文件数据的代码
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)

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

  • 小波分解能将特定频率范围内的波数据分解出来存储到小波系数当中
  • 小波重构能将小波系数在转回到波数据
# 设置小波类型和分解层数
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)

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

  • 波形图是一种能很好展示波数据频率的一种可视化方式
 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 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个数据分解并保存到图片当中,威力无穷。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis的配置文件详解

单位&#xff1a;Redis配置对大小写不敏感&#xff01; 注意这里&#xff1a;任何写法都可&#xff0c;不区分大小写。 units are case insensitive so 1GB 1Gb 1gB are all the same.包含&#xff1a;搭建Redis集群时&#xff0c;可以使用includes包含其他配置文件网络&…

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日&#xff0c;小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行&#xff0c;全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付&#xff0c;小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…

大型语言模型(LLMs)面试常见问题解析

概述 这篇文章[1]是关于大型语言模型&#xff08;LLMs&#xff09;的面试问题和答案&#xff0c;旨在帮助读者准备相关职位的面试。 token&#xff1f; 在大型语言模型中&#xff0c;token 指的是什么&#xff1f; 分词&#xff08;Tokenization&#xff09;&#xff1a;可以将…

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

事件时间+时间窗口,最后一个窗口不执行问题踩坑与源码分析

事件时间时间窗口&#xff0c;最后一个窗口不执行问题踩坑与源码分析 1. 结论 在使用事件时间和时间窗口的过程中&#xff0c;当最后一个事件的事件时间未达到时间窗口的最大时间&#xff0c;窗口不会触发。 举例说明&#xff0c;在按小时的滚动窗口中&#xff0c;假设当前时…

开启虚拟机时出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态怎么解决

问题描述 虚拟机安装完成后&#xff0c;点击开启此虚拟机弹出系统提示 原因分析&#xff1a; Intel VT-x 处于禁用状态&#xff0c;需要开启。 解决方案&#xff1a; 以联系小新笔记本电脑为例&#xff0c;进入BIOS界面&#xff0c;将Intel Virtual Technology设置成Enabl…

STL--迭代器的介绍

一.迭代器介绍&#x1f357; 迭代器是 C 标准模板库&#xff08;STL&#xff09;中的一个重要概念。简单来说&#xff0c;迭代器就像是一个指针&#xff0c;用于访问和遍历容器中的元素&#xff08;比如数组、链表、集合等&#xff09;。迭代器提供了一种统一的方法来访问容器…

力扣1448---统计二叉树中好节点的数量(Java、DFS、中等题)

题目描述&#xff1a; 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出…

开启新纪元中凡工业装备邀您参观2024第13届生物发酵展

参展企业介绍 中凡工业是一家专注于螺旋板式换热器以及相关非标设备制造的生产厂家。公司产品主要应用于环保废水、污水处理、可再生能源、食品、药化、焦化、农化、精细化工等行业&#xff0c;为这些行业解决生产工艺中的液体加热&#xff0c;液体冷却&#xff0c;气体冷凝&a…

聚观早报 | 沃尔沃发布一季度全球销量;苹果将举办财报电话会议

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月07日消息 沃尔沃发布一季度全球销量 苹果将举办新财报电话会议 荣耀Magic6支持5.5G通信 特斯拉将建最大超级充…

Word技巧之【允许修改受保护文档的部分内容】

给Word文档设置“限制编辑”&#xff0c;可以保护文档不能随意编辑更改&#xff0c;但如果文档中有部分内容&#xff0c;是需要供打开文档的人可以修改&#xff0c;要怎么使这部分内容允许修改呢&#xff1f;下面一起来看看&#xff0c;如何设置Word文档中允许部分内容可修改。…

政安晨:【深度学习神经网络基础】(三)—— 激活函数

目录 线性激活函数 阶跃激活函数 S型激活函数 双曲正切激活函数 修正线性单元 Softmax激活函数 偏置扮演什么角色&#xff1f; 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨…

Java Spring IoCDI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 前提小知识:高内…

12-2-CSS 字体图标

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 CSS 字体图标1 字体图标的产生2 字体图标的优点3 字体图标的下载4 字体图标的…

LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路

可以先查看 上一节内容&#xff0c;会对本节有更好的理解。 安装依赖 pip install langchainhub编写代码 核心代码 tool def get_docker_info(docker_name: str) -> str:"""Get information about a docker pod container info."""result…

隐私计算实训营学习八:隐语SCQL的开发实践

文章目录 一、SCQL使用集成最佳实践1.1 SCQL使用流程1.2 SCQL部署1.3 SCQL使用示例 二、SCQL工作原理三、使用SecretNote上手体验SCQL 一、SCQL使用集成最佳实践 1.1 SCQL使用流程 SCQL使用&#xff1a; SCQL 开放 API 供⽤户使⽤/集成。可以使⽤SCDBClient上⼿体验(类似与My…

归一化技术比较研究:Batch Norm, Layer Norm, Group Norm

归一化层是深度神经网络体系结构中的关键&#xff0c;在训练过程中确保各层的输入分布一致&#xff0c;这对于高效和稳定的学习至关重要。归一化技术的选择&#xff08;Batch, Layer, GroupNormalization&#xff09;会显著影响训练动态和最终的模型性能。每种技术的相对优势并…

CSS - 你实现过宽高自适应的正方形吗

难度 难度级别:中高级及以上 提问概率:80% 宽高自适应的需求并不少见,尤其是在当今流行的大屏系统开发中更是随处可见,很显然已经超越了我们日常将div写死100px这样的范畴,那么如何实现一个宽高自适应的正方形呢?这里提出两种实现方案。…

【Linux】进程初步理解

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 冯诺依曼体系结构1.1 认识冯诺依曼体系结构1.2 存储金字塔 2. 操作系统2.1 概念2.2 结构2.3 操作系统的管理 3. 进程3.1 进程描述3.2 Linux下的PCB 4. task_struct本身内部属性4.1 启动4.2 进程的创建方式4.2.1 父…

JAVA:探索Apache POI 处理利器

请关注微信公众号&#xff1a;拾荒的小海螺 1、简述 Apache POI是Apache软件基金会的顶级项目之一&#xff0c;它允许Java开发人员读取和写入Microsoft Office格式的文档&#xff0c;包括Excel、Word和PowerPoint文件。通过POI&#xff0c;开发人员可以创建、修改和读取Excel…