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

MATLAB 实现基于短时傅里叶变换 (STFT) 的音频信号时频分析与可视化

短时傅里叶变换 (STFT) 是分析非平稳信号的常用工具,广泛应用于音频处理、语音识别等领域。本文将通过 MATLAB 实现 STFT 的完整流程,包括音频读取、参数设置、时频分析、结果可视化,并对比不同窗函数对分析结果的影响,帮助读者理解 STFT 的原理及工程应用。

% 基于STFT的音频信号时频分析与可视化
% 功能:读取音频文件,进行短时傅里叶变换,分析并可视化时频特征,对比不同窗函数效果clear; clc; close all;%% 1. 读取音频文件(可替换为自己的音频,支持.wav格式)
% 若没有音频文件,可使用MATLAB内置示例信号
use_example_signal = true;  % 设为true使用内置信号
if use_example_signal% 生成示例信号:2秒,采样率16000Hz,包含两个频率随时间变化的正弦波fs = 16000;          % 采样率t = 0:1/fs:2;        % 时间向量f1 = 500 + 1000*t;   % 第一个信号频率(500-2500Hz线性变化)f2 = 3000 - 1000*t;  % 第二个信号频率(3000-1000Hz线性变化)x = sin(2*pi*cumsum(f1)/fs) + 0.5*sin(2*pi*cumsum(f2)/fs);  % 生成信号
else% 读取外部音频文件(需保证文件路径正确)[x, fs] = audioread('test_audio.wav');  % 替换为实际音频路径if size(x, 2) > 1x = mean(x, 2);  % 若为立体声,转为单声道endt = (0:length(x)-1)/fs;  % 时间向量
end
disp(['信号长度:', num2str(length(x)/fs), '秒,采样率:', num2str(fs), 'Hz']);%% 2. 设置STFT参数
win_len = 1024;       % 窗长(影响频率分辨率:窗越长,频率分辨率越高)
overlap = 0.75;       % 重叠率(影响时间分辨率:重叠越高,时间分辨率越高)
nfft = 2048;          % FFT点数(通常取大于等于窗长的2的整数次幂)
win_types = {'hann', 'rectwin', 'hamming'};  % 待对比的窗函数%% 3. 执行STFT并可视化
figure('Position', [100, 100, 1200, 800]);
for i = 1:length(win_types)win = feval(win_types{i}, win_len);  % 生成窗函数% 执行STFT[S, f, t_stft] = stft(x, fs, ...'Window', win, ...'OverlapLength', round(overlap*win_len), ...'FFTLength', nfft);power_S = abs(S).^2;  % 计算功率谱(幅度平方)% 绘制时频图subplot(length(win_types), 1, i);pcolor(t_stft, f, 10*log10(power_S));  % 转换为分贝(dB)shading interp;  % 平滑着色colorbar;xlabel('时间 (s)');ylabel('频率 (Hz)');title(['STFT结果(窗函数:', win_types{i}, ',窗长:', num2str(win_len), '点)']);ylim([0 fs/2]);  % 只显示正频率(奈奎斯特频率以内)set(gca, 'FontName', 'SimHei');  % 支持中文显示
end
sgtitle('不同窗函数的音频信号时频分析对比');%% 4. 绘制原始信号波形
figure('Position', [100, 300, 1000, 400]);
plot(t, x);
xlabel('时间 (s)');
ylabel('幅度');
title('原始音频信号波形');
xlim([0 max(t)]);
grid on;
set(gca, 'FontName', 'SimHei');

程序结果

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

相关文章:

  • 第十章-Tomcat性能测试与实战案例
  • 1.Linux初识
  • 如何在亚马逊做公司网站wordpress文档chm
  • 免费中英文网站源码想做个网站都需要什么
  • 【小程序】指定元素滚动到中间
  • 百度PaddleOCR-VL:基于0.9B超紧凑视觉语言模型,支持109种语言,性能超越GPT-4o等大模型
  • (论文速读)InteractVLM: 基于2D基础模型的3D交互推理
  • 网络基础知识简易急速理解---OSPF开放式最短路径优先协议
  • VTK入门:vtkImageData——3D体素/2D像素的“规则收纳盒”
  • 插入区间--leetcode
  • 网络构建与访问控制实验
  • 利用建e网全景生成VR全景链接
  • 【项目与八股】复习整理笔记
  • 企业门为什么要建设门户网站天津进口网站建设电话
  • OGNL语法实践
  • 二叉树的直径,二叉树中的最大路径和
  • 【无标题】Verilog中generate的用法
  • 代码随想录 105.从前序与中序遍历构造二叉树
  • 微信网站公司用wordpress还是用框架
  • 电子电气架构 --- 汽车软件开发基础V模型
  • 国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照系统中的深度应用
  • 【MATLAB例程】自适应渐消卡尔曼滤波,背景为二维雷达目标跟踪,基于扩展卡尔曼(EKF)|附完整代码的下载链接
  • 【开题答辩全过程】以 博客系统的设计与实现为例,包含答辩的问题和答案
  • 基于 OpenHarmony 分布式数据服务重构 BCI 脑机接口通信系统
  • 投资交易网站开发商标图案大全大图 logo
  • 甘肃住房和城乡建设局网站宁波公司建网站哪家好
  • LangChain第三页【操作指南】_【如何创建一个自定义对话模型类】翻译完成
  • 专题:2025AI+直播+私域电商行业洞察报告|附200+份报告PDF、数据仪表盘汇总下载
  • 贝锐蒲公英R300S升级:内置三网通卡,联通、电信、移动智能切换
  • 拼接显示技术方案介绍:重塑视觉体验,赋能多元场景