news 2026/7/15 4:44:05

信号老司机的日常离不开时频图这玩意儿,毕竟光看时域波形就像看天书,频域谱线又丢失了时间信息。今天手把手整几个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/14 0:16:35

AXI-A7.4.3 Atomic transactions attributes

一、atomic transactions are as follows: 1. AWLEN和AWSIZE指定写数据的字节数(对于AtomicCompare需包含比较值和交换值) AWLEN(突发长度)和AWSIZE(每次传输的字节数)共同决定了原子事务中写数据的总字节数。对于大多数原子事务,这指的是操作数的大小;但对于AtomicCom…

作者头像 李华
网站建设 2026/7/12 1:39:03

内存泄漏怎么定位和解决?core dump有哪些信息?

一、为什么会内存泄漏&#xff1f;常见场景&#xff1a;音频播放反复malloc缓冲区未freeMQTT断线重连时不断分配内存呢解析JSON字符串频繁申请堆空间回调注册后未注销导致上下文无法释放使用全局链表或队列但不清除节点二、如何定位内存泄漏&#xff1f;1、添加内存监控接口在T…

作者头像 李华
网站建设 2026/7/14 2:59:00

STL deque 的详细特征

STL deque 的详细特征 基本特性 #include <deque> using namespace std;deque<int> dq; // 声明一个int类型的双端队列 双端队列&#xff1a;允许在两端进行高效插入和删除动态数组&#xff1a;支持随机访问&#xff0c;可以像数组一样通过下标访问内存结构&a…

作者头像 李华
网站建设 2026/7/14 10:07:22

9.快速修改铜皮

铺铜后&#xff0c;需要进行细微调整。常规的方法使用鼠标拉扯铜皮边缘修改&#xff0c;很痛苦&#xff01;&#xff01;&#xff01;且效率非常低。技巧&#xff1a;1.选中要修改的铜皮2.如图所示&#xff1a;先选中modify&#xff0c;然后修改&#xff0c;然后重新铺铜。注意…

作者头像 李华
网站建设 2026/7/14 8:02:44

10.是否要成为全栈工程师?

1、软件工程师 嵌入式软件工程师 硬件工程师的关系一、各自的核心工作1. 软件工程师&#xff08;通常指“纯软件/应用层工程师”&#xff09;工作内容&#xff1a;负责非硬件相关的软件逻辑&#xff0c;比如&#xff1a;业务功能开发&#xff08;如APP界面、数据处理算法、网络…

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

兰顿蚂蚁——CAD二次开发

效果如下:private static void OnTick(object sender, EventArgs e){if (_currentStep > _maxSteps){Stop();return;}// 检查是否暂停if (_isPaused)return;Document doc Application.DocumentManager.MdiActiveDocument;Database db doc.Database;var ed doc.Editor;usi…

作者头像 李华