Biến đổi fourier trong xử lý âm thanh

[Tác giả: tiefengeist

Link bài viết gốc: https://link.medium.com/wRQfzqqUn5

Dịch: Bùi Thanh Lâm]

Truyền tín hiệu đòi hỏi xử lý khéo léo. Suy cho cùng, tín hiệu cũng chỉ là các hàm toán học, được truyền từ nguồn phát đến nguồn nhận, chứa đựng thông tin được mã hoá ở trong đó. Trước đây, xử lý tín hiệu tương tự sẽ như giống như những nút vặn âm lượng, tiếng bass và tiếng treble (ND: bass: dải âm trầm, treble: dải âm cao) có trên máy hát của bạn. Mọi thứ được xử lý nhờ các linh kiện điện tử, chẳng hạn như tụ điện, điện trở,…

Tuy nhiên, phần lớn tín hiệu hiện đại là tín hiệu số. Lý do bởi với sức mạnh của máy tính điện tử như hiện nay, phương thức xử lý tín hiệu này cho phép chúng ta giải mã được nhiều thông tin hơn từ tín hiệu, nhiều hơn bất cứ phương thức nào khác. Tuy nhiên, tính toán với số, bản chất, về cơ bản là rời rạc. Có nghĩa rằng, tín hiệu, vốn dĩ là liên tục, giống như hàm sin, giờ được xử lý như là một đại lượng rời rạc, xấp xỉ với tín hiệu liên tục đầu vào.

Câu hỏi được đặt ra: làm thế nào để thực hiện được quá trình này. Nền tảng toán học được dùng cho phương pháp này, đó là giải tích Fourier. Theo đó, mọi hàm số đều có thể biểu diễn xấp xỉ bằng tổng của các hàm lượng giác với chu kỳ khác nhau. Giống như ví dụ sau đây:

[Ảnh 1]

Như vậy, ta có thể biểu diễn một hàm số bất kỳ thành một tổng đủ lớn các số hạng là các hàm lượng giác với chu kỳ khác nhau… Rồi sao?

Ồ, điều này có nghĩa rằng: mọi tín hiệu, từ một bức ảnh chụp vệ tinh của sao Mộc, đến tín hiệu ra – đa truyền từ rãnh Mariana, hay một bản ghi âm giọng nói của ai đó… tất cả đều được phân tích để tìm được các hàm chứa những tín hiệu đó. Điều này cho phép chúng ta tối giản hết sức có thể tín hiệu đầu vào.

Thực chất, chúng ta làm điều này thông qua một quá trình gọi là “biến đổi Fourier”. Quá trình ấy bao gồm: nhận lấy tín hiệu, là tổng hợp của các hàm số với tần số khác nhau, rồi chuyển từ một hàm số phụ thuộc thời gian sang một hàm số phụ thuộc vào tần số. Tức là, tín hiệu vốn dĩ là một hàm số phụ thuộc vào thời gian, và giờ ta phân tách chúng thành các dải tần khác nhau, thứ mà tạo nên tín hiệu đó. Bạn có thể nhìn vào ảnh [Ảnh 2]: dải tần nào “đóng góp” vào tín hiệu nhiều hơn (về độ to, độ cao) giờ sẽ được biểu diễn bằng đường cong lớn hơn trong đồ thị phụ thuộc tần số.

Dưới đây là 1 vài cặp chuyển đổi qua lại: (ND: Nguyên văn: “Fourier transform pair”)

[Ảnh 3]

Tuy nhiên chúng ta không thể chỉ thuần tuý áp dụng tính toán trên giấy vào thực tế được. Ta đang làm việc với máy tính điện tử, và máy tính thì “suy nghĩ” rất khác con người. Như vậy, trước khi chúng ta áp dụng biến đổi Fourier, cần phải biến đổi tín hiệu liên tục đầu vào thành những mảnh nhỏ, riêng biệt, thứ mà máy tính có thể hiểu được. Để chính xác hơn, ta thực hiện theo những bước sau đây:

1. Nhận tín hiệu, biểu diễn nó dưới dạng hàm tuần hoàn

2. Lấy mẫu (ND: nguyên văn “sample”) tín hiệu liên tục ấy trong những thời điểm rời rạc

3. Có thể dùng 1 số phương pháp xử lý xấp xỉ, và biểu diễn các điểm được lấy mẫu thành một hàm liên tục

