Thu thập dữ liệu và lấy mẫu: bài tập có lời giải từng bước

Bài tập Thu thập dữ liệu và lấy mẫu miễn phí có hình vẽ, gợi ý và lời giải đầy đủ. Số liệu mới mỗi lần, ở ba mức độ: Nyquist, LSB và tốc độ dữ liệu, hiện tượng răng cưa, số bit và khung UART, sóng hài, SQNR và thiết kế hệ thống.

Bài tập miễn phíDễ
SD0​D1​D2​D3​D4​D5​D6​D7​Tb​ = ?115200 Bd

Một đường truyền UART chạy ở 115200 baud. Tìm thời gian Tb của một bit, theo µs.

baud = 115200 Bd
µs
Bài tiếp theo →

Bạn luyện tập những gì

  1. DễNyquist, LSB và tốc độ dữ liệu
  2. Trung bìnhhiện tượng răng cưa, số bit và khung UART
  3. Khósóng hài, SQNR và thiết kế hệ thống

Cách giải bài tập Thu thập dữ liệu và lấy mẫu

  1. Ghi ra những gì đã cho: tốc độ lấy mẫu, các tần số tín hiệu, số bit, dải đầu vào, tốc độ baud.
  2. Với các câu hỏi về lấy mẫu, so sánh từng tần số với fs/2; tần số cao hơn xuất hiện tại fa = |f − k·fs| với bội số gần nhất của fs.
  3. Với các câu hỏi về độ phân giải, tìm 1 LSB = VFSR/2ᴺ, hoặc N nhỏ nhất thỏa 2ᴺ ≥ khoảng/độ phân giải.
  4. Với tốc độ dữ liệu và đường truyền UART, đếm mọi thứ được gửi đi: số kênh, số mẫu mỗi giây, số bit hoặc số byte nguyên mỗi mẫu, và các bit khởi đầu, chẵn lẻ và dừng của mỗi khung.

Lỗi thường gặp

  • Nghĩ rằng tần số trên fs/2 biến mất: nó xuất hiện dưới dạng tần số răng cưa bên trong dải tần.
  • Chia dải đo cho N thay vì cho 2ᴺ.
  • Làm tròn xuống số bit thay vì làm tròn lên.
  • Quên các bit khởi đầu và dừng: 8N1 gửi 10 bit cho mỗi byte.

Công thức chính

Tiêu chuẩn Nyquist
fs > 2·fmax, fN = fs/2
Tần số răng cưa (alias)
fa = |f − k·fs|, k = round(f/fs)
Kích thước bước lượng tử
1 LSB = VFSR/2ᴺ
Sai số lượng tử hóa (làm tròn)
±½ LSB
Mã ADC cắt cụt
D = ⌊Vin/LSB⌋
Số bit cho độ phân giải r
2ᴺ ≥ span/r
SQNR lý tưởng, sóng sin toàn thang
SQNR = 6,02·N + 1,76 dB
Tốc độ dữ liệu
số kênh × fs × N bit/s
ADC ghép kênh
fs = 1/(n·(tc + tset))
UART
Tb = 1/baud; 8N1 = 10 bit cho mỗi byte; byte/s = baud/số bit mỗi khung
Bộ chia tốc độ baud
baud = fclk/(16·D)

Học Thu thập dữ liệu và lấy mẫu từ đầu

Trước bài này: Hệ đếm

1Thu thập dữ liệu là gì

Máy tính không thể đọc trực tiếp một điện áp. Một hệ thu thập dữ liệu biến một đại lượng vật lý thành các con số: cảm biến tạo ra một điện áp nhỏ, bộ khuếch đại làm thay đổi tỉ lệ của nó, và bộ chuyển đổi tương tự–số (ADC) đo nó tại những thời điểm đều đặn rồi xuất ra một số nhị phân.

TG∿01N, fs​0101

Hai lựa chọn quyết định các con số tốt đến đâu. Tốc độ lấy mẫu fs cho biết ADC đo bao lâu một lần, và số bit N cho biết nó chia dải điện áp của mình mịn đến đâu. Cùng nhau chúng còn quyết định lượng dữ liệu bạn phải lưu hoặc gửi.

