2016-04-20 3 views
1

Я новичок в python и FFT. Я взял небольшую задачу в Python, чтобы найти порядок перетасовки для заданного количества точек данных.переупорядочение для FFT в python

Моя цель состоит в том, чтобы иметь выход, как показано ниже для 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 с после только один 1 добавления. Вот рабочая версия с несколько иной логикой:

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 
+0

Спасибо. Ты восхитителен. – KGV

+0

@Vijaynitk Добро пожаловать. Я также включил версию с 1 слотом, если вы заинтересованы. – Selcuk

+0

Версия одного лайнера выглядит сложной для меня (новая пчела). Я мог понять более раннюю более длинную версию намного проще. Это просто и понятно. Спасибо дружище. – KGV

Смежные вопросы