4. Rời rạc hoá hàm liên tục này, theo cả về thời gian và biên độ

5. Áp dụng biến đổi Fourier để chuyển về hàm phụ thuộc theo tần số

Hình sau minh hoạ các bước thực hiện trên

[Ảnh 4]

Như vậy, chúng ta có thể nhận một tín hiệu đầu vào, biến đổi nó thành các hàm thành phần, rồi viết lại chúng theo các dải tần. Nhưng mất công làm như vậy để làm gì?

Ồ, làm được nhiều, nhiều chứ. Xem ảnh sau đây, biểu diễn giọng nói con người khi phát âm một từ:

[Ảnh 5]

Từ ảnh trên, ta có thể kết luận được một vài thứ.

Đầu tiên, nếu ta muốn lọc tạp âm cho âm thanh trên phần nào, ta có thể bỏ đi các dải tần nhỏ, không đáng kể, cụ thể là đoạn từ 150 ~ 250, 300 ~ 400 và 450 ~ 500 Hz. Những dải tần này khả năng cao là tạp âm, bởi chúng trải dài qua nhiều tần số nhưng lại chẳng đóng góp được mấy vào tổng thể.

Ta cũng có thể làm được nhiều thứ khác nữa, chẳng hạn ngắt bỏ dải tần cực cao, thứ mà có thể gây tiêu cực với nhiều người có đôi tai nhạy cảm.

Đây là ứng dụng tiêu biểu nhất của biến đổi Fourier trong việc xử lý tín hiệu. Vì vậy file .mp3 thường có dung lượng chỉ bằng 1/10 dung lượng của cùng bài hát đó nhưng trên đĩa CD (ND: ý nói tín hiệu .wav, lossless).

Thú vị hơn, chúng ta có thể quan sát và khẳng định rằng, giọng nói của người này tạo thành một hoạ âm ba bậc, theo như ba đỉnh trong đồ thị theo tần số.

(ND: Ta thấy dải âm mạnh nhất khoảng 140Hz, đây là âm cơ bản. Hoạ âm bậc 1 của nó: là đỉnh thứ 2, khoảng 280Hz. Hoạ âm bậc 2, đỉnh cuối: khoảng 420Hz, đúng theo sách giáo khoa Vật lý 12 nhé anh em)

Xác định hoạ âm như vậy thật khó khăn nếu không có giải tích Fourier. Từ điều này, con người có thể hiểu ra hơn về hoà âm, thứ làm nên cuộc cách mạng về nhận thức đối với nhạc cụ điện tử, bóp méo âm thanh… như pê – đan trong guitar điện, synthesizers…

Khoan đã. Vẫn còn một vấn đề nữa. Thuật toán hiệu quả để biến đổi Fourier rời rạc là chưa được biết rõ ràng. Thực tế, hàng trăm năm sau khi biến đổi Fourier rời rạc được phát minh ra, thuật toán hiệu quả nhất chạy với O(n^2). Với hiệu năng thấp như vậy, chẳng ai muốn thử sức với tín hiệu số cả, nhất là thời đó máy tính chiếm diện tích cả một căn phòng: thà ta truyền tín hiệu tương tự qua rađiô còn hơn! Nhưng năm 1965, bộ đôi Cooley và Tukey của IBM và Princeton, độc lập với nhau, đã tìm ra giải thuật cải thiện hiệu năng lên thành O(n log n). Nếu với 1000 điểm dữ liệu (thực tế nhiều hơn rất, rất nhiều, kể cả đối với những năm 60), nếu dùng giải thuật cũ, phải mất hàng triệu phép tính; nay, nó chỉ mất khoảng 6900 thôi. Giải thuật đó được gọi là FFT – biến đổi Fourier nhanh, và điều này làm thay đổi tất cả cách mà chúng ta xử lý tín hiệu.

(ND: [Ảnh 6] do mình tự thêm vào, một công cụ trong phần mềm Adobe Audition, thứ mà mình hay dùng để chỉnh sửa audio. Công cụ có tên là “FFT filter”, cho thấy ứng dụng của thuật toán FFT được áp dụng rộng rãi ngày nay)

Bài viết tiếp theo, tôi sẽ so sánh giải thuật FFT kỹ lưỡng hơn, và so sánh thực tế O(n^2) và O(n log n) hoạt động như thế nào.