Tự kiểm tra Một ADC lấy mẫu ở 2 kHz. Nó lấy bao nhiêu mẫu trong 0,5 s?
  1. 1000
  2. 2000
  3. 250
  4. 4000

Đáp số: 1000. Số mẫu = fs·t = 2000·0,5 = 1000. Nhân với 2 thay vì 0,5 cho 4000, và bỏ qua thời gian cho 2000.

2Lấy mẫu và hiện tượng răng cưa (aliasing)

Để thu một sóng sin bạn cần nhiều hơn hai mẫu mỗi chu kỳ. Vì vậy tốc độ lấy mẫu phải lớn hơn hai lần tần số cao nhất trong tín hiệu. Một nửa tốc độ lấy mẫu là tần số Nyquist:

fs > 2·fmax fN = fs/2

Một tần số trên fs/2 không biến mất. Các mẫu của nó giống hệt các mẫu của một tần số thấp hơn, tức là tần số răng cưa (alias). Trong hình, một sóng sin 7 Hz (nét liền) được lấy mẫu ở 10 Hz, và các chấm cũng khớp với sóng sin 3 Hz (nét đứt) như vậy.

tf = 7 Hzfs​ = 10 Hz
fa = |f − k·fs|, k = số nguyên gần f/fs nhất

Sau khi lấy mẫu, không gì có thể phân biệt tần số răng cưa với tín hiệu thật. Đó là lý do một bộ lọc chống răng cưa tương tự loại bỏ mọi thứ trên fs/2 trước ADC.

Tự kiểm tra Một âm 7 kHz được lấy mẫu ở 10 kHz mà không có bộ lọc. Nó xuất hiện ở tần số nào?
  1. 17 kHz
  2. 3 kHz
  3. 5 kHz
  4. 7 kHz

Đáp số: 3 kHz. 7 kHz lớn hơn fs/2 = 5 kHz, nên nó gập về: |7 − 1·10| = 3 kHz. Nó không thể ở lại 7 kHz, 17 kHz là cộng thay vì trừ, và 5 kHz chỉ là tần số gập.

3Độ phân giải và lượng tử hóa

Một ADC N bit có 2ᴺ mã đầu ra, từ 0 đến 2ᴺ − 1. Nó chia dải toàn thang VFSR thành 2ᴺ bước bằng nhau. Một bước gọi là 1 LSB (bit có nghĩa nhỏ nhất):

1 LSB = VFSR/2ᴺ

Một ADC cắt cụt xuất mã ⌊Vin/LSB⌋, tức số nguyên bên dưới. Một ADC làm tròn không bao giờ lệch quá ½ LSB so với giá trị thật: đó là sai số lượng tử hóa của nó.

Để phân biệt các bước có kích thước r trên một khoảng, bạn cần N nhỏ nhất thỏa 2ᴺ ≥ khoảng/r. Mỗi bit thêm vào làm LSB giảm một nửa và thêm khoảng 6 dB vào tỉ số tín hiệu trên nhiễu lượng tử hóa lý tưởng:

SQNR = 6,02·N + 1,76 dB
Tự kiểm tra Một ADC 10 bit có dải từ 0 đến 5,12 V. 1 LSB bằng bao nhiêu?
  1. 10 mV
  2. 2,5 mV
  3. 5 mV
  4. 512 mV

Đáp số: 5 mV. 210 = 1024, nên 1 LSB = 5,12/1024 = 0,005 V = 5 mV. Chia cho N = 10 cho 512 mV, dùng 2⁹ cho 10 mV, và 2,5 mV là sai số lớn nhất của ADC làm tròn, bằng nửa LSB.

4Tốc độ dữ liệu và đường truyền nối tiếp

Mỗi kênh cung cấp fs mẫu mỗi giây, mỗi mẫu N bit. Tốc độ dữ liệu thô là số kênh × fs × N. Trong bộ nhớ, một mẫu chiếm số byte nguyên, nên một mẫu 12 bit dùng 2 byte.

Một UART gửi mỗi byte thành một khung: một bit khởi đầu, 8 bit dữ liệu, một bit chẵn lẻ tùy chọn và một hoặc hai bit dừng. Trong định dạng 8N1 phổ biến, đó là 10 bit cho mỗi byte. Tốc độ baud đếm số bit mỗi giây, nên một bit kéo dài 1/baud.

