scipy短时傅里叶分析STFT

article/2025/10/7 8:21:08

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) % (nperseg-noverlap) == 0 (x.shape[axis]nperseg)。可以使用更高级的填充参数来完成这一任务。
给出了时域信号 x [ n ] x[n] x[n]、窗口 w [ n ] w[n] w[n]和hop size H = n p e r s e g − n o v e r l p H=nperseg-noverlp H=npersegnoverlp时,时间指数t处的加窗帧:
X t [ n ] = x [ n ] w [ n − t H ] X_t[n]=x[n]w[n−tH] Xt[n]=x[n]w[ntH]
给出了重叠-加法(OLA)重建方程。
X [ n ] = ∑ t x t [ n ] w [ n − t H ] ∑ t w 2 [ n − t H ] X[n]=\frac{∑_tx_t[n]w[n−tH]}{∑_tw^2[n−tH]} X[n]=tw2[ntH]txt[n]w[ntH]

NOLA约束确保OLA重建方程分母中出现的每一个归一化项都是非零的。通过CHECK_NOLA可以检验是否可以选择满足该约束条件的窗口、非标准窗口和非标准节点。

接口:

scipy.signal.stft(x, fs=1.0, window='hann', nperseg=256, noverlap=None, nfft=None, detrend=False, return_onesided=True, boundary='zeros', padded=True, axis=- 1, scaling='spectrum')"""
Compute the Short Time Fourier Transform (STFT).STFTs can be used as a way of quantifying the change of a nonstationary signal’s frequency and phase content over time.
STFT可以用来量化非平稳信号的频率和相位随时间的变化。Parameters
x:array_like
Time series of measurement values
测量值的时间序列fs:float, optional
Sampling frequency of the x time series. Defaults to 1.0.
x时间序列的采样频率window:str or tuple or array_like, optional
Desired window to use. If window is a string or tuple, it is passed to get_window to generate the window values, which are DFT-even by default. See get_window for a list of windows and required parameters. If window is array_like it will be used directly as the window and its length must be nperseg. Defaults to a Hann window.
需要使用的窗口。如果window是一个字符串或元组,它将被传递给get_windows以生成窗口值,这些值在默认情况下是DFT-even。有关窗口和所需参数的列表,请参阅get_window。如果window是array_like,它将直接作为窗口使用,并且它的长度必须是nperseg。默认为Hann窗口。nperseg:int, optional
Length of each segment. Defaults to 256.
每个段的长度。默认值为256。noverlap:int, optional
Number of points to overlap between segments. If None, noverlap = nperseg // 2. Defaults to None. When specified, the COLA constraint must be met (see Notes below).
段之间要重叠的点数。如果没有,则noverlap=nperseg//2。默认为无。指定后,必须满足COLA约束(见注释)nfft:int, optional
Length of the FFT used, if a zero padded FFT is desired. If None, the FFT length is nperseg. Defaults to None.
如果需要零填充FFT,则使用的FFT长度。如果无,则FFT长度为nperseg。默认为无。detrend:str or function or False, optional
Specifies how to detrend each segment. If detrend is a string, it is passed as the type argument to the detrend function. If it is a function, it takes a segment and returns a detrended segment. If detrend is False, no detrending is done. Defaults to False.
指定如何去除每个段的趋势。如果dettrend是一个字符串,那么它将作为类型参数传递给detrend函数。如果它是一个函数,它接受一个段并返回一个去趋势段。如果去趋势为False,则不进行去趋势。默认值为False。return_onesided:bool, optional
If True, return a one-sided spectrum for real data. If False return a two-sided spectrum. Defaults to True, but for complex data, a two-sided spectrum is always returned.
如果为真,则返回真实数据的单侧频谱。如果False返回一个双边频谱。默认为True,但是对于复杂的数据,总是返回双面频谱。boundary:str or None, optional
Specifies whether the input signal is extended at both ends, and how to generate the new values, in order to center the first windowed segment on the first input point. This has the benefit of enabling reconstruction of the first input point when the employed window function starts at zero. Valid options are ['even', 'odd', 'constant', 'zeros', None]. Defaults to ‘zeros’, for zero padding extension. I.e. [1, 2, 3, 4] is extended to [0, 1, 2, 3, 4, 0] for nperseg=3.
指定输入信号是否在两端扩展,以及如何生成新值,以便将第一个窗口段居中于第一输入点。这样做的好处是,当所采用的窗口函数从零开始时,能够重建第一个输入点。有效的选项是【偶数,奇数,常数,零,无】。对于零填充扩展,默认为“零”。也就是说,对于nperseg=3的情况,【1,2,3,4】被扩展到了【0,1,2,3,4,0】的情况下,当n=3时,我们将得到一个很好的结果。padded:bool, optional
Specifies whether the input signal is zero-padded at the end to make the signal fit exactly into an integer number of window segments, so that all of the signal is included in the output. Defaults to True. Padding occurs after boundary extension, if boundary is not None, and padded is True, as is the default.
指定是否在输入信号的末尾添加零填充,以使信号精确地适合于整数个窗口段,从而使所有信号都包含在输出中。默认为“真”。如果边界不为“无”,则在边界扩展之后进行填充,并且填充为“真”,这是默认设置。axis:int, optional
Axis along which the STFT is computed; the default is over the last axis (i.e. axis=-1).
计算STFT的轴;默认值位于最后一个轴上(即轴=-1)。scaling: {‘spectrum’, ‘psd’}
The default ‘spectrum’ scaling allows each frequency line of Zxx to be interpreted as a magnitude spectrum. The ‘psd’ option scales each line to a power spectral density - it allows to calculate the signal’s energy by numerically integrating over abs(Zxx)**2.
默认的“频谱”缩放允许Zxx的每个频率线被解释为幅度频谱。“psd”选项将每一行缩放到一个功率谱密度——它允许通过对abs(Zxx)**2的数值积分来计算信号的能量。Returns
f:ndarray
Array of sample frequencies.
采样频率阵列。t:ndarray
Array of segment times.
段时间的数组。Zxx:ndarray
STFT of x. By default, the last axis of Zxx corresponds to the segment times.
x的短时傅立叶变换。默认情况下,Zxx的最后一个轴对应于分段时间。
"""

