data processing.ppt
TRANSCRIPT
Instrumentasi Elektronika
Pemrosesan Data DigitalEruP©Juni 2014
PENS
Pendahuluan
• Perlunya pengukuran digital• Pembacaan Digital• Pemrosesan Data• Penyimpanan Data• Pengiriman data digital
Perlunya pengukuran digital
• Pengukuran Digital vs Pengukuran Analog– Kelebihan pengukuran digital
• Lebih mudah dalam melakukan pemrosesan data– Dapat dibuat berbagai macam proses yang kompleks
• Kinerja perangkat digital secara umum tidak berubah (karena dalam bentuk program)
– Hanya bagian analog yang mengalami perubahan• Lebih mudah dalam transmisi data
– Data digital lebih mudah dikirimkan ke perangkat lain• Kompleksitas rangkaian yang lebih sederhana
– Hanya mengandalkan prosesor yang mumpuni• Memungkinkan data disimpan dengan mudah
Catatan
• Tidak semua persoalan dapat dibuat digital
• Contoh– Penguat sinyal kecil– Limiter– Filter Anti Aliasing– Driver– Dll
Contoh Analog vs Digital
Coba gambar sinyal output jika amplitudo sinyal input 0.2 Volt
// Contoh ProgramVin=read_adc(0)*5/1024-2.5;Vo=fabs(Vin)
Pembacaan Digital
• Anti Aliasing• ADC• Prosesor
Anti Aliasing
• Rangkaian yang digunakan untuk mencegah terjadinya kerusakan informasi saat dilakukan konversi dari analog ke digital
• Informasi dianggap benar jika frekuensi dari informasi analog tidak mengalami perubahan setelah dilakukan konversi digital
• Anti aliasing sebenarnya adalah suatu filter LPF yang digunakan untuk membatasi respon frekuensi yang masuk ke ADC dengan batasan,
sff21
max
Catatan• Aliasing adalah suatu fenomena yang berkaitan dengan
berubahnya informasi “spektrum frekuensi” dari sinyal asli
• Aliasing tidak membicarakan berubahnya bentuk gelombang– Bentuk gelombang bisa juga menyebabkan berubahnya
informasi “spektrum frekuensi”• Jika dalam proses sampling (pembacaan dengan ADC)
tidak dikehendaki perubahan bentuk gelombang, maka perlu digunakan frekuensi sampling yang jauh lebih besar dari frekuensi sinyal– Misalkan frekuensi sampling 10 s/d 100 kali frekuensi sinyal
Contoh Anti Aliasing
while(1){ data=read_adc(0); suhu=data*5/1024/0.01; sprintf(tmp,”Suhu: %04.1f”); lcd_gotoxy(0,0); lcd_puts(tmp); delay_ms(50); // Fs=40Hz}
Contoh HasilTanpa Anti Aliasing
Sinyal 5 Hz diganggu dengan sinyal 57 Hz
Sinyal 5 HzSinyal gangguan 57 Hz
Sinyal dibaca (disampling) 20 x per detik (20Hz)
Hasil Sampling rusakSinyal 5 Hz
Sinyal gangguan berubah frekuensinya
Sinyal 5 Hz
Sinyal 5 Hz
Sinyal 5 Hz
Sinyal 5 Hz
Sinyal 5 Hz
Contoh:Jika Anti Aliasing Bekerja Benar
Sinyal 5 Hz
Sinyal 5 Hz
Sinyal dibaca (disampling) 20 x per detik (20Hz)
Hasil sampling, bentuk gelombang berubah, tapi “spektrum frekuensi” sama
ADC
• Analog to Digital Conversion, terdiri atas– Tegangan input– Tegangan Referensi– Data output– Resolusi ADC (lebar data)– Clock (frekuensi ADC)
• Kecepatan konversi
– SOC (Start Of Conversion)• Kecepatan sampling (fs)
– EOC (End Of Conversion)– Interupsi
bit
REF
INADC x
VVData 2
Prosesor
• Digunakan untuk– Mengendalikan proses ADC dan pembacaan
dari ADC– Pemrosesan sinyal– Penyimpanan– Komunikasi
Pemrosesan Data
• Konversi• Pemrosesan Sinyal• Kalibrasi• Smoothing• Filter• Transformasi• Peramalan (prediksi, estimasi)
Konversi
• Data digital ke nilai tegangan– Tegangan = Data ADC * 5V / 1024
• Tegangan ke nilai besaran yang diukur– LM35
• Suhu = Tegangan / 10mV– Load Cell
• Berat = Tegangan / 1.2mV – 2.5kg– Dll
Pemrosesan Sinyal
• Melakukan perhitungan untuk mendapatkan nilai tertentu– Contoh:
• VP, VPP
• rms• dc• Power (daya)• Energi
Contoh:Pembacaan Vrms, Irms dan Daya Real
VT
CT
+2,5V
+2,5V
ch0
ch1
+5V
ADC 10 bitVREFClamper
BebanSumber(PLN)
In: 5AOut: 1V In: 220V
Out: 3V
Contoh: Perhitungan Vrms
#define Kv 220/3 // Trafo teganganfloat baca_tegangan_rms(void){ float vin, v2, rms, v_total=0; int n; for(n=0;n<100;n++) // pembacaan 100x { vin=(read_adc(0)*5/1024-2.5)*Kv; // pembacaan
tegangan v2=vin*vin; // kuadrad v_total+=v2; // integral delay_us(200); // sampling 200us } rms=sqrt(v_total/100); // akar rata2 kuadrad return rms;}
Contoh: Perhitungan Irms
#define Ki 5/1 // Trafo arusfloat baca_arus_rms(void){ float i, i2, rms, i_total=0; int n; for(n=0;n<100;n++) // pembacaan 100x { i=(read_adc(1)*5/1024-2.5)*Ki; // pembacaan arus i2=i*i; // kuadrad i_total+=i2; // integral delay_us(200); // sampling 200us } rms=sqrt(i_total/100); // akar rata2
kuadrad return rms;}
Contoh: Perhitungan Daya Aktif#define Kv 220/3 // Trafo tegangan#define Ki 5/1 // Trafo Arus (Iin/Vout)
float baca_daya_real(void){ float p,v,i,daya,p_total=0; int n; for(n=0;n<100;n++) // pembacaan 100x { v=(read_adc(0)*5/1024-2.5)*Kv; // pembacaan tegangan i=(read_adc(1)*5/1024-2.5)*Ki; // pembacaan tegangan p=v*i; // daya = tegangan x arus p_total+=p; // daya total delay_us(200); // sampling 200us } daya=p_total/100; // daya real=daya rata-rata return daya;} Catatan:
Clock ADC harus tinggi, untuk menghindari selisih waktu pembacaan antara tegangan dan arus
Kalibrasi
• Membandingkan data pengukuran dengan data pengukuran dari alat referensi
• Melakukan pengaturan tertentu agar didapatkan nilai pengukuran yang sama dengan alat referensi
• Contoh– Ukur_kalib = Ukur * GAIN + OFFSET
Smoothing
• Membuang data-data tertentu yang tidak diinginkan
• Contoh metode– MA– Smoothing– Filter IIF, FIR
MA
• Moving Average– Melakukan perata-rataan untuk setiap data
yang masuk dengan mengambil bebrapa data sebelumnya
z-1 z-1 z-1 z-1
Rata2
x[n] x[n-1] x[n-2] x[n-3] x[n-4]
Penyimpanan dataData x[n]
(sekarang)
Output y[n]
1
0
][1][
]1[]2[]1[][][
L
l
lnxL
ny
LLnxnxnxnxny
Contoh MA, L=5v1=v2=v3=v4=0;while(1){ vin=read_adc(0)*5/1024; v_ma=(vin+v1+v2+v3+v4)/5; v4=v3; v3=v2; v2=v1; v1=vin; ... delay_ms(50);}
Contoh MA, L=100#define L 100float v[L],s,v_ma,vin;for(i=0;i<L;i++) v[i]=0;while(1){ vin=read_adc(0)*5/1024; for(i=L-1;i>0;i--) v[i]=v[i-1]; v[0]=vin; s=0; for(i=0;i<L;i++) s+=v[i]; v_ma=s/L; ... delay_ms(50);}
Perbandingan Nilai L• Pendekatan t = L.T
– Jika L=5 maka t=5xTsampling– Jika L=100 maka t=100xTsampling
L=100
L=50L=10
L=5
T=Tsampling=1
Contoh Hasil Pembacaan ADC
Setelah MA, L=5
Setelah MA, L=10
Smoothing
• Prinsipnya menggunakan kombinasi antara nilai sekarang (baru, input) dengan nilai output sebelumnya
+
z-1
Inputx[n]
Outputy[n]
1-
]1[1][][ nynxny Nilai antara 0 sampai dengan 1, semakin kecil semakin halus
Contoh Program#define alfa 0.1y=0;while(1){ vin=read_adc(0)*5/1024; y=alfa*vin+(1-alfa)*y; ... delay_ms(50);}
Perbandingan Nilai • Pendekatan t = 5T/
– Jika =0,5 maka t=10xTsampling– Jika =0,05 maka t=100xTsampling
=0,05=0,1
=0,25=0,5 T=Tsampling=1
Contoh Hasil, =0.5
Contoh Hasil, =0.1
Filter
• Secara digital melakukan proses yang berkaitan dengan memilah data digital
• Model Filter digital– IIR
• Infinite Impulse Response– Model mirip dengan Smoothing– Analisa (perancangan) menggunakan Transformasi
rangkaian
– FIR• Finite Impulse Response
– Model mirip dengan MA– Analisa (perancangan) menggunakan Transformasi
respon
Contoh IIROrde 1
Tfdengan
ffTf
fRC
danRC
fjika
nVnVnVRCTjika
nVRCTnV
RCTnV
nVnVnVRCTnV
nVnVRCT
CTnInV
nVnVnVnVR
nVnVnI
SS
CINC
CINC
CCINC
CINC
C
CCCOUT
CINC
122
2121
]1[1][][
]1[1][][
]1[]1[][][
]1[][][][
]1[][][][
]1[][][
Sama denganPersamaan Smoothing
Model IIR
• Sama dengan Smoothing
+
z-1
Inputx[n]
Outputy[n]
1-
10
22
]1[1][][
SffTfdengan
nynxny
#define Fc 20 // Hz#define Fs 1000 // Hz#define alfa 2*pi*Fc/Fsy=0;while(1){ vin=read_adc(0)*5/1024; y=alfa*vin+(1-alfa)*y; ... delay_ms(1000/Fs);}
T selain dipengaruhi oleh delay_ms(), juga dipengaruhi oleh kecepatan ADC dan kecepatan program•Sebaiknya menggunakan Interupsi Timer untuk mendapatkan T yang akurat
Catatan
• Jika yang dipersoalkan adalah frekuensi cut off, maka yang dibicarakan adalah Filter
• Dan jika yang dibicarakan adalah mengurangi perubahan-perubahan data dalam waktu tertentu, maka yang dibicarakan adalah Smoothing
SffTf 22
tT
5
Dimana:-T adalah waktu yang diperlukan sampai y[n] mendekati x[n]-Dan 5 adalah perkiraan waktu (t=5RC) agar y[n] mendekati x[n]-Artinya, jika sekitar 0,5 maka diperlukan 10 sampling agar y[n] sama dengan x[n]
Transformasi
• Melakukan proses lanjutan dengan mengubah data dari satu domain ke domain lain
• Contoh– DFT– FFT
Peramalan (prediksi, estimasi)
• Mendapatkan perkiraan informasi yang belum terjadi– Berdasarkan data-data sebelumnya
• Contoh– MA– Trend– Regresi
• Linear, kuadrad, exponensial, polinomial
Penyimpanan Data Digital
• Memungkinkan untuk mengambil kembali data yang telah disimpan sebelumnya
• Contoh– RAM– EEPROM– SEEPROM– SD card
Pengiriman data digital
• Data dikirimkan ke (diterima dari) perangkat lain untuk keperluan tertentu
• Contoh– Menampilkan data-data pengukuran ke PC
printf(“W%d/r”,suhu);printf(“#%05.1f*”,berat);printf(“W1000”);printf(“1234”);printf(“S%d,K%d,A%d/r”,suhu,kecepatan,adc);putchar(‘S’);putchar(0x41);putchar(48);putchar(a);puts(tmp);putsf(“GO”);
puts dan putsf akan secara otomatis diakhiri dengan ‘\n’
Contoh: RX #1Menunggu, Data Char dan Integer
• Tidak ada proses lain yang dijalankan kecuali hanya menunggu
• Program akan berhenti, menunggu seperti macet
• Kalau ada program lain yang ingin dijalankan, harus diletakkan pada rutin interupsi (bukan program utama)
while(1){ char c; c=getchar(); lcd_putchar(c);}
while(1){ int data; char tmp[6]; scanf(“%d”,&data); sprintf(tmp,“%d”,data); lcd_puts(tmp);}
Contoh data yang dikirim “1230\r”
Harus ada ‘&’
Contoh: RX #2Menunggu, Data “S1234\r”
• Data diawali dengan kode tertentu dan diakhiri dengan <CR> atau ‘\r’
while(1){ int data; char tmp[6]; if(getchar()==‘S’) { scanf(“%d”,&data); sprintf(tmp,“%d”,data); lcd_puts(tmp); }}
Selalu menunggu karakter ‘S’while(1){ int data; char tmp[6]; if(getchar()==‘S’) { tmp[0]=getchar(); tmp[1]=getchar(); tmp[2]=getchar(); tmp[3]=getchar(); tmp[4]=0; data=atoi(tmp); lcd_puts(tmp); }}
Format pengiriman:“S1234”tanpa diakhiri ‘\r’asal ukurannya tetap
???
Contoh: RX #3Tidak Menunggu
• Program hanya menerima data saat data ada– Jika tidak ada, program akan menjalankan bagian
program lainnya• Harus menggunakan interupsi penerimaan data
(RX Interrupt harus diaktifkan)– Setiap ada data yang diterima, program akan loncat
ke rutin interupsi, membaca data yang diterima, dan menyimpan data tersebut serta menaikkan nilai jumlah data yang telah diterima
• Program utama dapat mengecek jumlah data yang diterima untuk mengetahui ada data atau tidak– Dengan cara ini, program tidak perlu secara khusus
menunggu data diterima
Contoh: RX #3Tidak Menunggu, Data Char
• Program utama akan terus bekerja sambil memeriksa apakah ada data yang diterima– Jika ada data diterima, program tertentu
dijalankan
while (1){ if(rx_counter>0) // menerima data ? { char c; c=getchar(); lcd_putchar(c); } LED=~LED; ... Proses lain ... }
Program Utama
Program penerimaan
Counter jumlah data yang telah diterima
Contoh: RX #3Tidak Menunggu, Data Integer
while (1) { char tmp[6]; if(rx_counter>=3) // menerima data ? { // harus integer if(getchar()=='R') { int r; scanf("%d",&r); sprintf(tmp,"%5.1f",r); lcd_puts(tmp); } } LED=~LED; ... Proses lain ... }
•Digunakan >=3 agar kemungkinan data yang diterima “Rx\r”•Bisa tetap menggunakan >0