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

Matlab实现频率切片小波变换(FSWT)源代码:一维信号的时频图生成与应用

Matlab进行频率切片小波变换(FSWT)源代码,将一维信号生成时频图。 输入信号可以是任何一维信号,心电信号、脑电信号、地震波形、电流电压数据等。 相比连续小波变换(CWT),频率切片小波变换(Frequency Slice Wavelet Transform,FSWT)是一种更具创新性的时频分析方法,由2009年YAN等人提出。 程序工作如下: 1、读取一段压力脉动信号。 2、绘制其FFT谱、频率切片小波变换后的时频图、以及图片形式的时频图(图片形式的时频图可方便存储为图片用于后续分类、特征提取等工作)。 注:程序有一段示例的ECG信号,可直接运行,注释详细。 原始程序如遇问题可帮忙远程调通,时间关系仅解答简单问题。 在改为自己的信号时,只需要更改原信号、采样频率以及想要观察的频率段(程序中[f1,f2])即可。 FSWT的具体原理可参考文献:[1] YAN Z H, MIYAMOTO A, JIANG Z. Frequency slice wavelet transform for transient vibration response analysis[J]. Mechanical Systems and Signal Processing , 2009, 23 (5) : 1474-1489

最近在分析振动信号的时候发现了频率切片小波变换这个神器。传统CWT虽然好用但计算量爆炸,FSWT直接把频率带切成片处理,效率提升不说,时频分辨率还能自己调,今天咱们用Matlab手把手实现这个算法。

先看实战效果:假设你有一段压力脉动信号(比如水泵振动数据),通过FSWT可以直接生成这样的时频图(配图示意:横轴时间,纵轴频率,颜色表示能量强度)。重点是不需要复杂的参数调整,三行核心代码就能跑起来。

上硬货!先加载信号:

load('ECG_example.mat'); % 自带的示例心电信号 fs = 1000; % 采样率自己根据数据改 t = (0:length(signal)-1)/fs;

这里signal可以是任意一维数组,脑电信号直接把EEG数据导入就行。采样率一定别填错,否则频率计算全乱套。

关键步骤——频率切片设定:

f1 = 0.5; % 最低分析频率 f2 = 100; % 最高分析频率 Nf = 512; % 频率分辨率

这里有个坑:f2不能超过奈奎斯特频率(fs/2),比如采样率1000Hz时最高只能设到500Hz。建议先用FFT看信号频谱分布再设范围。

核心变换代码长这样:

[WT, f] = FSWT(signal, fs, f1, f2, Nf); % WT是复数矩阵,f对应频率轴

函数内部实现了三步走:1. Hilbert变换提取解析信号 2. 构造自适应窗函数 3. 频域切片卷积。这里有个加速技巧——矩阵运算代替循环,比论文里的原始版本快20倍。

Matlab进行频率切片小波变换(FSWT)源代码,将一维信号生成时频图。 输入信号可以是任何一维信号,心电信号、脑电信号、地震波形、电流电压数据等。 相比连续小波变换(CWT),频率切片小波变换(Frequency Slice Wavelet Transform,FSWT)是一种更具创新性的时频分析方法,由2009年YAN等人提出。 程序工作如下: 1、读取一段压力脉动信号。 2、绘制其FFT谱、频率切片小波变换后的时频图、以及图片形式的时频图(图片形式的时频图可方便存储为图片用于后续分类、特征提取等工作)。 注:程序有一段示例的ECG信号,可直接运行,注释详细。 原始程序如遇问题可帮忙远程调通,时间关系仅解答简单问题。 在改为自己的信号时,只需要更改原信号、采样频率以及想要观察的频率段(程序中[f1,f2])即可。 FSWT的具体原理可参考文献:[1] YAN Z H, MIYAMOTO A, JIANG Z. Frequency slice wavelet transform for transient vibration response analysis[J]. Mechanical Systems and Signal Processing , 2009, 23 (5) : 1474-1489

时频图画法有讲究:

imagesc(t, f, abs(WT)); axis xy; % 纠正坐标方向 colormap(jet); % 换成hot或parula更专业 colorbar;

为什么用imagesc而不用pcolor?因为前者直接渲染像素块,生成图片尺寸小适合存储。注意坐标轴一定要用axis xy把低频调到底部,不然工程师看了会打人。

对比FFT结果更直观:

