Friday, February 01, 2019

Zero Padding dan efeknya pada FFT

Zero padding berarti menambahkan nol diakhir sinyal. Misal kita memiliki vektor x sebagai berikut,

$$ x = [0 ~1~ 2 ~3 ~1~ 2~ 3~ 2~ 4~ 3] $$

Vektor tersebut memiliki ukuran 10 data. Zero padding adalah menambahkan nol di belakang vektor tersebut, misalnya kita tambahkan lima nol di belakang data terakhir sehingga menjadi,

$$x = [0 ~1~ 2~ 3~ 1~ 2~ 3~ 2~ 4~ 3~ 0~ 0~ 0~ 0~ 0]$$

Zero padding banyak dipakai untuk menyamakan ukuran vektor/matriks. Pada machine learning/deep learning, ukuran input harus sama, dan zero padding dilakukan untuk tujuan tersebut (menyamakan ukuran input). Pada analisa sinyal di domain frekuensi, zero padding ini biasanya digunakan agar spektrum yang kita plot menjadi lebih halus.

Implementasi dengan Python

Implementasi zero padding dengan python bisa bermacam-macam, salah satunya dengan np.pad (salah lainnya dengan menggunakan np.zeros).

Contohnya adalah sebagai berikut:

>>> x = np.array([1, 2, 3, 4, 5])
>>> xpad = np.pad(x, (0, 5), 'constant')  # menambahkan lima nol di belakang vektor a
>>> x
    [1, 2, 3, 4 , 5, 0, 0, 0, 0, 0]

Efek terhadap FFT

Untuk apa menambahkah nol di akhir sinyal? Untuk memperhalus tampilan FFT agar lebih mudah difahami. Perhatikan skrip python berikut dan plot hasilnya.



Hasil:
Spektrum tanpa zero padding (biru) dan dengan zero padding (merah).
Zero padding (red) vs Non zero padding (blue)
Agar lebih jelas, kita zoom sebagai berikut.
Disini terlihat lebih jelas perbedaan spektrum setelah zero padding
Selamat belajar, semoga bermanfaat.

Bonus:
- Keras/TensorFlow menyediakan fungsi pad_sequences untuk menyamakan ukuran semua vektor dalam matriks. Panggil dengan,
from keras.preprocessing.sequence import pad_sequences
Related Posts Plugin for WordPress, Blogger...