【问题标题】:Numpy FFT (Fast Fourier Transformation) of 1-dimensional array一维数组的 Numpy FFT(快速傅里叶变换)
【发布时间】:2015-05-29 11:02:46
【问题描述】:

我有一个简单的一维数组,例如 [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0],它描述了一个平方脉冲。我想将这个脉冲转换到频域并使用下面的代码绘制它的幅度谱(我从OpenCV Python Tutorials得到它):

squareimpulse = np.array([0,0,0,0,0,1,1,1,1,1,0,0,0,0,0])

img = (squareimpulse)
f = np.fft.fft(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

该脚本适用于f = np.fft.fft2(img) 的二维数组,但不适用于我只有一维的情况。

希望我们能解决这个问题。

【问题讨论】:

    标签: python arrays opencv numpy fft


    【解决方案1】:
    plt.magnitude_spectrum(img)
    plt.show()
    

    好吧,说真的,imshow 函数不只接受值列表。见http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow

    【讨论】:

      【解决方案2】:

      我将plt.imshow(.....) 更改为plt.plot(.....),脚本现在可以运行了!

      import cv2
      import numpy as np
      from matplotlib import pyplot as plt
      
          squareimpulse = np.array([0,0,0,0,0,1,1,1,1,1,0,0,0,0,0])
      
          img = (squareimpulse)
          f = np.fft.fft(img)
          fshift = np.fft.fftshift(f)
          magnitude_spectrum = (np.abs(fshift))
      
          plt.subplot(121)
          plt.plot(img)
          plt.title('Input Image')
          plt.xticks([]), plt.yticks([])
      
          plt.subplot(122)
          plt.plot(magnitude_spectrum)
          plt.title('Magnitude Spectrum')
          plt.xticks([]), plt.yticks([])
      
          plt.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 2012-10-14
        • 2011-07-12
        • 2011-04-09
        • 2019-11-10
        • 1970-01-01
        相关资源
        最近更新 更多