Tại sao bạn không thể lấy mẫu ADC trung bình để có độ phân giải cao hơn từ ADC?


8

Tôi đang cố gắng để có được hơn 10 bit chính xác từ Arduino ADC của mình nhưng tôi thực sự không thể tìm ra lý thuyết đằng sau nó. Một ghi chú thường được trích dẫn của Ứng dụng Atmel ( http://www.atmel.com/Images/doc8003.pdf ) nói rằng

Điều quan trọng cần nhớ là tính trung bình bình thường không làm tăng độ phân giải của chuyển đổi. Decimation, hay Interpolation, là phương pháp lấy trung bình, kết hợp với oversampling, làm tăng độ phân giải

Sau đó, những gì họ đề xuất cho 'Decimation' đang di chuyển dấu thập phân. Số tiền này sẽ giảm một nửa số đọc nhị phân cho mọi nơi bạn di chuyển để bạn cũng có thể chia giá trị cơ sở 10 cho 2 hoặc 4 hoặc 8 hoặc những gì có bạn. Tôi có hiểu sai về decimation không?


"Kết hợp với quá khổ, làm tăng độ phân giải" - Tôi nghĩ rằng họ đang nói rằng để có độ phân giải cao hơn, bạn phải lấy nhiều mẫu hơn. (Trái ngược với những gì, tôi không biết. Có lẽ họ nghĩ ai đó sẽ đủ ngu ngốc để lấy trung bình cùng một mẫu với chính nó?)
user253751 15/07/17

Trong lĩnh vực DSP (Xử lý tín hiệu số), thuật ngữ "decimation" có nghĩa là thuật toán loại bỏ (bỏ) mẫu thường xuyên nếu chúng không thay đổi nhiều (khi vượt quá giới hạn Nyquist tín hiệu hoặc sau bộ lọc làm mịn). Thuật ngữ này xuất phát từ một tập quán ở La Mã cổ đại (?) Để giết mọi người, giả sử, người lính thứ ba trong một trung đoàn thất bại trong chiến trường.
Ale..chenski

Và tôi không thấy bài báo Atmel đề nghị di chuyển bất kỳ dấu thập phân nào, mặc dù nó có thể là một phần của thuật toán tính trung bình.
Ale..chenski

Câu trả lời:


7

Tôi đã xem qua ghi chú và đó thực sự là một yêu cầu kỳ lạ (hoặc một cách khó hiểu để nói những gì họ thực sự có nghĩa).

Có lẽ ý nghĩa thực sự của chúng là điểm mà nếu bạn muốn có thêm độ phân giải, bạn không thể chia / chuyển số sau đó sang cùng một tỷ lệ với một mẫu đơn vì (theo số học số nguyên) sẽ loại bỏ các bit bạn có được.

Nếu các mẫu ADC của bạn bị nhiễu , thì tất nhiên bạn có thể chia để có được giá trị ít nhiễu hơn ở quy mô ban đầu.


Một điều khác tôi nghĩ từ câu hỏi của bạn là thời điểm đó để làm oversampling phải bạn cần phải sử dụng một bộ lọc thông thấp có hiệu quả, và một di chuyển trung bình đơn giản không phải là như giỏi là một bộ lọc thông thấp như một FIR thiết kế phù hợp (hoặc IIR) bộ lọc - nhưng dường như không được hỗ trợ bởi văn bản của ghi chú.


Bộ lọc thông thấp hoặc bộ lọc trung bình di động sẽ không lọc nhiễu 1 / f, đó là lý do hầu hết các bit thấp hơn gây ồn, nếu các bộ lọc đó sẽ bị mất việc
Điện áp tăng đột biến vào

16

Nếu bạn yêu cầu ai đó đo một bảng 45,2cm chính xác đến centimet gần nhất, họ sẽ (hoặc nên) trả lời 45. Nếu bạn hỏi sau đó đo lại, họ sẽ trả lời lại 45. Lặp lại bài tập thêm 8 lần nữa và trung bình của tất cả các phép đo phải chính xác là 45. Cho dù một lần lấy mẫu bao nhiêu lần, một kết quả sẽ có giá trị 45. Tất nhiên, trung bình của tất cả các lần đọc đó sẽ là 45 (mặc dù bảng dài 45,2cm).

Nếu bạn có người điều chỉnh thiết bị đo sao cho đọc dài 0,45cm trước lần đo đầu tiên, dài 0,35cm trước lần thứ hai, dài 0,05 cm trước lần thứ năm, ngắn 0,05cm trước lần thứ sáu, v.v ... ngắn đến 0,45cm trước lần thứ mười, sau đó hai trong số các phép đo sẽ đọc 46 và tám phép đo khác sẽ đọc 45. Trung bình của tất cả các phép đo sẽ là 45,2.

Trong thực tế, quản lý để thiên vị mọi thứ rất chính xác là khó khăn. Nếu một người điều chỉnh ngẫu nhiên thiết bị đo trước mỗi lần đo để đọc ở đâu đó dài từ 0,5cm đến 0,5cm, thì khoảng 1/5 số đo sẽ đọc 46 và 45 còn lại, nhưng vì các điều chỉnh là ngẫu nhiên nên phần thực tế có thể cao hơn hoặc thấp hơn. Thực hiện mười phép đo sẽ không thêm độ chính xác đáng kể, nhưng trung bình khoảng 100 sẽ.

Tôi không chắc là tôi hoàn toàn hiểu lý do căn bản của bài báo về sự khác biệt giữa tính trung bình và dịch chuyển phải. Người ta cần lưu ý rằng độ chính xác rõ ràng đạt được bằng cách lấy trung bình có thể vượt quá mức chính xác có ý nghĩa, nhưng theo kinh nghiệm của tôi, câu hỏi khi nào và bao nhiêu phải chuyển sang phải bởi các giới hạn của phạm vi số của bộ xử lý. Làm việc với các số được nhân rộng hết mức có thể mà không gây ra tràn thường sẽ giảm thiểu ảnh hưởng của các lỗi làm tròn, với điều kiện là người ta không chú ý quá mức đến lượng nhiễu nhỏ.

Ngẫu nhiên, theo cách sử dụng ban đầu, để "tiêu diệt" một đội quân là giết 1/10 binh lính ở đó. Để xác định dữ liệu từ ADC là loại bỏ một phần của nó. Tiền tố phổ biến với cụm từ "dấu thập phân" không ngụ ý liên kết.


14

Câu trả lời ngắn gọn là tiếng ồn, và nó không nhất thiết là tiếng ồn quan trọng, mà là loại tiếng ồn . Vấn đề khác là các hiệu ứng phi tuyến như INL làm mất giá trị trung bình

Đầu tiên về tiếng ồn:

Nếu chúng ta lấy mẫu phân phối Gaussian, nó sẽ trông giống như thế này:

nhập mô tả hình ảnh ở đây

Đường màu đỏ gần với phân bố nhiệt thực tế (tính trung bình theo thời gian) và biểu đồ màu xanh biểu thị nhiều mẫu ADC. Nếu chúng ta liên tục lấy mẫu phân phối này, chúng ta sẽ có được số liệu thống kê tốt hơn và chúng ta sẽ có thể tìm thấy giá trị trung bình hoặc giá trị trung bình với độ chính xác tốt hơn (thường là sau đó, Có tôi nhận thấy tín hiệu di chuyển xung quanh, có lọc và tín hiệu nhiễu tùy thuộc vào nội dung tần số nhưng chỉ xem xét trường hợp DC mà tín hiệu không di chuyển bây giờ).

μ= =1nΣTôi= =1nxTôi

Vấn đề là nhiễu nhấp nháy hoặc nhiễu 1 / f, nó làm thay đổi ý nghĩa Gaussian xung quanh và làm cho các số liệu thống kê bị phá vỡ, vì phân phối không còn là gaussian.

Đây là một mô hình kém nhưng bạn có thể coi nó trông giống như INL này cũng là một vấn đề bởi vì nó có thể gây ra một vài lỗi cũng làm mất đi ý nghĩa.

μ= =1nΣTôi= =1nxTôi+error

Điều đó có thể gây nhầm lẫn, hãy nhìn vào miền thời gian như hình dưới đây

Trong hình ảnh trên cùng, bạn có thể thấy tín hiệu có nhiễu gaussian, thật dễ dàng để "vẽ một đường" qua giữa và tìm giá trị trung bình. Bạn càng có nhiều mẫu từ một tín hiệu như thế này, bạn sẽ có độ chính xác và kiến ​​thức tốt hơn về giá trị trung bình.

Trong hình ảnh thấp hơn, bạn có thể thấy tiếng ồn nhấp nháy trông như thế nào, tính trung bình sẽ không giúp ích gì ở đây.

Vấn đề là hầu hết các thiết bị điện tử đều có tiếng ồn nhấp nháy, điện trở thì không (giả sử không có ảnh hưởng từ nhiệt độ phòng) nhưng bóng bán dẫn và IC thì có. Có những bộ khuếch đại được gọi là bộ khuếch đại cắt nhỏ khắc phục những hiệu ứng này.

Một điều khác cần biết là có ADC (tuyến tính có lõi SAR mới) nơi các kỹ sư đã làm việc để loại bỏ các ảnh hưởng của nhiễu 1 / f (và các hiệu ứng phi tuyến khác của ADC như INL) xuống mức thấp hơn nhiều so với bit ADC giá trị. Bạn có thể sử dụng quá mức quá mức và lấy ra các giá trị 32 bit từ lõi 14 bit.

Nguồn: EDN- 1 / f Tiếng ồn nến nến nhấp nháy nhập mô tả hình ảnh ở đây


Rất thú vị nhưng tôi không nghĩ rằng ghi chú ứng dụng đề cập đến tiếng ồn nhấp nháy
Plumpie

Tất cả những điểm tốt; bộ lọc trung bình đơn giản là SINC (tất cả các hệ số đều giống nhau) nhưng nó không bao giờ có thể hội tụ hoàn toàn (trích dẫn sau - sử dụng điện thoại ngay bây giờ).
Peter Smith

6

Sau đó, những gì họ đề xuất cho 'Decimation' đang di chuyển dấu thập phân.

không chính xác. phần thập phân của nó đang lập luận rằng, theo quan điểm của tôi, chính xác là "tính trung bình" bình thường của nhiều mẫu, nhưng vẫn giữ được độ rộng bit, không lưu giữ nhiều thông tin. Vì vậy, nếu bạn trung bình đọc m n-bit ADC, trung bình kết quả vẫn là đọc adc n-bit.

Cách tiếp cận được đề xuất là, nói một cách nhẹ nhàng, là đọc trung bình ADC n-bit để trung bình kết quả có độ rộng bit cao hơn. Ví dụ: tổng hợp 4 lần đọc adc 10 bit và chia tổng cho 2 sẽ mang lại kết quả đọc adc 11 bit.

Tôi nghĩ rằng đó luôn là cách quá khổ đã được thực hiện một cách chuyên nghiệp. Tính trung bình đơn giản này của mọi người trên mạng được hiểu là cách tiếp cận sai.

điểm khác là để giảm tiếng ồn, quá khổ chỉ có hiệu quả nếu có tiếng ồn là đúng. Nếu bạn có một bộ ADC 10 bit được thiết kế bởi Thượng đế (tức là mọi lần đọc là cách đọc thực sự tuyệt đối, không có biến thể), thì quá mức sẽ không hoạt động.

mạch cụ thể vào cuối bài viết về việc sử dụng pwm để thêm nhiễu là không chính xác: pin thêm nhiễu nên có tụ chặn DC. và một điểm ít quan trọng hơn là nó không phải là chân PWM. Một pin GPIO bình thường sẽ hoạt động.


> Tính trung bình đơn giản này của mọi người trên mạng được hiểu rộng rãi là cách tiếp cận sai. không nếu bạn tính trung bình chúng là phao
Plumpie

4

Đầu tiên, một ADC chỉ tốt như tham chiếu điện áp của nó. Nếu arduino của bạn sử dụng + 5V làm tham chiếu, bạn có thể quên bất kỳ loại độ chính xác nào, vì bộ điều chỉnh + 5V khá ồn, độ chính xác thấp như 1-5% và điện áp đầu ra của nó sẽ phụ thuộc vào dòng điện được rút ra từ nó, cả tại thời điểm đo và cả trong vài mili giây cuối cùng.

Vì vậy, nếu bạn cần độ chính xác hoặc độ chính xác, vui lòng chọn tham chiếu điện áp phù hợp với yêu cầu của bạn. Nếu bạn không cần độ chính xác tuyệt đối về điện áp, nó sẽ rẻ hơn, vì bạn sẽ chỉ cần nó ổn định, thay vì chính xác và ổn định.

Tôi chưa thử nghiệm SAR ADC bên trong arduino. Tôi có kinh nghiệm với một trong AT90PWM3B, một người họ hàng gần. Nó là khá tốt. Với điện áp đầu vào không đổi, bạn nhận được cùng một lần đọc ADC, lặp đi lặp lại, với 1 LSB dao động nếu điện áp nằm giữa các giá trị. Không thể mong đợi một kết quả tốt hơn từ SAR ADC. (Tôi đã sử dụng một tài liệu tham khảo điện áp bên ngoài chất lượng tốt)

Vì vậy, tiếng ồn không phải là vấn đề ở đây ...

Thực tế, tiếng ồn là bạn của bạn ...

Giả sử điện áp bạn muốn đo rơi vào giá trị ADC 100.1

Bạn thực hiện 10 phép đo, nhưng vì ADC tốt, nên bạn nhận được 100 lần!

Vì vậy, bạn cần một chút nhiễu trên tín hiệu của mình, như một LSB của nhiễu, để đảm bảo nếu bạn đo 100.1 thì bạn sẽ nhận được 100 chín lần trong số mười và 101 một lần trong số mười. Vì vậy, nó sẽ trung bình đến 100,1, có được ý tưởng?

Nếu nó đến từ một cảm biến, thông thường bạn sẽ có đủ tiếng ồn miễn phí.


Điểm hay về tất cả các cách tôi đang mất cả độ chính xác và độ chính xác với phương pháp hiện tại của mình. Tôi có một tl431 (shunt điều chỉnh chính xác) nằm xung quanh và tôi sẽ thử nối nó lên.
Plumpie

Các bộ điều chỉnh điện áp tuyến tính có thời gian đáp ứng trong dải MHz và do đó khá ổn định trong dải tần số của ADC.
JimmyB

Sau đó, bạn có thể chỉ muốn đo điện áp liên quan đến cùng một Vcc (chiết áp, cảm biến loại chia điện áp).
JimmyB

Các LDO có phản hồi "Trong dải MHz" ???? Gửi người đàn ông datasheets, tôi muốn gặp một người! Nhiều khả năng arduino đi kèm với một crummy 1117 hoặc tương tự, có phản ứng nhất thời chậm chạp của chó ... Sử dụng nguồn cung cấp làm tham chiếu không có nghĩa là chính xác.
peufeu

4

Những gì bạn đang thiếu là ý nghĩa của "decimation."

Nói một cách chính xác, "số thập phân" giảm xuống còn 1/10. Đó là, từ 10 giảm xuống 1.

"Decimation" như được sử dụng trong lấy mẫu làm mất đi ý nghĩa nghiêm ngặt. Thay vì 1/10, nó có nghĩa là "giảm số lượng."

Điều này có nghĩa là, bạn trung bình một số lượng mẫu và giảm số lượng mẫu bằng cùng một số.

Ví dụ: nếu bạn lấy mẫu ở 1000Hz và trung bình 4 mẫu, bạn chỉ giữ mức trung bình. Cuối cùng, bạn chỉ có 250 mẫu mỗi giây thay vì 1000. Bạn đã mất độ phân giải thời gian, nhưng đã đạt được một chút độ phân giải điện áp.

Với mỗi yếu tố là 4, bạn đạt được 1 bit. Trung bình và giảm 4, và chuyển từ độ phân giải 10 bit sang độ phân giải 11 bit.

Một yếu tố khác của 4 (tổng cộng 4 * 4 = 16) giúp bạn từ 10 bit đến 12 bit. Một yếu tố khác của 4 giúp bạn đạt được 13 bit độ phân giải.

Nhưng, lưu ý rằng bạn hiện đang vượt quá hệ số 64. Tỷ lệ lấy mẫu hiệu quả của bạn giảm theo cùng một yếu tố. Sử dụng ví dụ về tốc độ lấy mẫu 1000Hz, bạn giảm xuống còn khoảng 15 mẫu hiệu quả mỗi giây.

Đây là số thập phân và có bao nhiêu ADC cao có độ phân giải cao. Họ lấy mẫu ở tốc độ cao, trung bình (hoặc sử dụng bộ lọc thông thấp kỹ thuật số) và decimate.

Cuối cùng, bạn có một ADC đơn (một bộ so sánh đơn giản) vượt quá vài lần millon để tạo ra độ sâu bit hiệu quả là 16 bit.

Một điều bạn cần lưu ý để làm việc này là bạn cần độ nhiễu trong tín hiệu của mình xấp xỉ bằng giá trị nhỏ nhất mà ADC của bạn có thể đo được. Đối với ADC 10 bit sử dụng điện áp tham chiếu 5V, đó sẽ là nhiễu khoảng 5mV đến cực đại.

Tính trung bình của nhiễu là nơi mà lợi ích bit thực sự đến từ. Hãy tưởng tượng rằng bạn có một tín hiệu (DC) nằm chính xác giữa giá trị của 512 số đếm ADC và 513 số ADC. Không có nhiễu, giá trị đo sẽ luôn giống nhau - tính trung bình sẽ cho bạn cùng giá trị với các mẫu.

Thêm tiếng ồn ở khoảng giá trị nhỏ nhất có thể đo được, và nó trông rất khác. Mặc dù bản thân tín hiệu không thay đổi, các giá trị đo sẽ "lắc lư" xung quanh giá trị thực của tín hiệu. Trung bình bây giờ khác với các mẫu và bạn càng sử dụng nhiều mẫu thì bạn càng gần với giá trị thực của tín hiệu


Tôi đã sử dụng kỹ thuật này với Arduino (sử dụng bộ xử lý Atmel với ADC 10 bit) để có độ phân giải tốt hơn cho một số phép đo tôi đang thực hiện.

Tôi đã nhận được nó lên đến 13 bit, nhưng thấy tôi cần nhiều hơn. Tôi có thể đã đi đến một yếu tố khác là 4, nhưng điều đó sẽ mất quá nhiều thời gian cho mỗi mẫu và chỉ nhận được thêm một chút nữa.

Các thí nghiệm với oversampling cho thấy những gì tôi đang làm có thể hoạt động (tôi có thể nhận ra kết quả ồn ào) mà không phải mất thời gian và tiền bạc để có được một ADC tốt hơn. Với bằng chứng về khái niệm, tôi có thể tiếp tục và có được ADC tốt hơn - và việc chứng minh đó chỉ khiến tôi mất một vài dòng mã và một ít thời gian.

Tôi thấy tôi cần ít nhất 16 bit. Điều đó có nghĩa là trung bình 4096 mẫu.
Đó là khoảng nửa giây bằng cách sử dụng lấy mẫu nhanh nhất có thể với phần mềm Arduino.

Vì tôi cần 14400 phép đo, nên toàn bộ quá trình sẽ mất 2 giờ.

Tôi không kiên nhẫn như vậy, và những điều tôi đang đo sẽ không thay đổi lâu như vậy. Tôi đã phải chuyển sang sử dụng một ADC sử dụng tỷ lệ quá khổ trong nội bộ cao hơn nhiều và điều đó mang lại các mẫu có độ phân giải cao hơn với tốc độ thấp hơn.

Cũng như rất nhiều thứ, decimation là sự thỏa hiệp có thể giúp bạn thực hiện tốt hơn theo một hướng (độ sâu bit) trong khi chi phí cho hiệu suất của bạn theo hướng khác (tốc độ lấy mẫu.)


3
Kể từ khi bạn dành thời gian để nitpick về những gì decimation phương tiện: Thực hiện đúng nghĩa của nó giảm bởi 1/10, giữ 9/10 các hạng mục.
đường ống

2

Vì vậy, bạn có thể nghiên cứu lý thuyết, nhưng tôi có thể nói với bạn rằng trong thực tế chỉ có một mô hình đơn giản. Bạn có thể trung bình, miễn là tín hiệu của bạn ở trong nhiễu. Sau đó, trung bình của thành phần nhiễu sẽ bị xóa, trong khi tín hiệu sẽ vẫn còn. Bằng cách này bạn sẽ có được độ phân giải trong chi phí băng thông.

Nếu bạn có ví dụ như một adc 16 bit và bốn bit cuối cùng của nó bị nhiễu, bạn có thể lọc chúng và nhận tín hiệu ở đó. Nhưng nếu bạn chỉ có một chút ồn ào, không có nhiều trung bình, vì vậy bạn sẽ không nhận được nhiều thông tin mới.

Nếu bạn cần độ phân giải thực sự cao (và băng thông thấp), hãy xem cách sigma-delta ADC hoạt động. Chúng có tín hiệu tốc độ cao 1 bit sau đó được lọc xuống một số băng thông với độ phân giải cao hơn, đôi khi 20 bit trở lên.


2

Tại sao bạn không thể? Bạn có thể , nhưng bạn phải xem xét tất cả các nguồn lỗi và tiếng ồn để đảm bảo kế hoạch của bạn hoạt động.

σ

ví dụ: Nếu bạn muốn cải thiện độ phân giải thêm 2 bit, nhưng nhiễu của bạn đã là 3 bit, bạn phải xem xét cách giảm nhiễu 2 + 3 = 5 bit trong khi tăng độ phân giải cùng lúc 2 bit.

  • Đây có thể là một giải pháp kỹ thuật số có trung bình> 25 mẫu với chi phí độ trễ hoặc giải pháp tương tự bằng cách lọc loại bỏ nhiễu, cân bằng tín hiệu để loại bỏ nhiễu chế độ chung và / hoặc che chắn tín hiệu tốt hơn cùng với trung bình kỹ thuật số.

Trong đó n là bit phụ của độ phân giải mong muốn, sau đó dịch chuyển sang phải một số nhị phân (hoặc số thập phân) x1 bằng / 2.

σx

σ1/10= =1/3,3 đối với các mẫu x nhưng cũng có độ trễ tăng theo mẫu thời gian x, do đó cần quá khổ để giảm độ trễ,

foverSmộtmptôiTôing= =4nfNyqbạnTôiSt

Tuy nhiên, tiếng ồn ở tốc độ mẫu đó,fS phải vừa đủ để hòa +/- 1 bit so với một số mẫu x, để có được sự cải thiện tốt nhất về độ phân giải.

  • Ví dụ: nếu BW là 10kHz thì fNyqbạnTôiSt= = 20kHz
  • và nếu bạn muốn chuyển đổi độ phân giải 10 bit thành 12 bit thì n = 2 Việc tăng độ phân giải từ 10 bit lên 12 bit yêu cầu tổng 16 giá trị 10 bit. Tổng cộng 16 giá trị 10 bit tạo ra kết quả 14 bit trong đó hai bit cuối cùng dự kiến ​​sẽ không chứa thông tin có giá trị.

Quá nhiều lỗi lượng tử hóa hoặc quá nhiều nhiễu ngẫu nhiên sẽ yêu cầu lấy trung bình nhiều hơn để giảm sai số và trung bình nhiều hơn làm tăng độ trễ của kết quả.

Để tối ưu hóa ADC cho tốc độ và lỗi, người ta phải xác định tổng ngân sách lỗi và độ phân giải có sẵn (bit), SNR mong muốn hoặc lỗi tuyệt đối cho bất kỳ tín hiệu đã cho nào trong toàn bộ phạm vi đo. Việc xác định tất cả các nguồn lỗi lúc đầu có vẻ khó khăn, nhưng cần thiết bao gồm;

ví dụ: lỗi khuếch đại, lỗi bù, lỗi lượng tử hóa, lỗi nhiễu CM, lỗi nhiễu DM, nhiễu Vref hoặc lỗi bù, nhiễu môi trường, v.v., lỗi độ trễ (tính trung bình)

Sau đó xác định thêm bao nhiêu bit độ phân giải bạn cần để đạt được ngân sách lỗi thiết kế ở trên sau khi tất cả các nguồn lỗi khác đã được giảm thiểu.

Điều tương tự cũng áp dụng cho việc lấy trung bình (đối với tín hiệu chậm) và quá mức băng thông tín hiệu và giảm tốc cho ADC thời gian thực.

Điều này sẽ không sửa lỗi khuếch đại hoặc bù và nếu không có đủ nhiễu ngẫu nhiên thì nhiễu phải được thêm vào để hòa âm tín hiệu. Lý tưởng nhất là tất cả các nguồn nhiễu và lỗi khác không vượt quá 1 bit sao cho độ lệch chuẩn hoặc hoà sắc chỉ là giá trị +/- 1 so với số lượng mẫu. Tuy nhiên, phải có đủ tiếng ồn để không đọc được cùng một mẫu bằng các mẫu liên tiếp trong cả hai phương pháp.


1

Lý thuyết đằng sau nó có thể được lấy, ở dạng ngắn, từ câu này trên bài viết Wikipedia về oversampling :

Tuy nhiên, SNR tăng theo sqrt (N) (...). Tóm tắt nhiễu không tương thích làm tăng biên độ của nó bằng sqrt (N), trong khi tổng cộng tín hiệu kết hợp tăng trung bình của nó bằng N. Kết quả là SNR (hoặc tín hiệu / nhiễu) tăng theo sqrt (N). Trong ví dụ, điều đó có nghĩa là trong khi với N = 256, có sự gia tăng phạm vi Động thêm 8 bit và nội dung của "tín hiệu kết hợp" tăng theo N, nhưng nhiễu thay đổi theo hệ số sqrt (N) = sqrt (256 ) = 16 trong ví dụ (không bị nhầm lẫn với mức tăng 16 bit), do đó SNR thay đổi theo hệ số 16.

Vì vậy, với điều kiện tín hiệu của bạn phù hợp với các tiêu chí nhất định (như đủ chậm và có độ nhiễu thấp), bạn thực sự tăng một bit cho mỗi 4 mẫu. Sau đó, cứ 4 mẫu kết quả, bạn có thể nhận được "tham gia" rồi lại tạo thành một mẫu khác có độ phân giải cao hơn, để cuối cùng bạn nhận được bit log_4 (n) cho mỗi n mẫu bạn đọc trên ADC của mình.

Về phần thập phân, nó không thực sự trung bình, đặc biệt nếu bạn xem xét rằng chúng ta đang nói về các số nguyên ở đây (mẫu ADC). Ví dụ: nếu bạn có mẫu1 , 1, 32, trung bình bạn sẽ là:

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

Vì bạn đang tính trung bình với toán số nguyên, "kết quả toán học" 1,75 của bạn sẽ làm tròn thành 1. Nếu sau đó bạn nhân với 2, bạn sẽ nhận được 2.

Bây giờ, nếu bạn hủy bỏ nó với:

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

Kết quả của bạn sẽ là 3 . Bạn có thể lập luận rằng điều này giống như chia cho 2, nhưng chắc chắn bạn không thể tranh luận rằng 3 là trung bình của 1, 1, 3 và 2 . Thấy sự khác biệt?

Bây giờ bạn có thể bị cám dỗ chỉ tổng hợp tất cả mọi thứ và không loại bỏ bit cuối cùng. Nhưng hãy nhớ rằng bit này là tiếng ồn: bạn thực sự không thể sử dụng nó.


Tôi cảm thấy nếu biên độ nhiễu tăng theo sqrt (N) và tín hiệu kết hợp tăng với N, thì SNR sẽ phải tăng với N / sqrt (N) chứ không phải sqrt (N)
Plumpie

@Plumpie Kiểm tra lại toán học của bạn : N/sqrt(N) = sqrt(N).
Ronan Paixão

1

Nghe có vẻ như mọi người đã bao phủ phần lý thuyết của câu hỏi của bạn, nhưng vì bạn đang sử dụng Arduino, bạn có thể muốn đọc qua các cuộc phiêu lưu của tôi khi cố gắng tăng độ phân giải của ADC bằng kỹ thuật này:

Cải thiện độ phân giải Arduino ADC với phối màu & oversampling

Đặc tính của tiếng ồn là một phần quan trọng của câu chuyện, và hóa ra bạn có thể tạo ra một sự hòa hợp hợp lý tốt bằng cách đơn giản đập một pin với một điện trở trên nó trong khi bạn đọc ADC không đồng bộ. Nó không hoàn hảo và bạn có được một phần bù đồng bộ nhỏ khác nhau tùy thuộc vào số lượng mẫu / bit bổ sung mà bạn đang cố gắng đạt được. Tôi cũng chấp nhận những lời chỉ trích rằng kỹ thuật này phụ thuộc vào sự ổn định đường ray kém trong Arduino, vì vậy nó thực sự được thiết kế cho một lỗ hổng, thay vì tuân theo thực tiễn tốt. Nhưng nó rất dễ làm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.