FFT (Fast Fourier Transform) Nguyờn lý

Một phần của tài liệu Xây dựng chương trình xử lý âm thanh số (Trang 49 - 52)

1.1. Nguyờn lý

Biến đổi Fourier được thực hiện dựa trờn nguyờn lý rằng ta cú thể dựng bất cứ hàm tuần hoàn theo thời gian x(t) nào và chuyển nú sang dạng một phộp tổng xỏc định của cỏc súng hỡnh sin hay hỡnh cosin tương ứng với cỏc tần số bắt đầu tại 0 và tăng dần theo cấp số nhõn một số nguyờn lần của tần số cơ bản f0=1/T, với T là chu kỳ của x(t).

Dĩ nhiờn, ta khụng thể thực hiện một tổng khụng xỏc định của bất cứ loại nào trong sự tớnh toỏn thực, nờn chỳng ta phải thiết lập một tập xỏc định cỏc hỡnh sin và cosin. Điều này tạo thuận lợi cho đầu vào được lấy mẫu một cỏch số hoỏ, khi chỳng ta quy định rằng số cỏc mẫu tần số ra và cỏc mẫu thời gian vào là như nhau. Hơn nữa, thật may mắn khi mọi quỏ trỡnh thu thanh õm số hoỏ đều cú độ dài xỏc định. Chỳng ta cú thể giả thiết rằng, hàm x(t) là tuần hoàn, và chu kỳ cú cựng độ dài như quỏ trỡnh thu thanh. Mặt khỏc, hóy coi qỳa trỡnh thu thanh được lặp mói mói, và gọi hàm lặp x(t). Quóng của phõn đoạn lặp xỏc định tần số cơ bản f0, mà f0=samplingRate/N, với N là số cỏc mẫu trong quỏ trỡnh thu thanh.

Vớ dụ như vậy, nếu ta đang sử dụng một tần số lấy mẫu 44100 mẫu /giõy, và độ dài quỏ trỡnh thu thanh là 1024 mẫu, thỡ tổng thời gian được thể hiện bởi quỏ trỡnh thu thanh là 1024/44100=0.02322 giõy, nờn tần số cơ bản f0

sẽ là 1/0.02322=43.07 Hz. Nếu ta xử lý 1024 mẫu này với FFT, đầu ra sẽ là cỏc hệ số sin và cosin (giả sử là ak và bk) và cho cỏc tần số 43.07Hz, 2*43.07Hz, 3*43.07Hz, vv... Để kiểm tra lại rằng sự tớnh toỏn hoàn toàn chớnh xỏc, ta cú thể phỏt sinh mọi súng hỡnh sin và cosin tại cỏc tần số này, nhõn chỳng với cỏc hệ số ak và bk tương ứng, cộng chỳng lại với nhau, và ta sẽ nhận được lại quỏ trỡnh thu thanh gốc.

1.2. FFT trong õm thanh sốĐặt vấn đề Đặt vấn đề

Vấn đề chớnh cựng với FFT cho quỏ trỡnh xử lý cỏc õm thanh là cỏc quỏ trỡnh thu thanh số phải được làm vỡ thành cỏc khỳc (chunks) với độ dài mỗi khỳc là n mẫu, trong đú n luụn phải là một số nguyờn bội của 2. Đầu tiờn, sẽ lấy FFT của một khối, xử lý mảng ra FFT (vớ dụ như điền 0 vào mọi mẫu tần số bờn ngoài một dẫy xỏc định cỏc tần số), sau đú thực hiện biến đổi ngược FFT để nhận lại tớn hiệu trong miền thời gian đó được lọc. Khi õm được làm vỡ thành

từng khỳc giống như vậy, và được sử lý với FFT, kết quả nhận được sau khi lọc sẽ cú những sự giỏn đoạn mà chỳng dẫn đến việc cú tiếng lỏch cỏch trong õm nhận được tại mỗi đường bao của khỳc. Vớ dụ như, nếu quỏ trỡnh thu thanh cú tần số lấy mẫu là 44,100Hz, và cỏc khối cú kớch thước là n=1024, thỡ sẽ cú một tiếng lỏch cỏch cú thể nhận rừ tại mỗi khoảng 1024/(44,100Hz)=0.0232 giõy.

