Sistem Filter Digital Praktis Berbasis Mikroprosesor

Suatu sistem filter digital secara prinsip sederhana mengubah sinyal analog menjadi digital, kemudian mengolah sinyal digital tersebut dengan algoritma tertentu, kemudian mengubah sinyal digital kembali menjadi sinyal analog. Secara diagram blok dapat digambarkan sebagai berikut:

Sistem filter digital
Sistem filter digital

Filter digital dapat diimplementasikan dengan beberapa cara, di antaranya dengan sistem mikroprosesor dan sistem digital seperti FPGA (Filed Programmable Gate Array).

Dalam prakteknya, sistem tersebut perlu beberapa tambahan subsistem/modul supaya dapat diimplementasikan secara nyata.

Berikut ini sistem lengkap filter digital untuk diimplementasikan dengan sistem mikroprosesor:

Detail sistem filter digital versi 1
Detail sistem filter digital versi 1

Penjelasan Sistem Filter Digital Sederhana

  • Input: sinyal input berasal dari input, misal untuk sistem audio dapat berupa mikrofon, atau MP3 player, atau komputer.
  • Sinyal input ini memiliki level tegangan dan impedansi tertentu. Seringkali sinyal ini perlu diperkuat dulu. Misal mikrofon biasanya memiliki kuat sinyal puluhan sampai ratusan milivolt dengan impedansi ratusan ohm.
  • Penguat: Penguat memiliki fungsi buffering dan juga menyesuaikan amplitudo supaya cocok dengan amplitudo dari ADC yang dipakai.
  • Pengubah Level Tegangan: tegangan input berupa tegangan bolak-balik, bisa saja memiliki tegangan positif dan negatif. ADC yang dipakai seringkali hanya dapat menerima tegangan positif, sehingga tegangan input mesti digeser agar menjadi positif.
  • Low Pass Filter (anti aliasing): sesuai teori sinyal, frekuensi sampling setidaknya memiliki frekuensi 2x frekuensi kerja sinyal yang diukur. Sinyal input yang lebih dari 1/2 frekuensi sampling harus ditapis supaya tidak terjadi aliasing.
  • ADC (Analog to Digital Converter): mengubah tegangan analog menjadi suatu angka digital, dengan resolusi bit tertentu, dan kecepatan sampling tertentu.
  • Filter Digital:  melakukan proses pengolahan sinyal yang diinginkan, dapat berupa LPF (low pass filter) , HPF (high pass filter), BPF (band pass filter), BSF (band stop filter) ataupun Equalizer.
  • Digital to Analog Converter: mengubah sinyal digital menjadi sinyal analog. Umumnya menggunakan prinsip ZoH (Zero order Hold).
  • Reconstruction Filter: sinyal dari Zero order Hold memiliki bentuk seperti anak tangga (staircase), sehingga memiliki komponen frekuensi tinggi. Untuk itu perlu ada filter rekonstruksi yang menghilangkan komponen frekuensi tinggi tersebut. Selain itu ZoH juga mengubah respon frekuensi, yaitu memberi redaman di frekuensi tinggi. Idealnya reconstruction filter juga mengkompensasi hal tersebut.
  • Penguat: untuk menyesuaikan level tegangan dan impedansi dari DAC ke tahap selanjutnya
  • Power supply: implisit semua sistem elektronika perlu power supply. Sistem pengolah digital ada bagian analog dan digital, sehingga masing-masing perlu level tegangan dan power supply tersendiri.

Kelemahan Sistem Filter Digital Sederhana

Sistem di atas sudah dapat berfungsi dengan baik, namun memiliki beberapa kelemahan.

Masalah pertama: konversi analog ke digital

  • filter anti aliasing sulit untuk dibuat ‘tajam’, sehingga frekuensi sampling mesti jauh lebih tinggi daripada frekuensi kerja sinyal. Jika frekuensi sampling terlalu dekat, respon frekuensi kerja terpengaruh oleh anti aliasing filter, atau juga sebagian sinyal frekuensi tinggi dapat menembus filter anti aliasing.
  • akibat frekuensi sampling tinggi, maka bagian filter digital mesti bekerja pada frekuensi lebih tinggi daripada frekuensi kerja sinyal.
  • hal ini juga berpengaruh jika sinyal perlu disimpan: storage akan membesar
  • hal ini juga berpengaruh jika sinyal perlu dikirim: keperluan bandwidth komunikasi membesar.
  • solusi: sampling dilakukan dengan frekuensi tinggi, namun frekuensi sampling diturunkan (downsampling) sebelum sinyal diolah/dikirim/disimpan.
  • pada proses downsampling, sinyal perlu difilter secara digital supaya tidak terjadi aliasing. proses filter digital lebih mudah dibandingkan filter analog, terutama karena masalah ketelitian nilai komponen analog.