byte mỗi giây = baud/(số bit mỗi khung)

Một bộ ghép kênh cho phép một ADC phục vụ lần lượt nhiều kênh. Nếu một lần chuyển đổi (kể cả thời gian ổn định) mất t, mỗi kênh trong n kênh được lấy mẫu ở 1/(n·t).

5Một ví dụ có lời giải

Dùng thứ tự này cho hầu hết các câu hỏi:

  1. Kiểm tra tốc độ lấy mẫu so với tần số tín hiệu cao nhất.
  2. Tìm kích thước bước từ dải đo và số bit.
  3. Đếm dữ liệu: số kênh, số mẫu mỗi giây, số byte mỗi mẫu.
  4. So sánh với những gì đường truyền hoặc bộ nhớ chịu được, có tính các bit khởi đầu, chẵn lẻ và dừng.
Ví dụ có lời giải

Một bộ ghi đo 4 kênh nhiệt độ bằng ADC 12 bit trên dải 0 đến 4,096 V. Các tín hiệu chứa tần số đến 20 Hz, và mỗi kênh được lấy mẫu ở 100 Hz. Mỗi mẫu được gửi dưới dạng 2 byte qua UART ở 9600 baud, 8N1. Tốc độ lấy mẫu có đủ cao không, 1 LSB bằng bao nhiêu, và đường truyền có theo kịp không?

1

Kiểm tra Nyquist

2·fmax = 2·20 = 40 Hz < 100 Hz

Tốc độ lấy mẫu đủ cao.

2

Kích thước bước lượng tử

1 LSB = 4,096/212 = 4,096/4096 = 0,001 V = 1 mV
3

Dữ liệu cần gửi

4 kênh · 100 mẫu/s · 2 byte = 800 byte/s
4

Dung lượng của đường truyền

8N1 gửi 10 bit cho mỗi byte.

9600/10 = 960 bytes/s ≥ 800 bytes/s
5

Kiểm tra đáp án

Trên đường truyền, đó là 800·10 = 8000 bit/s, thấp hơn 9600 baud. Đường truyền bận 83 %.

Đáp số

Có: 100 Hz lớn hơn hai lần 20 Hz, 1 LSB = 1 mV, và đường truyền cần 800 trong số 960 byte/s của nó.

6Lỗi thường gặp

  • Nghĩ rằng tần số trên fs/2 đơn giản là mất đi: nó xuất hiện dưới dạng tần số răng cưa bên trong dải tần.
  • Chia dải đo cho N thay vì 2ᴺ.
  • Làm tròn xuống số bit: 2ᴺ phải ít nhất bằng khoảng/độ phân giải.
  • Đếm 8 bit cho mỗi byte trên UART: 8N1 cần 10.
  • Quên rằng một mẫu 10 bit hoặc 12 bit được lưu trong 2 byte nguyên.
Tự kiểm tra Một UART 9600 baud gửi được bao nhiêu byte mỗi giây ở định dạng 8N1?
  1. 1067
  2. 1200
  3. 9600
  4. 960

Đáp số: 960. Mỗi byte cần 10 bit (khởi đầu, 8 dữ liệu, dừng): 9600/10 = 960. Chia cho 8 là quên các bit khởi đầu và dừng, và chia cho 9 là quên một trong hai.

7Các câu hỏi thi trông như thế nào

  • Dễ: Nyquist, LSB và tốc độ dữ liệu. Bạn tìm tốc độ lấy mẫu tối thiểu, tần số Nyquist, kích thước LSB hoặc sai số lượng tử hóa, thời gian một bit của UART hoặc tốc độ dữ liệu thô.
  • Trung bình: hiện tượng răng cưa, số bit và khung UART. Bạn tìm tần số răng cưa, số bit cho một độ phân giải, mã đầu ra cho một điện áp, bộ nhớ cho một bản ghi, tốc độ byte của một định dạng UART hoặc SQNR lý tưởng.
  • Khó: sóng hài, SQNR và thiết kế hệ thống. Bạn tìm nơi một sóng hài bị răng cưa, số bit cho một SQNR yêu cầu, tần số cao nhất mà ADC truyền qua UART có thể thu, tốc độ của ADC ghép kênh, sai số tốc độ baud của một bộ chia, hoặc độ phân giải nhiệt độ của một chuỗi cảm biến.