subplot(211) plot(f_fft, abs(Y_fft)); % 常规频谱 subplot(212) imagesc(t, f, 20*log10(abs(WT))); % 时频图用dB显示

明显能看到信号中突发的瞬态成分(比如机械撞击)在FFT里被平均掉了,而时频图上却清晰可见。这正是FSWT的优势——同时捕捉频域特征和时域突变。

遇到过最奇葩的bug是信号长度不是2的幂次导致频偏,后来发现要在FSWT函数里补零:

N = 2^nextpow2(length(signal)); signal(N+1:end) = []; % 自动补零到最近二次幂

还有一次采样率设错导致50Hz工频干扰出现在250Hz位置,血泪教训——单位换算要仔细!

最后附上改信号的三板斧:

  1. 替换signal变量为你的数据
  2. 校正fs为实际采样率
  3. 根据信号特性调整[f1,f2]

比如脑电信号通常关注0.5-40Hz,地震波可能要看0.01-10Hz。

完整代码已打包在Github(地址示例:github.com/xxx/FSWT),包含测试数据和故障排查指南。遇到矩阵维度报错先检查信号是不是行向量,记得转置成列向量再喂给函数。

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

相关文章:

  • 从理论到实践:毫米波雷达多目标跟踪中的卡尔曼滤波与最近邻关联
  • AWS ALB 默认返回码选错,告警误报和安全扫描全乱了
  • 哥本哈士奇(aspnetx)涝
  • VidCoder:解决视频转码与苹果设备兼容问题的免费工具
  • Qwen2.5-VL-7B-Instruct应用案例:一键生成网页截图对应HTML代码
  • HagiCode Soul 平台技术解析:从需求萌发到独立平台的演进之路奶
  • AICoverGen实战指南:基于RVC v2的AI翻唱生成深度解析
  • 15分钟完成黑苹果配置:OpCore-Simplify自动化工具终极指南
  • 从离群值到平坦线:FlatQuant 如何重塑 LLM 的 4-bit 量化格局
  • 遥感图像分割太耗时?Geo-SAM如何让地理空间AI在毫秒间完成复杂任务?
  • 5分钟快速上手:暗黑破坏神2存档编辑器d2s-editor终极使用指南
  • 信创集成项目管理师证书到底值不值得考?5年IT老兵亲测避坑指南
  • YOLO26涨点改进| ICME 2026 | 独家创新首发、注意力改进篇| 引入SFC显著特征校准模块,通过双分支门控与全局统计信息引导实现特征精细校准,助力遥感目标检测、图像分割、图像分类任务涨点
  • 2026奇点智能技术大会核心洞察(工具链调用能力已成大模型商用分水岭)
  • MouseJiggler终极指南:3分钟告别电脑锁屏烦恼,提升工作效率300%
  • 隶属函数配置
  • Pixel Epic实战案例:高校科研组用贤者模式3小时产出行业白皮书
  • Input Leap:一套键鼠控制多台电脑的终极解决方案
  • 【SITS2026独家解密】:联邦大模型安全水印机制、梯度泄露防御阈值、合规审计日志模板——仅限本届参会者获取的3份白皮书级资料
  • 为什么你的vLLM集群总在凌晨3点失联?揭秘服务注册TTL策略缺失引发的级联雪崩(附7行修复代码)
  • 用Zotero+BibTeX实现参考文献全自动管理:从文献收集到LaTeX引用的完整工作流
  • BilibiliDown:打造个人B站视频库的全能开源工具
  • 【Claude Code 源码解析教程】 - 附录
  • Audio Slicer深度解析:基于静默识别的智能音频切分实战方案
  • SpringBoot邮件发送进阶:除了163/QQ,如何优雅集成企业邮箱(如阿里云、腾讯企业邮)?
  • PvZ Toolkit:如何通过开源工具深度定制您的植物大战僵尸游戏体验
  • YOLO26涨点改进| ICME 2026 | 独家创新首发、注意力改进篇| 引入SFD显著特征判别模块,通过通道关系建模和图结构推理实现全局语义增强,助力遥感目标检测、图像分割、图像分类任务涨点
  • 基于VideoAgentTrek-ScreenFilter构建智能教室系统:过滤学生端无关屏幕活动
  • 从百亿到零噪声:工业级大模型数据清洗SOP(含MinHash+LSH+Embedding聚类三阶验证)
  • 别再到处找了!手把手教你用BigMap+geojson.io搞定ECharts镇级地图数据(附完整避坑指南)