2015-05-29 3 views
0

У меня есть простой одномерный массив, такой как [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0], который описывает квадратный импульс. Я хотел бы превратить этот импульс в частотной области и построить ее амплитудный спектр, используя код ниже (я получил его от OpenCV Python Tutorials):Numpy FFT (быстрое преобразование Фурье) 1-мерного массива

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), но не для мой случай, когда у меня только одно измерение.

Надеюсь, мы сможем понять это.

ответ

0

Я изменил 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()