Kiến thức âm thanh cơ bản

Resampling 44,1 lên 48 kHz: SRC là gì, tỉ lệ 160:147 hoạt động ra sao

Cimo 9 phút đọc

SRC chuyển âm thanh 44,1 kHz sang 48 kHz theo tỉ lệ hữu tỉ 160:147 để hai miền clock khớp nhau mà không đổi cao độ. Bài viết giải thích nội suy, lọc chống alias, khác biệt ASRC và hỗ trợ thực tế trên ESP32 qua ESP-ADF.

Resampling 44,1 lên 48 kHz: SRC là gì, tỉ lệ 160:147 hoạt động ra sao
Mục lục
  1. Vì sao cần chuyển 44,1 kHz sang 48 kHz?
  2. Tỉ lệ 160:147 đến từ đâu?
  3. Ví dụ 1: Không SRC, phát file 44,1 kHz trên hệ cố định 48 kHz lệch bao nhiêu?
  4. Ví dụ 2: Đếm số mẫu trước và sau SRC
  5. Bên trong SRC: nội suy, lọc chống alias và decimation
  6. SRC có làm âm thanh hay hơn không?
  7. SRC đồng bộ và SRC bất đồng bộ (ASRC) khác nhau thế nào?
  8. SRC trên ESP32: ESP-IDF, ESP-ADF và ESP-DSP hỗ trợ gì?
  9. Khi nào nên SRC, khi nào chỉ cần đổi clock đầu ra?
  10. Câu hỏi thường gặp
  11. Resampling 44,1 kHz lên 48 kHz có làm mất chất lượng không?
  12. Vì sao tỉ lệ lại là 160:147 mà không phải một số tròn?
  13. Bluetooth đã ở 48 kHz thì có cần SRC nữa không?
  14. ASRC có tốt hơn SRC đồng bộ không?

Resampling là quá trình tính lại chuỗi mẫu âm thanh từ một sample rate (tần số lấy mẫu, số mẫu trong một giây) sang sample rate khác. SRC (Sample Rate Conversion, chuyển đổi tần số lấy mẫu) từ 44,1 kHz lên 48 kHz gặp rất nhiều trong loa DIY: file nhạc phần lớn ở 44,1 kHz, trong khi nhiều đường Bluetooth, USB và đầu ra cố định lại chạy 48 kHz. SRC giữ nguyên thời lượng và cao độ, chỉ thay số mẫu dùng để biểu diễn bản nhạc. Không có SRC, hai phía lệch rate sẽ cho tiếng nhanh, cao giọng hoặc giật định kỳ.

Tay đang chỉnh nguyên mẫu loa DIY dùng bo ESP32 và module DAC I2S trên bàn làm việc

Vì sao cần chuyển 44,1 kHz sang 48 kHz?

44,1 kHz bắt nguồn từ âm thanh CD, nên phần lớn nhạc rip từ CD và nhiều file MP3, FLAC dùng rate này. 48 kHz là chuẩn của video, ghi âm và nhiều thiết bị số. Hệ thống chứa cả hai họ gần như chắc chắn có khâu phải làm việc ở rate khác rate gốc.

Vấn đề cốt lõi là miền clock (clock domain, nhóm mạch chạy theo cùng một xung nhịp chủ). Nguồn phát, đường Bluetooth hoặc USB và đầu ra I2S (Inter-IC Sound, giao thức truyền âm thanh số giữa các IC) có thể thuộc các miền clock độc lập. Nếu đầu ra bị cố định ở 48 kHz, mọi nội dung 44,1 kHz phải được chuyển về 48 kHz trước khi phát. Nếu đầu ra đổi clock linh hoạt theo từng file thì có thể không cần SRC. Bức tranh tổng thể nằm ở bài trụ cột ESP32 xử lý âm thanh số: kiến trúc và giới hạn, còn hậu quả lệch rate và hiện tượng trượt clock đã được phân tích ở bài xử lý âm thanh 44,1 kHz và 48 kHz trên ESP32.

  • Đầu ra cố định 48 kHz nhưng thư viện nhạc chủ yếu là 44,1 kHz.
  • Cần trộn hai nguồn khác rate vào cùng một đường ra, ví dụ nhạc nền và tiếng thông báo.
  • Nguồn ngoài như Bluetooth áp đặt rate của luồng vào, trong khi các khâu sau đã chốt một rate chung.

