2016-04-20 14 views
1

Ich bin neu in Python und FFT. Ich habe eine kleine Aufgabe in Python genommen, um die Umordnungsreihenfolge für eine gegebene Anzahl von Datenpunkten zu finden.Neuordnung für FFT in Python

Mein Ziel ist es, eine Ausgabe wie unten für N Datenpunkte zu haben. Hier N=8, so haben wir 3 Sätze:

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

Der Code habe ich versucht, ist unten. Könnte mir jemand helfen, wo ich falsch liege, und Änderungen am Code vorschlagen, um die gewünschte Ausgabe zu erzeugen.

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) 

Antwort

1

Sie erhalten sofort zurück 0 s anhängt nach nur einem 1 anhängt. Hier ist eine Arbeitsversion mit leicht unterschiedlicher Logik:

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 

diese

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

gedruckt werden und hier ist ein Einzeiler für Sie zu prüfen:

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

Dank. Du bist unglaublich. – KGV

+0

@ Vijaynitk Gern geschehen. Ich habe auch eine 1-Liner-Version beigefügt, wenn Sie interessiert sind. – Selcuk

+0

Die eine Liner-Version sieht für mich kompliziert aus (new bee). Ich konnte die frühere längere Version viel einfacher verstehen. Es ist einfach und klar. Danke Kumpel. – KGV