Thuật toán Spectral Subtraction

Một phần của tài liệu Xử lý nâng cao chất lượng tiếng nói (Trang 46)

3.3.1 Giới thiệu chung

Spectral – subtraction là thuật toán được đề xuất sớm nhất trong các thuật toán được sử dụng để giảm nhiễu trong tín hiệu. Đã có rất nhiều bài luận mô tả các biến thể của thuật toán này so với các thuật toán khác. Nó dựa trên một nguyên tắc cơ bản, thừa nhận sự có mặt của nhiễu, nó có thể đạt được mục đích

Chương 3 : Thuật toán Spectral Subtraction và Wiener Filtering

tiếng nói đã bị nhiễu. Phổ của nhiễu có thể được ước lượng, cập nhật trong nhiều chu kỳ khi không có mặt của tín hiệu. Sự thừa nhận đó chỉ được thực hiện đối với nhiễu không đổi hoặc có tốc độ xử lý biến đổi chậm, và khi đó phổ của nhiễu sẽ không thay đổi đáng kể giữa các khoảng thời gian cập nhật. Việc tăng cường tín hiệu đạt được bằng cách tính IDFT(biến đổi Fourier rời rạc ngược) của phổ tín hiệu đã được ước lượng có sử dụng pha của tín hiệu có nhiễu. Thuật toán này là một phép tính ước lượng đơn giản vì nó chỉ gồm biến đổi DFT thuận và DFT ngược.

Quá trình xử lý hiệu đơn giản như vậy phải trả một cái giá, nếu quá trình xử lý không được thực hiện một cách cẩn thận thì tiếng nói của chúng ta sẽ bị méo. Nếu như việc lấy hiệu quá lớn thì có thể loại bỏ đi một phần thông tin của tiếng nói, còn nếu việc thực hiện lấy hiệu đó nhỏ thì nhiễu sẽ vẫn còn được giữ lại trong tín hiệu. Có rất nhiều phương pháp được đề xuất để giảm đi hầu hết méo trong quá trình xử lý tiếng nói bằng spectral subtraction[21], và trong số đó cũng có một vài trường hợp bị loại bỏ.

3.3.2 Spectral subtraction đối với phổ biên độ

Giả thiết rằng y[n] là tín hiệu vào đã bị nhiễu, nó tổng của tín hiệu sạch x[n] và tín hiệu nhiễu d[n]:

y[n] = x[n] + d[n] (3.1)

Thực hiện biến đổi Fourier rời rạc cả 2 vế,ta được

Y (ω) =X (ω) +D

)

Chúng ta có thể biểu diễn Y( ω) dưới dạng phức như sau:

Y (ω) =| Y (ω) | e jφy

(ω)

Khi đó |Y( ω)| là biên độ phổ, và φy (ω) là pha của tín hiệu đã bị nhiễu. (3.2)

(3.3)

Phổ của tín hiệu nhiễu D( ω) có thể được biểu diễn dạng biên độ và pha:

D(ω) =| D(ω) | e jφd (ω

)

(3.4) Biên độ phổ của nhiễu |D( ω)| không xác định được, nhưng có thể thay thế

bằng giá trị trung bình của nó được tính trong khi không có tiếng nói(tiếng nói bị dừng), và pha của tín hiệu nhiễu có thể thay thế bằng pha của tín hiệu bị nhiễu

2

φy (ω) , việc làm này không ảnh hưởng đến tính dễ nghe của tiếng nói [22], có thể ảnh hưởng đến chất lượng của tiếng nói là làm thay đổi pha của tiếng nói nhưng cũng chỉ vài độ.

Khi đó chúng ta có thể ước lượng được phổ của tín hiệu sạch:

∧ ∧

X (ω) = [| Y (ω) | − | D(ω) |]e jφy

(ω) (3.5)

ở đây | D(ω) | là biên độ phổ ước lượng của nhiễu được tính trong khi không có tiếng nói hoạt động. Ký hiệu "∧"

để chỉ rằng giá trị đó là giá trị ước tính gần đúng. Tín hiệu tiếng nói được tăng cường có thể đạt được bằng cách rất đơn giản là biến đổi IDFT của X ∧ (ω) .