Giải phỏp

Để giải quyết điều này, ta cú thể xử lý theo cỏch sau: Giả sử rằng kớch thước bộ nhớ đệm là n = 2N. Trong bước lặp đầu tiờn, đọc n mẫu từ õm vào, thực hiện FFT, xử lý, và IFFT, sau giữ lại dữ liệu theo thời gian nhận được trong bộ nhớ đệm thứ 2. Sau đú dịch nửa thứ 2 của bộ nhớ đệm gốc sang nửa đầu (chỳ ý rằng n là luỹ thừa của 2 nờn nú chia hết cho 2), và đọc n/2 mẫu vào nửa thứ 2 của bộ nhớ đệm. Sau đú thực hiện biến đổi FFT, xử lý, và IFFT. Bõy giờ thực hiện một phộp suy giảm tuyến tớnh trờn nửa thứ 2 của bộ nhớ đệm cũ mà nú đó được ghi từ bộ ba (FFT, xử lý, và IFFT) đầu tiờn bằng cỏch nhõn mỗi mẫu với một giỏ trị thay đổi từ 1 (cho mẫu số n/2) tới 0 (cho mẫu số n-1). Thực hiện phộp tăng tuyến tớnh trờn nửa đầu của bộ nhớ đệm ra mới (đi một cỏch tuyến tớnh từ 0 tới 1), sau đú cộng 2 nửa lại với nhau để nhận được một đầu ra với sự chuyển tiếp mịn. Chỳ ý rằng, cỏc vựng xung quanh mỗi điểm giỏn đoạn được xoỏ bỏ thực sự từ đầu ra, qua một mức õm lượng thớch hợp được giữ nguyờn. Kỹ thuật này làm việc rất tốt khi quỏ trỡnh xử lý khụng làm nhiễu loạn thụng tin về phase của phổ tần số. Vớ dụ như, một bộ lọc thụng dải (bandpass) sẽ hoạt động rất tốt, nhưng ta cú thể bắt gặp sự mộo õm với sự dịch chuyển về cường độ.

2. Cepstrum

Đặc điểm của homomorphic là sự biến đổi đại số tuyến tớnh mà nhờ đú cú thể tỏch hai tớn hiệu khụng cộng nhờ thuật toỏn phi tuyến trờn cơ sở lọc tuyến tớnh. Tuỳ theo kiểu tổ hợp, ta tỏch thành hai khỏi niệm:

 Homomorphic nhõn: tỏch tớch của hai dóy tớn hiệu.

 Tỏch tớch chập homomorphic: tỏch tớch chập của hai tớn hiệu.

Tớn hiệu vào x(n) là tớch của hai dóy phức x1(n) và x2(n). Để cú thể tỏch hai dóy tớn hiệu này bằng toỏn tử tuyến tớnh, ta cần phải lấy log phức.

Và: xˆ(n)=ln[x(n)]=lnx(n) + jarg[x(n)] (2.11) sẽ cho hai thành phần thực và ảo:

[ˆ( )] ln ( ) ln ( )

Rex n =lnx(n) = x1 n + x2 n (2.12)

[ˆ( )] arg ( ) ( )

Imx n = argx(n) = x1 n +argx2 n (2.13)

Nếu phổ của cỏc dóy x1(n)=ln[x1(n)] và x2(n)=ln[x2(n)] khụng trựm hoặc trựm ớt thỡ ta cú thể dựng bộ lọc tuyến tớnh để lọc một tớn hiệu và chặn tớn hiệu cũn lại. Khi đú đầu ra của hệ thống tuyến tớnh là dóy phức yˆ(n)=R[ ]xˆ(n)

chỉ chứa log phức của một tớn hiệu. Như vậy, khi dựng toỏn tử ngược của log tự nhiờn y(n)=exp[ ]yˆ(n) ta sẽ nhận được một thành phần tớn hiệu.

Do đú, ta cú sơ đồ tớnh Cepstrum như sau:

1 - a.z W(n) FFT Log| | IFFT

s(n) -1 Cepstrum

Homomorphic Tiền xử lý

Chương 6

Một phần của tài liệu Xây dựng chương trình xử lý âm thanh số (Trang 49 - 52)