Học từng bước một trong ứng dụngHọc từng bước một trong ứng dụng

Ví dụ có lời giải

Ví dụ 1Dễ
SD0​D1​D2​D3​D4​D5​D6​D7​Tb​ = ?2400 Bd

Một đường truyền UART chạy ở 2400 baud. Tìm thời gian Tb của một bit, theo µs.

baud = 2400 Bd

Tìm Tb (µs)

Hiện các gợi ý
  1. Tốc độ baud là số bit được gửi mỗi giây.
  2. Tb = 1/baud.
  3. 1 s = 10⁶ µs.
Hiện đáp án và lời giải từng bước

UART: một đường truyền nối tiếp không đồng bộ gửi mỗi byte thành một khung: một bit khởi đầu (mức thấp), các bit dữ liệu, một bit chẵn lẻ tùy chọn và một hoặc hai bit dừng (mức cao). Tốc độ baud là số bit mỗi giây, nên một bit kéo dài Tb = 1/baud và một khung n bit kéo dài n/baud. Định dạng 8N1 phổ biến có 10 bit cho mỗi byte. Bộ tạo baud chia tần số xung nhịp: baud = fclk/(16·D) với D là số nguyên, nên tốc độ baud thực khác mục tiêu đôi chút; sai số dưới khoảng 2 % thường chấp nhận được.

Thời gian một bit

Tb = 1/2400 s = 416,7 µs

Đáp số

Tb = 416,7 µs
Ví dụ 2Trung bình
Vin​N = 85 V2ᴺ − 101 LSB2,125 V?

Một ADC 8 bit có dải đầu vào từ 0 đến 5 V cắt cụt: mã đầu ra của nó là ⌊Vin/LSB⌋ với 1 LSB = VFSR/2ᴺ. Tìm mã đầu ra thập phân D cho đầu vào 2,125 V.

N = 8VFSR = 5 VVin = 2,125 V

Tìm D

Hiện các gợi ý
  1. Trước hết tìm kích thước của một LSB.
  2. 1 LSB = 5/256 = 19,53 mV.
  3. Chia đầu vào cho LSB và giữ phần nguyên.
Hiện đáp án và lời giải từng bước

Độ phân giải ADC: một bộ chuyển đổi N bit chia dải toàn thang VFSR thành 2ᴺ mã, từ 0 đến 2ᴺ − 1. Một bước là 1 LSB = VFSR/2ᴺ: thay đổi nhỏ nhất mà bộ chuyển đổi có thể hiển thị. ADC cắt cụt cho mã ⌊Vin/LSB⌋; ADC làm tròn không bao giờ lệch quá ½ LSB so với giá trị thật, đó là sai số lượng tử hóa của nó. Mỗi bit thêm vào làm LSB giảm một nửa và thêm khoảng 6 dB vào tỉ số tín hiệu trên nhiễu lượng tử hóa lý tưởng SQNR = 6,02·N + 1,76 dB cho sóng sin toàn thang. Để đạt độ phân giải r trên một khoảng, chọn N nhỏ nhất thỏa 2ᴺ ≥ khoảng/r.

Kích thước bước lượng tử

1 LSB = 5/28 = 19,53 mV

Mã

Vin/LSB = 2125/19,53 = 108,8
mã = ⌊108,8⌋ = 108

Đáp số

D = 108

Ở dạng nhị phân đó là 01101100.

Ví dụ 3Khó
f0fs​/2fs​1,92 kHz7f₁?

Một sóng vuông 1,92 kHz được lấy mẫu ở 8 kHz mà không có bộ lọc chống răng cưa. Sóng vuông chứa các sóng hài lẻ 3f₁, 5f₁, 7f₁, … Sóng hài 7f₁ của nó xuất hiện ở tần số fa nào trong dữ liệu lấy mẫu? Cho kết quả theo Hz.

f₁ = 1,92 kHzfs = 8 kHzsóng hài: 7f₁

Tìm fa (Hz)

Hiện các gợi ý
  1. Sóng hài ở 7·1,92 kHz = 13,44 kHz, trên fs/2 = 4 kHz.
  2. Nó xuất hiện tại fa = |f − k·fs| với bội số gần nhất của fs.
  3. 13440/8000 = 1,68.
