Mengapa Anda tidak dapat rata-rata sampel ADC untuk mendapatkan resolusi lebih dari ADC?


8

Saya mencoba untuk mendapatkan lebih dari 10 bit presisi dari Arduino ADC saya, tetapi saya tidak dapat benar-benar memahami teori di baliknya. Catatan Aplikasi Atmel yang sering dikutip ( http://www.atmel.com/Images/doc8003.pdf ) mengatakan itu

Penting untuk diingat bahwa rata-rata normal tidak meningkatkan resolusi konversi. Decimation, atau Interpolasi, adalah metode rata-rata, yang dikombinasikan dengan oversampling, yang meningkatkan resolusi

Lalu apa yang mereka usulkan untuk 'Penipisan' adalah memindahkan titik desimal. Yang berarti mengurangi separuh bacaan biner untuk setiap tempat Anda memindahkannya sehingga Anda mungkin juga membagi nilai basis 10 dengan 2 atau 4 atau 8 atau apa pun. Apakah saya memahami penipisan salah?


"Dikombinasikan dengan oversampling, yang meningkatkan resolusi" - Saya pikir mereka mengatakan bahwa untuk memiliki lebih banyak resolusi Anda harus mengambil lebih banyak sampel. (Bertentangan dengan apa, saya tidak tahu. Mungkin mereka berpikir seseorang akan cukup bodoh untuk rata-rata sampel yang sama dengan dirinya sendiri berulang kali?)
user253751

Di bidang DSP (Digital Signal Processing), istilah "penipisan" berarti algoritma reguler untuk menghapus (menjatuhkan) sampel jika mereka tidak banyak berubah (ketika oversamping jauh di atas batas sinyal Nyquist, atau setelah filter penghalusan). Istilah ini berasal dari praktik di Roma kuno (?) Untuk membunuh setiap, katakanlah, tentara ketiga di resimen yang gagal di medan perang.
Ale..chenski

Dan saya tidak melihat di mana artikel Atmel menyarankan untuk memindahkan titik desimal, meskipun itu bisa menjadi bagian dari algoritma rata-rata.
Ale..chenski

Jawaban:


7

Saya melihat catatan itu dan itu memang klaim yang aneh (atau cara yang membingungkan untuk mengatakan apa yang sebenarnya mereka maksudkan).

Mungkin yang sebenarnya mereka maksud adalah poin bahwa jika Anda ingin mendapatkan lebih banyak resolusi, Anda tidak dapat membagi / menggeser angka sesudahnya ke skala yang sama dengan sampel tunggal karena (dalam bilangan bulat aritmatika) yang akan membuang bit yang Anda peroleh.

Jika sampel ADC Anda berisik , maka tentu saja Anda dapat membagi untuk mendapatkan nilai yang lebih tidak berisik pada skala aslinya.


Hal lain yang saya pikir dari hanya pertanyaan Anda adalah titik yang melakukan oversampling yang tepat Anda perlu untuk menggunakan low-pass filter yang efektif, dan rata-rata bergerak sederhana tidak seperti yang baik menjadi low-pass filter sebagai FIR yang dirancang dengan baik (atau IIR) filter - tetapi itu tampaknya tidak didukung oleh teks catatan.


Filter low pass atau filter rata-rata bergerak tidak akan menyaring noise 1 / f, yang merupakan alasan utama bit-bit rendah berisik, jika filter itu membuat saya akan keluar dari pekerjaan
Voltage Spike

16

Jika Anda meminta seseorang untuk mengukur papan 45,2cm akurat ke sentimeter terdekat, mereka akan (atau seharusnya) menjawab 45. Jika Anda meminta untuk mengukurnya lagi, mereka akan menjawab 45 lagi. Ulangi latihan 8 kali lebih banyak dan rata-rata semua pengukuran harus tepat 45. Tidak peduli berapa kali satu sampel input, satu akan berakhir dengan nilai 45. Rata-rata semua bacaan itu tentu saja akan menjadi 45 (meskipun papan memiliki panjang 45,2cm).

Jika Anda meminta orang menyesuaikan alat pengukur sehingga membaca 0,45 cm jauh sebelum pengukuran pertama, 0,35 cm jauh sebelum pengukuran kedua, 0,05 cm jauh sebelum yang kelima, 0,05 cm pendek sebelum yang keenam, dll hingga 0,45 cm pendek sebelum yang kesepuluh, kemudian dua pengukuran akan berbunyi 46 dan delapan lainnya akan membaca 45. Rata-rata dari semuanya adalah 45,2.

Dalam praktiknya, mengelola hal-hal yang bias dengan tepat memang sulit. Jika seseorang secara acak menyesuaikan alat pengukuran sebelum setiap pengukuran membaca di suatu tempat antara panjang 0,5 cm dan pendek 0,5 cm, maka sekitar 1/5 pengukuran akan membaca 46 dan sisanya 45, tetapi karena penyesuaian acak, fraksi yang sebenarnya mungkin lebih tinggi atau lebih rendah. Mengambil sepuluh pengukuran tidak akan menambah angka presisi yang cukup signifikan, tetapi rata-rata sekitar 100 akan melakukannya.

Saya tidak yakin saya cukup memahami alasan koran untuk perbedaan antara rata-rata dan pergeseran kanan. Orang harus sadar bahwa ketelitian yang dicapai dengan rata-rata dapat melebihi tingkat ketelitian yang berarti, tetapi dari pengalaman saya, pertanyaan tentang kapan dan seberapa banyak pergeseran ke kanan harus didorong oleh batas rentang numerik prosesor. Bekerja dengan angka-angka yang ditingkatkan sebanyak mungkin tanpa menyebabkan meluap umumnya akan meminimalkan efek kesalahan pembulatan, asalkan seseorang tidak memasang signifikansi yang tidak semestinya pada sejumlah kecil kebisingan.

Kebetulan, dalam penggunaan aslinya, untuk "memusnahkan" pasukan adalah untuk membunuh 1/10 tentara di dalamnya. Untuk memusnahkan data dari ADC adalah membuang bagian dari itu. Awalan umum dengan frasa "titik desimal" tidak menyiratkan hubungan.


14

Jawaban singkatnya adalah kebisingan, dan itu tidak selalu kebisingan yang penting, tetapi jenis kebisingan . Masalah lainnya adalah efek nonlinear seperti INL yang membuang nilai rata-rata

Pertama di Noise:

Jika kami mengambil sampel distribusi Gaussian, akan terlihat seperti ini:

masukkan deskripsi gambar di sini

Garis merah lebih dekat dengan distribusi termal aktual (rata-rata dari waktu ke waktu) dan histogram biru mewakili banyak sampel ADC. Jika kita ingin terus-menerus mencicipi distribusi ini, kita akan mendapatkan statistik yang lebih baik dan kita akan dapat menemukan nilai rata-rata atau rata-rata dengan akurasi yang lebih baik (yang biasanya adalah apa yang terjadi setelah itu. Ya, saya menyadari sinyal bergerak, ada penyaringan dan sinyal ke kebisingan) tergantung pada konten frekuensi tetapi mari kita pertimbangkan kasus DC di mana sinyal tidak bergerak untuk saat ini).

