一维阵列的快速傅里叶变换

2024-10-01 19:25:45 发布

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

我有一个简单的一维数组,比如[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)的二维数组,但对于我只有一个维度的情况则不适用。在

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


Tags: fftimgtitlenpplt数组脉冲spectrum
2条回答
plt.magnitude_spectrum(img)
plt.show()

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

我将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()

相关问题 更多 >

    热门问题