本文主要是介绍新旧torch中傅里叶变换实现(fft),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由泰勒级数我们知道,一个函数可以被分解成无穷个幂函数叠加的形式,于是同样地,一个周期函数也可以被分解成多个周期函数叠加,于是自然而然地,三角函数符合这个需求,由傅里叶级数我们可以将周期函数分解成无穷个三角函数叠加的形式,以下是具体的定义:
# a, b 均为一个2维tensor# torch 1.8 之前(旧)
def ccorr(a, b):aa = torch.rfft(a, 1)bb = torch.rfft(b, 1)m = com_mult(conj(aa), bb)out = torch.irfft(m, 1, signal_sizes=(a.shape[-1],))return out# torch 1.8 及1.8 之后(新)
def ccorr(a, b):aa = torch.fft.rfft2(a, dim=(-2, -1))aaa = torch.stack((aa.real, aa.imag), -1)bb = torch.fft.rfft2(b, dim=(-2, -1))bbb = torch.stack((bb.real, bb.imag), -1)m = com_mult(conj(aaa), bbb)cor_m = aa * bb.conj()# ifft 仅包含实部 irfft包含实部和虚部out = torch.fft.irfft2(torch.complex(m[..., 0], m[..., 1]), a.size())correlation = torch.fft.irfft2(cor_m, a.size())return out
这篇关于新旧torch中傅里叶变换实现(fft)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!