離散フーリエ変換

離散フーリエ変換を1の原始N乗根による表現で計算する

1の原始N乗根の定義: \omega_N = e^{\frac{2 \pi}{N} i}

N=8の場合

import numpy as np
from pylab import *
import pdb

f = np.matrix([0,1,1,2,3,2,3,2]).transpose()
plot(f)
show()

w8 = e**(pi/4*1j)

A = 1/8.0 * np.matrix([
    [1,1,1,1,1,1,1,1],
    [1,w8**(-1),w8**(-2),w8**(-3),w8**(-4),w8**(-5),w8**(-6),w8**(-7)],
    [1,w8**(-2),w8**(-4),w8**(-6),w8**(-8),w8**(-10),w8**(-12),w8**(-14)],
    [1,w8**(-3),w8**(-6),w8**(-9),w8**(-12),w8**(-15),w8**(-18),w8**(-21)],
    [1,w8**(-4),w8**(-8),w8**(-12),w8**(-16),w8**(-20),w8**(-24),w8**(-28)],
    [1,w8**(-5),w8**(-10),w8**(-15),w8**(-20),w8**(-25),w8**(-30),w8**(-35)],
    [1,w8**(-6),w8**(-12),w8**(-18),w8**(-24),w8**(-30),w8**(-36),w8**(-42)],
    [1,w8**(-7),w8**(-14),w8**(-21),w8**(-28),w8**(-35),w8**(-42),w8**(-49)],
    ])

F = A*f
print F

plot(F.real,F.imag,'bo')
show()

P = np.array(F)*np.conj(np.array(F))
print P

plot(P)
show()

信号f(t)

離散フーリエ変換F(k)

パワースペクトルP