示例:

from scipy import signal
import matplotlib.pyplot as plt
import numpy as nprng = np.random.default_rng()#Generate a test signal, a 2 Vrms sine wave whose frequency is slowly modulated around 3kHz
# , corrupted by white noise of exponentially decreasing magnitude sampled at 10 kHz.fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = rng.normal(scale=np.sqrt(noise_power),size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
# Compute and plot the STFT’s magnitude.f, t, Zxx = signal.stft(x, fs, nperseg=1000)
plt.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=amp, shading='gouraud')
plt.title('STFT Magnitude')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

在这里插入图片描述

引用:

[^1] :scipy.signal.stft — SciPy v1.9.3 Manual
[^2] :Oppenheim, Alan V., Ronald W. Schafer, John R. Buck “Discrete-Time Signal Processing”, Prentice Hall, 1999.
scipy.signal.stft)
[^3] :Daniel W. Griffin, Jae S. Lim “Signal Estimation from Modified Short-Time Fourier Transform”, IEEE 1984, 10.1109/TASSP.1984.1164317


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

相关文章

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",中…

nvme分区选mbr还是guid_怎么分辨硬盘是GUID格式还是MBR格式以及怎样更改

首先我们要大概了解一下MBR和GUID是什么 mbr是指主引导记录,guid是指全局唯一标识符(其实我也不太懂这是啥),两者都是硬盘的一种启动模式(大概是这个意思,欢迎指教) 但是mbr只支持2x1024mb,也就是传统意义上的2tb的储存,并且只能分最多4个区,而guid理论上来讲可以有无…

nvme分区选mbr还是guid_系统重装,硬盘分区MBR和GPT选哪个好?看完才知原来有这讲究!...

在重装系统时,不少用户会问老毛桃电脑的硬盘选择MBR格式还是GPT格式好呢?其实,如何选择格式和你用的电脑是BIOS启动或是UEFI启动有很大的联系。我们都知道现在大家较为常用的要么是BIOS+MBR模式,要么是UEFI+GPT模式,选择任意一种模式的分区对系统运行不会造成太大的影响。…

nvme分区选mbr还是guid_重装系统时,磁盘分区MBR和GPT模式哪个好?原来还有这两种区别!...

相信大家在重装系统之前就会将电脑磁盘进行分区,毕竟只有一个分区是不可以进行重装系统的。而且磁盘分区方便管理磁盘,每个分区之间相互独立,数据不容易产生混淆。那么大家在创建磁盘分区的时候,肯定都会遇到MBR和GPT两种引导模式,这时候就会产生人生的思考:究竟应该怎么…

nvme分区选mbr还是guid_老毛桃winpe的DiskGenius分区工具使用说明

在对磁盘进行分区时,存在着一大堆的设置,到底需要如何设置?分区表是什么?如何进行4K对齐?以下操作建议PE下使用,前期需要准备:制作老毛桃U盘启动盘(U盘大小需要8G以上)。 操作指引: 起始分区操作请看:第1步 GUID分区表(GPT硬盘)操作请看:第2~7步; MBR分区表操作请看:…

服务器系统要用GUID还是MBR,win7mbr和guid应该选哪一个

win7mbr和guid是硬盘分区的两个格式,很多用户在做系统的时候不知道选哪个好,其实最好根据自己的电脑的配置,下面来看看详细的介绍吧。 win7mbr和guid选哪个 WIN7:建议MBR分区。因为Windows 7默认不支持UEFI系统安装,无…

服务器系统要用GUID还是MBR,分享win10分区格式MBR和GUID有什么区别 教你区分MBR和GUID格式...

今天IT天空小编要给大家分享下最新的教程 电脑装win10系统需要选择正确的分区格式,这样电脑才能保持正常运转,如果格式安装错误,电脑就没办法继续运行了。一般情况下,win10分区格式MBR和GUID两种选择,那么这两者有何区…

【小白装系统】——硬盘分区表格式GUID和MBR知识普及

我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR。 怎么判断自己硬盘是哪一种: 如果你的电脑原装系统是win8或者以上的,那么他的硬盘分区表格式为GUID(GPT)格式的;如果是win7以下的,那么一般就是MBR的了。 除此之外我们还可以利用分区工具DiskGen…

python输出去空格_python不空格

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 退格(backspace) e 转义 000 空 n 换行 v 纵向制表符 t 横向制表符 r 回车 f 换页oyy 八进制数yy代表的字符,例如:o12代表换行 xyy 十进制数yy代表的字符,例…