Cần chú ý rằng biên độ phổ của tín hiệu đã được tăng cường là | X (ω) | (=| Y (ω) | − | D(ω) |) , có thể bị âm do sự sai sót trong việc ước lượng phổ của nhiễu. Tuy nhiên, biên độ của phổ thì không thể âm, nên chúng cần phải đảm bảo rằng khi thực trừ hai phổ thì phổ của tín hiệu tăng cường |X( ω )| luôn luôn không âm. Giải pháp được đưa ra để khắc phục điều này là chỉnh lưu bán sóng hiệu của (adsbygoogle = window.adsbygoogle || []).push({});

phổ, nếu thành phần phổ nào mà âm thì chúng ta sẽ gán nó bằng 0:   X (ω) =  ^ Y (ω) − | D(ω) | , | Y (ω) | ^ > | D(ω) | (3.6) 0 , ≠

Phương pháp xử lý bằng chỉnh lưu bán sóng là một trong những cách để đảm bảo cho |X( ω)| không bị âm.

3.3.3 Spectral subtraction đối với phổ công suất

Thuật toán Spectral subtraction đối với phổ biên độ có thể được mở rộng sang miền phổ công suất. Vì trong một vài trường hợp, nó có thể làm việc tốt với phổ công suất hơn là với phổ biên độ. Lấy phổ công suất của tín hiệu bị nhiễu trong một khoảng ngắn, chúng ta bình phương |Y( ω)|, ta được:

2 2

2 2

=

X (ω) + D(ω) +X (ω). D* (ω) +X * (ω)D(ω)

| D(ω) |2, X( ω). D ∗(ω)

X ∗(ω).D(ω) không thể tính được một cách trực tiếp và xấp xỉ bằng E{| D(ω) |2}, E{ X( ω). D ∗(ω) } và E{ X ∗(ω).D(ω) }, khi đó

E[.] là toán tử kỳ vọng. Bình thường thì E{| D(ω) |2} được ước lượng khi không ∧

có tiếng nói hoạt động và được biểu thị là | D(ω) |2. Nếu chúng ta thừa nhận d[n] = 0 và không có một sự tương quan nào với tín hiệu sạch x[n], thì E{ X( ω). D ∗(ω) } và E{ X ∗(ω).D(ω) } xem là 0. Khi đó phổ công suất của tín hiệu sạch có thể tính được như sau

^ ^

| X (ω) |2 =| Y (ω) |2 − | D(ω) |

2 (3.8)

Công thức trên biểu diễn thuật toán trừ phổ công suất. Như công thức trên, thì phổ công suất được ước lượng | X ∧ (ω) |2 không được đảm bảo luôn là một số dương, nhưng có thể sử dụng phương pháp chỉnh lưu bán sóng như đã trình bày ở trên. Tín hiệu được tăng cường sẽ thu được bằng cách tính IDFT của

| X (ω) | (bằng cách lấy căn bậc hai của | X ∧ (ω) | 2 ), có sử dụng pha của tín hiệu tiếng nói bị nhiễu. Chú ý rằng, nếu chúng ta lấy IDFT cả hai vế của công thức (4.8) trên thì ta có một phương trình tương tự trong miền tự tương quan:

r^ ^ (m) =ryy (m) −r^ ^ (m) (3.9) Khi đó r^^ (m) , xx xx ryy (m) , r^^ (m) dd dd

là các hệ số tự tương quan của tín hiệu sạch, tín hiệu tiếng nói bị nhiễu, và tín hiệu nhiễu đã được ước lượng [23,24].

Công thức (1) có thể được viết theo dạng sau: ^ | X (ω) |2 =H 2 (ω) | Y (ω) | 2 ( 3.10) Khi đó: H (ω) = ^ | D(ω) |2 1 − | Y (ω) | 2 (3.11)

Trong lý thuyết của Speech enhancement, chúng ta xem H( ω) là hàm độ lợi hay hàm nén. Và H( ω) là một số thực và luôn luôn dương, và có giá trị nàm trong

phạm vị 0 ≤H (ω) ≤ 1 . Nếu nó có giá trị âm là do có sai sót trong quá trình ước lượng phổ của nhiễu. H( ω) được gọi là hàm nén là vì nó cho ta biết tỷ số giữa phổ công suất của tín hiệu được tăng cường với phổ công suất của tín hiệu bị nhiễu. Hình dạng của hàm nén là một đặc trưng duy nhất của mỗi thuật toán Speech enhancement.