μ=1ni=1nxi

Masalahnya adalah noise flicker atau noise 1 / f, itu menggeser Gaussian mean sekitar dan menyebabkan statistik rusak, karena distribusinya tidak lagi gaussian.

Ini adalah model yang buruk tetapi Anda dapat menganggapnya tampak seperti INL ini juga merupakan masalah karena dapat memperkenalkan beberapa bit kesalahan yang juga membuang rata-rata.

μ=1ni=1nxi+error

Itu mungkin membingungkan, mari kita lihat domain waktu seperti yang ditunjukkan di bawah ini

Pada gambar atas Anda dapat melihat sinyal dengan noise gaussian akan mudah untuk "menggambar garis" melalui tengah dan menemukan rerata. Semakin banyak sampel yang Anda miliki dari sinyal seperti ini, semakin baik akurasi dan pengetahuan Anda tentang rata-rata.

Pada gambar bawah Anda dapat melihat seperti apa suara flicker, rata-rata tidak akan membantu di sini.

Masalahnya adalah sebagian besar elektronik memiliki kebisingan yang berkedip-kedip, resistor tidak (dengan asumsi tidak ada pengaruh dari suhu kamar) tetapi transistor dan IC lakukan. Ada amplifier yang disebut amplifier memotong yang memang mengatasi efek ini.

