# Bài 3: sampling, aliasing và resampling

[Bắt đầu](00-BAT-DAU-LOP-01.md) · Trước: [Fourier](02-TIN-HIEU-CONVOLUTION-FOURIER.md) · Tiếp: [STFT](04-STFT-MAGNITUDE-POWER-PHASE.md)

## Mục tiêu và tiền đề

Bạn sẽ tự chỉ ra một cặp tần số cho cùng mẫu, giải thích tại sao cần lọc trước downsampling, và phân biệt nâng sample rate với thêm thông tin. Dùng sin/cos từ bài 2; chưa cần học transform liên tục. **fs** là mẫu/giây, **f** là chu kỳ/giây, f/fs là chu kỳ/mẫu, ω=2πf/fs là radian/mẫu. L là số mẫu; duration quy ước của clip là L/fs, trong khi khoảng từ tâm mẫu đầu tới cuối là (L−1)/fs.

## 1. Lấy mẫu là nhìn ở những thời điểm cố định

Tín hiệu liên tục x_c(t) tạo dãy x[n]=x_c(n/fs). Với x_c(t)=cos(2πft), ta có:

$$x[n]=\cos(2\pi(f/f_s)n).$$

Nếu thay f bằng f+r fs, r nguyên, mỗi mẫu tăng góc 2πrn nên không đổi. Với cosine, đổi dấu tần số cũng không đổi. Vì vậy từ dãy mẫu đơn lẻ, một số tần số vật lý khác nhau có thể không phân biệt được. Đó là **aliasing**, không phải việc đồ thị nhìn chưa đủ mượt. [S6: Smith, chương 3, The Sampling Theorem, trang sách 39–44](https://www.dspguide.com/CH3.PDF).

**Ví dụ số hoàn chỉnh, tín hiệu giả lập:** lấy mẫu fs=16 kHz. Sóng 10 kHz có f/fs=0.625; sóng 6 kHz có tỷ số 0.375. Do cos(2π×0.625n)=cos(2πn−2π×0.375n)=cos(2π×0.375n), chúng có cùng mẫu:

| n | t (ms) | Cả hai cosine |
|---|---:|---:|
| 0 | 0 | 1 |
| 1 | 0.0625 | −0.707107 |
| 2 | 0.125 | 0 |
| 3 | 0.1875 | 0.707107 |
| 4 | 0.25 | −1 |

Không thuật toán nội suy nào biết chắc chuỗi này đến từ 6 hay 10 kHz nếu không có giả định thêm. Nếu là sine, dấu/phase có thể thay; đừng áp dụng bảng cosine cho mọi phase mà không kiểm.

![Hai sóng khác tần số có cùng mẫu ở 16 kHz; minh họa giả lập](assets/aliasing-16khz.png)

Các đường liên tục là hai tín hiệu giả lập, chấm là thời điểm lấy mẫu. Hình không dùng audio của dự án.

## 2. Điều kiện Nyquist thực sự nói gì?

Với tín hiệu band-limited trong |f|≤B, điều kiện an toàn cho sampling lý tưởng là fs>2B. Khi biết signal không có thành phần ngoài band và có các mẫu lý tưởng trên toàn thời gian, tái dựng duy nhất bằng nội suy sinc là khả thi. Trong thực tế có clip hữu hạn, noise, quantization và bộ lọc có transition band; không nên coi dấu “≥” sát Nyquist là bảo đảm mọi sinusoid.

**Phản ví dụ tại biên:** sin(2π×8.000n/16.000)=sin(πn)=0 ở mọi n. Một sine 8 kHz, phase=0 biến thành dãy zero. Giới hạn “dưới fs/2” và điều kiện band-limit không phải chi tiết trang trí.

Nyquist frequency dùng ở đây là fs/2; Nyquist rate cho signal band-limit B là 2B. Một số sách dùng tên khác; luôn ghi số và đơn vị. Sampling làm thời gian rời rạc; quantization làm biên độ rời rạc. Float array không chứng minh nguồn chưa bị quantize trước đó. [S6, mục Quantization và The Sampling Theorem](https://www.dspguide.com/CH3.PDF).

## 3. Giảm mẫu: lọc trước khi bỏ mẫu

Giảm 32→16 kHz bằng cách giữ mỗi hai mẫu làm Nyquist đích thành 8 kHz. Nếu 32 kHz chứa cosine 10 kHz, sau khi bỏ mẫu nó giả dạng 6 kHz theo phép tính ở mục 1. Vì thế phải giảm thành phần ngoài band đích **trước** decimation:

$$v[n]=(x*h_{LP})[n],\qquad y[m]=v[2m].$$

h_LP là low-pass filter, cutoff/transition được chọn theo band đích. Lọc y sau khi aliasing đã xảy ra không biết 6 kHz nào là hợp lệ, 6 kHz nào từ 10 kHz: chúng đã cộng vào nhau.

Torchaudio mô tả resampling bằng bandlimited sinc interpolation, với filter width và rolloff ảnh hưởng chất lượng/chi phí và aliasing. Đây là hành vi tutorial/version được đọc, không xác nhận tham số runtime trong paper. [S7: Torchaudio 2.8, Audio Resampling, mục Controling resampling quality](https://docs.pytorch.org/audio/2.8.0/tutorials/audio_resampling_tutorial.html).

## 4. Tăng mẫu: thêm vị trí, không thêm quan sát độc lập

Tăng fs từ 16 lên 32 kHz đúng cách giữ duration. Một xấp xỉ lý tưởng của dạng sóng band-limited gốc là:

$$\hat x_c(t)=\sum_n x[n]\,\operatorname{sinc}(f_s t-n),\quad
\operatorname{sinc}(u)=\frac{\sin(\pi u)}{\pi u},\ \operatorname{sinc}(0)=1.$$

Sau đó y[m]=x̂_c(m/32.000). Các vị trí mới là hàm của mẫu cũ. Ở vị trí chẵn, y[2n]=x[n] trong nội suy lý tưởng; vị trí lẻ nội suy từ nhiều mẫu. Clip hữu hạn và filter hữu hạn làm khác ở biên.

Luồng DSP tương đương cho tỷ lệ 2: chèn zero giữa mẫu → low-pass interpolation filter (gain phù hợp, thường gain 2) → dãy dày hơn. Chỉ chèn zero tạo spectral images; chỉ lặp sample tạo zero-order hold. Hai cách đó không tự tương đương sinc resampling.

**Ví dụ số riêng cho nội suy tuyến tính:** x=[0,1,0] ở t=[0,1,2] ms. Thêm điểm giữa cho [0,0.5,1,0.5,0] trên miền 0–2 ms. Mỗi 0.5=(0+1)/2; không phải đo thêm âm thanh. Đây là ví dụ linear interpolation để hiểu “thêm vị trí”; không mô phỏng bộ resampler của paper, và tránh suy length endpoint của một thư viện từ năm điểm minh họa.

## 5. Đọc đúng pipeline của paper

Paper báo cáo toolkit input 16 kHz rồi model resample 32 kHz; lấy 2,56 s tương ứng 2,56×32.000=81.920 mẫu, từ duration tương ứng 40.960 mẫu ở 16 kHz. Không phục hồi nội dung nguồn 8–16 kHz đã vắng ở input 16 kHz. Một file 32 kHz chỉ cho biết lưới mẫu, không chứng minh bandwidth thực tới 16 kHz. [Paper, mục 3.1, trang 3; bản đồ](../06-GIAI-PHAU-PAPER.md).

Giới hạn mel tới 8 kHz trong pipeline này không tự bỏ thêm band nguồn 8–16 kHz, vì nguồn quan sát không có band ấy theo sampling đúng. Tuy nhiên, fmin=20 Hz, mel aggregation, log floor, crop và normalization vẫn đổi thông tin. Upsampling thực có thể tạo vết filter/numerical ở band cao; đó không phải forensic evidence gốc được tái tạo.

**Suy luận forensic:** nếu các lớp đi qua resampler khác nhau, detector có thể nhận diện processing history. “Năng lượng trên 8 kHz ở file đã nâng mẫu” không đủ chứng minh nguồn thu wideband hay fake. Cần provenance, filter response và nguồn chưa qua xử lý để nói nguyên nhân.

## 6. Bài tập

1. fs=24 kHz; Nyquist bằng bao nhiêu? Một cosine 15 kHz alias về tần số nào khi sampling thẳng ở fs đó?
2. Audio dài 2,56 s: đếm mẫu ở 16 và 32 kHz. Chỉ đổi metadata 16→32 kHz mà giữ array sẽ cho duration và pitch ra sao?
3. Giảm 48→16 kHz: lấy mỗi ba mẫu rồi mới lọc low-pass có sửa được aliasing không? Giải thích bằng hai tín hiệu không phân biệt được.
4. Một mô hình sinh tạo band cao “nghe hợp lý” từ audio hẹp. Đó có phải phục hồi chắc chắn band cao gốc không?

<details>
<summary>Đáp án</summary>

1. 12 kHz. 15 kHz tương đương cosine ở 24−15=9 kHz; nếu muốn tránh phải lọc trước sampling/decimation phù hợp.
2. 40.960 và 81.920 mẫu. Giữ 40.960 mẫu nhưng khai 32 kHz cho duration 1,28 s, mọi tần số vật lý khi phát bị nhân 2. Đây là đổi cách diễn giải thời gian, không resampling đúng duration.
3. Không. Ví dụ input48 kHz có cosine 6 kHz hoặc 10 kHz; sau giữ mỗi ba mẫu ở16 kHz cả hai cho cùng cosine6 kHz. Low-pass sau đó không biết nguồn nào đã tạo các mẫu.
4. Không. Mô hình có thể suy đoán theo prior và tạo chi tiết mới; nhiều waveform wideband phù hợp cùng phần thấp. Plausibility không đồng nghĩa khôi phục lịch sử thật.

</details>

## Đào sâu tự chọn

Đọc S6 phần phổ lặp khi sampling, rồi dùng bài 2 để thấy vì sao các bản phổ cách nhau fs. Với tỷ lệ hữu tỷ L/M, pipeline là upsample L → lọc → downsample M; polyphase giảm phép tính. Luồng chính chưa cần thiết kế FIR. Khi triển khai sau này, kiểm thư viện/version, cutoff, rolloff, kernel và xử lý biên; ở lớp này chưa chạy model.