Chính vì vậy mà chúng ta thường so sánh các thuật toán bằng cách so sánh các đáp ứng của hàm nén của chúng. Hệ số H( ω) có giá trị thực nên biến đổi IDFT là h[n] đối xứng với nhau qua điểm 0 và không nhân quả. Trong miền thời gian thì h[n] được xem là một bộ lọc không nhân quả [25]. Nên sẽ có một phương pháp được đề xuất để hiệu chỉnh hàm H( ω ) để đáp ứng của nó trở thành

bộ lọc nhân quả trong miền thời gian.

Trường hợp chung thì thuật toán Spectral subtraction có thể được biểu diễn:

^ ^

| X (ω) | p =| Y (ω) | p − | D

) | p (3.12) (adsbygoogle = window.adsbygoogle || []).push({});

Trong đó p là số mũ công suất, với p = 1 là đó là phương pháp trừ phổ biên độ điển hình, p = 2 là phương pháp trừ phổ công suất.

Sơ đồ khối của thuật toán Spectral Subtraction :

Tín hiệu Ước lượng, cập nhật nhiễu Y (ω) ^ - | D(ω) | p bị nhiễu FFT |.|p + Pha của tín hiệu Tín hiệu sau khi

tăng cường IFFT |.|1/p

Hình 3.2 Sơ đồ khối của thuật toán Spectral subtraction [26].

3.4 Thuật toán Wiener Filtering3.4.1 Giới thiệu chung 3.4.1 Giới thiệu chung

được cộng vào và tín hiệu sạch được ước lượng một cách đơn giản bằng cách trừ đi phổ của nhiễu từ phổ của tính hiệu tiếng nói có nhiễu. Với cách làm này tín hiệu tiếng nói sạch không thể có được bằng cách tối ưu nhất. Để khắc phục nhược điểm này ta sử dụng thuật toán Wiener Filtering (WF).

WF là thuật toán được sử dụng rộng rãi trong nâng cao chất lượng tiếng nói. Nguồn gốc cơ bản của thuật toán WF là tạo ra tín hiệu tiếng nói sạch bằng cách nén nhiễu. Ước lượng được thực hiện bằng cách hạ thấp sai số bình phương trung bình (Mean Square Error) giữa tín hiệu mong muốn và tín hiệu ước lương.

3.4.2 Nguyên lý cơ bản của Wiener Filtering

Giả thiết rằng y[n] là tín hiệu vào đã bị nhiễu, nó là tổng của tín hiệu sạch và tín hiệu nhiễu d[n]:

y[n]=x[n]+d[n] (3.13)

Thực hiện biến đổi Fourier rời rạc cả 2 vế,ta được

Y (ω) =X (ω) +D(ω)

Chúng ta có thể biểu diễn Y( ω ) dưới dạng phức như sau:

Y (ω) =| Y (ω) | e jφy

(ω)

Khi đó |Y( ω )| là biên độ phổ, và φy (ω) là pha của tín hiệu đã bị nhiễu. (3.14)

(3.15)

Phổ của tín hiệu nhiễu D( ω ) có thể được biểu diễn dạng biên độ và pha:

D(ω) =| D(ω) | e jφd (ω

) (3.16)

Biên độ phổ của nhiễu |D( ω )| không xác định được, nhưng có thể thay thế bằng giá trị trung bình của nó được tính trong khi không có tiếng nói(tiếng nói bị dừng), và pha của tín hiệu nhiễu có thể thay thế bằng pha của tín hiệu bị nhiễu

φy (ω) , việc làm này không ảnh hưởng đến tính dễ nghe của tiếng nói [27], có thể ảnh hưởng đến chất lượng của tiếng nói là làm thay đổi pha của tiếng nói nhưng

cũng chỉ vài độ.

Ta có thể ước lượng được biên độ của phổ tín hiệu sạch một hàm phi tuyến được xác định như sau :

X (ω ) từ Y( ω ) bằng ∧

G(ω ) = X (ω ) / Y

SNR SNR 2 2 2 2 2 2

G(ω) có thể được áp dụng theo Wiener Filtering [28]: (adsbygoogle = window.adsbygoogle || []).push({});