Masalah kedua: konversi digital ke analog

Zero order Hold pada DAC mempunyai respon frekuensi sinc(), sehingga ada redaman di frekuensi tinggi

  • solusi 1: sinyal digital diubah ke frekuensi tinggi sebelum masuk ke DAC, dengan demikian pengaruh redaman frekuensi tinggi berkurang.
  • solusi 2: sinyal digital diperkuat dulu di frekuensi tinggi dengan equalizer, supaya dapat mengkompensasi redaman di frekuensi tinggi.

Berikut ini proses ekualisasi sinyal untuk kompensasi pengaruh ZoH.

Equalizing
Ekualisasi sinyal digital to analog

Pada solusi (a) proses ekualisasi dilakukan secara digital sebelum DAC , disebut sebagai tahap pre-equalization.

Pada solusi (b) proses ekualisasi dilakukan secara analog setelah LPF, disebut sebagai tahap post-equalization.

Sistem Lengkap

Berikut ini blok diagram sistem filter digital dengan tambahan solusi-solusi supaya mengurangi permasalahan-permasalahan.

sistem filter digital lengkap versi 2
Sistem filter digital lengkap versi 2

Pada sistem ini dipilih pre-ekualisasi secara digital , dengan pertimbangan merancang equalizer secara digital lebih mudah. Proses pembuatan equalizer ini dapat dilakukan dengan metode ‘Design of FIR Filters Using the Frequency Sampling Method’.

Referensi

Sistem Elektronika Dengan Sinyal Analog & Digital

Suatu sinyal analog dapat diubah menjadi digital dan sebaliknya. Teknik ini memiliki beberapa manfaat. Pada tulisan ini hanya dibahas contoh aplikasi yang bersifat LTI (Linear Time Invariant).

Berikut ini contoh beberapa sistem yang di dalamnya terdapat sinyal analog dan sinyal digital:

  • Filter digital
  • Equalizer digital
  • Perekam digital
  • Komunikasi digital