Hal lain yang perlu diketahui adalah ADC's (linier memiliki inti SAR baru) di mana para insinyur telah bekerja untuk menghilangkan efek noise 1 / f (dan efek nonlinier lainnya seperti ADL seperti INL) ke level yang jauh lebih rendah daripada bit ADCs. nilai. Anda dapat menggunakan oversampling berat dan mengeluarkan nilai 32-bit dari inti 14-bit.

Sumber: EDN- 1 / f Noise — lilin yang berkedip-kedip masukkan deskripsi gambar di sini


Sangat menarik tetapi saya tidak berpikir bahwa nota aplikasi mengacu pada suara flicker
Plumpie

Semua poin bagus; filter rata-rata sederhana adalah SINC (semua koefisien adalah sama) tetapi tidak pernah dapat sepenuhnya menyatu (rujukan nanti - menggunakan telepon sekarang).
Peter Smith

6

Lalu apa yang mereka usulkan untuk 'Penipisan' adalah memindahkan titik desimal.

tidak persis. bagian penipisannya menyatakan bahwa, dengan benar dalam pandangan saya, bahwa "rata-rata" normal dari banyak sampel, tetapi mempertahankan lebar bit, tidak menyimpan banyak informasi. Jadi jika Anda rata-rata membaca ADC m n-bit, rata-rata yang dihasilkan masih berupa pembacaan ADC n-bit.

pendekatan yang diusulkan adalah, secara sederhana, adalah untuk rata-rata pembacaan ADC n-bit sehingga rata-rata yang dihasilkan memiliki lebar bit yang lebih tinggi. Misalnya, menjumlahkan 4 bacaan ADC 10-bit dan membagi jumlahnya dengan 2 menghasilkan bacaan ADC 11-bit.

Saya pikir itu selalu menjadi cara oversampling dilakukan secara profesional. Rata-rata sederhana ini oleh orang-orang di internet secara luas dipahami sebagai pendekatan yang salah.

titik lain bahwa untuk mengurangi kebisingan, oversampling hanya efektif jika ada kebisingan yang benar. Jika Anda memiliki ADC 10-bit yang dirancang oleh Tuhan (yaitu setiap bacaan adalah bacaan benar mutlak, tanpa variasi), oversampling tidak akan berhasil.

sirkuit khusus pada akhir artikel tentang penggunaan PWM untuk menambah noise salah: pin menambahkan noise harus memiliki kapasitor pemblokiran DC. dan poin yang kurang substantif adalah bahwa itu tidak harus menjadi pin PWM. Pin GPIO normal akan bekerja.


> Rata-rata sederhana ini oleh orang-orang di internet secara luas dipahami sebagai pendekatan yang salah. tidak jika Anda rata-rata sebagai pelampung
Plumpie

4

Pertama, ADC hanya sebaik referensi tegangannya. Jika Arduino Anda menggunakan + 5V sebagai referensi, Anda bisa melupakan segala jenis presisi, karena regulator + 5V agak berisik, akurasi rendah seperti 1-5%, dan tegangan outputnya akan tergantung pada jumlah arus yang diambil dari itu, baik pada saat pengukuran dan juga dalam beberapa milidetik terakhir.

Jadi, jika Anda membutuhkan akurasi atau presisi, silakan pilih referensi voltase yang sesuai dengan kebutuhan Anda. Jika Anda tidak membutuhkan ketepatan absolut pada tegangan, itu akan lebih murah, karena Anda hanya akan membutuhkannya stabil, bukan akurat dan stabil.

Saya belum menguji SAR ADC di dalam Arduino. Saya memiliki pengalaman dengan yang ada di AT90PWM3B yang merupakan kerabat dekat. Cukup bagus. Dengan tegangan input konstan, Anda mendapatkan pembacaan ADC yang sama, berulang-ulang, dengan 1 LSB berfluktuasi jika tegangan berada di antara nilai. Tidak dapat mengharapkan hasil yang lebih baik dari SAR ADC. (Saya memang menggunakan referensi tegangan eksternal berkualitas baik)