Tỉ lệ 160:147 đến từ đâu?

Giả định: chỉ đổi sample rate, giữ nguyên thời lượng, cao độ và số kênh. Tỉ lệ bằng rate đích chia rate nguồn: 48.000 / 44.100. Rút gọn tử và mẫu cho 300 được 160 / 147. Nghĩa là cứ 147 mẫu đầu vào, SRC phải tạo ra 160 mẫu đầu ra. Đây là tỉ lệ hữu tỉ, không phải phép nhân số nguyên, nên không thể xử lý bằng cách lặp hay bỏ mẫu máy móc mà vẫn giữ chất lượng.

Ví dụ 1: Không SRC, phát file 44,1 kHz trên hệ cố định 48 kHz lệch bao nhiêu?

Ví dụ: file ghi ở 44,1 kHz bị đẩy ra nguyên vẹn bằng clock 48 kHz, không qua chuyển đổi. Hệ số tốc độ là 48.000 / 44.100, khoảng 1,0884. Âm thanh nhanh và cao hơn khoảng 8,84%, tính bằng (48.000 trừ 44.100) chia 44.100 nhân 100, tương đương khoảng 1,47 semitone (nửa cung), đủ để giọng hát nghe the thé rõ rệt. Bản nhạc 180 giây sẽ phát hết trong 180 nhân 44.100 chia 48.000, bằng 165,375 giây. Đây là kết quả tính toán lý thuyết với giả định mẫu giữ nguyên và không resample, không phải kết quả đo. Nếu nhạc nhanh và cao đều từ đầu đến cuối, hãy nghi ngờ dạng lệch này trước tiên.

Ví dụ 2: Đếm số mẫu trước và sau SRC

Ví dụ: một giây âm thanh ở 44,1 kHz có 44.100 mẫu mỗi kênh. Sau SRC lên 48 kHz, cùng một giây đó cần 48.000 mẫu mỗi kênh, tức thêm 3.900 mẫu được tính ra chứ không có sẵn trong file. Theo khối nhỏ: 1.470 mẫu đầu vào, tức 10 lần 147, sẽ thành 1.600 mẫu đầu ra, tức 10 lần 160. Firmware cấp dữ liệu theo khối phải tính kích thước buffer đầu ra theo đúng tỉ lệ này; cấp theo cảm tính 1 đổi 1 sẽ quay lại lỗi lệch tốc độ.

Bên trong SRC: nội suy, lọc chống alias và decimation

SRC hữu tỉ 160:147 thường được mô hình hóa qua ba bước. Bước một là nội suy (interpolation, ước tính giá trị mẫu tại thời điểm mới nằm giữa các mẫu gốc), tương đương nâng rate lên mức trung gian cao. Bước hai là lọc thông thấp chống alias. Alias (hiện tượng chồng phổ) là thành phần tần số giả xuất hiện khi tín hiệu chứa tần số cao hơn mức sample rate mới biểu diễn được, bị gập xuống thành tần số sai trong dải nghe. Bộ lọc cắt phần phổ vượt giới hạn trước khi giảm rate. Bước ba là decimation (giảm lấy mẫu, lấy lại mẫu theo bước đều ở rate đích sau khi đã lọc).

Thực tế, thuật toán lọc đa pha (polyphase) chỉ tính đúng những mẫu đầu ra cần thiết, dùng chung ngân hàng hệ số cho cả ba bước, thay vì tạo luồng trung gian khổng lồ. Đánh đổi cần nhớ: lọc càng tốt, alias càng thấp thì càng tốn CPU và bộ nhớ; lọc càng nhẹ càng dễ sinh méo. Mức tốn CPU phụ thuộc thư viện, độ dài lọc và số kênh, nên bài này không đưa con số khi chưa đo trên cấu hình của bạn.

