使用 torch.stft 进行短时傅里叶变换

这篇具有很好参考价值的文章主要介绍了使用 torch.stft 进行短时傅里叶变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python 常规的 stft 都是在 cpu 上进行计算,如果网络训练是在 GPU 上进行,那么就涉及到数据传输的问题,降低计算效率;而 torch 自带的 stft 可以直接在 GPU 上进行计算,因此可以节省计算时间。

import torch
import torchaudio

time_audio, sr = torchaudio.load('./audio/bed_room_record_0.wav')

frequency_audio = torch.stft(time_audio, n_fft = 512, hop_length = 160, return_complex=True, onesided=True)

time_recover = torch.istft(frequency_audio, n_fft = 512, hop_length = 160)

运行结果如下:

使用 torch.stft 进行短时傅里叶变换,pytorch,python,torch.stft

使用 torch.stft 进行短时傅里叶变换,pytorch,python,torch.stft 

根据结果可以发现输入跟短时傅里叶逆变换的的结果大小并不一致,这是因为stft截断的原因,可以通过在输入信号之前添加padding的操作实现前后大小一致的目标。

import torch
import torchaudio
import numpy as np

def padding_audio(time_audio,hop_len):
    length = time_audio.size(-1)
    frame_num = int(np.ceil(length/hop_len))
    padded_len = frame_num * hop_len
    padding_len = padded_len - length
    padded_audio = torch.cat([time_audio,time_audio[:,:padding_len]],-1)
    
    return padded_audio

time_audio, sr = torchaudio.load('./audio/bed_room_record_0.wav')

padded_time_audio = padding_audio(time_audio,160)

frequency_audio = torch.stft(padded_time_audio, n_fft = 512, hop_length = 160, return_complex=True, onesided=True)

time_recover = torch.istft(frequency_audio, n_fft = 512, hop_length = 160)

torch.cat((padded_time_audio, time_recover), 0)

 输出结果如下:

使用 torch.stft 进行短时傅里叶变换,pytorch,python,torch.stft

 使用 torch.stft 进行短时傅里叶变换,pytorch,python,torch.stft

 文章来源地址https://www.toymoban.com/news/detail-579954.html

到了这里,关于使用 torch.stft 进行短时傅里叶变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

    作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈

    2024年02月07日
    浏览(50)
  • STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

    按下 STM32F4 的 KEY0 按键,通过外部中断的方式对按键进行检测,然后进行一次固定点数的 DMA ADC 采集,采集完成后在 DMA 的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单处理和傅里叶变化,然后实时显示在电脑上。 开

    2024年02月14日
    浏览(42)
  • Python中利用FFT(快速傅里叶变换)进行频谱分析

    本文将从实例的角度出发讲解fft函数的基本使用,不包含复杂的理论推导。 要对一个信号进行频谱分析,首先需要知道几个基本条件。 采样频率fs 信号长度N(信号的点数) 采样频率fs: 根据采样定理可知,采样频率应当大于等于被测信号里最高频率的2倍,才能保证不失真

    2024年01月17日
    浏览(52)
  • 快速傅里叶变换-FFTW库的使用-参考和翻译官方文档

    Plan:为实现意外结果的最佳方法而烦恼。 [Ambrose Bierce, The Enlarged Devil’s Dictionary。] FFTW 计算大小为 N 的一维 DFT 的基本用法很简单,它通常看起来像这样的代码: 您必须将此代码与 fftw3 库链接。 在 Unix 系统上,使用 -lfftw3 -lm 链接。 示例代码首先分配输入和输出数组。 您可

    2023年04月08日
    浏览(113)
  • Matlab信号处理3:fft(快速傅里叶变换)标准使用方式

    运行效果:

    2024年02月09日
    浏览(48)
  • 使用pytorch进行FFT和STFT

    首先,我们定义一个波形,幅值分别为20和38,频率为2和13: y = 20 sin ⁡ ( 2 π × 2 x ) + 38 sin ⁡ ( 2 π × 13 x ) y=20 sin (2pi times 2x)+38sin (2pi times 13x) y = 20 sin ( 2 π × 2 x ) + 38 sin ( 2 π × 13 x ) 采样频率为200Hz,采样时间为1s。由于Pytorch中没有类似于Numpy中 numpy.pi 的用法,所以我们

    2024年02月08日
    浏览(31)
  • [JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

    PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图,然后将水印文字加到频域图中,在将频域图转换回去得到加了频

    2024年02月09日
    浏览(79)
  • 傅里叶级数和傅里叶变换之间的关系推理及应用

    傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具,它们之间有密切的关系。 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号,可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展示了一个周期函数在不同频率

    2024年02月07日
    浏览(58)
  • 傅里叶变换

    在计算机视觉中,有一个经典的变换被广泛使用——傅里叶变换。傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。 什么是时域(Time domain)?从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会

    2024年02月03日
    浏览(46)
  • 图傅里叶变换

    目录 什么是图信号? 如何理解图信号的”谱“? 图傅里叶变换是什么? 图傅里叶变换中特征值和图信号的总变差有什么关系? 让我们先总结一下,我们想要把图信号  正交分解到一组基  上; 那么怎么得到?可以通过对图的拉普拉斯矩阵 做特征分解得到,即. 于是   

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包