Jadi, kebisingan bukanlah masalah di sini ...

Bahkan, kebisingan adalah temanmu ...

Misalkan tegangan yang ingin Anda ukur jatuh pada nilai ADC 100.1

Anda membuat 10 pengukuran, tetapi karena ADC bagus, Anda mendapatkan 100 setiap kali!

Jadi Anda memerlukan sedikit noise pada sinyal Anda, seperti satu LSB noise, untuk memastikan jika Anda mengukur 100.1 maka Anda akan mendapatkan 100 sembilan dari sepuluh, dan 101 satu dari sepuluh. Jadi rata-rata menjadi 100,1, mengerti?

Jika itu berasal dari sensor, biasanya Anda akan memiliki cukup noise gratis.


Poin bagus tentang semua cara saya kehilangan akurasi dan presisi dengan metode saya saat ini. Saya memiliki tl431 (shunt yang dapat disetel dengan presisi) dan saya akan mencoba menghubungkannya.
Plumpie

Regulator tegangan linier memiliki waktu respons dalam rentang MHz dan karenanya cukup stabil dalam rentang frekuensi ADC.
JimmyB

Maka Anda mungkin hanya ingin mengukur tegangan relatif terhadap Vcc yang sama (potensiometer, sensor tipe pembagi tegangan).
JimmyB

LDO dengan respons "Dalam rentang MHz" ???? Kirim orang lembar data, saya ingin bertemu satu! Kemungkinan besar arduino datang dengan 1117 payah atau serupa, yang memiliki respon transien lambat anjing ... Menggunakan pasokan sebagai referensi tidak dimaksudkan untuk presisi pula.
peufeu

4

Apa yang Anda lewatkan adalah arti dari "penipisan."

Sebenarnya, "penipisan" adalah pengurangan menjadi 1/10. Artinya, dari 10 kurangi menjadi 1.

"Decimation" seperti yang digunakan dalam pengambilan sampel kehilangan arti yang ketat. Daripada 1/10, itu berarti "mengurangi jumlahnya."

Artinya, Anda membuat rata-rata jumlah sampel, dan mengurangi jumlah sampel dengan jumlah yang sama.

Sebagai contoh, jika Anda sampel pada 1000Hz dan rata-rata 4 sampel, Anda hanya menyimpan rata-rata. Pada akhirnya, Anda hanya memiliki 250 sampel per detik, bukan 1000. Anda kehilangan resolusi waktu, tetapi mendapatkan sedikit resolusi voltase.

Untuk setiap faktor 4, Anda mendapatkan 1 bit. Rata-rata dan pudar dengan 4, dan beralih dari resolusi 10 bit ke resolusi 11 bit.

Faktor lain dari 4 (4 * 4 = 16 total) membuat Anda dari 10 bit menjadi 12 bit. Faktor lain dari 4 membuat Anda mendapatkan resolusi 13 bit.

Tetapi, perhatikan bahwa Anda sekarang kelebihan sampel dengan faktor 64. Tingkat pengambilan sampel efektif Anda turun oleh faktor yang sama. Menggunakan contoh laju sampling 1000Hz, Anda turun menjadi sekitar 15 sampel efektif per detik.

Ini adalah penipisan, dan berapa banyak ADC bit tinggi yang mendapatkan resolusi tinggi. Mereka sampel pada tingkat tinggi, rata-rata (atau menggunakan filter low pass digital) dan memusnahkan.

Pada akhirnya, Anda memiliki ADC bit tunggal (pembanding sederhana) yang melebihi contoh beberapa milon kali untuk memberikan kedalaman bit efektif 16 bit.

Satu hal yang perlu Anda ingat agar ini berfungsi adalah Anda membutuhkan noise dalam sinyal Anda kira-kira sama dengan nilai terkecil yang dapat diukur ADC Anda. Untuk ADC 10 bit menggunakan tegangan referensi 5V, itu akan menjadi noise sekitar 5mV dari puncak ke puncak.

