来自文件的复数的快速傅里叶变换

时间:2013-05-10 11:57:46

标签: python signals fft

我的代码允许用户引入将使用傅里叶变换的数字数组。但是我想从一个文件中读取这个数组。我怎样才能做到这一点?我刚开始学习python ..

import cmath
from scipy.fftpack import fft
f=open("complex.txt","r+")
c=[]
for line in f:
    line=line.split()
    if line:
        line=[complex(i.replace('i','j')) for i in line]
        c.append(line)

def omega(p, q):
    return cmath.exp((2.0 * cmath.pi * 1j * q) / p)

def fft(signal):
    n = len(signal)
    if n == 1:
        return signal
    else:
        Feven = fft([signal[i] for i in xrange(0, n, 2)])
        Fodd = fft([signal[i] for i in xrange(1, n, 2)])
        combined = [0] * n
        for m in xrange(n/2):
            combined[m] = Feven[m] + omega(n, -m) * Fodd[m]
            combined[m + n/2] = Feven[m] - omega(n, -m) * Fodd[m]

    return combined

2 个答案:

答案 0 :(得分:3)

事实证明(参见上面的评论)Mady的实际困难在于在Python中调用函数,而不是从文件中读取数据或者对文件进行傅里叶变换。所以:

要将函数f应用于参数abc,您说

f(a,b,c)

如果你想把结果放在一个名为d的变量中,你说

d = f(a,b,c)

答案 1 :(得分:2)

您的代码目前的问题是什么?你试过了吗?

for line in f:
    line=line.split()
    if line:
        line=[complex(i.replace('i','j')) for i in line]
        c.append(line)

for signal in c:
    print fft(signal)