Hiện đáp án và lời giải từng bước

Lấy mẫu: một ADC đo tín hiệu fs lần mỗi giây. Theo định lý Nyquist–Shannon, một tần số f chỉ được thu đúng khi f < fs/2, tức tần số Nyquist (tần số gập), nên tốc độ lấy mẫu phải vượt quá hai lần tần số tín hiệu cao nhất. Một tần số cao hơn không bị mất: nó xuất hiện dưới dạng tần số răng cưa tại fa = |f − k·fs|, với số nguyên k đưa kết quả vào khoảng từ 0 đến fs/2. Các mẫu không thể phân biệt hai tần số đó, nên một bộ lọc chống răng cưa tương tự phải loại bỏ mọi thứ trên fs/2 trước ADC.

Tần số sóng hài

7f₁ = 7·1,92 kHz = 13,44 kHz

Bội số gần nhất của tốc độ lấy mẫu

m = round(1,68) = 2

Tần số răng cưa (alias)

fa = |13440 − 2·8000| = 2560 Hz

Đáp số

fa = 2560 Hz

Tần số răng cưa rơi vào trong dải tín hiệu, nơi không bộ lọc số nào loại bỏ được nó. Chỉ có bộ lọc tương tự trước ADC mới giúp được.

Câu hỏi thường gặp

Thu thập dữ liệu và lấy mẫu là gì?

Máy tính không thể đọc trực tiếp một điện áp. Một hệ thu thập dữ liệu biến một đại lượng vật lý thành các con số: cảm biến tạo ra một điện áp nhỏ, bộ khuếch đại làm thay đổi tỉ lệ của nó, và bộ chuyển đổi tương tự–số (ADC) đo nó tại những thời điểm đều đặn rồi xuất ra một số nhị phân.

Hai lựa chọn quyết định các con số tốt đến đâu. Tốc độ lấy mẫu fs cho biết ADC đo bao lâu một lần, và số bit N cho biết nó chia dải điện áp của mình mịn đến đâu. Cùng nhau chúng còn quyết định lượng dữ liệu bạn phải lưu hoặc gửi.

Làm thế nào để giải bài tập Thu thập dữ liệu và lấy mẫu từng bước?
  1. Ghi ra những gì đã cho: tốc độ lấy mẫu, các tần số tín hiệu, số bit, dải đầu vào, tốc độ baud.
  2. Với các câu hỏi về lấy mẫu, so sánh từng tần số với fs/2; tần số cao hơn xuất hiện tại fa = |f − k·fs| với bội số gần nhất của fs.
  3. Với các câu hỏi về độ phân giải, tìm 1 LSB = VFSR/2ᴺ, hoặc N nhỏ nhất thỏa 2ᴺ ≥ khoảng/độ phân giải.
  4. Với tốc độ dữ liệu và đường truyền UART, đếm mọi thứ được gửi đi: số kênh, số mẫu mỗi giây, số bit hoặc số byte nguyên mỗi mẫu, và các bit khởi đầu, chẵn lẻ và dừng của mỗi khung.
Những lỗi thường gặp trong Thu thập dữ liệu và lấy mẫu là gì?
  • Nghĩ rằng tần số trên fs/2 biến mất: nó xuất hiện dưới dạng tần số răng cưa bên trong dải tần.
  • Chia dải đo cho N thay vì cho 2ᴺ.
  • Làm tròn xuống số bit thay vì làm tròn lên.
  • Quên các bit khởi đầu và dừng: 8N1 gửi 10 bit cho mỗi byte.
Các bài tập Thu thập dữ liệu và lấy mẫu bao gồm những gì?
  • Dễ: Nyquist, LSB và tốc độ dữ liệu
  • Trung bình: hiện tượng răng cưa, số bit và khung UART
  • Khó: sóng hài, SQNR và thiết kế hệ thống

Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án. Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.

Cách luyện tập hoạt động

  • Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án.
  • Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.
  • Tiến độ, lỗi sai và các bài đã lưu của bạn được giữ lại, để bạn xem lại trước kỳ thi.

Các chủ đề trước và sau chủ đề này

Học trước

Các môn học có chủ đề này

Thêm chủ đề trong Điện

Phiếu bài tập in được