Rata-rata kebisingan adalah di mana keuntungan bit sebenarnya berasal. Bayangkan Anda memiliki sinyal (DC) yang terletak persis di antara nilai jumlah 512 ADC dan 513 jumlah ADC. Tanpa noise, nilai yang diukur akan selalu sama - rata-rata akan memberi Anda nilai yang sama dengan sampel.

Tambahkan noise dengan nilai terukur terkecil, dan itu terlihat sangat berbeda. Meskipun sinyal itu sendiri tidak berubah, nilai yang diukur akan "bergoyang" di sekitar nilai sebenarnya dari sinyal. Rata-rata sekarang berbeda dari sampel, dan semakin banyak sampel yang Anda gunakan semakin dekat dengan nilai riil sinyal


Saya telah menggunakan teknik ini dengan Arduino (yang menggunakan prosesor Atmel dengan ADC 10 bit) untuk mendapatkan resolusi yang lebih baik untuk beberapa pengukuran yang saya buat.

Saya mendapatkannya hingga 13 bit, tetapi ternyata saya membutuhkan lebih banyak. Saya bisa saja memilih faktor 4 yang lain, tetapi itu akan memakan waktu terlalu lama untuk setiap sampel dan hanya memberi saya satu bit lagi.

Eksperimen dengan oversampling menunjukkan bahwa apa yang saya lakukan dapat bekerja (saya mendapat hasil yang dapat dikenali tetapi berisik) tanpa harus menghabiskan waktu dan uang untuk mendapatkan ADC yang lebih baik. Dengan pembuktian konsep, saya bisa melanjutkan dan mendapatkan ADC yang lebih baik - dan mendapatkan pembuktian itu hanya menghabiskan beberapa baris kode dan sedikit waktu.

Saya menemukan saya membutuhkan setidaknya 16 bit. Itu berarti rata-rata 4.096 sampel.
Itu sekitar setengah detik menggunakan pengambilan sampel tercepat yang mungkin dengan perangkat lunak Arduino.

Karena saya membutuhkan 14400 pengukuran, proses penuh akan memakan waktu 2 jam.

Saya bukan pasien itu, dan hal-hal yang saya ukur tidak akan tetap konstan selama itu. Saya harus beralih menggunakan ADC yang menggunakan tingkat oversampling yang jauh lebih tinggi secara internal, dan yang memberikan sampel resolusi lebih tinggi pada tingkat yang lebih rendah.

Seperti halnya banyak hal lainnya, penipisan adalah kompromi yang dapat membuat Anda mendapatkan kinerja yang lebih baik di satu arah (kedalaman bit) sambil membebankan biaya kinerja Anda ke arah lain (laju sampling.)


3
Karena Anda mengambil waktu untuk nitpick tentang apa penipisan berarti: Strictly itu berarti pengurangan oleh 1/10, menjaga 9/10 item.
pipa

2

Jadi Anda dapat mempelajari teorinya, tetapi saya dapat memberitahu Anda bahwa dalam praktiknya hanya model sederhana yang penting. Anda dapat rata-rata, selama sinyal Anda dalam noise. Kemudian rata-rata komponen noise akan di-zero-out, sementara sinyalnya akan tetap. Dengan cara ini Anda akan mendapatkan resolusi dalam biaya bandwidth.

Jika Anda memiliki misalnya adc 16-bit dan empat bit terakhir berisik, Anda dapat memfilternya dan mendapatkan sinyal di sana. Tetapi jika Anda hanya memiliki sedikit bising, tidak ada banyak rata-rata, sehingga Anda tidak akan mendapatkan banyak informasi baru.

Jika Anda membutuhkan resolusi sangat tinggi (dan bandwidth rendah) lihat bagaimana sigma-delta ADC bekerja. Mereka memiliki sinyal tingkat tinggi 1-bit yang kemudian disaring ke beberapa bandwidth dengan resolusi lebih tinggi, kadang-kadang 20 bit dan lebih banyak.


2

Kenapa kamu tidak bisa? Anda bisa , tetapi Anda harus mempertimbangkan semua sumber kesalahan dan kebisingan untuk memastikan rencana Anda berfungsi.

