在快速傅立叶算法上强制转换复杂值而放弃虚部

时间:2019-05-24 20:03:53

标签: python fft

我正在基于cooley-tukey方法制作快速傅立叶变换算法。该代码对我来说看起来不错,但我不断收到如下的numpy错误:

Casting complex values to real discards the imaginary part

我不确定如何更改迭代中的分配。该算法的描述如下:

def fast_fourier_transformation(data):
    N = len(data)
    if N > 1:
        Wn = math.e ** (2 * math.pi * 1j / N)
        W = 1
        A_even = data[::2]
        A_odd = data[1::2]
        B_even = fast_fourier_transformation(A_even)
        B_odd = fast_fourier_transformation(A_odd)
        for k in range(0, N // 2):
            data[k] = B_even[k] + W * B_odd[k]
            data[k + N // 2] = B_even[k] - W * B_odd[k]
            W = W * Wn
    return data

1 个答案:

答案 0 :(得分:0)

您的数据变量需要声明为复数(对于严格的实数输入,请将虚部设置为零),因为函数的输出需要复数,并且您对输入参数和参数均使用“数据”返回值(输出)。