Sabtu, 18 Februari 2023

Particle filter

Particle filter adalah salah satu jenis filter Bayes yang digunakan untuk memperkirakan status yang tidak teramati dari sistem dinamis. Particle filter dapat diterapkan pada berbagai aplikasi, termasuk pengenalan pola, navigasi, dan pengolahan sinyal. 

Source: https://www.youtube.com/watch?v=_LjBba2hnfk

Berikut adalah contoh coding Arduino untuk Particle filter:

Catatan: 

Contoh coding di atas hanya merupakan kerangka dasar untuk implementasi Particle filter pada Arduino dan tidak termasuk algoritma untuk memperbarui partikel dan menghitung bobot partikel. Implementasi algoritma tersebut harus disesuaikan dengan aplikasi yang diinginkan.


#include <math.h>

#include <stdlib.h>

#define N 100 // Jumlah partikel

// Inisialisasi partikel
struct Particle {
  float x; // Koordinat x
  float y; // Koordinat y
  float theta; // Sudut theta
  float weight; // Bobot
};

Particle particles[N]; // Array partikel
float weights[N]; // Array bobot
float sum_of_weights = 0.0; // Total bobot
int num_of_particles = N; // Jumlah partikel

// Inisialisasi sistem
void setup() {
  // Inisialisasi partikel
  for (int i = 0; i < num_of_particles; i++) {
    particles[i].x = random(0, 100); // Inisialisasi koordinat x
    particles[i].y = random(0, 100); // Inisialisasi koordinat y
    particles[i].theta = random(0, 360); // Inisialisasi sudut theta
    particles[i].weight = 1.0 / num_of_particles; // Inisialisasi bobot
  }
}

// Perbarui partikel
void updateParticles() {
  // Implementasi algoritma Particle filter di sini
  // ...
}

// Hitung bobot partikel
void computeWeights() {
  // Implementasi fungsi untuk menghitung bobot partikel di sini
  // ...
}

// Normalisasi bobot partikel
void normalizeWeights() {
  // Hitung total bobot
  sum_of_weights = 0.0;
  for (int i = 0; i < num_of_particles; i++) {
    sum_of_weights += particles[i].weight;
  }

  // Normalisasi bobot
  for (int i = 0; i < num_of_particles; i++) {
    particles[i].weight /= sum_of_weights;
  }
}

// Resampling partikel
void resample() {
  Particle new_particles[N];
  int index = random(0, num_of_particles);
  float beta = 0.0;

  // Implementasi algoritma resampling di sini
  // ...

  // Salin partikel baru ke array partikel lama
  for (int i = 0; i < num_of_particles; i++) {
    particles[i] = new_particles[i];
  }
}

// Loop utama
void loop() {
  // Perbarui partikel
  updateParticles();

  // Hitung bobot partikel
  computeWeights();

  // Normalisasi bobot partikel
  normalizeWeights();

  // Resampling partikel
  resample();

  // ...
}


Bagus mana Low Pass Filter (LPF) dengan Kalman Filter?

Low-pass filter dan Kalman filter adalah dua jenis filter yang memiliki kegunaan yang berbeda dan digunakan dalam konteks yang berbeda.

Low-pass filter digunakan untuk menyaring sinyal dengan memperbolehkan komponen frekuensi rendah dari sinyal untuk dilewatkan sementara memblokir komponen frekuensi tinggi. Tujuannya adalah untuk menghilangkan noise atau sinyal yang tidak diinginkan dari sinyal yang diukur.

Sementara itu, Kalman filter adalah algoritma pengolahan data yang digunakan untuk memperkirakan keadaan sistem dinamis yang tidak dapat diamati langsung. Kalman filter digunakan dalam banyak aplikasi, termasuk navigasi, pengolahan sinyal, dan pengendalian proses, untuk menghasilkan perkiraan keadaan yang lebih akurat berdasarkan data pengamatan yang tidak sempurna.

Jadi, jika Anda perlu menyaring sinyal untuk menghilangkan noise atau sinyal yang tidak diinginkan, maka low-pass filter mungkin lebih sesuai. Namun, jika Anda perlu mengolah data pengamatan yang tidak sempurna untuk memperkirakan keadaan sistem, maka Kalman filter mungkin lebih cocok.

Perlu diingat bahwa kedua filter ini memiliki prinsip yang berbeda dan digunakan dalam konteks yang berbeda, sehingga tidak bisa dibandingkan secara langsung untuk menentukan yang mana yang lebih bagus. Tergantung pada kebutuhan dan tujuan Anda, salah satu filter mungkin lebih cocok daripada yang lain.


Sumber: https://www.researchgate.net/publication/340412171_Compact_laser-spectroscopic_gas_sensors_using_vertical-cavity_surface-emitting_lasers