Rata-rata berfungsi untuk meningkatkan resolusi dengan mengurangi kesalahan standar deviasi, σ. Kriteria yang harus dipenuhi adalah Gaussian Noise harus melebihi kesalahan kuantisasi. Spesifikasi yang akan didefinisikan adalah kesalahan total dan membuat kesalahan kuantisasi atau resolusi berkontribusi hanya sejumlah kecil dari total anggaran kesalahan.

mis. Jika Anda ingin meningkatkan resolusi sebesar 2 bit, tetapi noise Anda sudah 3 bit, Anda harus mempertimbangkan cara mengurangi noise sebesar 2 + 3 = 5 bit sambil meningkatkan resolusi pada saat yang bersamaan sebesar 2 bit.

  • Ini bisa menjadi solusi digital dengan rata-rata> 25 sampel dengan biaya latensi atau solusi analog dengan penyaringan penolakan suara, menyeimbangkan sinyal untuk menolak kebisingan mode umum dan / atau melindungi sinyal dengan lebih baik bersamaan dengan rata-rata digital.

Di mana n adalah bit ekstra yang diinginkan dari resolusi, maka menggeser angka biner (atau menipiskan) x1 sama dengan / 2.

Untuk rata-rata itu berarti σ kebisingan berkurang sebesar x untuk x sampel tetapi juga bahwa latensi ditingkatkan oleh x sampel waktu, maka oversampling diperlukan untuk mengurangi latensi.

Perhatikan istilah "penipisan" berlaku untuk nilai desimal dan angka desimal berkode biner. Anda dapat memvisualisasikan jika Anda memiliki penghitung yang membaca nilai integer dan kemudian dengan rata-rata 10 hasil, Anda membaginya dengan 10 untuk mencapai peningkatan dengan tempat desimal ekstra tetapi σ kebisingan hanya berkurang sebesar 1/10=1/3.3 untuk x sampel tetapi juga bahwa latensi meningkat dengan x sampel waktu, maka oversampling diperlukan untuk mengurangi latensi,

foversampling=4nfNyquist

Namun kebisingan pada tingkat sampel itu,fs harus cukup untuk gentar +/- 1 bit pada beberapa sampel x, untuk mendapatkan peningkatan terbaik dalam resolusi.

  • Misalnya, jika BW adalah 10kHz maka fNyquist= 20kHz
  • dan jika Anda ingin mengubah resolusi 10 bit menjadi 12-bit maka n = 2 Meningkatkan resolusi dari 10-bit ke 12-bit membutuhkan penjumlahan dari nilai 16 10-bit. Jumlah 16 nilai 10-bit menghasilkan hasil 14-bit di mana dua bit terakhir tidak diharapkan untuk menyimpan informasi berharga.

Terlalu kesalahan kuantisasi atau terlalu banyak noise acak akan membutuhkan lebih banyak rata-rata untuk mengurangi kesalahan dan lebih banyak rata-rata meningkatkan latensi hasil.

Untuk mengoptimalkan ADC untuk kecepatan dan kesalahan, seseorang harus menentukan anggaran kesalahan total dan resolusi yang tersedia (bit), SNR yang diinginkan atau kesalahan absolut untuk setiap sinyal yang diberikan dalam seluruh rentang pengukuran. Mendefinisikan semua sumber kesalahan pada awalnya mungkin tampak sulit, namun perlu termasuk;

mis. gain error, kesalahan offset, kesalahan kuantisasi, kesalahan kebisingan CM, kesalahan kebisingan DM, kebisingan Vref atau kesalahan offset, kebisingan lingkungan, dll., kesalahan latensi (dari rata-rata)

Kemudian tentukan berapa banyak lagi bit resolusi yang Anda butuhkan untuk mencapai anggaran kesalahan desain di atas setelah semua sumber kesalahan lainnya telah diperkecil.

Hal yang sama berlaku untuk rata-rata (untuk sinyal lambat) dan oversampling bandwidth sinyal dan penghancuran untuk ADC real-time.

Ini tidak akan memperbaiki untuk mendapatkan atau mengimbangi kesalahan dan jika ada kebisingan acak tidak cukup maka kebisingan harus ditambahkan ke gentar sinyal. Idealnya semua sumber kebisingan dan kesalahan lainnya tidak melebihi 1 bit sehingga standar deviasi atau dither hanya bernilai +/- 1 dari jumlah sampel. Namun, harus ada suara yang cukup sehingga pembacaan yang sama tidak diperoleh dengan sampel berturut-turut di kedua metode.


