短时傅里叶变换(STFT)及matlab

article/2025/10/7 6:39:07

笔记~自用版~

短时傅里叶变换的基础理论

        短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行窗函数加窗后再做傅里叶变换,得到每个时刻的频率成分。与离散傅里叶变换(Discrete Fourier Transform, DFT)和连续傅里叶变换(Continuous Fourier Transform, CFT)相比,STFT具有时间和频率分辨率都高的优点。

        在STFT中,使用一个滑动窗口(也称为时间窗口、分析窗口),将输入信号分成若干个短时段。对于每个短时段,都可计算出它的傅里叶变换。由于窗函数的存在,每个短时段的傅里叶变换只能反映该短时段内的频率信息。这个过程的结果是,在时间轴上得到了一系列变换后的频谱图

        例如,假设对一段音频信号进行时频分析。首先将该信号分成若干个长度为W的短时段,假设窗函数为h(n),那么第k个短时段的STFT可以表示为:

其中,x(n)为原始信号,n为时域采样点,k表示第k个短时段,ω表示频率。这个公式的意思是:对第k个短时段的信号进行窗函数加窗后,再做傅里叶变换,得到该短时段的频率成分

       将所有的短时段的STFT组合起来,就可以得到整个信号的时频图谱。其中,横轴表示时间轴,纵轴表示频率轴,颜色表示该时刻该频率成分的幅度大小

       STFT一个很明显的缺点——窗函数长度不能太短,否则无法准确反映频率信息,也不能太长,否则时域分辨率将下降。这个问题可以通过使用一些基于STFT的变种方法来解决,例如连续小波变换(Continuous Wavelet Transform, CWT)和可变长窗口的短时傅里叶变换(Variable-Length Window STFT, VSTFT)等.......后续讨论

Matlab使用与演示

STFT(短时傅里叶变换)是一种时频分析方法,可以将信号在时间域和频率域上进行矩阵表示。具体来说,STFT 将整段信号分成若干小段,并对每个小段信号在时域上进行窗函数和 DFT 处理,最后得到了信号在时间和频率两个维度上的矩阵表达。

Matlab 中计算 STFT 变换的函数是 spectrogram,语法如下:

[S,F,T,P] = spectrogram(x, window, noverlap, nfft, fs);

其中,'x'表示输入信号,'window'表示窗函数的长度(以采样点为单位),'noverlap'表示相邻两个窗口之间的重叠长度(以采样点为单位,默认为 'window*0.5'),'nfft' 表示进行 DFT 变换时采用的点数(必须是2的幂次方,默认为256),'fs' 表示采样率。函数返回值包括:

- 'S':STFT 谱矩阵,行数为 'nfft/2+1',列数为 STFT 小段数。
- 'F':频率向量,单位为 Hz,长度为 'nfft/2+1'。
- 'T':时间向量,单位为秒,长度为 STFT 小段数。
- 'P':功率谱矩阵,与 STFT 谱矩阵 'S' 相同。

现在,我们来看一下示例代码的具体实现过程:

% 生成一个包含两个正弦波的信号
Fs = 1000; % 采样率
t = 0:1/Fs:1; % 时间序列
x = sin(2*pi*50*t) + sin(2*pi*120*t);% STFT 参数设置
winlen = 0.5; % 每个小段的长度
overlap = 0.25; % 相邻小段的重叠长度
nfft = 1024; % DFT 点数% 计算 STFT
[S,F,T,P] = spectrogram(x, round(winlen*Fs), round((1-overlap)*winlen*Fs), nfft, Fs);

step1: 首先,生成一个包含两个正弦波的信号 'x',采样率为 1000 Hz,时长为 1 秒。

step2: 然后,设置了 STFT 的参数。其中,'winlen'表示每个小段的长度为 0.5 秒,'overlap' 表示相邻两个小段之间重叠 0.25 秒,即两个小段之间有 0.25 秒的重复数据。'nfft' 表示进行 DFT 变换时采用 1024 个点进行傅里叶变换。

step3: 最后,调用'spectrogram'函数,计算 'x' 的 STFT 变换。实际上,该函数还会返回功率谱矩阵 'P',但在这里未加以使用。函数返回的 'S'、'F' 和 'T' 分别表示 STFT 谱矩阵、频率向量和时间向量。

