python - 快速傅立叶变换算法因单个减号而错误

标签 python image-processing signal-processing fft

观看此有关快速傅立叶变换的视频后 https://www.youtube.com/watch?v=h7apO7q16V0

我分析了伪代码并在 python 中实现它,发现它产生的输出与许多 fft 计算器网站的输出不同。我的值(value)观似乎都在那里,这很奇怪,因为顺序不合适,任何人都知道为什么。是一种不同类型的算法实现还是什么。


import cmath
import math
def FFT(P):
    n= len(P)

    if n == 1:
        return P

    omega = cmath.exp((2 * cmath.pi * 1j)/n)

    p_even = P[::2]
    p_odd = P[1::2]

    y_even = FFT(p_even)
    y_odd = FFT(p_odd)

    y = [0] * n

    
    for i in range(n//2):
        y[i] = y_even[i] + omega**i*y_odd[i]
        y[i+n//2] = y_even[i] - omega**i*y_odd[i]
    return y

    
poly = [0,1,2,3]
print(FFT([0,1,2,3]))

我对其进行测试的网站是 https://tonysader.github.io/FFT_Calculator/ ? 我在这个网站输入0,1,2,3并得到:6,-2+2J,-2,-2+-2J

虽然我的Python程序输出:6, -2-2J, -2, -2+2J

我遵循的伪代码:

enter image description here

最佳答案

我认为您正在运行的程序正在执行逆 FFT。尝试 omega = cmath.exp((-2 * cmath.pi * 1j)/n)。注意减号。

关于python - 快速傅立叶变换算法因单个减号而错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69747278/

相关文章:

python - 如何在另一个 python 图中添加不同的图(作为插图)

javascript - 如何将音频 Blob 传递到 Django 后端和服务器?

linux - 将DICOM图像转换为PNG的最简单方法是什么?

python - Otsu 的方法和 Python 中的中值滤波器

python - 为什么 Swift 中的 FFT 与 Python 中的不同?

python - 如何在 Python 中对时域信号应用滤波器

unity3d - 多声道音频输入统一

python - 如何查找与 KMeans 在同一集群中的文档

python - 如何向 Tornado 添加自定义事件

python - 是否可以在 OpenCV 中将图像粘贴到另一个图像之上?