news 2026/7/16 23:00:49

信号老司机的日常离不开时频图这玩意儿,毕竟光看时域波形就像看天书,频域谱线又丢失了时间信息。今天手把手整几个MATLAB时频分析代码,从入门到入土(误)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信号老司机的日常离不开时频图这玩意儿,毕竟光看时域波形就像看天书,频域谱线又丢失了时间信息。今天手把手整几个MATLAB时频分析代码,从入门到入土(误)

时频图程序(小波时频,短时傅里叶变换,s变换) MATLAB程序

先搞个模拟信号热热身:

fs = 1000; % 采样率别太小气 t = 0:1/fs:1; f1 = 20; f2 = 100; signal = sin(2*pi*f1*t).*(t<0.5) + sin(2*pi*f2*t).*(t>=0.5); % 分段信号 noise = 0.5*randn(size(t)); % 加点佐料 x = signal + noise;

这信号前0.5秒20Hz,后0.5秒突变到100Hz,非常适合拿来折腾时频分析。

STFT暴力美学

短时傅里叶变换属于老牌劲旅,代码简单粗暴:

window = hamming(128); % 窗长别瞎搞 noverlap = 120; % 重叠量 nfft = 256; spectrogram(x,window,noverlap,nfft,fs,'yaxis') colorbar off; % 强迫症必改

关键参数就仨:窗长决定时频分辨率平衡(鱼与熊掌问题),noverlap影响滑动流畅度。有个坑要注意——窗太长会导致时间分辨率扑街,特别是像我们这个突变信号,可能捕捉不到精确的跳变时刻。

小波变换的千层套路

连续小波变换(CWT)更擅长捕捉突变:

[cfs,frq] = cwt(x,'amor',fs); % 用墨西哥帽小波 contour(t,frq,abs(cfs)) set(gca,'YScale','log') % 对数坐标更直观 colorbar title('小波时频图')

这里'amor'指的是解析Morlet小波。小波变换的尺度选择是门玄学,MATLAB的cwt函数已经帮我们自动计算了最佳尺度。注意颜色映射的绝对值代表能量强度,那些突然出现的亮斑就是信号突变的证据。

S变换的均衡术

ST算是STFT和小波的私生子:

[st_matrix, st_t, st_f] = st(x,fs); % 自建函数见下文 imagesc(st_t, st_f, abs(st_matrix)) axis xy; colormap(jet) % 反转Y轴 function [st_matrix, t, f] = st(x,fs) N = length(x); t = (0:N-1)/fs; f = (0:N/2-1)*(fs/N); st_matrix = zeros(length(f),N); for k = 1:length(f) sigma = 1/(2*pi*f(k)+eps); % 防止除零 window = exp(-(t - t(end)/2).^2 / (2*sigma^2)); st = fft(x .* window); st_matrix(k,:) = abs(st(1:N/2)); end end

这个自编S变换实现用了高斯窗,并且窗宽随频率自适应变化。注意sigma的计算加了eps防止频率为零时报错。相比STFT固定窗长,S变换在低频区用宽窗(频率分辨率高),高频区用窄窗(时间分辨率高),算是个端水大师。

实战对比

把三张时频图放一起看:

  • STFT在20Hz处拖尾严重(窗太长导致)
  • 小波在100Hz跳变时刻有更尖锐的过渡
  • S变换在低频区频率定位更准确

个人经验:处理振动信号首选STFT,检测信号突变用小波,搞地震信号分析试试S变换。但别死磕理论,多调参才是王道——有时候把窗长改个10个点,效果立竿见影。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 1:52:36

UI自动化测试常见面试题

1、什么是UI自动化测试&#xff1f; UI自动化测试是一种通过模拟用户交互并自动执行UI操作的软件测试方法。它用于验证用户界面的功能和稳定性&#xff0c;以确保在不同的操作系统、浏览器和设备上的一致性。 2、UI自动化测试的优势和劣势是什么&#xff1f; 优势&#xff1…

作者头像 李华
网站建设 2026/7/15 22:50:21

Linux OOM 问题之 DMSERVER 受害者

Shell 脚本模拟(无需安装工具) OOM 问题#!/bin/bash #持续申请内存&#xff0c;每次申请 100MB&#xff0c;直到内存耗尽。while true; do # 创建 100MB 临时文件&#xff0c;读取到内存(cat 命令会占用内存)。cat /dev/zero |head -c 100M |tail & done运行脚本&#xff1…

作者头像 李华
网站建设 2026/7/14 18:52:16

Flutter引擎裁剪与鸿蒙方舟编译协同优化

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 Flutter引擎裁剪与鸿蒙方舟编译协同优化 Flutter引擎的冗余模块会增加包体积并影响启动速度。通过分析flutter_engine源代码&#xff0c;可识别非必要模块进行裁剪。常见可移除模块包括&#…

作者头像 李华
网站建设 2026/7/17 0:27:31

STM32CubeMX的main.c开头介绍

简单来说&#xff0c;这些 USER CODE BEGIN 和 USER CODE END 包裹的区域是 “代码保护区”。1. 这些区域是什么&#xff1f;为什么要这样设计&#xff1f;STM32CubeMX 是一个图形化配置工具&#xff0c;它可以自动帮你生成底层驱动代码&#xff08;如 GPIO 初始化、时钟配置等…

作者头像 李华
网站建设 2026/7/16 9:08:07

26.MPSOC FPGA linux读AHT20传感器

一、vivado 工程搭建因为十分简单&#xff0c;不在赘述。生成平台文件&#xff0c;导出&#xff0c;建立vitis linux 设备树工程&#xff0c;不在赘述。生成的设备树文件&#xff1a;axi_iic_0: i2c80000000 {#address-cells <1>;#size-cells <0>;clock-names &…

作者头像 李华
网站建设 2026/7/14 18:52:13

嵌入式系统时序图完全指南:从原理到实战

嵌入式系统时序图完全指南&#xff1a;从原理到实战在嵌入式系统开发中&#xff0c;时序图是理解硬件交互的关键语言。本文将全面解析时序图的阅读、测量和应用技巧&#xff0c;帮助您掌握这一硬件工程师的核心技能。一、时序图基础&#xff1a;硬件通信的蓝本 1.1 时序图核心要…

作者头像 李华