scipy短时傅里叶分析STFT

别再只画时频图了!用Python的scipy.signal.stft函数,深入理解STFT的幅度谱与相位谱 本文深入探讨了短时傅立叶变换(STFT)在信号处理中的应用,重点解析了幅度谱与相位谱的隐藏价值。通过Python的scipy.signal.stft函数实战演示,展示了如何从复数矩阵中提取关键信号特征,包括高级幅度谱处理、相位展开技术以及窗口函数选择策略。文章还提供了工业级应用案例,帮助工程师避免常见分析陷阱,充分挖掘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) % (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=nperseg−noverlp时,时间指数t处的加窗帧:
X t [ n ] = x [ n ] w [ n − t H ] X_t[n]=x[n]w[n−tH] Xt​[n]=x[n]w[n−tH]
给出了重叠-加法(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]=∑t​w2[n−tH]∑t​xt​[n]w[n−tH]​

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 np

rng = 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

python实现 stft_用Python处理振动数据,Fourier变换(2)STFT,利用,python,傅里叶,二,短时... 上一章讲到了如何利用python把时域信号变成频域信号,那么如果要看时频图该怎么办呢?这里还是以实际应用作为例子,下面让我们来看看如何实现。采用的是从PAK采集系统收集到的原始振动数据,为在涡轮增压器上面的加速度传感器信号,导出成txt文件格式,然后利用python进行FFT变换。首先用pandas导入原始文件'''Fourtran''''''Author:jAEgerrr''''''2020-0... 阅读详情

相关推荐

FFT的那些细节

用MATLAB进行谱分析时注意: 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) → Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i (1)Xk与xn的维数相同,共有8个元素。Xk的第一个数对应

lys form BIT的博客 1795

Python中scipy.signal.stft函数详解

此博客不介绍Python函数的理论知识和算法具体实现,只讲解函数的使用方法,函数输入和输出及相关函数参数,需要看相关原理的看下其他博客(时间充足的话,建议看相关书籍,系统学习) scipy.signal.stft函数官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.stft.html 窗函数类型(scipy...

Fate_mt的博客 2万+

STFT (短时傅立叶变换):从数学公式到Python实战的时频分析指南

本文深入解析STFT(短时傅立叶变换)的数学原理与Python实战应用,涵盖窗函数选择、时频图绘制及参数优化等关键技巧。通过工业振动检测、语音识别等案例,展示如何利用STFT实现非平稳信号的时频分析,提升故障诊断与特征提取的精度。

weixin_29083475的博客 227

STFT 短时傅里叶变换的python实现

而STFT(短时傅里叶变换)则是一种时间频率分布表示方法,它将长时间信号分解为多个等长的小段,并在每个小段上计算傅里叶变换,得到频谱图。简单来说,STFT将整个信号分解成许多短时段,每个短时段近似平稳。这样可以观察到信号在不同时间段内的频率特征,并且可以更好地捕捉到信号的时变性质。通过使用STFT,我们可以获得一个随时间变化的频谱图,从而更好地理解信号在不同时间点上的频率成分。3.window : 时域信号分割的时候需要的窗函数,常用的窗函数有boxcar,triang,hamming, hann等。

weixin_40727266的博客 2790

傅立叶级数 3 大常见误区解析:从吉布斯现象到收敛条件

本文深入解析傅立叶级数的三大常见误区,包括吉布斯现象的本质、收敛条件的实际含义以及周期函数假设的适用范围。通过Python代码演示和数学推导,揭示这些现象背后的真相,帮助学习者和工程师建立准确的频域分析直觉。特别探讨了傅立叶级数在不连续点处的特殊行为及其工程应对策略,为信号处理等应用提供实用指导。

weixin_34293059的博客 328

ARIMA+傅里叶+技术指标+深度学习的多源信号融合框架

时间序列预测不是单一模型的任务,而是对趋势惯性、周期节律与市场情绪的协同建模。ARIMA擅长捕捉线性趋势与记忆衰减,傅里叶变换可解析多尺度周期及其相位演化,技术指标(如BBW、MFI、IMR)则量化实时多空强度;三者需通过可解释的深度学习架构进行动态权重融合,而非端到端黑箱拟合。这种多源异构特征协同机制,显著提升信号鲁棒性与归因能力,广泛应用于量化交易决策、风控预警与策略回测等工程场景,尤其适合需兼顾准确性与可调试性的实盘系统。

aijia7039的博客 484

短时傅里叶变换STFT原理

短时傅里叶变换STFT原理以及实现(在MATLAB和python)

m0_71709005的博客 1万+

Python时域频域转换与傅里叶变换实战项目

离散傅里叶变换是处理有限长度离散信号的一种频域分析方法。它能够将一段采样信号转化为其频率成分的复数表示,为后续的信号分析和处理提供基础。本章系统介绍了如何使用NumPy和SciPy中的傅里叶变换模块进行信号处理。从基础的fftifft到高级的stft,再到实际应用中的信号构建、频谱分析与重构,我们展示了完整的使用流程和代码示例。下一章将继续深入探讨典型信号(如正弦波、方波、噪声等)的频域特性及其傅里叶变换分析方法。

weixin_42594419的博客 1161

探索傅里叶变换与短时傅里叶分析:从理论到脚本实践

脚本包含傅里叶变换和短时傅里叶分析功能:傅里叶变换:傅里叶变换是一种将时域信号转换到频域的方法。它将一个连续或离散的信号分解成一系列复数频谱分量,表示信号在不同频率上的振幅和相位信息。傅里叶变换适用于处理全局频谱特性比较稳定的信号,能够提供信号的完整频谱信息,但无法捕捉到信号随时间变化的动态特性。短时傅里叶变换:短时傅里叶变换是一种在时间上对信号进行分段处理并应用傅里叶变换的方法。它将信号分成多个短时窗口,这个加窗处理也叫分帧,并对每个窗口应用傅里叶变换,得到相应的频谱信息。

jDPvYjdteF的博客 565

操作系统原理:【优麒麟】linux内核添加系统调用

在底端添加如下代码。

Joyce_zz的博客 2709

用VSCode远程开发Jetson小车:告别Jupyter,在本地IDE高效调试Rosmaster Python程序

本文详细介绍了如何利用VSCode的Remote-SSH扩展在本地IDE中高效开发Jetson小车的Rosmaster Python程序。通过配置远程开发环境、调试技巧和项目管理方法,开发者可以告别Jupyter Notebook的碎片化编码,实现完整的机器人控制程序开发,显著提升工作效率。

weixin_30652491的博客 477

逆变换与组合变换:信号处理与AI中的数学核心与实践指南

在信号处理与机器学习领域,变换是将数据从一个域映射到另一个域的基础数学工具,例如从时域到频域的傅里叶变换。其核心原理在于通过线性或非线性操作,揭示数据的内在结构与特征。理解变换的可逆性至关重要,逆变换确保了信息在分析处理后能够无损或可控地还原,这是数据压缩、加密和完整信号重建的技术基石。组合变换则通过串联或并联多种变换,构建出更强大的特征提取与处理流水线,例如在图像压缩中结合离散余弦变换与小波变换。这些技术广泛应用于音频降噪、图像编解码、深度学习模型架构设计等场景。本文聚焦于逆变换与组合变换的实现细节与设计

weixin_30932215的博客 394

Linux与Windows双系统,安装完linux后无法通过grub进入Windows的解决方法

先装Windows 10,Windows可正常启动,再装Kali,Kali提示装grub后照装。然而装完后重启发现无Windows选项。

sakurashockwave的博客 6454

数据科学家必学的信号处理实战:从时域到频域的工业级预处理

信号处理是时序数据分析的底层基石,本质是将物理世界连续变化的模拟量(如温度、振动、电流)通过采样、量化、存储转化为离散数字序列的过程。其核心原理围绕奈奎斯特采样定理、混叠效应、频谱泄漏与相位敏感性展开,技术价值在于还原信号真实物理语义,避免建模失真。典型应用场景覆盖工业设备故障诊断、医疗生理信号分析、金融高频时序建模及IoT传感器数据清洗。本文聚焦Python工程实践,详解时间轴重采样、陷波滤波、小波去趋势、STFT时频特征提取等关键环节,直击采样率误设、频谱误读、滤波器相位失真等高频踩坑点,帮助数据科学家

weixin_30402343的博客 354

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 375

flink新版本无bat启动文件的解决办法

flink

6 4932

傅里叶变换与FFT:从信号分析到图像处理的工程实践指南

傅里叶变换是信号处理领域的核心数学工具,它实现了信号在时域与频域之间的转换。其基本原理是将复杂的时域波形分解为不同频率的正弦波组合,从而揭示信号的频率构成。这项技术的工程价值在于,它将物理世界中的连续信号(如声音、图像、振动)转化为可计算、可分析的频域表示,为数字信号处理奠定了理论基础。在实际应用中,傅里叶变换及其快速算法FFT广泛应用于通信系统的调制解调、音频编解码、图像压缩与滤波,以及机械故障诊断等领域。例如,在图像处理中,通过二维傅里叶变换进行频域滤波,可以有效实现图像去噪和锐化;在通信中,OFDM技

weixin_30735745的博客 310

YOLO26 实例分割技术:Mask 分支与特征融合

YOLO26实例分割技术研究摘要:本文提出了一种基于YOLO架构的高效实例分割方法,通过创新设计Mask分支和特征融合策略解决像素级分割精度、多尺度目标处理等挑战。系统采用共享Backbone提取特征,检测分支输出边界框和类别,Mask分支生成原型Mask和组合系数。核心创新包括:1)原型Mask生成与线性组合机制;2)检测与Mask特征共享;3)结合BCE和Dice的多任务损失函数。实验表明该方法在保持实时性的同时实现了高质量分割,为轻量级实例分割提供了新思路。

一键难忘的博客 248

从傅里叶变换到工程实践:频谱分析核心原理、关键参数与Python实战指南

频谱分析是信号处理领域的核心基础,它将时域信号转换到频域,揭示信号内在的频率成分及其能量分布。其数学基础是傅里叶变换,而工程实现则依赖于离散傅里叶变换及其高效算法FFT。这项技术的核心价值在于,它能将时域中混杂、难以辨识的复杂波形,分解为不同频率的简单正弦波组合,从而为系统分析、故障诊断和特征提取提供关键视角。在实际应用中,必须深刻理解并正确设置采样频率、窗函数等关键参数,以避免混叠、频谱泄露等常见问题。通过Python的NumPy、SciPy等工具库,可以高效完成从信号生成、FFT计算、加窗处理到结果可视

weixin_29079671的博客 309

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

伶俐角少儿编程 466

基于 FPGA Vivado 信号发生器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 信号发生器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于 FPGA Vivado 信号发生器设计(附源工程),掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习信号发生器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“信号发生器设计源工程”。 设计原理 信号发生器...

7990

多项式拟合与傅里叶级数拟合:原理对比与工程应用

在信号处理领域,多项式拟合和傅里叶级数拟合是两种基础且强大的数学工具。多项式拟合通过构造多项式函数逼近离散数据点,擅长捕捉信号的局部特征和趋势变化;而傅里叶级数拟合则利用不同频率正弦波的叠加来表示信号,能够有效揭示信号的频域特性。从技术原理来看,多项式拟合基于最小二乘法优化,适合处理非线性系统响应;傅里叶拟合则依托离散傅里叶变换(DFT),在振动分析和音频处理等周期性信号场景中表现优异。工程实践中,多项式拟合常用于传感器校准和趋势预测,傅里叶拟合则广泛应用于机械故障诊断和通信系统分析。理解这两种方法的本质差

weixin_30435261的博客 411

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

信号处理基础:从概念到工程实践

信号处理是分析随时间或空间变化的物理量的核心技术,涉及从音频到生物医学等多种数据类型。其基本原理包括信号的数学表示、时频域转换以及特征提取,其中傅里叶变换和小波分析是连接时域与频域的关键工具。在工程实践中,信号处理技术广泛应用于语音增强、ECG分析和物联网设备等场景,结合机器学习方法提升处理效率。现代挑战包括非平稳信号处理和高维数据分析,而优化算法和硬件实现则成为边缘计算中的关键。通过合理选择采样率、滤波器设计和特征提取方法,可以在资源受限环境下实现高效信号处理。

weixin_30340617的博客 368

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

别再死记硬背了!用Python+NumPy手把手带你理解FS/FT/DFT/FFT的物理意义

本文通过Python+NumPy实战演示,深入解析FS、FT、DFT、FFT等傅里叶变换的核心概念与物理意义。从周期信号的傅里叶级数展开到非周期信号的连续频谱分析,再到离散信号的快速算法实现,结合可视化代码帮助读者直观理解信号处理中的频域变换原理及其工程应用场景。

weixin_30546189的博客 400

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

傅里叶变换实战指南:从频域思维到信号处理应用

傅里叶变换是信号处理领域的基石技术,其核心原理是将复杂的时域信号分解为不同频率的正弦波叠加,从而转换到频域进行分析。这种从时域到频域的视角转换,为解决工程难题提供了关键洞察力。在频域中,信号的周期性特征和能量分布变得一目了然,使得滤波、特征提取等操作变得直观高效。该技术广泛应用于音频处理、图像分析、通信调制及振动诊断等场景。本文结合频谱泄漏、加窗函数等热词,深入探讨了离散傅里叶变换与快速傅里叶变换的工程实现,并提供了从理论到实践的应用指南与问题排查技巧,帮助工程师建立频域思维,有效处理非平稳信号等复杂数据。

weixin_30940783的博客 325
上一篇: scipy Matlab-style IIR 滤波器设计下(Elliptic \Bessel \IIR-notch\IIR-peak\IIR-comb)
下一篇: 特征选择-sklearn
KPer_Yang
博客等级 码龄5年 281粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值