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

通信算法之251: 时频图谱spectrogram(如短时傅里叶变换STFT)

MATLAB 的 spectrogram 函数用于计算信号的短时傅里叶变换(STFT),生成时频图谱。以下是其核心参数的含义及作用,按输入参数和输出参数分类说明:


输入参数

参数名类型默认值说明
x向量输入信号(必须为一维向量)。
window整数/向量hann(256)窗函数‌:
- 若为整数 N,表示窗长为 N 的汉宁窗;
- 若为向量(如 hann(256)),直接指定窗函数。
noverlap整数窗长-1重叠点数‌:相邻窗之间的重叠点数。增大重叠会平滑时频图,但增加计算量。
nfft整数max(256, 2^nextpow2(窗长))FFT点数‌:
- 必须 ≥ 窗长;
- 值越大,频率分辨率越高(但时间分辨率降低)。
fs标量1采样率‌(单位:Hz),用于计算频率轴 F 和时间轴 T 的实际物理单位。
freqrange字符串'onesided'频率范围‌:
'onesided':单边谱(0~fs/2);
'twosided':双边谱(-fs/2~fs/2);
'centered':双边谱居中显示。

输出参数

参数名类型说明
S矩阵时频复矩阵‌:
- 行对应频率,列对应时间;
- 元素值为复数,表示幅度和相位。
F向量频率轴‌:单位为 Hz(需指定 fs 参数)。
T向量时间轴‌:每个时间点对应窗的中心位置。
P矩阵功率谱密度‌(单位:dB),通过 spectrogram(..., 'power') 返回。

关键参数选择策略

  1. 窗长 (window)

    • 短窗‌(如 128 点):时间分辨率高,适合快速变化的瞬态信号。
    • 长窗‌(如 512 点):频率分辨率高,适合稳态信号。
  2. 重叠点数 (noverlap)

    • 通常设为窗长的 50%~75%(如 noverlap = round(0.75*窗长))。
  3. FFT点数 (nfft)

    • 建议设为 2 的整数次幂(如 512、1024),以提高计算效率。
  4. 频率范围 (freqrange)

    • 实信号用 'onesided',复信号用 'twosided' 或 'centered'

示例代码(带注释)

% 生成线性调频信号
fs = 1000;
t = 0:1/fs:2;
signal = chirp(t, 50, 2, 200);  % 50Hz到200Hz的调频信号

% 设置参数
window = hann(256);  % 汉宁窗,256点
noverlap = 192;      % 重叠192点(75%重叠)
nfft = 512;          % FFT点数

% 计算并绘制时频图
[s, f, t] = spectrogram(signal, window, noverlap, nfft, fs, 'yaxis');
figure;
imagesc(t, f, 20*log10(abs(s)));  % 转换为dB单位
axis xy; colormap('jet'); colorbar;
xlabel('Time (s)'); ylabel('Frequency (Hz)');
title('STFT时频图(窗长256,重叠75%)');

 

  • 如何减少频谱泄漏?
    选择旁瓣衰减较大的窗函数(如 blackmanharris 代替 hann)。
  • 如何提高时间分辨率?
    缩短窗长(牺牲频率分辨率)。
  • 如何显示功率谱密度?
    使用 spectrogram(..., 'power') 并直接绘制 P 矩阵。

 

http://www.dtcms.com/a/106658.html

相关文章:

  • 数据结构——队列的实现
  • LeetCode算法题(Go语言实现)_26
  • LLM大模型之精度问题(FP16,FP32,BF16)详解与实践
  • Mapreduce的使用
  • 深入理解归并排序:分治艺术的经典实践
  • 【AI产品分享】面向图片的原始位置翻译功能
  • Redisson中BitMap位图的基本操作
  • CORS与OPTIONS请求
  • 蓝桥杯 游戏 6251 单调队列
  • .NET 创建MCP使用大模型对话
  • 【计网速通】计算机网络核心知识点与高频考点——数据链路层(二)
  • kafka消息可靠性传输语义
  • 大语言模型开发框架——LangChain
  • 使用PyTorch实现LeNet-5并在Fashion-MNIST数据集上训练
  • 【Linux】内核驱动学习笔记(二)
  • 基于Spring AI与Ollama构建本地DeepSeek对话机器人
  • 数据库分库分表中间件及对比
  • ensp 网络模拟器 思科华为基于VLANIF的公司网络搭建
  • 2025.4.2总结
  • Go语言GC:三色标记法工程启示|Go语言进阶(3)
  • K-means算法
  • 从零搭建微服务项目Pro(第7-1章——分布式雪花算法)
  • cmake(11):list 选项 排序 SORT,定义宏 add_definitions,cmake 里预定义的 8 个宏
  • Git 命令大全:通俗易懂的指南
  • 基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告
  • 内网隔离环境下Java实现图片预览的三大解决方案
  • 【Django开发】前后端分离django美多商城项目第15篇:商品搜索,1. Haystack介绍和安装配置【附代码文档】
  • 从 ZStack 获取物理机与云主机信息并导出 Excel 文件
  • visual studio 2022的windows驱动开发
  • C# System.Text.Json 中 JsonIgnoreCondition 使用详解