当前位置: 首页 > news >正文

Matlab基于连续小波变换(CWT)批量生成时频图

Matlab基于连续小波变换(CWT),将一维信号批量生成时频图的源 此示例中,原始信号data是30*1280的格式,一共30条信号,信号长度为1280。 最终生成30张时频图。 生成的图像可用于后续的深度学习分类或其他处理。 附详细的说明文档。 程序工作如下: 1、加载信号,定义好采样频率。 2、画出一个信号的时频图,这个是为了看一个信号时频图长什么样,以及方便放在论文里。 3、构建结构体,存放信号和类别,这里假设所有信号均是Normal类别。 4、批量生成时频图,存放于文件夹中。 需要Matlab2020及以上版本。 在改为自己的信号时,只需要照样子整理好数据的格式,然后更改采样频率和存放时频图的路径即可。 程序不用大幅修改。 主程序main.m中代码仅30多行,注释详细,方便看懂。 两个子函数helperCreateECGDirectories.m和helperCreateRGBfromTF.m分别为创建空文件夹和批量生成时频图的函数,替换信号时只需要修改其中的采样频率即可。

在信号处理和深度学习的交叉领域中,时频图作为一种强大的工具,能够直观地展示信号在时间和频率域的联合分布,为后续的分类等任务提供有效的特征表示。今天就来分享一下如何用Matlab基于连续小波变换(CWT)将一维信号批量生成时频图。

数据格式与目标

我们的原始信号data30*1280的格式,即一共30条信号,每条信号长度为1280。最终要生成30张时频图,这些图像可用于后续的深度学习分类或其他处理。

程序工作流程

1. 加载信号与定义采样频率

在Matlab中,加载信号通常可以使用load函数,如果信号存储在.mat文件中。假设我们的信号存储在data.mat文件中,代码如下:

load('data.mat'); % 加载信号数据 fs = 1000; % 定义采样频率,这里假设为1000Hz,实际使用需根据信号情况调整

这里定义的采样频率fs非常关键,它决定了信号在时间维度上的离散化程度,对后续时频图的准确性有很大影响。

2. 画出单个信号的时频图

这一步主要是为了预览时频图的样子,方便在论文等文档中展示。以第一条信号为例,使用连续小波变换来生成时频图,代码如下:

signal = data(1,:); % 选取第一条信号 wname = 'db4'; % 选择小波基,这里使用db4小波 scales = 1:128; % 定义尺度范围 [cfs,f] = cwt(signal,scales,wname,1/fs); % 进行连续小波变换 figure; tfrscalogram(cfs,f,1/fs,'yaxis','linear'); % 绘制时频图 title('Single Signal Time - Frequency Plot');

在这段代码中,首先选择了第一条信号,然后确定了小波基wname和尺度范围scales,通过cwt函数进行连续小波变换得到系数cfs和频率f,最后使用tfrscalogram函数绘制时频图。

3. 构建结构体存放信号和类别

这里假设所有信号均是Normal类别,构建结构体的代码如下:

dataStruct = struct('signal', {}, 'class', {}); for i = 1:size(data,1) dataStruct(i).signal = data(i,:); dataStruct(i).class = 'Normal'; end

通过循环,将每条信号及其类别存入结构体dataStruct中,方便后续批量处理。

4. 批量生成时频图并存放于文件夹

主程序main.m代码量仅30多行,且注释详细。这里我们来看两个关键的子函数。

helperCreateECGDirectories.m

这个函数用于创建存放时频图的空文件夹。代码如下:

function helperCreateECGDirectories(tfDir) if ~isfolder(tfDir) mkdir(tfDir); end end

函数接收一个路径参数tfDir,如果该路径不存在,则使用mkdir函数创建文件夹。

helperCreateRGBfromTF.m

此函数用于批量生成时频图。代码如下:

function helperCreateRGBfromTF(dataStruct,fs,tfDir) wname = 'db4'; scales = 1:128; for i = 1:length(dataStruct) signal = dataStruct(i).signal; [cfs,f] = cwt(signal,scales,wname,1/fs); tfImage = tfrscalogram(cfs,f,1/fs,'yaxis','linear'); tfImage = mat2gray(tfImage); tfImage = repmat(tfImage,[1 1 3]); imwrite(tfImage,fullfile(tfDir,['tfImage_' num2str(i) '.png'])); end end

