Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 相移后的傅里叶变换_Python_Numpy_Fft_Scientific Computing - Fatal编程技术网

Python 相移后的傅里叶变换

Python 相移后的傅里叶变换,python,numpy,fft,scientific-computing,Python,Numpy,Fft,Scientific Computing,我试图改变图像的相位,并对其进行傅里叶变换。但这种相位变化会导致沿x轴和y轴的功率泄漏 假设我的图像是一个全一矩阵。如果我做傅里叶变换,我得到。确保所有电源都在中央。事实上,除非你放大,否则我们无法看到全部 现在假设我将矩阵乘以一个复正弦曲线。理想情况下,功率应刚好转移到正弦频率。但这就是我得到的 . 注意沿x轴和y轴泄漏的功率 为什么会发生这种情况?是因为信号的非连续性吗 请参阅下面的python代码 import numpy as np from matplotlib import pypl

我试图改变图像的相位,并对其进行傅里叶变换。但这种相位变化会导致沿x轴和y轴的功率泄漏

假设我的图像是一个全一矩阵。如果我做傅里叶变换,我得到。确保所有电源都在中央。事实上,除非你放大,否则我们无法看到全部

现在假设我将矩阵乘以一个复正弦曲线。理想情况下,功率应刚好转移到正弦频率。但这就是我得到的 . 注意沿x轴和y轴泄漏的功率

为什么会发生这种情况?是因为信号的非连续性吗

请参阅下面的python代码

import numpy as np
from matplotlib import pyplot as plt

# Init a all one array
base_image = np.ones([1024,1024])

#Generate a array so that we can make a sinusoid using it
x_cords = np.arange(base_image.shape[1]) - base_image.shape[1]/2
x_cords = np.transpose(x_cords)/512
x_cords = x_cords.astype(float)
x_cords = np.tile(x_cords, [base_image.shape[0], 1])
y_cords = np.transpose(x_cords)

#Generate the sinusoid
phase = np.exp(x_cords + y_cords)

#Apply this shift
new_image = base_image * phase

spec_base = np.fft.fftshift(np.fft.fft2(base_image))
spec_new = np.fft.fftshift(np.fft.fft2(new_image))

plt.imshow(np.log(np.abs(spec_base)))
plt.show()

plt.imshow(np.log(np.abs(spec_new)))
plt.show()
提前感谢您的回答

以下几点:

  • 所有1s都是非常特殊的情况——它是完全周期性的,因此FFT显示没有频谱泄漏
  • xwords
    ycords
    是实的,这意味着
    相位
    是实的——它不是正弦曲线。
    exp
    的参数应该是虚构的
  • 即使有一个正确的
    相位
    ,除非您选择
    相位
    在您的域中是完全周期的,否则您将得到频谱泄漏

如果绘制新图像,您会看到它不是正弦曲线:

以下是一种不使用复数创建正弦模式的蛮力方法:

# create a sinusoid
F=4 ## select the frequency -- use an even integer to minimize spectral "leakage"
new_image = np.ones([X,Y])
for y in xrange(Y):
   for x in xrange(X):
      new_image[y][x] = sin(x/float(X)*pi*F)*sin(y/float(Y)*pi*F)

功率谱具有最小的泄漏,如果放大,可以看到峰值功率偏离原点,并且由于DC周围的镜像,实际上有4个峰值