Nguồn tiếng nói và DSP cho lớp 1#
Cập nhật: 11/10/2026. Ghi chú này bổ sung căn cứ và các giới hạn cần nói rõ cho 01 — Nền tảng, 00 — Bắt đầu và 08 — Lộ trình, tự kiểm tra. Ba tài liệu đã nêu đúng các khái niệm chính; các khoảng trống đáng đóng là: giả định LTI/quasi-stationary của source–filter; ví dụ số aliasing/resampling; phân biệt DFT magnitude với STFT magnitude; tách win_length khỏi n_fft và quy ước căn/pad; cùng việc gọi tên từng kiểu normalization thay vì gộp chung.
Protocol của paper dùng làm ví dụ#
Các thông số dưới đây là facts parent cung cấp và parent đã đối chiếu với PDF paper; agent này không tự kiểm tra lại PDF và không tái chạy preprocessing: waveform vào 16 kHz, resample lên 32 kHz, clip 2,56 s; log-mel 128 dải, cửa sổ 25 ms, hop 10 ms, dải 20–8.000 Hz, pad/cắt còn 256 frame. Patch 8 frame × 32 mel tạo lưới 32 vị trí thời gian × 4 vị trí tần số = 128 token. Backbone là ViT-Base encoder pretrained trên AudioSet; downstream dùng cross-entropy cho genuine/spoof, không dùng predictor/target head của bước JEPA.
Tính đổi đơn vị: 2,56 × 16.000 = 40.960 mẫu trước resampling và 81.920 mẫu ở 32 kHz; cửa sổ 25 ms = 800 mẫu, hop 10 ms = 320 mẫu. Không suy ra n_fft, kiểu pad/căn frame, filterbank cụ thể hay việc chạy thành công chỉ từ shape cuối 256 × 128.
1. Tiếng nói và source–filter#
Jurafsky & Martin, Speech and Language Processing, bản nháp Aug 2025, Ch. 14 — giáo trình do tác giả biên soạn, đọc trực tiếp §14.4.6 Source-Filter Model, §14.5.3 DFT/windowing, §14.5.4 Mel Filter Bank and Log, §14.6 MFCC and Cepstrum; không chỉ đọc abstract. Hỗ trợ mô hình excitation qua bộ lọc đường thanh âm; chuỗi harmonic của giọng hữu thanh; formant là đỉnh cộng hưởng/envelope, khác với harmonic; mel/log và DCT/cepstrum. Ví dụ trong phần source–filter: F0 khoảng 115 Hz cho harmonic 115, 230, 345 Hz… Dùng được để giải thích trực giác “cùng excitation, đổi filter thì phổ/envelope đổi”. Caveat: đây là mô hình giáo khoa gần ổn định, không chứng minh MFCC tách sạch nguồn và bộ lọc trong audio thực; câu “12 hệ số MFCC cleanly separate” nên được trình bày như trực giác lý tưởng hóa. Bản site hiện hành đã chuyển chủ đề này sang Ch. 15; khi trích dẫn cần ghi đúng phiên bản/chương.
John Coleman, The Source-Filter Model of Speech Production — trang giảng dạy của nhà ngữ âm học, đọc mục 1–4. Hỗ trợ hai loại nguồn quan trọng: rung dây thanh và nhiễu turbulence/frication; chúng có thể đồng thời xuất hiện, như ở một số âm hữu thanh có ma sát. Trang giải thích formant là đỉnh đáp ứng cộng hưởng của đường thanh âm. Có thể dùng để bác bỏ cách hình dung mọi tiếng nói là một chuỗi xung thanh quản tuần hoàn được lọc bởi một bộ lọc cố định. Caveat: trang là exposition giáo dục, không phải nghiên cứu detector/deepfake. Bài tập hữu ích: so sánh nguyên âm hữu thanh với /s/; vẽ riêng nguồn tuần hoàn, nguồn nhiễu và envelope lọc, rồi hỏi mô hình xung tuần hoàn đơn giản bỏ sót gì.
Cách diễn đạt an toàn: x[n] ≈ e[n] * h[n] là xấp xỉ cho một đoạn ngắn có thể xem gần tuyến tính, bất biến theo thời gian; bộ máy phát âm thực biến thiên theo thời gian. Formant là vùng cộng hưởng, không phải bin STFT hay các harmonic cụ thể. Cues của ma sát, burst, aspiration và chuyển tiếp có thể không tuân theo hình ảnh “harmonic source + một filter tĩnh”.
2. Tín hiệu rời rạc, convolution và DFT#
Steven W. Smith, The Scientist and Engineer’s Guide to DSP — giáo trình tác giả mở miễn phí; đã mở/đọc các chương PDF: Ch. 6 Convolution, Ch. 7 Properties of Convolution, Ch. 8 Discrete Fourier Transform, Ch. 9 Applications of the DFT, Ch. 10 Compression and Expansion, Multirate Methods, Ch. 11 Fourier Transform Pairs, phần Delta Function Pairs, và Ch. 31 The Complex Fourier Transform. Các phần này hỗ trợ tích chập là đầu ra của hệ LTI với đáp ứng xung, phân biệt tích chập tuyến tính với tính chất tuần hoàn/circular của DFT, cùng biểu diễn phổ phức bằng biên độ và pha. Ch. 10 phân biệt interpolation với decimation và nêu rằng đổi mật độ mẫu không có một phép nội suy duy nhất nếu chưa giả định mô hình tín hiệu liên tục. Ví dụ đầy đủ: x=[1,2], h=[1,-1]; tích chập tuyến tính là [1, 1, -2] và có 2+2−1=3 mẫu. DFT không chuẩn hóa của [1,0,-1,0] là [0,2,0,2]; bin k ứng với k·fs/4. Ch. 11 nêu rõ dịch một impulse trong chuỗi không làm đổi magnitude nhưng thêm pha tuyến tính.
Lưu ý lệch số chương: URL CH29.PDF trong bản online hiện mở chương “Getting Started with DSPs” về kit phần cứng SHARC; bảng mục lục hiện hành đặt “The Complex Fourier Transform” ở Ch. 31. Một số trang/nội dung cũ lại gắn Complex DFT với Ch. 29. Vì vậy không dẫn “DSP Guide Ch. 29” nếu chưa nêu edition; dẫn theo tiêu đề chương và PDF đã đọc.
Julius O. Smith III, Spectral Audio Signal Processing — giáo trình DSP/audio của tác giả; đã đọc các mục Shift Theorem for the DTFT, Downsampling and Aliasing, Zero Padding in the Time Domain, Mathematical Definition of the STFT, Practical Computation of the STFT, Two Dual Interpretations of the STFT, và Spectrogram of Speech. Định lý dịch cho biết dịch phải l mẫu nhân phổ với e^{-jωl}: magnitude giữ nguyên, phase có slope tuyến tính. Ví dụ DFT length 8, circular shift 1 sample cho bin k=1 hệ số pha e^{-j2π/8}=e^{-jπ/4} mà magnitude giữ nguyên. Zero-padding tăng mật độ các điểm được vẽ/lấy mẫu trong phổ, không thêm thông tin hay độ phân giải vật lý mới. Downsampling cần lọc trước để tránh chồng phổ. Đây là cơ sở suy luận toán học, không phải bằng chứng rằng mọi phép crop/move thực tế giữ magnitude.
3. Sampling, aliasing và resampling#
Claude E. Shannon, “Communication in the Presence of Noise,” 1949 — bài lý thuyết gốc. Link IEEE là record thư mục, không phải toàn văn đã đọc; theorem ở §II được đọc trong bản mirror/reprint toàn văn do Paperzz host. §II phát biểu điều kiện tái tạo chính xác khi tín hiệu liên tục bị giới hạn băng tần và lấy mẫu đều; bài cũng dẫn các dạng kết quả có trước của Whittaker/Nyquist/Bennett. Ví dụ: nếu băng tín hiệu giới hạn ở W=4 kHz, khoảng cách mẫu tối đa lý tưởng là 1/(2W)=125 μs, tức 8 ksample/s; tái tạo chính xác trong điều kiện band-limit lý tưởng. Caveat: đây không phải recipe cho lọc anti-aliasing hữu hạn trong phần mềm, và không nên trình bày như Shannon đơn phương “phát minh” mọi dạng sampling theorem.
DSP Guide, Ch. 3 “ADC and DAC,” các mục Sampling Theorem, Analog Filters for Data Conversion, Selecting the Antialias Filter, Multirate Data Conversion — giáo trình thực hành khái niệm; đọc nội dung chương, gồm tách sampling khỏi quantization và thảo luận về lọc thực. Hỗ trợ giải thích aliasing, lọc trước khi giảm sample rate, và trade-off của anti-alias filter hữu hạn. Ví dụ số: sinusoide 12 kHz lấy mẫu tại 16 kHz xuất hiện như sinusoide 4 kHz (cùng dãy mẫu tới dấu/pha), vì tần số lấy mẫu là tuần hoàn; Nyquist mới là 8 kHz. Nếu giảm 16→8 kHz, phải lọc dưới Nyquist mới 4 kHz trước khi bỏ mẫu. Caveat: điều kiện định lý là band-limit lý tưởng; filter thực có vùng chuyển tiếp.
Torchaudio functional.resample, docs 2.11 — tài liệu implementation chính thức; đã đọc mô tả và các tham số lowpass_filter_width, rolloff, resampling_method. Thư viện mô tả resampling bằng bandlimited interpolation; mặc định dùng sinc nội suy cửa sổ Hann, kernel hữu hạn, rolloff=0.99; độ sắc và vùng roll-off thay đổi trade-off. Ví dụ: 2,56 s ở 16 kHz có 40.960 mẫu, còn cùng clip biểu diễn ở 32 kHz có 81.920 mẫu. Suy ra được rằng 16→32 kHz là nội suy trên lưới dày hơn cho cùng thời lượng; không suy ra thông tin >8 kHz đã bị loại khỏi tín hiệu 16 kHz sẽ tự xuất hiện lại. Cũng không nên kỳ vọng filter thực có cutoff lý tưởng sắc đúng tại 8 kHz.
4. STFT, magnitude, power và phase#
Julius O. Smith III, Spectral Audio Signal Processing — các mục STFT đã nêu ở mục 2; đọc công thức và cách tính theo các frame FFT của waveform đã nhân cửa sổ. Hỗ trợ hiểu STFT là phổ phức theo cả thời gian và tần số; spectrogram magnitude/power bỏ phase tại từng frame nhưng vẫn giữ trục thời gian của các frame. Có thể dùng để suy ra vì sao spectrogram magnitude vẫn biểu diễn vị trí sự kiện qua frame index; không được nói “magnitude xóa vị trí thời gian”. Caveat: một STFT magnitude vẫn có thể mất thông tin pha cục bộ quan trọng cho tái tạo waveform hoặc phân biệt forensic.
PyTorch torch.stft, docs 2.9 và librosa stft, docs 0.11 — docs implementation chính thức; đã đọc công thức, win_length, n_fft, center, padding và kiểu output. PyTorch trả biểu diễn phức khi return_complex=True; nếu win_length<n_fft, cửa sổ được pad để khớp FFT; center=True pad hai đầu để frame thứ t đặt tâm ở t·hop, mặc định PyTorch là reflect. Librosa 0.11 cũng phân biệt center với left alignment, nhưng mặc định padding constant/zero. Do đó “25 ms window” không đủ để biết interval FFT, frame count hay biên waveform đã dùng; phải ghi cả n_fft, win_length, hop, center, pad_mode, window và cách cắt/pad frame.
Ví dụ có điều kiện, không gán n_fft=800 cho paper nếu chưa xác nhận: ở 32 kHz, win=800, hop=320, độ dài L=81.920; với n_fft=win=800, center=False cho 1+floor((81.920−800)/320)=254 frame. center=True với độ dài chia hết hop cho 1+L/hop=257 frame trước khi crop. Cả hai có thể bị ép về 256 nhưng frame đầu/cuối và padding khác nhau. Nếu chọn n_fft=1024, khoảng cách điểm FFT là 32.000/1.024=31,25 Hz; đó là lưới tần số dày hơn, không làm cửa sổ quan sát dài hơn 25 ms về độ phân giải vật lý.
Patch 8 frame với hop 10 ms có stride-span danh nghĩa 8×10=80 ms. Nếu từng frame dùng cửa sổ 25 ms, waveform support hợp của 8 cửa sổ liền nhau là 25+(8−1)×10=95 ms (ở frame nội bộ, bỏ qua biên/pad). Sau self-attention, token còn có thể nhận thông tin từ các patch toàn clip.
Phản ví dụ cần giữ: với DFT của cùng một chuỗi được dịch vòng, magnitude có thể giữ nguyên trong khi pha đổi tuyến tính; nhưng nếu dịch một transient trong waveform hữu hạn rồi crop mất một phần ở biên, magnitude cũng có thể đổi. Với STFT magnitude, sự kiện vẫn có thể chuyển sang cột frame khác. Phải nói rõ phép dịch, độ dài/crop và biểu diễn đang xét.
5. Mel, cepstrum, normalization và tokenization#
Jurafsky & Martin, Ch. 14 §14.5.4 và §14.6 (nguồn ở mục 1) — đã đọc phần mel filterbank/log và MFCC/cepstrum. Hỗ trợ chuỗi: phổ công suất → tổng có trọng số qua filter mel → log → DCT/cepstral coefficients. Có thể nói mel gộp nhiều bin thành dải, log nén dynamic range, và các hệ số cepstral đầu thường tóm tắt envelope thô. Ví dụ hữu ích: nếu một filter có trọng số [0.5,0.5], hai frame power [2,0] và [0,2] đều cho năng lượng band bằng 1; vị trí năng lượng khác nhau trong band đã bị gộp. Không suy ra MFCC khôi phục filter phát âm hoặc “xóa sạch” excitation; khi giữ ít hệ số/DCT, chi tiết mảnh có thể bị bỏ.
Torchaudio MelSpectrogram, docs 2.11 và librosa melspectrogram, docs 0.11, librosa filters.mel — docs implementation; đã đọc power exponent, mel scale/norm, padding và defaults. Torchaudio mặc định power=2, HTK mel, không area-normalize filterbank, center=True, reflect padding. Librosa 0.11 mặc định cũng dùng power 2 và center=True, nhưng dùng zero padding; filter mặc định theo Slaney và area normalization. Bài tập hữu ích: giữ waveform/window/hop/mel count cố định, đổi HTK↔Slaney, area norm và pad mode; dự đoán rồi đoán band/time nào đổi nhiều nhất. Vì vậy cùng số band, fmin/fmax chưa đảm bảo hai mel tensor trùng nhau. Đây là khác biệt hành vi thư viện, không phải mâu thuẫn lý thuyết mel.
librosa power_to_db, docs 0.11 và librosa mfcc, docs 0.11 — đã đọc công thức dB, ref, amin, top_db, và DCT. Với power, dB là 10·log10(P/ref); tăng power 4 lần tạo 10·log10(4)=6,02 dB. Tăng magnitude 2 lần cũng tạo 20·log10(2)=6,02 dB khi đổi đúng sang power. ref, epsilon/floor và top_db có thể đổi mức tuyệt đối hoặc cắt phần nhỏ. MFCC trong librosa mặc định dùng DCT-II, orthonormal basis và log-power mel; đừng đồng nhất normalized của STFT, normalization filterbank, DCT norm, dB reference, waveform RMS/peak scaling, CMVN và LayerNorm.
Kaldi, “Feature and model-space transforms” — tài liệu kỹ thuật implementation; đã đọc mục “Cepstral mean and variance normalization” và mô tả per-utterance/per-speaker. CMVN có thể trừ mean/chia độ lệch chuẩn theo utterance hoặc speaker, nhưng không phải “bước làm sạch bắt buộc”; ngay tài liệu Kaldi nói họ không đặc biệt khuyến nghị dùng. Ví dụ hữu ích: [1,3] và [6,8] đều thành [-1,1] sau subtract-mean; cue là offset +5 đã bị xóa. Phép biến đổi có thể bỏ scale/mean của channel lẫn cue spoof hữu ích. Nếu triển khai, phải ghi trục/thống kê lấy từ đâu, dùng train-only hay từng mẫu, padding có tham gia thống kê không, và có rò thông tin test không.
Với grid của paper, 256/8=32 vị trí thời gian và 128/32=4 vị trí mel; tổng 32×4=128 patch token, không phải 128 frame thời gian. Thứ tự flatten và positional encoding theo cả hai trục là một phần của biểu diễn; chỉ báo tensor shape cuối chưa đủ xác nhận grid đúng.
Ba phản ví dụ quan trọng để dạy và tự kiểm#
- Upsampling không phục hồi bandwidth: một tone 12 kHz đã alias thành 4 kHz ở 16 kHz sẽ vẫn là chuỗi nội suy từ dữ liệu 4 kHz khi đổi lưới lên 32 kHz; số mẫu tăng gấp đôi, bằng chứng 8–16 kHz không quay lại.
- Magnitude không đồng nghĩa mất mọi vị trí: dịch vòng cả chuỗi DFT giữ magnitude và đổi phase; STFT magnitude vẫn có cột thời gian; crop một transient ở mép waveform lại có thể đổi cả magnitude. Kết luận phải nêu biến đổi nào và biên nào.
- Cùng 256 frame không đồng nghĩa cùng audio support: ví dụ trên cùng 2,56 s có 254 frame không-center nếu
n_fft=win=800, nhưng 257 frame với center-padding trước khi cắt. Pad/crop cho ra shape giống nhau nhưng vùng waveform được quan sát ở đầu/cuối khác nhau.
Các ví dụ là phép tính/đối chiếu tài liệu, không phải tái tạo hoặc xác nhận code preprocessing của paper.