在这个函数中,首先确定小波基和尺度范围,然后遍历结构体中的每条信号,进行连续小波变换得到时频图数据tfImage,将其转换为灰度图像并扩展为RGB格式,最后使用imwrite函数将图像保存到指定文件夹中。

使用说明

此程序需要Matlab2020及以上版本。当你要改为自己的信号时,只需要照样子整理好数据的格式,使其成为类似n*m的矩阵形式(n为信号数量,m为每条信号长度),然后更改采样频率和存放时频图的路径即可,程序不用大幅修改。

Matlab基于连续小波变换(CWT),将一维信号批量生成时频图的源 此示例中,原始信号data是30*1280的格式,一共30条信号,信号长度为1280。 最终生成30张时频图。 生成的图像可用于后续的深度学习分类或其他处理。 附详细的说明文档。 程序工作如下: 1、加载信号,定义好采样频率。 2、画出一个信号的时频图,这个是为了看一个信号时频图长什么样,以及方便放在论文里。 3、构建结构体,存放信号和类别,这里假设所有信号均是Normal类别。 4、批量生成时频图,存放于文件夹中。 需要Matlab2020及以上版本。 在改为自己的信号时,只需要照样子整理好数据的格式,然后更改采样频率和存放时频图的路径即可。 程序不用大幅修改。 主程序main.m中代码仅30多行,注释详细,方便看懂。 两个子函数helperCreateECGDirectories.m和helperCreateRGBfromTF.m分别为创建空文件夹和批量生成时频图的函数,替换信号时只需要修改其中的采样频率即可。

通过以上步骤,我们就可以利用Matlab基于连续小波变换实现一维信号的批量时频图生成,为后续的深度学习等任务提供有力的数据支持。希望这篇博文能对大家在信号处理相关工作中有所帮助!

http://www.jsqmd.com/news/519364/

相关文章:

  • 从经纬度到平面坐标:ArcGIS中高斯投影的完整工作流(含自定义中央子午线技巧)
  • 洛谷 P1336:最佳课题选择 ← 分组背包
  • 最长公共子序列(LCS)——从零开始的动态规划
  • 学习web第三天
  • 深入解析DRAM:从基础原理到现代应用
  • Hive实战:3种生成自增ID的保姆级教程(附row_number与UDF对比)
  • 《医学大数据与人工智能》第二周
  • 计算机毕业设计:基于Python的图书数据分析系统 Flask框架 可视化 爬虫 书籍 大数据 机器学习(建议收藏)✅
  • C++中的 lower_bound 和 upper_bound:一篇讲清楚
  • 基于FPGA的FOC电流环手动编写Verilog实现:高效、可读性强的源码与Simulink模...
  • 迷宫算法面试通关指南:华为真题详解+DFS/BFS最优解套路
  • SpringBoot实战:5分钟搞定SSE消息推送,告别轮询烦恼
  • 告别人工规则:用MAPPO+自适应环境生成器,手把手教你训练能应对未知障碍物的无人机协同追捕AI
  • 从摄像头到CAN总线:手把手梳理智驾域控制器的数据接口与布线实战
  • 2026年 上海苏州OPC园区租赁招商推荐榜:精选优质产业园区,解析区位优势与服务体系,助力企业高效选址 - 品牌企业推荐师(官方)
  • LangGraph实战:构建具备状态与决策能力的智能体工作流
  • 计算机毕业设计:Python豆瓣图书数据分析平台 Flask框架 可视化 爬虫 书籍 大数据 机器学习(建议收藏)✅
  • 保姆级教程:用trackeval评估dancetrack多目标跟踪结果(附完整文件结构解析)
  • Codeforces Round 2209
  • UI 界面组成,控制界面代码
  • 【面试真题拆解】Java的Static关键字到底怎么用?
  • 3月18日笔记
  • Cookie操作避坑指南:从浏览器复制到Python requests的完整流程解析
  • 保姆级教程:用OpenWRT打造企业级访客WiFi(含防火墙规则+DHCP避坑指南)
  • Xilinx MMCM动态相位调整:从原理到实战的时钟微调指南
  • 信息学奥赛必备:5分钟搞定配对碱基链的两种C++解法(附完整代码)
  • 从PID到深度学习:柔性机器人控制算法演进全解析(附Python示例代码)
  • 从键盘到显示屏:给STM32F4计算器加个OLED界面(I2C驱动教程)
  • 揭示提示工程架构师创新实验室的神秘面纱
  • PyQt5桌面应用内嵌Web地图避坑指南:从QWebEngineView加载到JS交互全流程