SciPy - FFTpack

Fourier Transformationdihitung pada sinyal domain waktu untuk memeriksa perilakunya dalam domain frekuensi. Transformasi Fourier menemukan aplikasinya dalam disiplin ilmu seperti pemrosesan sinyal dan kebisingan, pemrosesan gambar, pemrosesan sinyal audio, dll. SciPy menawarkan modul fftpack, yang memungkinkan pengguna menghitung transformasi Fourier dengan cepat.

Berikut ini adalah contoh fungsi sinus yang akan digunakan untuk menghitung transformasi Fourier menggunakan modul fftpack.

Transformasi Fourier Cepat

Mari kita pahami apa itu transformasi Fourier cepat secara detail.

Transformasi Fourier Diskrit Satu Dimensi

FFT y [k] dengan panjang N dari urutan panjang-N x [n] dihitung dengan fft () dan transformasi invers dihitung menggunakan ifft (). Mari kita perhatikan contoh berikut

#Importing the fft and inverse fft functions from fftpackage
from scipy.fftpack import fft

#create an array with random n numbers
x = np.array([1.0, 2.0, 1.0, -1.0, 1.5])

#Applying the fft function
y = fft(x)
print y

Program di atas akan menghasilkan keluaran sebagai berikut.

[ 4.50000000+0.j           2.08155948-1.65109876j   -1.83155948+1.60822041j
 -1.83155948-1.60822041j   2.08155948+1.65109876j ]

Mari kita lihat contoh lainnya

#FFT is already in the workspace, using the same workspace to for inverse transform

yinv = ifft(y)

print yinv

Program di atas akan menghasilkan keluaran sebagai berikut.

[ 1.0+0.j   2.0+0.j   1.0+0.j   -1.0+0.j   1.5+0.j ]

Itu scipy.fftpackmodul memungkinkan komputasi transformasi Fourier cepat. Sebagai ilustrasi, sinyal input (berisik) mungkin terlihat sebagai berikut -

import numpy as np
time_step = 0.02
period = 5.
time_vec = np.arange(0, 20, time_step)
sig = np.sin(2 * np.pi / period * time_vec) + 0.5 *np.random.randn(time_vec.size)
print sig.size

Kami membuat sinyal dengan langkah waktu 0,02 detik. Pernyataan terakhir mencetak ukuran sinyal sig. Outputnya adalah sebagai berikut -

1000

Kami tidak tahu frekuensi sinyalnya; kita hanya mengetahui langkah waktu sampling dari sinyal sig. Sinyal tersebut seharusnya berasal dari fungsi nyata, sehingga transformasi Fourier akan menjadi simetris. Ituscipy.fftpack.fftfreq() fungsi akan menghasilkan frekuensi sampling dan scipy.fftpack.fft() akan menghitung transformasi Fourier cepat.

Mari kita pahami ini dengan bantuan sebuah contoh.

from scipy import fftpack
sample_freq = fftpack.fftfreq(sig.size, d = time_step)
sig_fft = fftpack.fft(sig)
print sig_fft

Program di atas akan menghasilkan keluaran sebagai berikut.

array([ 
   25.45122234 +0.00000000e+00j,   6.29800973 +2.20269471e+00j,
   11.52137858 -2.00515732e+01j,   1.08111300 +1.35488579e+01j,
   …….])

Transformasi Cosine Diskrit

SEBUAH Discrete Cosine Transform (DCT)mengekspresikan urutan titik data yang terbatas dalam hal sejumlah fungsi kosinus yang berosilasi pada frekuensi yang berbeda. SciPy menyediakan DCT dengan fungsi tersebutdct dan IDCT yang sesuai dengan fungsinya idct. Mari kita perhatikan contoh berikut.

from scipy.fftpack import dct
print dct(np.array([4., 3., 5., 10., 5., 3.]))

Program di atas akan menghasilkan keluaran sebagai berikut.

array([ 60.,  -3.48476592,  -13.85640646,  11.3137085,  6.,  -6.31319305])

Transformasi kosinus diskrit terbalik merekonstruksi urutan dari koefisien transformasi kosinus diskrit (DCT). Fungsi idct adalah kebalikan dari fungsi dct. Mari kita pahami ini dengan contoh berikut.

from scipy.fftpack import dct
print idct(np.array([4., 3., 5., 10., 5., 3.]))

Program di atas akan menghasilkan keluaran sebagai berikut.

array([ 39.15085889, -20.14213562, -6.45392043, 7.13341236,
8.14213562, -3.83035081])