Giả thiết rằng 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 .
(3.13)
Thực hiện biến đổi Fourier rời rạc cả 2 vế,ta đƣợc
(3.14) Chúng ta có thể biểu diễn Y( ) dƣới dạng phức nhƣ sau:
(3.15) Tín hiệu sạch Phân tích tín hiệu thành các Frame FFT Ƣớc lƣợng nhiễu Hàm xử lý giảm nhiễu IDFT Overl ap Và Addin gg Tín hiệu bị nhiễu
Khi đó là biên độ, và là pha của tín hiệu đã bị nhiễu. Phổ của nhiễu có thể đƣợc biểu diễn theo dạng biên độ và pha:
= | | (3.16) Biên độ phổ của nhiễu | | 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 nhiễu có thể thay thế bằng pha của tín hiệu bị nhiễu, việc làm này không ảnh hƣởng đến tính dễ nghe của tiếng nói, 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 từ bằng một hàm phi tuyến đƣợc xác định nhƣ sau :
(3.17) có thể đƣợc áp dụng theo lọc Wiener. (3.18)
Đặt Priori SNR và Posteriori SNR nhƣ sau:
(3.19)
(3.20)
. (3.21)
Pha của tín hiệu IFFT SNRpri Ƣớc lƣợng cập nhật nhiễu Tín hiệu bị nhiễu FFT Tín hiệu sau khi tăng cƣờng Hàm xử lý giảm nhiễu |.|1/2 |.|1/2 (3.22) Sơ đồ khối của thuật toán lọc Wiener:
Hình 3.3 Sơ đồ khối của thuật toán lọc Wiener. 3.3 Xếp chồng và cộng trong quá trình xử lý tín hiệu tiếng nói 3.3.1 Phân tích tín hiệu theo từng khung
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 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 đó, 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 khung liên tục, trong từng khung, tín hiệu 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 khung, 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à “ theo từng khung một”.
Để 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 :
(3.25)
Hình 3.4 Phân tích tín hiệu thành các khung[5].
Tín hiệu có nhiễu đƣợc chia ra thành nhiều Segment ( hay Frame ) có chiều dài bằng 25 ms với độ dịch là 40% của cửa sổ trên suốt chiều dài tín hiệu. Cửa sổ có thể chọn Rectangle, Hamming, Blackman … Việc chọn loại cửa sổ sẽ ảnh hƣởng tới việc khôi phục tín hiệu đã tăng cƣờng sau này. Ở đây, cửa sổ đƣợc lựa chọn là Hamming. Do Hamming là cửa sổ phi tuyến nên khi thực hiện biến đổi FFT thì vô tình đã làm suy giảm tín hiệu , vì thế yêu cầu đặt ra là các Segment phải sắp xếp chồng lên nhau theo 1 tỉ lệ dịch (SP) thích hợp, vùng xếp chồng giữa 2 Segment liên tục gọi là “overlap”.[5]
Minh họa quá trình phân khung bằng cửa sổ chữ nhật : tín hiệu có nhiễu cộng vào.
: shift percentage-Tỷ lệ dịch.
: Window Length: chiều dài cửa sổ.
: số mẫu ở vùng overlap ( ) .
Noisy Length : Chiều dài nhiễu.
Số Segment có thể đƣợc tính dựa vào công thức sau:
Number of noisy signal Segments = (LengthSignal - WindowLength)/(Shift Percentage* WindowLength) + 1
Dấu ▪ để chỉ là lấy giá trị nguyên nhỏ hơn và gần kết quả nhất.
Khi tín hiệu đƣợc phân tích thành các Segment liên tục, trong từng Segment, tín hiệu của ta sẽ biến đổi chậm và nó đƣợc xem là tĩnh ( trạng thái dừng). 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ả. Cách phân tích tín hiệu đƣợc sử dụng là nhân với hàm cửa sổ, mỗi vector Segment có kích thƣớc WindowLength sau khi phân tích sẽ đƣợc lƣu vào 1 cột của ma trận, vậy ma trận Segment sẽ có kích thƣớc WindowLength x NumberOfSegments.[5]
Hình 3.4 Sơ đồ thuật toán phân tích tín hiệu thành các khung 3.3.2 Xếp chồng và cộng (Overlap and adding).
Sau khi phân tích tín hiệu thành các khung 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%.
Window, Signal- Vector
Segments [1:W] M1=[(1:w);(1:w);....;(1:w)]new [1:(N-1)]’M2=#*[(0:N-1)’, (0:N-1)’...,(0:N-1)’]new [1:W]-hw[(1:W)’,(1:W)’,...(1:W)’]new #SP =[W*SP] N=[(L-W)/)#SP)+1] ( Lấy phần nguyên) Tính ma trận Index Indexnew =( M1+M2)’ Tính ma trận Segment Seg=Signal(Index).hw END Segment
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 xếp chồng và cộng [5] .
Mô tả xây dựng phƣơng thức xếp chồng và cộng:
Over Add2
Khôi phục tínt hiệu với đầy đủ biên độ và pha
FreqNum= số cột của Spec
Khôi phục một nửa liên hợp đối xứng của Spec
Xếp chồng từng cột của tỷ lệ dịch SP ban đầu và Add các vùng Overlap lại với nhau.
End
Hình 3.5 Thuật toán xếp chồng và cộng 3.3.3 Ƣớ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, 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 phát hiện tiếng nói (Voice A ctivity 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 toán này sẽ phù hợp môi trƣờng có nhiễu thay đổi cao.
3.3.4 Phát hiện tiếng nói (Voice activity detection)
Quá trình xử lý để phân biệt khi nào có tiếng nói, khi nào không có tiếng nói (im lặng) đƣợc gọi là phát hiện 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 từng khung, khi đó khung 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 không có tiếng nói 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 tăng cƣờng chất lƣợng tiếng nói, 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 có tiếng nói.[5]
VAD
Tính khoảng phổ của Segment/Frame
SpectraSist = max(20*lg(signal)-20*lg(noise)),0)
Tính giá trị trung bình của SpectraDist Dist = SpectralDist/length(SpectralDist) Dist( Khoảng cách phổ ngƣỡng Noise Flag =1 NoiseCounter ++ Speech Flag = 0 END Đúng Đúng Noise Flag =0 NoiseCounter =0 Sai Speech Flag = 1 NoiseCounter Số
Segment liên tiếp ngƣỡng để quy định
nhiễu
Sai NoiseCount>Số
Segment liên tiếp ngƣỡng để quy
3.3.5 Quá trình ƣớc lƣợng và cập nhật nhiễu.
Nhiễu sẽ đƣợc ƣớc lƣợng lúc ban đầu bằng cách lấy trung bình biên độ phổ của tín hiệu bị nhiễu.
(3.22) Sau đó, sử dụng phƣơng pháp VAD để nhận biết các frame tiếp theo, frame nào là frame nhiễu và sẽ cập nhật nhiễu đó cho các frame tiếp theo. Để có thể nhận biết đƣợc frame nào là nhiễu thì chúng ta thực hiện so sánh biên độ phổ của nhiễu đƣợc ƣớc lƣợng với biên độ phổ của tín hiệu bị nhiễu :
CHƢƠNG 4: THỰC HIỆN VÀ ĐÁNH GIÁ CÁC THUẬT TOÁN 4.1 Giới thiệu chƣơng
Qua nghiên cứu lý thuyết thì chƣơng này sẽ xây dựng các lƣu đồ thuật toán và thực hiện các thuật toán giảm nhiễu mô phỏng bằng Matlab, sau đó đánh giá các kết quả thu đƣợc chủ yếu bằng phƣơng pháp đánh giá khách quan.
4.2 Lƣu đồ thực hiện và đánh giá thuật toán.
Hình 4.1.Sơ đồ thực hiện và đánh giá thuật toán tăng cƣờng
Xây dựng thuật toán : dựa trên các cơ sở toán học, các phép biến đổi trong miền thời gian và tần số đối với xử lý tín hiệu số để xây dựng nên các thuật toán xử lý nhiễu trong tiếng nói.
Triển khai trên Matlab: từ thuật toán đã xây dựng đƣợc, thực viết mã nguồn bằng ngôn ngữ lập trình và sử dụng các công cụ trên Matlab tạo nên chƣơng trình thực hiện xử lý nhiễu trong tiếng nói trên nền Matlab.
Thực hiện xử lý tiếng nói bằng các thuật toán: thực hiện xử lý triệt nhiễu trong các file âm thanh bị nhiễu bằng chƣơng trình đã xây dựng ở trên.
Thực hiện các phương pháp đánh giá dựa trên các kết quả đạt được sau khi xử lý : sau khi các file âm thanh bị nhiễu với các mức độ và loại nhiễu khác nhau đã đƣợc xử lý triệt nhiễu, cùng với các file âm thanh sạch tƣơng ứng, ta sử dụng
Xây dựng thuật toán
Triển khai thuật toán trên Matlab Thực hiện xử lý tiếng nói bằng các
thuật toán
Thực hiện các thuật toán đánh giá dựa trên các kết quả đạt đƣợc sau
khi xử lý
các phƣơng pháp đánh giá của tăng cƣờng chất lƣợng tiếng nói để thực kiểm tra, đánh giá tính hiệu của thuật toán.
Nhận xét đánh giá: từ các kết quả sau khi thực hiện các phƣơng pháp đánh giá đã có ở trên, đƣa ra các kết luận đánh giá : thuật toán nào thích hợp cho loại nhiễu nào, với mức độ bao nhiêu, thuật toán nào có khả xử lý nhiễu tốt hơn trong mọi trƣờng hợp.
4.3 Lƣu đồ thuật toán Trừ phổ
Hình 4.2 Trừ phổ
VAD
I=0, nhập Frame đầu tiên
Biến đổi FFT cho các Frame
Tính công suất trung bình ban đầu Phân chia Frame tín hiệu đầu vào
Cập nhật và làm trơn nhiễu
Thực hiện trừ phổ
X(:,i)=max(D,0);
I=I+1;nhập frame tiếp theo Begin
Giảm nhiễu dƣ
End
I> Number of Frame
Speech Flag =0
Đ S
IFFT Suy giảm tín hiệu
S[k]= Beta*[k]
Đ S
4.4 Lƣu đồ thuật toán lọc Wiener
Hình 4.3 Lƣu đồ thuật toán WF.
Đ
Begin
Phân chia Frame tín hiệu đầu vào
Biến đổi FFT cho các Frame Tính công suất nhiễu trung
bình ban đầu VAD
Tính Priori SNR
SpeechFlag = =0 Tính toán lại mức nhiễu
trung bình
Tính Gain Funtion G
Ƣớc lƣợng tín hiệu sạch
Thực hiện IFFT và nối các Frame I > Number of Frame Overlap Adding End Đ S S
4.5 Thực hiện thuật toán
Chúng ta thực hiện xử lý các file âm thanh bị nhiễu, với 2 loại nhiễu đó là nhiễu do tiếng xe hơi và nhiễu do ngƣời nói xung quanh tƣơng ứng với SNR=10dB. Chúng ta đánh giá dựa vào tiêu chí đánh giá cảm quan MOS:
Rating ( Đánh giá)
Quality of Speech ( Chất lƣợng)
3 ( tốt hơn nhiều)Much better
2 ( Tốt hơn)Better
1 Slightly Better(hơi Tốt hơn)
0 About the Same( Giống nhau)
-1 Slightly Worse(hơi tồi tệ )
-2 ( tồi tệ)Worse
-3 Much Worse( Quá tồi tệ)
* Xét file âm thanh c0dBF1_NOISY.waw tín hiệu có nhiễu là do tiếng ồn môi trƣờng xung quanh tạo ra.
Tín hiệu sau khi khử nhiễu bằng phƣơng pháp lọc WF
Hình 4.4 Tín hiệu có nhiễu và sau khi lọc nhiễu bằng WF
- Trƣớc khi xử lý nhiễu bằng thuật toán Trừ phổ:
- Sau khi xử lý triệt nhiễu bằng thuật toán Trừ phổ
* Xét file âm thanh đường hầm3.waw và file âm thanh nhiễu4.waw tín hiệu có nhiễu là do tiếng ồn môi trường xung quanh là tiếng ô tô trong đường hầm tạo ra.
- Với thuật toán WF:
Tín hiệu và nhiễu do đám đông gây ra trƣớc khi khử nhiễu
Tín hiệu sau khi khử nhiễu bằng phƣơng pháp lọc WF
- Với thuật toán SS:
+ Tín hiệu trƣớc khi xử lý nhiễu
* Nhận xét sơ bộ
Sau khi nghe các file âm thanh của tín hiệu sạch, tín hiệu sau khi xử lý nhiễu, dựa trên dạng sóng và spectrogram của tín hiệu sạch, tín hiệu sau khi xử lý triệt nhiễu bằng 2 thuật toán SS và WF, ta có thể đƣa ra một số nhận xét nhƣ sau:
+ Cả hai thuật toán đều có thể xử lý triệt nhiễu tốt hơn ở môi trƣờng có SNR cao hơn, và xử lý tốt hơn đối với tín hiệu bị nhiễu biến đổi chậm và có phân bố đều.
+ Cả hai thuật toán đều có tính hiệu quả giống nhau đối với nhiễu ở mức SNR thấp, nhƣng đối với môi trƣờng có SNR cao hơn thì thuật toán Wiener xử lý triệt nhiễu tốt hơn.
+ Tổng hợp các ý kiến đánh giá tín hiệu đã xử lý so với trƣớc khi xử lý chỉ đạt 0, có thể do cập nhật nhiễu chƣa đúng nên kết quả xử lý chƣa đƣợc tốt. Do vậy cần phải thay đổi một vài thông số trong đoạn Code để cải thiện chất lƣợng xử lý.
4.6 Các thông số ảnh hƣởng đến thuật toán.
* Các thông số chung ảnh hƣởng đến cả 2 thuật toán:
- SP ( Shift Percentage ): là độ dịch khi chia tín hiệu ra từng Segment. Nếu SP không thích hợp thì khi cộng gộp các Segments lại sẽ gây ra hiện tƣợng méo dạng.
- IS ( Initial Silence ): là khoảng lặng ban đầu. Nếu IS quá lớn thì có thể xảy ra trƣờng hợp tiếng nói ban đầu cũng bị xem là nhiễu. Nếu IS quá nhỏ thì lƣợng nhiễu cập nhật ban đầu bị thiếu.
- NoiseMargin và Hangover: là các thông số để quyết định 1 Segment là nhiễu hay tiếng nói. Nếu một Segment bị đánh giá sai thì nhiễu cập nhật sẽ bị sai, do đó kết quả sẽ bị ảnh hƣởng.
* Các thông số ảnh hƣởng đến thuật toán Spectral Subtraction. - NoiseLength: hệ số làm trơn cho quá trình cập nhật nhiễu.
- Gamma ( PowExp ): hệ số dùng để chọn thuật toán là trừ phổ biên độ hay trừ phổ công suất.
* Cácthông số ảnh hƣởng đến thuật toán Wiener:
4.7 Phát triển thuật toán Trừ phổ từ thuật toán Lọc Wiener.
SS based on WF Trừ phổ độ : PowExp=1 Trừ phổ công suất: PowExp=2
Biến đổi FTF Tính Công suất trung bình
đầu vào
I=1, nhập Frame đầu tiên Phân Chia khung (Segment)
Cập nhật và làm trơn biên độ