基于Python实现快速傅里叶变换FFT

def fft(x, flag=True):

    """
    flag is True by default to represent the forward FFT
    flag is False, if inverse FFT is wanted
    this is a simple version for understanding FFT quickly
    the length of x should be even to be correct
    """
    
    n = len(x)
    factor = 1 if flag else 0.5
    if n == 1:
        return x
    w = np.exp(2 * np.pi * 1j/ n) if flag else  np.exp(-2 * np.pi * 1j / n)
    x_even, x_odd = x[::2], x[1::2]
    y_even, y_odd = fft(x_even, flag), fft(x_odd, flag)
    y = np.array([0 + 0j] * n)
    for i in range(int(n/2)):
        y[i] = y_even[i] + w**i * y_odd[i]
        y[i + int(n/2)] = y_even[i] - w**i * y_odd[i]
    return y * factor

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值