SRC có làm âm thanh hay hơn không?

Không. Nội dung 44,1 kHz chỉ chứa phổ tới giới hạn Nyquist bằng một nửa sample rate, tức 22,05 kHz. Sau khi chuyển lên 48 kHz, giới hạn trên giấy là 24 kHz nhưng khoảng 22,05 tới 24 kHz vẫn trống, vì SRC không tạo thông tin gốc không có. Nó chỉ dịch giữa hai miền clock cho khớp nhau. SRC kém vẫn làm tiếng tệ đi nếu lọc chống alias yếu, nội suy thô hoặc tràn số gây nứt tiếng. Khi đầu ra đổi clock được theo file, cấu hình đúng rate thường sạch và nhẹ hơn SRC.

SRC đồng bộ và SRC bất đồng bộ (ASRC) khác nhau thế nào?

SRC đồng bộ áp dụng khi rate vào và ra suy ra từ cùng clock chủ hoặc có quan hệ hữu tỉ cố định như 160:147, tỉ lệ không đổi theo thời gian. ASRC (Asynchronous Sample Rate Conversion, chuyển đổi tần số lấy mẫu bất đồng bộ) áp dụng khi hai phía dùng hai clock độc lập thực sự, tỉ lệ thực trôi rất chậm quanh giá trị danh định vì mỗi clock có sai số riêng tính bằng ppm (phần triệu). ASRC phải liên tục ước lượng tỉ lệ thực và bù độ trôi để buffer không đầy dần hay cạn dần.

Tiêu chíSRC đồng bộASRC bất đồng bộ
Quan hệ clockKhóa chung hoặc tỉ lệ cố địnhHai clock độc lập, tỉ lệ trôi theo thời gian
Tỉ lệ ví dụĐúng 160:147 cho 44,1 lên 48 kHzQuanh 160:147, lệch thêm vài ppm
Xử lý driftKhông cầnBắt buộc ước lượng và bù liên tục
Ứng dụng điển hìnhFile và đầu ra trong cùng thiết bịHai thiết bị có clock riêng nối nhau

Nếu đứt quãng chỉ xuất hiện sau vài chục giây rồi lặp đều, đó là dấu hiệu trôi clock cần ASRC hoặc khóa chung clock, không phải lỗi của phép chuyển đổi cố định. Cách khoanh vùng các triệu chứng như vậy nằm trong bài tổng hợp lỗi I2S trên ESP32 và cách sửa.

SRC trên ESP32: ESP-IDF, ESP-ADF và ESP-DSP hỗ trợ gì?

Ngoại vi I2S của ESP32 tự nó không resample dữ liệu PCM (Pulse Code Modulation, dữ liệu âm thanh số chưa nén): nó chỉ đẩy mẫu ra theo sample rate đã cấu hình. Muốn đổi rate, hoặc cấu hình lại I2S theo rate mới, hoặc đặt một khâu phần mềm SRC đứng trước I2S. Đây là điểm nhiều dự án nhầm, khi kỳ vọng đổi một tham số clock sẽ tự chuyển đổi luôn nội dung.

Trong ESP-ADF (Espressif Audio Development Framework, khung phát triển âm thanh của Espressif), tài liệu chính thức mô tả phần tử Resample Filter, header filter_resample.h, với rsp_filter_init và rsp_filter_set_src_info. Cấu hình gồm rate nguồn, rate đích, số kênh, độ rộng bit nguồn và đích, chế độ decode hoặc encode, kiểu tự động, upsampling hoặc downsampling, và complexity từ 1 tới 5 khi dùng lọc FIR (Finite Impulse Response, lọc đáp ứng xung hữu hạn), mức cao hơn chính xác hơn nhưng chậm hơn. Theo tài liệu ESP-ADF, bit đích hiện hỗ trợ 16 bit, bit nguồn hỗ trợ 8, 16, 24 và 32 bit, và phần tử này đổi được số kênh giữa mono và stereo. Cần đối chiếu với đúng phiên bản ESP-ADF đang dùng.

