在 python 中重新排序 FFT

reordering for FFT in python

我是 python 和 FFT 的新手。我在 Python 中完成了一项小任务,以找到给定数量的数据点的洗牌顺序。

我的 objective 是为 N 个数据点提供如下所示的输出。这里N=8,所以我们有3组:

[0, 1, 0, 1, 0, 1, 0, 1]
[0, 0, 1, 1, 0, 0, 1, 1]
[0, 0, 0, 0, 1, 1, 1, 1]

我试过的代码如下。有人可以帮助我解决我的错误并建议修改代码以产生所需的输出。

le=8
steps=int(math.ceil(math.log(le,2)))

pos2=[]
m=0
for k in range(0,steps):
    x=2**k
    #print x
    pos1=[]    
    for i in range(0,le):
        if m<x:
            pos1.append(0)
            m=m+1
        else:
            pos1.append(1)
            m=0
    pos2.append(pos1)

在仅追加一个 1 之后,您会立即返回追加 0。这是一个逻辑略有不同的工作版本:

import math

le = 8
steps = int(math.ceil(math.log(le, 2)))

pos2 = []
for k in range(0, steps):
    x = 2**k
    pos1 = []
    while len(pos1) < le:
        for i in range(0, x):
            pos1.append(0)
        for i in range(0, x):
            pos1.append(1)
    pos2.append(pos1)
    print pos1

这将打印

[0, 1, 0, 1, 0, 1, 0, 1]
[0, 0, 1, 1, 0, 0, 1, 1]
[0, 0, 0, 0, 1, 1, 1, 1]

这里有一行供您检查:

import math
le = 8

pos2 = [[(i // 2**k) % 2 for i in range(le)] for k in range(int(math.ceil(math.log(le, 2))))]

print pos2