自定义DFT函数返回它应该返回的复共轭值

2024-06-28 11:51:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个自定义函数,用于查找第n个离散傅里叶变换矩阵,如here所述(除了不除以sqrt(N))。我已经成功地得到了单位的第n个根,但是由于某种原因,当我把它乘以一个矩阵时,我得到了我所期望的复共轭。您可以通过比较myfunction的输出和sp.fft(np.eye(n))的输出来看到这一点(它们应该匹配):

import numpy as np, scipy as sp    

def dftmat(n):

    # nth root of unity
    # w = complex(np.cos(2*np.pi / n), np.sin(2*np.pi / n))
    w = np.exp(2j * np.pi / n)

    # bind its powers into a matrix
    F = np.matrix([ [w**(a*b) for a in range(n)] for b in range(n)])
    return(F)


a = np.round(dftmat(6),3)
b = np.round(sp.fft(sp.eye(6)),3)
print(a)
print(b)

收益率

[[ 1. +0.j     1. +0.j     1. +0.j     1. +0.j     1. +0.j     1. +0.j   ]
 [ 1. +0.j     0.5+0.866j -0.5+0.866j -1. +0.j    -0.5-0.866j  0.5-0.866j]
 [ 1. +0.j    -0.5+0.866j -0.5-0.866j  1. -0.j    -0.5+0.866j -0.5-0.866j]
 [ 1. +0.j    -1. +0.j     1. -0.j    -1. +0.j     1. -0.j    -1. +0.j   ]
 [ 1. +0.j    -0.5-0.866j -0.5+0.866j  1. -0.j    -0.5-0.866j -0.5+0.866j]
 [ 1. +0.j     0.5-0.866j -0.5-0.866j -1. +0.j    -0.5+0.866j  0.5+0.866j]]
[[ 1. +0.j     1. +0.j     1. +0.j     1. +0.j     1. +0.j     1. +0.j   ]
 [ 1. +0.j     0.5-0.866j -0.5-0.866j -1. +0.j    -0.5+0.866j  0.5+0.866j]
 [ 1. +0.j    -0.5-0.866j -0.5+0.866j  1. +0.j    -0.5-0.866j -0.5+0.866j]
 [ 1. +0.j    -1. +0.j     1. +0.j    -1. +0.j     1. +0.j    -1. +0.j   ]
 [ 1. +0.j    -0.5+0.866j -0.5-0.866j  1. -0.j    -0.5+0.866j -0.5-0.866j]
 [ 1. +0.j     0.5+0.866j -0.5+0.866j -1. -0.j    -0.5-0.866j  0.5-0.866j]]

我认为问题可能与我设置定义F的列表的方式有关,但是从该行中删除w**似乎可以产生正确的指数集:

n = 6
F = np.matrix([ [(a*b) for a in range(n)] for b in range(n)])
print(F)

收益率

[[ 0  0  0  0  0  0]
 [ 0  1  2  3  4  5]
 [ 0  2  4  6  8 10]
 [ 0  3  6  9 12 15]
 [ 0  4  8 12 16 20]
 [ 0  5 10 15 20 25]]

Here's a TIO link.提前感谢您的帮助


Tags: infftforasnppirange矩阵