Với ESP-DSP, thư viện cung cấp các khối lọc FIR làm nền để xây bộ chuyển đổi, nhưng API resampler chuyên dụng thay đổi theo phiên bản. Bài này không khẳng định chi tiết API đó khi chưa đối chiếu tài liệu của đúng phiên bản bạn cài. Minh họa sau là minh họa, chưa biên dịch, chưa chạy board thật: pipeline ESP-ADF phát file 44,1 kHz ra đầu ra cố định 48 kHz đặt rate nguồn 44100, rate đích 48000, số kênh đều 2, I2S stream cố định ở 48000 Hz, buffer suy ra từ tỉ lệ 160:147.

Khi nào nên SRC, khi nào chỉ cần đổi clock đầu ra?

  • Chỉ phát từng file, đầu ra đổi clock được: cấu hình lại I2S đúng rate của file, không tốn CPU cho SRC và không đổi dữ liệu gốc.
  • Nhiều nguồn khác rate, cần trộn hoặc chuyển nguồn mượt: đưa mọi nguồn về một rate chung bằng SRC, giữ đầu ra cố định.
  • Hai thiết bị có clock độc lập: cần ASRC hoặc khóa clock và bù drift, SRC đồng bộ cố định là chưa đủ.
  • Hệ thống đã sát giới hạn CPU: cân nhắc đổi clock thay vì SRC, hoặc giảm complexity của bộ lọc rồi kiểm tra bằng bài nhạc dài.

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

Resampling 44,1 kHz lên 48 kHz có làm mất chất lượng không?

Bộ SRC đúng thiết kế giữ thời lượng, cao độ và phổ gốc tới mức khó phân biệt khi nghe thông thường. Mất chất lượng chỉ rõ khi lọc chống alias yếu, nội suy thô hoặc xử lý tràn số. SRC không tự làm hay hơn, nó chỉ tránh lỗi lệch rate.

Vì sao tỉ lệ lại là 160:147 mà không phải một số tròn?

Vì 48.000 chia 44.100 rút gọn cho 300 được 160 chia 147. Hai chuẩn ra đời từ các hệ thống khác nhau nên tỉ lệ vốn không tròn. Thuật toán SRC hữu tỉ được thiết kế để xử lý đúng phân số này.

Bluetooth đã ở 48 kHz thì có cần SRC nữa không?

Nếu toàn bộ chuỗi từ Bluetooth tới I2S và DAC đều thống nhất ở 48 kHz thì không cần. SRC chỉ cần khi có một khâu ở rate khác, ví dụ trộn thêm nguồn 44,1 kHz hoặc đầu ra chốt rate khác luồng Bluetooth.

ASRC có tốt hơn SRC đồng bộ không?

Không tốt hơn tuyệt đối, chúng giải quyết hai bài toán khác nhau. ASRC cần khi hai clock độc lập và tỉ lệ trôi theo thời gian. Khi tỉ lệ cố định và khóa chung, SRC đồng bộ đơn giản và dễ dự đoán hơn.

Hiểu đúng SRC giúp bạn quyết định nên đổi clock hay thêm khâu chuyển đổi, thay vì bật resample theo thói quen. Khi cần chọn bo ESP32, module DAC I2S hoặc linh kiện cho hệ thống nhiều nguồn, bạn có thể tham khảo thêm tại cimo.vn và đối chiếu thông số với tài liệu nhà sản xuất trước khi lắp.

#resampling 44.1 kHz lên 48 kHz SRC
Chia sẻ bài viết
Facebook
Cimo
Cimo
Cimo - Mọi thứ bạn cần với mức giá tốt nhất

Bài viết liên quan

Tất cả danh mục
Flash Sale
Ưu đãi hôm nay
Đấu giá