E{ S (ω) } G(ω) = (3.18) E{ S (ω ) } +E{ D(ω) }

Trong đó Ps (ω) và Pd (ω)là phổ công suất của tin hiệu sạch. Đặt Priori SNR và Posteriori SNR như sau[11]:

E{ S (ω) } SNR pri = 2 (3.19) E{ D(ω) } E{ Y (ω) } SNR post = 2 (3.20) E{ D(ω) }

Một khó khăn trong các thuật toán nâng cao chất lượng tiếng nói là ta không có tín hiệu trước tín hiệu sạch s[n] nên ta không thể biết phổ của nó. Do đó ta không thể tính được SNR

pri

mà trong các hệ thống nâng cao chất lượng giọng nói thì SNR

pri

là tham số rất cần thiết để ước lượng tín hiệu sạch.Trong các hệ thống nâng cao chất lượng giọng nói có thể ước lượng được SNR

pri

SNR post

bằng cách cho các thông số thích hợp vào các phương trình sau[12]: ∧ tt −1 2 P d (ω) =λP d (ω) + (1 −λ ) D t (ϖ ) (3.21) SNR postE{Y (ω ) } = ∧ t P d (ω )  ∧ ^ t −1 S  2 (ω ) (3.22) t pri(ω ) = (1 −β ) P tpost  (ω ) − 1 + β  ∧ P d (ω ) (3.23)

Trong đó P[.] là hàm chỉnh lưu bán sóng có dạng như sau:  X P( X ) = 0 , , X > 0 ≠ (3.24)

Trong phương trình nếu cho hệ số β ta có thể ước lượng được SNR pri bằng

SNR post . Trong thực tế hệ số β =0.98 rất tốt cho các tín hiệu có SNR<4dB. Từ phương trình (3.18) và (3.19) có G(ω) theo WF như sau:

SNR pri G(ω ) =

1 +SNR

pri

Sơ đồ khối của thuật toán Wiener Filtering:

(3.25) Tín hiệu Ước lượng, cập nhật nhiễu Y (ω) ^ | D(ω ) | p SNR pri Priori SNR Hàm xử lý bị nhiễu FFT |.|2 giảm nhiễuWF

Tín hiệu sau khi

tăng cường IFFT

Pha của tín hiệu

|.|1/2

Hình 3.3 Sơ đồ khối của thuật toán Wiener Filtering.

3.5 Overlap và Adding trong quá trình xử lý tín hiệu tiếng nói3.5.1 Phân tích tín hiệu theo từng frame 3.5.1 Phân tích tín hiệu theo từng frame

Do tín hiệu cần xử lý của chúng ta là tín hiệu liên tục, nên khi chúng ta biến đổi FFT trực tiếp tín hiệu từ miền thời gian mà không thông qua một quá trình tiền xử lý nào trước đó thì tín hiệu sau khi được biến đổi FFT sẽ biến đổi nhanh, lúc đó chúng ta không thể thực hiện được các thuật toán xử lý triệt nhiễu trong tín hiệu vì khi đó tín hiệu được xem là động.

Chính vì vậy, tín hiệu của chúng ta cần phải được phân tích thành những khung tín hiệu(frame) liên tục trong miền thời gian trước khi chuyển sang miền tần số bằng biến đổi FFT. Khi tín hiệu được phân tích thành các frame liên tục, thì trong từng frame, tín hiệu của chúng ta sẽ biến đổi chậm và nó được xem là

tĩnh. Nếu tín hiệu được phân tích theo từng frame thì khi đó các thuật toán xử lý triệt nhiễu trong tín hiệu mới có thể thực hiện được một cách hiệu quả. Và cách phân tích tín hiệu của chúng ta là “frame by frame”.

Để thực hiện việc phân tích tín hiệu thành các frame, cần sử dụng các loại cửa sổ thích hợp. Ở đây, chúng ta sử dụng cửa sổ Hamming, với N = 256 mẫu

trong từng frame : (adsbygoogle = window.adsbygoogle || []).push({});

1 − 0.85185. cos((2k + 1)π/ N ) , k = 0,..., N − 1 (3.27)

N : kích thước của frame m : số lượng frame

