Matlab基于连续小波变换(CWT),将一维信号批量生成时频图的源代码。此示例中,原始信号data是30*1280的格式,一共30条信号,信号长度为1280。最终生成30张时频图。生成的图像可用于后续的深度学习分类或其他处理。附详细的说明文档。
程序工作如下:
1、加载信号,定义好采样频率。
2、画出一个信号的时频图,这个是为了看一个信号时频图长什么样,以及方便放在论文里。
3、构建结构体,存放信号和类别,这里假设所有信号均是Normal类别。
4、批量生成时频图,存放于文件夹中。
注:需要Matlab2020及以上版本。在改为自己的信号时,只需要照样子整理好数据的格式,然后更改采样频率和存放时频图的路径即可。程序不用大幅修改。主程序main.m中代码仅30多行,注释详细,方便看懂。两个子函数helperCreateECGDirectories.m和helperCreateRGBfromTF.m分别为创建空文件夹和批量生成时频图的函数,替换信号时只需要修改其中的采样频率即可。
项目介绍:基于连续小波变换(CWT)批量生成一维信号的时频图
项目名称
CWT-Based Time-Frequency Image Generation for 1D Signals
项目概述
本项目旨在使用Matlab中的连续小波变换(Continuous Wavelet Transform, CWT)将一维信号转换为时频图。这些时频图可以用于后续的深度学习分类或其他信号处理任务。项目包含一个主程序main.m
和两个辅助函数helperCreateECGDirectories.m
与helperCreateRGBfromTF.m
,能够高效地处理多个信号并生成相应的时频图像。
项目特点
- 批量处理:一次性处理多条一维信号。
- 可视化:生成每条信号的时频图,便于直观分析和展示。
- 结构化存储:通过构建结构体来组织信号数据及其类别信息。
- 易于扩展:只需修改少量参数即可适应不同的一维信号数据集。
- 详细注释:代码中包含详细的注释,方便理解和修改。
项目结构
CWT_Time_Frequency_Image_Generation/
├── main.m # 主程序
├── helperCreateECGDirectories.m # 创建空文件夹的辅助函数
├── helperCreateRGBfromTF.m # 批量生成时频图的辅助函数
└── README.md # 项目说明文档
数据格式
- 原始信号数据:
data
是一个30x1280的矩阵,表示30条长度为1280的一维信号。 - 采样频率:用户需要根据实际情况定义采样频率
fs
。 - 类别信息:假设所有信号均为"Normal"类别。
项目工作流程
- 加载信号:读取原始信号数据,并定义采样频率。
- 单个信号时频图绘制:绘制一个信号的时频图,以便于查看和放入论文中。
- 构建结构体:创建一个结构体来存放信号数据及其类别信息。
- 批量生成时频图:使用CWT批量生成所有信号的时频图,并保存到指定文件夹中。
代码示例
1. 主程序 main.m
% 主程序 main.m
% 该程序用于批量生成一维信号的时频图
% 需要Matlab 2020及以上版本
% 定义采样频率
fs = 100; % 根据实际情况调整
% 加载信号数据
load('signal_data.mat'); % 假设信号数据保存在 signal_data.mat 文件中
data = signal_data; % 30x1280 的矩阵
% 绘制一个信号的时频图
figure;
cwt(data(1,:), fs);
title('Sample Signal Time-Frequency Plot');
saveas(gcf, 'sample_tft.png');
% 构建结构体,存放信号和类别
signals = struct();
for i = 1:size(data, 1)
signals(i).signal = data(i, :);
signals(i).label = 'Normal'; % 假设所有信号都是 "Normal" 类别
end
% 批量生成时频图
outputFolder = 'time_frequency_images';
helperCreateECGDirectories(outputFolder); % 创建输出文件夹
helperCreateRGBfromTF(signals, fs, outputFolder); % 生成时频图
disp('Time-frequency images generated successfully.');
2. 辅助函数 helperCreateECGDirectories.m
% 辅助函数 helperCreateECGDirectories.m
% 用于创建输出文件夹
function helperCreateECGDirectories(outputFolder)
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
end
3. 辅助函数 helperCreateRGBfromTF.m
% 辅助函数 helperCreateRGBfromTF.m
% 用于批量生成时频图
function helperCreateRGBfromTF(signals, fs, outputFolder)
for i = 1:length(signals)
% 计算CWT
[cfs, frequencies] = cwt(signals(i).signal, fs);
% 将CWT结果转换为RGB图像
cwtImage = ind2rgb(uint8((cfs - min(cfs(:))) / (max(cfs(:)) - min(cfs(:))) * 255), jet(256));
% 保存图像
imwrite(cwtImage, fullfile(outputFolder, sprintf('signal_%02d.png', i)));
end
end
使用说明
- 准备数据:确保你的信号数据格式为30x1280的矩阵,并保存在一个MAT文件中(例如
signal_data.mat
)。 - 修改采样频率:根据实际信号的采样频率修改
fs
变量。 - 运行主程序:在Matlab中运行
main.m
脚本。 - 检查输出:生成的时频图将保存在
time_frequency_images
文件夹中。
注意事项
- Matlab版本:该项目需要Matlab 2020及以上版本。
- 数据格式:如果信号数据格式不同,请相应调整代码。
- 路径设置:确保输出文件夹路径正确且有写权限。
通过上述步骤,你可以轻松地批量生成一维信号的时频图,并将其用于后续的深度学习分类或其他处理任务。希望这个项目能帮助你更好地理解和应用信号处理技术。