在本例中,将 STFT 谱矩阵(即 'S')传递给 'imagesc'函数,以可视化 STFT 的频谱图。如下:

% 绘制 STFT 频谱图
imagesc(T, F, 20*log10(abs(S)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('STFT Spectrogram');
colorbar;

        使用 'imagesc' 函数将 STFT 显示为频谱图,其中输入参数 'T' 和 'F' 分别是时间向量频率向量,输入参数 'abs(S)' 表示 STFT 谱矩阵的模值(因为模值更能体现信号在不同频率下的强度)。同时使用 '20*log10' 函数对 STFT 谱矩阵取对数,并乘以 20,目的是将 STFT 谱矩阵从线性单位(即幅度)转换为对数单位(即分贝),以增强其可视化效果。最后,使用 'axis xy' 让横轴表示时间,纵轴表示频率,通过 'colorbar' 添加颜色条,最后用 'xlabel'、'ylabel' 和 'title' 函数添加轴标签和标题。得到图像:

 也可以选择对S做归一化处理。如下:

S = abs(S)/ max(abs(S(:)));
imagesc(T, F, S);
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('STFT Spectrogram');
colorbar;

得到图像:

可以非常清晰的看到结果~  


http://chatgpt.dhexx.cn/article/wMyJc3uY.shtml

相关文章

Revertable STFT

最近在做利用深度学习去噪的工作,大部分的工作都是利用spectrogram特征来做的,这就需要用到STFT, 本次利用的是python的scipy.signal模块。 在做去噪的时候,首先需要先将输入信号x利用stft转换成spectrogram: ff, tt…

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

1. 引言 在信号分析中,傅里叶变换可称得上是神器。但在实际应用中,人们发现它还是存在一些不可忽视的缺陷。 为了便于叙述考察以下两种情形: Case 1 考察这样一个函数: fs 1000; t 0:1/fs:1 - 1/fs; x [10 * cos(2 * pi *…

C语言版本STFT/ISTFT

接上一篇:https://blog.csdn.net/SPESEG/article/details/101672559 注意:寡人的stft是有前提条件的,并不是完全与librosa.stft一一对应【我的版本参数是固定的,不可变,其他是一样的】,因为我的hop_length…

stft isar成像 matlab,基于STFT和FRFT的运动目标雷达三维成像方法与流程

本发明属于数字信号处理技术领域,特别涉及一种运动目标雷达三维成像方方法,可 用于对运动目标识别时,雷达ISAR对其三维成像。 背景技术: 逆合成孔径雷达ISAR是一种全天候、全天时的远程探测手段,具有对运动目标进行 成像的能力,被广泛应用于目标跟踪、目标识别、机场监视…

librosa 语音库(二)STFT 的实现

librosa是一个应用广泛的音频处理python库。 在librosa中有一个方法叫做stft,功能是求音频的短时傅里叶变换, librosa.stft 返回是一个矩阵 短时傅立叶变换(STFT),返回一个复数矩阵使得D(f,t) 当调用的形式是 np.abs( stft() ),…

python的opencv操作记录(七)——短时傅里叶变换(stft)

文章目录 DCT-傅立叶变换的局限性STFT 短时傅里叶变换从另一个角度来理解图像的“时域”数据看看fs和t这两个参数再看看怎么划分窗口最后看另外两个出参Zxx返回结构 图像的stft DCT-傅立叶变换的局限性 接上一篇DCT的文章,DCT只提取了整个信号域的频率信息&#xf…

傅里叶变换@(stft和istft)

一、窗函数之短时傅里叶变换stft 前提: 傅里叶变换是针对平稳信号的,但是很多实际应用中的信号都是非平稳的,如果要计算其傅里叶变换,需要假设其周期无限长,然后对这个无限长的信号做变换分析。但是这种无限长信号分…

scipy短时傅里叶分析STFT

scipy短时傅里叶分析 基本原理: 为了使STFT能够通过STFT逆变换反变换,信号加窗必须服从“非零重叠加”(NOLA)的约束,输入信号必须具有完整的加窗覆盖即 ( x . s h a p e [ a x i s ] − n p e r s e g ) (x.shape[axis] - nperseg) % (nper…

STFT笔记

因为不懂这个被鄙视了,调包侠来补作业。 基础知识 FFT(fast fourier transfrom)快速傅里叶变换。 推荐阅读《深入浅出的讲解傅里叶变换(真正的通俗易懂)》, 《梅尔频率倒谱系数(MFCC)》。 频谱只获得了频…

利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声

利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声 1、背景 傅里叶变换(TF)对频谱的描绘是“全局性”的,不能反映时间维度局部区域上的特征,人们虽然从傅立叶变换能清楚地看到一整段信号包含的每一个频率的分量值…

STFT(短时傅里叶变换)音频特征提取,用于语音识别 python

在各种音频相关的任务中,不管用什么模型或网络,得到所需的音频特征肯定是必要的一步。下面简单说一下STFT特征 一、原始信号 在说STFT之前,先说一下读入的原始信号,图像是在XY二维上描述的像素点的集合,相应的&#x…

STFT原理及MATLAB代码

原文地址:http://blog.csdn.net/shengzhadon/article/details/46811923 一、先说说STFT的理论 1.概念和特点 STFT(short-time Fourier transform,短时傅里叶变换)是和傅里叶变换相关的一种数学变换,用以确定时变信号其…

nvme分区选mbr还是guid_win7安装系统硬盘模式mbr和guid选哪个?

有很多系统之家的用户,还是喜欢安装win7系统的。但是在新的硬盘里面我们要分区的话,会出现mbr和guid是硬盘分区的两个格式,很多用户在做系统的时候不知道选哪个好,其实最好根据自己的电脑的配置,下面来看看详细的介绍吧…

uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及

我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR。 啥是硬盘分区呢?举个例子你就明白了,很多人去买电脑的时候,比如你买的电脑只有一块硬盘,店家就会给你分区,把这一块硬盘分成好几个区,比如分成了系统,软件,文档这样三个,那么你打开【我的电脑】后就会…

nvme分区选mbr还是guid_SSD里的特例:NVME固态改MBR格式、装Win7

问题一:NVME固态是否支持MBR文件格式: 场景:前几天朋友兴致冲冲的买了个建兴T10,准备好好体验一下。但是正当他吃着火锅,唱着歌,突然就给麻匪劫了——电脑系统竟然接二连三莫名奇妙的崩溃。 于是朋友就向我求助。由于他的电脑最近除了换了硬盘,并没有添加任何其他的硬设…

guid备份分区表crc错误_硬盘GPT和MBR分区表转换方法

随着硬盘容量越来越大,传统的MBR硬盘分区模式已经不能满足发展需要,预装win8或win10系统的硬盘默认都是GPT分区表(GUID格式),GPT识别2T以上的硬盘以及UEFI启动模式。不过在对系统进行重装时,经常会遇到无法安装在GPT或MBR硬盘中的问题,那么这个时候就需要对硬盘的分区表进…

GUID与MBR

磁盘分区表方案 全局唯一标识分区表是一个实体硬盘的分区表的结构布局的标准。 先说说目前广泛使用的磁盘分区表方案。传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中…

如何将MBR转为GUID?这方法易于使用且安全!

为什么要将MBR转为GUID(GPT)? MBR代表主引导记录,它使用Legacy BIOS分区表。而GPT磁盘,也就是GUID分区表的缩写,是一种引入了统一可扩展固件接口 (UEFI) 的新布局。GPT磁盘有2个主要优势: GPT磁盘每个分区…

计算机硬盘分区信息,你知道电脑硬盘分区Guid格式和MBR格式有什么区别吗?来看看!...

现在的电脑随着技术的更新,传统的MBR格式虽然支持兼容,但是win10系统基本都使用了GUID分区格式,这样会让整体的系统运作得更有效率。如果还在使用MBR格式的用户想安装系统,没有设置好分区格式,容易导致安装出错&#x…

nvme分区选mbr还是guid_UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别

UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别?很多电脑小白都搞不懂UEFI、GPT、BIOS、MBR到底是什么意思,下面跟随小白系统一起深入了解下UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别吧。 一、了解专业名词 BIOS,全称"Basic Input Output System",中…