1

Teori di baliknya dapat diambil, dalam bentuk singkat, dari kalimat ini di artikel Wikipedia tentang oversampling :

Namun, SNR meningkat sebesar sqrt (N) (...). Penjumlahan derau yang tidak berkorelasi meningkatkan amplitudenya sebesar sqrt (N), sementara meringkas sinyal yang koheren meningkatkan rata-rata sebesar N. Sebagai hasilnya, SNR (atau sinyal / derau) meningkat sebesar sqrt (N). Dalam contoh, itu berarti sementara dengan N = 256 ada peningkatan rentang Dinamis sebesar 8 bit, dan konten "sinyal koheren" meningkat sebesar N, tetapi kebisingan berubah dengan faktor sqrt (N) = sqrt (256) ) = 16 dalam contoh (jangan dikacaukan dengan peningkatan 16 bit), sehingga SNR berubah dengan faktor 16.

Jadi, asalkan sinyal Anda cocok dengan kriteria tertentu (seperti menjadi lebih lambat dan memiliki noise rendah) Anda benar-benar meningkatkan satu bit untuk setiap 4 sampel. Kemudian, untuk setiap 4 sampel yang dihasilkan, Anda bisa mendapatkan "bergabung" sekali lagi untuk membentuk sampel lain yang beresolusi lebih tinggi, sehingga pada akhirnya Anda mendapatkan log_4 (n) bit untuk setiap n sampel yang Anda baca di ADC Anda.

Adapun bagian penipisan, itu tidak benar-benar rata-rata, khususnya jika Anda mempertimbangkan bahwa kita berbicara tentang bilangan bulat di sini (sampel ADC). Misalnya, jika Anda memiliki sampel 1, 1, 3dan 2, rata-rata akan menjadi:

int result = (1+1+3+2)/4;

Karena Anda rata-rata dengan bilangan bulat matematika, "hasil matematika" Anda dari 1,75 akan dibulatkan menjadi 1. Jika Anda kalikan dengan 2, Anda akan mendapatkannya 2.

Sekarang, jika Anda memusnahkannya dengan:

int result = (1+1+3+2)>>1;

Hasil Anda akan 3. Anda dapat berargumen bahwa ini sama dengan membagi dengan 2, tetapi tentunya Anda tidak dapat membantah bahwa 3 adalah rata-rata 1, 1, 3 dan 2 . Lihat perbedaannya?

Sekarang Anda mungkin tergoda untuk hanya menjumlahkan semuanya dan tidak membuang bit terakhir. Tetapi ingat bahwa bit ini adalah noise: Anda tidak dapat menggunakannya.


Saya merasa seperti jika amplitudo noise meningkat dengan sqrt (N) dan sinyal koheren meningkat dengan N, maka SNR harus meningkat dengan N / sqrt (N) dan bukan sqrt (N)
Plumpie

@Plumpie Periksa matematika lagi: N/sqrt(N) = sqrt(N).
Ronan Paixão

1

Kedengarannya semua orang sudah membahas bagian teori dari pertanyaan Anda, tetapi karena Anda menggunakan Arduino, Anda mungkin ingin membaca petualangan saya mencoba untuk meningkatkan resolusi ADC dengan teknik ini:

Meningkatkan resolusi ADC Arduino dengan Dithering & Oversampling

Karakter suara adalah bagian penting dari cerita, dan ternyata Anda dapat menghasilkan gentar yang cukup baik dengan hanya menggebuk pin dengan resistor di atasnya saat Anda membaca ADC secara tidak sinkron. Itu tidak sempurna, dan Anda mendapatkan offset sinkron kecil yang bervariasi tergantung pada berapa banyak sampel / bit tambahan yang ingin Anda capai. Saya juga menerima kritik bahwa teknik ini tergantung pada stabilisasi rel yang buruk di Arduino, jadi benar-benar dirancang untuk cacat, daripada mengikuti praktik yang baik. Tetapi sangat mudah dilakukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.