Moving Average Filter Sederhana

Spread the love

Data-data dari sensor biasanya memiliki pola yang tidak beraturan. Apalagi jika berkaitan dengan sinyal yang cenderung memiliki noise. Permasalahan data seperti ini, lebih mudah bila diterapkan filtering sebelum diolah. Banyak sekali algoritma yang dapat digunakan untuk data filtering terutama untuk signal processing. Salah satunya adalah Moving Average.

Pada dasarnya, moving average adalah menghitung rata-rata dari sejumlah data yang sudah ada sebagai nilai saat itu. Banyak data yang diperhitungkan akan mempengaruhi halus tidaknya output datanya. Semakin banyak nilai N jumlah data yang diperhitungkan, output data cenderung lebih halus karena rata-rata diambil dari N jumlah yang banyak.

Tahapan moving average:

  1. Menentukan nilai N sebagai batas nilai array dari data.
  2. Mengecek setiap kali nilai X dimasukkan, apakah jika nilai X dimasukkan panjang array data melebihi N? Jika iya, hapus elemen awal dari array data dan tambahkan elemen dengan nilai X dibelakang array. Jika tidak, hanya tambahkan elemen dengan nilai X.
  3. Hitung rata-rata dari array data.

Apabila ditulis dalam javascript kurang lebih menjadi sebagai berikut:

class MeanFilter{
	constructor(N){
		this.N = N;
		this.data = [];
		}
	filter(x){
		var mean = 0;
		if (this.data.length > this.N){
			this.data.shift();
		}
		this.data.push(x);
		this.data.forEach(function(item,index){
			mean += item;
		});
		return this.data.length==this.N?mean/this.N:mean/this.data.length;
		}
	}

Sebagai contoh, terdapat raw data signal sebagai berikut:

Raw Data

Mean dengan N = 10, artinya data yang digunakan untuk pertimbangan rata-rata berjumlah 10 data terakhir. Sehingga signal yang dihasilkan menjadi tampak sebagai berikut.

Mean dengan N = 20, data yang dihasilkan menjadi lebih halus karena dengan 20 data terakhir cenderung berpengaruh sedikit terhadap perubahan dibandingkan 10 data.

Perbandingan

Pada dasarnya, filter ini digunakan supaya noise data tidak secara langsung memengaruhi komputasi data. Sehingga, smooth atau tidaknya tergantung dari kebutuhan dari komputasinya. Apabila data yang diperlukan hanya bentuk pola regresinya saja, maka semakin smooth semakin baik. Namun jika diperlukan detail pendekatan datanya, maka setidaknya noise hanya cukup diminimalisir.

Jika dilihat dari kompleksitas komputasinya, moving average filter tidak begitu kompleks sehingga waktu komputasi cenderung cepat. Jadi, jika waktu komputasi perlu dipertimbangkan, maka moving average bisa dianggap cukup untuk menghandle noise. Namun jika kesesuaian dengan data kebenarannya (RMSE – akurasi), mungkin ada baiknya jika mempertimbangkan dengan filter-filter lain yang sejenisnya.

Demikian moving average filter untuk signal processing. Ini pun tergolong masih sangat sederhana, karena masih banyak pengembangan lain semisal penambahan pembobotan dalam data dll. Dan juga masih banyak algoritma lain seperti Kalman Filter, Savitzky Golay dan sebagainya yang tentunya dapat juga diterapkan dalam signal processing.

Semoga bermanfaat.

Leave a Reply

Your email address will not be published. Required fields are marked *