Hình 3.4 Phân tích tín hiệu thành các frame [31].

3.5.2 Overlap và Adding

Sau khi phân tích tín hiệu thành các frame liên tục trong miền thời gian bằng cửa sổ Hamming, nếu các frame này liên tục với nhau và không theo một điều kiện nào cả thì khi thực hiện biến đổi FFT thì vô tình chúng ta đã làm suy giảm tín hiệu do Hamming là cửa sổ phi tuyến.

Nên khi thực hiện phân tích tín hiệu thành các frame thì yêu cầu đặt ra là các frame phải sắp xếp chồng lên nhau, gọi là “overlap”. Việc xếp chồng các frame với nhau sẽ được thực hiện theo một tỷ lệ chồng lấp thích hợp, thông thường là 40% hoặc 50%.

Sau khi các frame tín hiệu được xử lý triệt nhiễu trong miền tần số, các frame này được liên kết lại nhau bằng phương pháp thích hợp với phương pháp phân tích tín hiệu thành các frame ở đầu vào gọi là “adding”.

Tập hợp các mẫu tín hiệu trong cùng một frame sau khi được phân tích ở đầu vào gọi là một “segment”. Với cách thực hiện phân tích và liên kết các frame bằng phương pháp overlap và adding thì tín hiệu của chúng ta thu được sau khi xử lý triệt nhiễu sẽ không bị méo dạng và sẽ không xuất hiện hiện tượng “giả nhiễu”.

Hình 3.5 quá trình thực hiện overlap và adding [32].

3.6 Ước lượng và cập nhật nhiễu

Phương thức ước lượng nhiễu có thể ảnh hưởng lớn đến chất lượng của tín hiệu sau khi được tăng cường. Nếu nhiễu được ước lượng quá nhỏ thì nhiễu sẽ vẫn còn trong tín hiệu và nó sẽ được nghe thấy, còn nếu như nhiễu được ước lượng quá lớn thì tiếng nói sẽ bị méo, và làm sẽ làm tính dễ nghe của tiếng nói bị ảnh hưởng. Cách đơn giản nhất để ước lượng và cập nhật phổ của nhiễu trong đoạn tín hiệu không có mặt của tiếng nói sử dụng thuật toán thăm dò hoạt động của tiếng nói (voice activity detection - VAD). Tuy nhiên phương pháp đó chỉ thoả mãn đối với nhiễu không thay đổi(nhiễu trắng), nó sẽ không hiệu quả trong các môi trường thực tế (ví dụ như nhà hàng), ở những nơi đó đặc tính phổ của nhiễu thay đổi liên tục. Trong mục này chúng ta sẽ đề cập đến thuật toán ước lượng nhiễu thay đổi liên tục và thực hiện trong lúc tiếng nói hoạt động, thuật

π

3.6.1 Voice activity detection

Quá trình xử lý để phân biệt khi nào có tiếng nói hoạt động, khi nào không có tiếng nói (im lặng) được gọi là sự thăm dò hoạt động của tiếng nói – Voice activity detection (VAD). Thuật toán VAD có tín hiệu ra ở dạng nhị phân quyết định trên một nền tảng frame-by-frame, khi đó frame có thể xấp xỉ 20-40 ms. Một đoạn tiếng nói có chứa tiếng nói hoạt động thì VAD = 1, còn nếu tiếng nói không hoạt động hay đó chính là nhiễu thì VAD = 0.

Có một vài thuật toán VAD được đưa ra dựa trên nhiều đặc tính của tín hiệu. Các thuật toán VAD được đưa ra sớm nhất thì dựa vào các đặc tính như mức năng lượng, zero-crossing, đặc tính cepstral, phép đo khoảng cách phổ Itakura LPC, phép đo chu kỳ.

Phần lớn các thuật toán VAD đều phải đối mặt với vấn đề là điều kiện SNR thấp, đặc biệt khi nhiễu bị thay đổi. Một thuật toán VAD có độ chính xác trong môi trường thay đổi không thể đủ trong các ứng dụng của Speech enhancement, nhưng việc ước lượng nhiễu một cách chính xác là rất cần thiết tại mọi thời điểm khi tiếng nói hoạt động [26].

Một phần của tài liệu Xử lý nâng cao chất lượng tiếng nói (Trang 46)