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])