Monday, February 04, 2019

Phase Unwrapping

Samakah hasil perhitungan: $ \cos (420^\circ)$ dengan $\cos (420^\circ-2\pi)$? Ide inilah yang (menurut saya) melatarbelakangi teknik phase unwrapping pada analisa sinyal.

Phase unwrapping adalah metode untuk "membuka" fase sinyal. Algoritma metode untuk unwrapping fase ini adalah sebagai berikut: "Jika selisih antara dua skalar fase dalam array lebih dari dikont, yakni $\pi$ (3.14, dalam radian), maka nilai skalar yang lebih tinggi tadi dikurangi $2 \pi$. Nilai diskont ini bisa dirubah, namun defaultnya adalah $\pi$.

Perhatikan contoh berikut. Vektor $x$ adalah array yang berisi fase dari suatu sinyal.

$$ px = [0~ 1~ 3.24~ 5~ 6.28~ 10~ 13~ 16]$$

Jika selisih antara $x[n]$ dengan $x[n+1]$ lebih besar dari $\pi$ maka dilakukan unwrapping fase. Sehingga untuk vektor fase $x$ diatas hasilnya adalah,

$$ px2 = [0.0~        1.0~        2.0~        3.24~      5.0~     
       6.28~      3.72~  6.72~ 9.72] $$

Vektor $px2$ merupakan hasil phase unwrapping dalam radian agar tracking fase terlihat lebih halus. Lihar gambar di bawah ini untuk hasil plot fase (atas) dengan unwrapping fase (bawah).

Plot fase (atas) dengan unwrapping fase (bawah)

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]

Related Posts Plugin for WordPress, Blogger...