一维数组的Numpy FFT(快速傅里叶变换)
Numpy FFT (Fast Fourier Transformation) of 1-dimensional array
我有一个简单的一维数组,例如 [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)
的二维数组,但不适用于我只有一维的情况。
希望我们能解决这个问题。
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()
我有一个简单的一维数组,例如 [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)
的二维数组,但不适用于我只有一维的情况。
希望我们能解决这个问题。
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()