Teori yang perlu dikuasai:

  • Rangkaian Analog
    • filter analog (LPF, HPF)
    • rangkaian amplifier (penjumlah, penguat)
    • power supply DC , termasuk regulator
  • Mikroprosesor & Interfacing
    • pemrograman mikroprosesor dengan bahasa C
    • input analog pada mikroprosesor
    • output analog pada mikroprosesor
    • ADC (Analog to Digital Converter)
    • DAC (Digital to Analog Converter_
    • interupsi pada mikroprosesor
    • error kuantisasi pada ADC/DAC
  • Pengolahan Sinyal Digital:
    • equalizer analog/digital
    • perancangan FIR berdasarkan respon frekuensi
    • multirate pada PSD
    • filter digital (LPF,HPF, BPF, BSF)
    • oversampling pada pengolahan sinyal digital
    • undersampling / decimation pada pengolahan sinyal digital

Filter Digital

Sistem filter digital dengan input analog dan output digital
Sistem filter digital dengan input analog dan output digital

Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dilakukan proses filtering (tapisan) secara digital. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.

Jenis tapisan yang umum:

  • LPF: low pass filter
  • HPF: high pass filter
  • BPF: band pass filter
  • BSF: band stop filter

Proses tapisan (filter) dapat dilakukan di domain analog, namun dalam beberapa kasus terdapat kelebihan pada filter digital, sehingga lebih baik jika proses tapisan dilakuan di domain digital.

Equalizer Digital

Sistem equalizer digital dengan input analog dan output analog
Sistem equalizer digital dengan input analog dan output analog

Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dilakukan proses ekualisasi secara digital. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.

Proses ekualisasi adalah proses mengubah komposisi frekuensi pada suatu sinyal (wikipedia)

Perekam Digital Dengan Input Output Analog

Sistem perekam digital
Sistem perekam digital

Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian disimpan di suatu media. Setelah itu sinyal yang telah disimpan dapat dibaca dan dikeluarkan pada waktu lain. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.

Sistem Komunikasi Digital Dengan Input Output Analog

Sistem komunikasi digital
Sistem komunikasi digital

Pada sistem ini sinyal analog diubah dulu menjadi digital, untuk kemudian dikirim oleh pemancar melalui suatu media komunikasi . Di penerima sinyal diubah lagi menjadi sinyal digital.. Setelah itu sinyal tersebut dikembalikan menjadi sinyal analog.

Komunikasi digital memiliki beberapa kelebihan dibandingkan komunikasi analog.

Analisis Sinyal Detak Jantung

Pada artikel ini diuraikan analisis sinyal detak jantung. Sinyal detak jantung diperoleh dari sensor pulsesensor.

Sensor ini sudah pernah dibahas di beberapa artikel sebelumnya:

Tambahan pada artikel ini adalah dilakukan filtering dengan LPF untuk membantu memuluskan sinyal hasil sensor.

 

Sensor detak jantung dari pulsesensor.com
Sensor detak jantung dari pulsesensor.com

Tahap pengolahan sinyal adalah sebagai berikut:

  • Pulsesensor sebagai sumber sinyal yang berasal dari detak jantung
  • Sinyal tegangan dari sensor dimasukkan ke Filter resistor dan kapasitor sebagai low pass filter untuk menghindari terjadinya aliasing,
  • Tegangan hasil filter dimasukkan ke modul Arduino Nano untuk dikonversikan ke digital dengan ADC. Data disampling dengan frekuensi 1 kHz dengan ADC pada Arduino Nano,
  • Data digital kemudian dikirimkan dengan komunikasi serial asinkron dengan kecepatan 115200 bps melalui port USB ke desktop PC.
  • Data direkam di desktop PC dengan perangkat lunak RealTerm. Data direkam ke sebuah file TXT di PC.
  • Data hasil rekaman kemudian dianalisis dengan perangkat lunak python menggunakan Jupyter Notebook

Perangkat lunak untuk pengukuran data di Arduino adalah sebagai berikut:  https://github.com/waskita/embedded/tree/master/atmega-detak-jantung-profiling

Perangkat lunak untuk analisis sinyal adalah sebagai berikut: https://github.com/waskita/embedded/blob/master/analisis-detak-jantung/heart-beat-analysis-1kHz.ipynb

Berikut ini diagram blok aliran sinyal pada sistem ini:

Berikut ini detail uraian aliran sinyal pada sistem tersebut

Sinyal hasil pengukuran dari ADC
Sinyal asli diperbesar

Tujuan dari sensor tersebut adalah mengukur detak jantung seseorang.

Ada beberapa hal yang mempersulit perhitungan detak jantung:

  • amplitudo sinyal berubah-ubah, tergantung kondisi tangan, tekanan pada sensor, dan sebagainya, sehingga batas ambang sinyal berubah-ubah
  • Sinyal detak jantung memiliki puncak yang tinggi, dan ada juga puncak yang lebih kecil. Mesti ada algoritma untuk mendeteksi puncak yang tinggi saja.

Sinyal hasil pengukuran ADC masih kurang rata, sehingga untuk membuat lebih halus dilakukan filtering pada frekuensi cut off 4 Hz. Frekuensi cut-off 4  Hz dipilih mengingat detak jantung maksimum orang normal adalah 220 per menit, atau setara 3,667 Hz. Jadi sinyal di atas frekuensi 3,667 Hz tidak diperlukan. 

Filter menggunakan filter digital IIR 4 pole. Filter 6 pole menghasilkan filter yang tidak stabil, sehingga akhirnya dipakai 4 pole saja. Jenis filter IIR supaya perhitungan lebih sederhana, mengingat sistem ini akan diimplementasikan di mikrokontroler dengan kemampuan komputasi yang terbatas.

Desain filter menggunakan Iowa Hills IIR Filter Designer Version 6.5 sebagai berikut:

Implementasi filter dengan bahasa Python, menggunakan struktur filter “Nth Order Coeffiecients”.

Struktur filter IIR (Infinite Impulse Response) yang dipakai adalah sebagai berikut:

Hasil filter adalah sebagai berikut (sinyal merah).

Sinyal hasil filter dengan low pass dengan fc=4 Hz

Sinyal hasi pengukuran mengandung sinyal DC offset, sehingga rata-ratanya tidak 0. Untuk menghilangkan DC offset, dilakukan filtering dengan LPF pada 200 mHz. Filter 2 pole IIR.

Hasil filter adalah sebagai berikut (sinyal merah):

Sinyal hasil filter LPF 0.2 Hz

Sinyal tanpa offset diperoleh dengan sinyal hasil filter 4 Hz dikurangi dengan sinyal hasil filter di 0.2 Hz.  Hasilnya adalah sinyal (warna biru) di gambar di bawah ini.

Sinyal biru kemudian disearahkan (rectified), sehingga didapat sinyal warna merah.

Sinyal hasil offset dan penyearahan

 

Sinyal hasil penyearahan difilter lagi dengan filter 0.2 Hz, untuk membantu deteksi puncak. Deteksi puncak agak sulit, karena dari hasil filter 4 Hz masih ada puncak kecil. Dengan sinyal hasil penyearahan diharapkan mampu mendeteksi puncak yang tinggi saja.

Gabungan sinyal

Proses terakhir adalah deteksi puncak. Hanya puncak yang tinggi yang dihitung.

Deteksi puncak pulsa denyut jantung

Penutup

Dari percobaan yang dilakukan, filtering (penapisan) analog dan digital dapat membantu membentuk sinyal supaya lebih mudah diproses.

Referensi

Simulasi Pengolahan Sinyal Digital

Tahap-tahap simulasi pengolahan sinyal digital dengan LTSpice, dan compiler C

Dokumen ini fokus pada menunjukkan terjadinya proses di setiap tahap dan integrasi proses-proses tersebut, tidak membahas optimasi sistem ataupun subsistem.

Persiapan

  • install LTSpice
  • install JDK untuk Netbeans 8.2
  • Install Netbeans 8.2 untuk IDE compiler C
  • Install Cygwin dan compiler gcc di Cygwin
  • Install Python 3.x
  • Install library SciPy untuk melakukan konversi file WAV
  • Install Arduino IDE untuk kompilasi kode ATmega328
  • Install Audacity untuk melihat isi file WAV
  • Download / clone repository https://github.com/waskita/embedded

Simulasi Proses

 

Proses aliran sinyal pada pengolahan sinyal digital lengkap adalah sebagai berikut (sumber):

Berikut ini diagram sinyal yang akan disimulasikan

Tahap simulasi ringkas:

  • Input AC dan rangkaian analog disimulasikan dengan LTSPice
  • Kuantisasi di ADC disimulasikan dengan program C
  • Filter digital disimulasikan dengan program bahasa C
  • DAC disimulasikan dengan program bahasa C
  • Reconstruction filter disimulasikan dengan LTSpice

Simulasi ini hanya untuk menunjukkan kerangka kerja untuk melakukan simulasi filter digital, maka dilakukan penyederhanaan sebagai berikut

  • Filter anti aliasing menggunakan filter RC orde 1, tanpa menghitung nilai frekuensi cut-offnya. Dalam tugas mesti diperhatikan frekuensi cut off, orde filter dan jenis filter
  • Filter rekonstruksi menggunakan filter RC orde 1, tanpa menghitung nilai frekuensi cut-offnya.
  • Filter digital menggunakan moving average dengan 3 angka. Seharusnya menggunakan LPF,HPF BPF, BSF sesuai keperluan.
  • Hanya menghitung respon pada 1 frekuensi. Seharusnya diukur respon pada beberapa frekuensi untuk mendapatkan kurva respon frekunsi / Bode plot.

Output WAV di LTSpice memiliki keterbatasan yaitu hanya mempunyai level tegangan -1 volt sampai +1 volt, sehingga untuk subsistem yang memiliki input/output melebihi rentang tersebut mesti dilakukan penyesuaian, atau simulasi dilakukan hanya pada rentang -1 sampai +1 volt.

Tahap Simulasi Secara Detail

Simulasi di Komputer Desktop

Buat simulasi rangkaian analog bagian depan meliputi sumber tegangan AC, LPF, level shift, penguat dan sebagainya. Output blok ini akan masuk ke ADC, jadi seharusnya level tegangannya sudah sesuai dengan level tegangan input ADC. ATmega328 dapat diatur referensinya di 2,56 volt atau VCC. Dalam prakteknya, VCC kurang stabil, lebih baik pakai referensi internal atau eksternal.

Contoh file simulasi: anti-aliasing-filter.asc

Berikut contoh gambar rangkaian sumber sinyal AC dan anti aliasing filter:

Pilih frekuensi input (misal 1000 Hz)

Tambahkan output WAV , contoh sintaks: ‘”.wave “anti-aliasing-out.wav” 16 10000  OUTPUT”‘

  • 16 : bitrate jumlah bit, berapa saja karena nanti akan dipotong pada waktu kuantisasi
  • 10000 : frekuensi sampling 10 kHz
  • VIN : nama label yang dijadikan winyal WAV (kanal 1)
  • OUTPUT : nama label yang dijadikan sinyal WAV (kanal 2)

Sampling rate disamakan dengan frekuensi sampling dari software (misal 10 kHz)

Bitrate pakai yang besar saja (misal 16 bit), nanti dapat dibulatkan di program C. Realitasnya adalah nanti dibulatkan sesuai dengan jumlah bit pada ADC (10 bit pada ATmega328)

Berikut tampilan V(vin) dan V(output). NampakV(output) teredam sedikit dan bergeser fase sedikit.

Seharusnya sinyal V(output) sudah dalam batas tegangan 0 sampai VREF. Sinyal V(output) di atas belum cocok untuk dimasukkan ke ADC karena ADC pada ATmega328 hanya menerima sinyal dengan tegangan 0 volt sampai VREF.

Simulasi pada LTSPice di atas menghasilkan output time series dalam format WAV.

Periksai sinyal output pada file WAV dengan program yang dapat menampilkan file WAV (misal Audacity https://www.audacityteam.org/) , pastikan bahwa sinyal WAV yang dihasilkan ‘masuk akal’.

Berikut contoh tampilan file WAV (anti-aliasing-out.wav) dengan Audacity:

Selanjutnya file WAV diubah menjadi CSV supaya mudah dibaca oleh program simulator filter. Kalau ada librarynya, bisa juga file WAV langsung dibaca  dengan program simulator filter.

Contoh converter: https://github.com/Lukious/wav-to-csv , diubah sedikit menjadi script wav2csv.py di repository.  Install python, scipy dan panda untuk dapat menjalankan wav2csv.py

File anti-aliasing-out.wav diubah menjadi anti-aliasing-out.csv

Cek isi file CSV, bisa dilihat dengan Excel untuk melihat apakah hasilnya sesuai.

Berikut contoh file CSV dilihat di Excel: (anti-aliasing-out.xlsx)

Selanjutnya jalankan program simulator filter digital (simulasi-filter/main.c) . Program ini membaca file CSV, kemudian data time series dimasukkan ke fungsi filter_moving_average. Output ditulis ke sebuah text file dalam format CSV (“simulasi-filter.csv”).

ADC disimulasikan dengan melakukan kuantisasi sinyal LPF_OUT sejumlah resolusi ADC yang dipakai. ATmega328 mempunyai resolusi 10 bit, sehingga sinyal LPF_OUT mesti dikuantisasi menjadi angka 0 sampai 1023 (1024 tingkat).

Contoh software simulasi filter digital dapat dilihat di https://github.com/waskita/embedded/tree/master/simulasi-filter-digital/simulasi-filter . Proram ini ditulis dengan Integrated Development Environment (IDE) dengan Netbeans 8.2), compiler C dengan Cygwin.

Untuk memastikan, dapat dibandingkan antara sinyal output dari generator sinyal, sinyal masuk ke ADC, dan sinyal hasil filter digital.

Berikut grafik VIN, LPF_OUT dan FILTER_OUT (simulasi-filter.xlsx)

Tahap selanjutnya adalah membuat sinyal output DAC dalam format WAV dan kemudian simulasi reconstruction filter dengan LTSpice.

Output DAC adalah dalam bentuk zeroth order hold, contohnya seperti berikut ini: (sumber)

Untuk menghasilkan sinyal zeroth order hold, perlu dilakukan hal berikut

  • melakukan kuantisasi output sesuai dengan resolusi DAC yang dipakai. Pada sistem ini digunakan DAC MCP4725 mempunyai resolusi 12 bit. Jika dipakai ESP32, maka mesti menggunakan resolusi 8 bit.
  • menaikkan sampling rate, untuk simulasi terjadinya sinya berbentuk anak tangga (staircase). Misal dengan menaikkan jadi 10x sinyal sampling saat ini menjadi 100 kHz.

LTSpice dapat menerima input WAV dan TXT. Pada simulasi reconstruction filter dipakai  TXT saja supaya tidak perlu repot melakukan konversi CSV ke WAV. Prosedur ini dijelaskan di video berikut (https://www.analog.com/en/education/education-library/videos/5579265677001.html) , dan di https://www.analog.com/en/technical-articles/ltspice-importing-exporting-pwl-data.html

Berikut ini contoh rangkaian reconstruction filter sederhana (reconstruction-filter.asc)

Berikut output DAC dan output reconstruction filter

Pada simulasi di atas nampak frekuensi cut-off terlalu tinggi, sehingga ‘anak tangga’ dari output DAC masuk ke output rangkaian.

Simulasi di Arduino ATmega328

Tahap selanjutnya adalah menguji algoritma filter di mikrokontroler ATmega328 (Arduino Nano).

Simulasi dilakukan dengan tahapan berikut:\

  • Membuat project Arduino untuk menjalankan simulasi. Nama projectnya adalah atmega-simulasi-filter
  • Source code fungsi filter digital dicopy ke source code Arduino
  • Data output ADC dijadikan sebuah array const di file data.h. Proses ini dilakukan dengan program arduino-createdata
  • File data.h di-include di project Arduino
  • Fungsi filter digital dijalankan dengan data dari array data output ADC
  • Output hasil fungsi filter dikirim ke port serial
  • Data dari port serial dibandingkan dengan hasil simulasi fungsi filter digital di komputer desktop. Seharusnya tidak terdapat perbedaan yang berarti.

Berikut ini sinyal output ADC dan output filter dari output serial Arduino, diplot dengan Excel:

Data hasil filter di Arduino dapat dibandingkan dengan data hasil filter di komputer desktop

Tahap selanjutnya adalah pengujian kecepatan filter [under construction]

Referensi

Antar Muka Input Analog

Mikroprosesor dapat menerima input analog maupun digital. Pada input analog, tentunya terjadi perubahan dari analog ke digital dengan menggunakan ADC (Analog to Digital Converter). Namun sebelum masuk ke ADC, ada beberapa proses yang perlu diperhatikan, di antaranya:

  • Level shift, karena pada umumnya input analog berbentuk sinyal AC yang negatif dan positif, sedangkan kebanyakan ADC hanya menerima sinyal positif. Sinyal yang ada negatif dan positif ditambah dengan suatu nilai, sehingga semua sinyal menjadi bernilai positif. Jika ADC dapat menerima sinyal positif, maka level shift ini tidak diperlukan.
  • Penguat (amplifier) atau peredam (attenuator), untuk memperkuat atau memperlemah sinyal agar rentang tegangan sinyal analog yang masuk dan rentang tegangan ADC cocok
  • Clipper / clamp. ADC hanya dapat menerima tegangan pada rentang tertentu tanpa merusaknya. Misal  pin ATMega328 pada Arduino hanya dapat menerima tegangan maksimal VCC+0,7 volt dan minimal GND-0,7 volt. Untuk itu perlu ada rangkaian yang dapat memotong sinyal masuk jika melebihi batas tersebut. Sebenarnya sinyal dari penguat/peredam seharusnya sudah berada dalam rentang tegangan ADC, namun pada kondisi tertentu, sinyal input kadang-kadang dapat naik-turn di luar jangkauan yang normal. Jika kita tidak yakin 100% bahwa tegangan akan berada pada rentang tersebut, maka lebih aman jika dipasang clipper / clamp.
  • Filter anti aliasing / Low Pass Filter. Frekuensi sinyal input harus kurang dari 1/2 frekuensi sampling supaya tidak terjadi aliasing.
  • Tegangan referensi. ADC memerlukan tegangan referensi, ada yang tegangan referensi didapat dari luar mikroprosesor, ada juga mikroprosesor yang sudah menggunakan tegangan referensi built in.
  • Sample & Hold. Jika perubahan sinyal input sangat cepat dibandingkan dengan kecepatan konversi pada ADC, maka tegangan input perlu ditahan (hold) dengan suatu rangkaian , supaya tegangan input ADC tidak berubah-ubah selama konversi berlangsung.
  • Multiplexer, jika 1 ADC dipakai untuk beberapa kanal input yang berbeda. Khusus untu multiplexer dibahas di artikel “Antar Muka Input Analog Multi Kanal
  • Surge Arrester. Khusus jika ada resiko sambaran petir tidak langsung,  maka pada input analog perlu dipasang surge arrester untuk meredam imbas sambaran petir tidak langsung tersebut.
Pemrosesan sinyal input ADC

Level Shift

Level shift pada prinsipnya adalah rangkaian penjumlah (adder) berbasis op-amp. Rangkaian level shift ini dapat disatukan dengan amplifier/attenuator, dengan mengatur besarnya penguatan yang diperlukan. Berikut contoh level shift yang mengubah sinyal analog dengan rentang -5 sampai +5 menjadi rentang 0 sampai 3,3 volt.

Rangkaian level shift

Referensi:

Filter Anti Aliasing

Berikut ini contoh rangkaian low pass orde 1 pasif sederhana:

Filter low pass orde 1 pasif

Berikut ini contoh rangkaian low pass orde 2 aktif  berbasis op-amp:

Filter low pass orde 2 aktif

Referensi

Clipper / Clamp

Output dari rangkaian analog dapat memiliki level tegangan di luar kemampuan ADC, untuk itu tegangan yang masuk ke bagian ADC perlu dijaga supaya tidak terlalu tinggi dan juga tidak terlalu rendah.

Berikut ini contoh rangkaian clamp berbasis diode schottky

Rangkaian proteksi input ADC dengan diode schottky

Berikut contoh rangkaian berbasis op  amp yang membatasi sinyal analog menjadi rentang 0 volt sampai dengan 4,096 volt dengan op-amp LT6015.

Referensi

Pengukuran Detak Jantung Dengan Sensor Detak Jantung

Pengukuran Detak Jantung dengan sensor yang dibahas di artikel Sensor Detak Jantung

Data mentah, delimited dengan semicolon:

Interval sampling adalah 1 ms

Board yang dipakai adalah Arduino Nano V3 clone

Software yang dipakai adalah Arduino sebagai berikut:

/*
Sumber: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won’t change. Used here to set a pin number :
const int ledPin =  13;      // the number of the LED pin
// Variables will change :
int ledState = LOW;             // ledState used to set the LED
// Generally, you shuould use “unsigned long” for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated
// constants won’t change :
const long interval = 1;           // interval at which to blink (milliseconds)
unsigned long counter=0;
int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}

void loop()
{
// here is where you’d put code that needs to be running all the time.

// check to see if it’s time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if(currentMillis – previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
counter++;
sensorValue = analogRead(sensorPin);
Serial.print(counter);
Serial.print(“;”);
Serial.println(sensorValue);

}
}

 

Grafik hasil pengukuran (sekitar 30000 sampel pertama). Nampak amplitude maksimum berubah-ubah, tergantung posisi dan tekanan jari pada sensor.

Pengukuran detak jantung 2900 sampel
Pengukuran detak jantung 2900 sampel

 

Grafik hasil pengukuran (hanya sekitar 1000 sampel pertama saja). Nampak ada noise pada hasil pengukuran.

Pengukuran detak jantung 1000 sampel
Pengukuran detak jantung 1000 sampel

 

Rentang angka ADC adalah 0 sampai 1023 (ADC 10 bit di ATMega328)

Angka maksimum yang tercatat adalah 536. Angka minimum yang tercatat adalah 496. Rentang angka yang tercatat adalah 40. Hal ini konsisten dengan hasil tampilan dengan software Processing di artikel Sensor Detak Jantung yang menunjukkan rentang angka pengukuran sempit dibandingkan dengan sensor asli.

Tampilan sensor ex Banggood
Tampilan sensor ex Banggood. Rentangnya sempit

 

Data mentah:

  • 1khz-data dalam format CSV, delimited dengan semicolon