STFT 使用记录

torch.stft

以滑动窗口形式,在不同窗口内部做FFT,时域数据到频域数据

调用参数:

torch.stft(input, n_fft, hop_length=None, win_length=None, window=None, 
center=True, pad_mode='reflect', normalized=False, onesided=None, return_complex=None)

输入:

 1维时域数据 shape(L) 或 2维时域数据 shape(batch, L)

输出:

(N, T, 2) 或 (batchsize, N, T, 2)

其中N为频段数,T为使用的总帧数,2为频谱的实部和虚部

N = n_fft // 2 + 1

T = (L - 1) // hopsize + 1, hopsize默认值为 1/4 的n_fft

其他参数:

hop_length  默认为n_fft/4,每次滑动窗口的步长,即每次的帧移

win_length  默认等于n_fft。需要满足win_length <= n_fft。因为fft要求输入的时域数据点数=输出的频段点数,所以当采样出win_length个时域数据时,需要用0填充至n_fft个

window  shape (n_fft, ),可以由torch.hann_window()等函数生成。其本质是一个加权求和操作里的“权重”。如果当win_length < n_fft时,torch.hann_window() 生成的窗也会被填充成(n_fft,)

在使用过程中,发现输出的维度(batchsize, N, T, 2) 中的 T 比计算的分帧要多一帧,参考官方文档:torch.stft — PyTorch 1.12 documentation

其中有一个参数 center 默认为true,输入会在两侧pad,pad长度为n_fft // 2。如果将center设为false,则不再两侧pad。pad的value不是0,默认pad_mode 为‘reflect’ ,即为反射,如果输入的信号为:1,2,3,4,5,6, 在两侧pad  n_fft // 2 = 3个,则pad之后的结果为:

4,3,2,【1,2,3,4,5,6】,5,4,3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值