Phân tích tín hiệu theo từng frame

Một phần của tài liệu Đồ án Tốt nghiệp: Tìm hiểu thuật toán trừ phổ trong xử lý tiếng nói (Trang 34)

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 :

Hình 3.2 Phân tích tín hiệu thành các frame. 3.3.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 N : kích thước của frame

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.3 Quá trình thực hiện overlap và adding. 3.3.3 Hàm xử lý giảm nhiễu

Trong lý thuyết của Speech enhancement, chúng ta xem hàm xử lý giảm nhiễu là hàm độ lợi hay hàm nén. Và hàm xử lý giảm nhiễu là một số thực và có giá trị trong phạm vi từ 0 đến 1. Hàm xử lý giảm nhiễu đượ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.

3.3.4 Ướ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 toán này sẽ phù hợp môi trường có nhiễu thay đổi cao.

3.3.4.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.

3.3.4.2 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    1 0 ) ( 1 ) ( M i i i Y M D   (3.14)

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 :

      d D Y T i i     | ) ( ) ( | 2 1 log 20 1 (3.15)

Nếu T12dB thì frame đó không phải là frame có tiếng nói, khi đó ta có thể cập nhật lại nhiễu đã được ước lượng trước đó.

3.4 Kết luận chương

Nội dung của chương giúp hiểu được nguyên lý chung của thuật toán Spectral – Subtraction. Để thuật toán có thể thực hiện được thì cần phải phân tích tín hiệu thành các frame và các frame phải xếp chồng lên nhau, và sau khi các frame được xử lý trong miền tần số và chuyển đổi về lại miền thời gian thì các frame đó phải được liên kết lại với nhau theo đúng phương pháp tương ứng với phương pháp phân tích tín hiệu ở đầu vào, quá trình đó gọi là overlap và adding. Chính điều đó sẽ làm cho tín hiệu của chúng ta sau khi xử lý triệt nhiễu sẽ không bị méo, đảm bảo chất lượng của tiếng nói. Nội dung của chương cũng trình bày vấn đề ước lượng nhiễu, đây là cái chính mà speech enhancement cần giải quyết, nó quyết định tính hiệu quả của thuật toán và chất lượng của tiếng nói sau khi xử lý triệt nhiễu.

CHƯƠNG 4: MÔ PHỎNG BẰNG MATLAP

4.1 Giới thiệu chương

Giới thiệu chung về phần mềm matlap và dựa vào lý thuyết đã nghiên cứu được, chương này đã xây dựng các lưu đồ thuật toán và thực hiện thuật toán giảm nhiễu mô phỏng bằng Matlab, sau đó đánh giá các kết quả thu được.

4.2 Giới thiệu chung về phần mềm Matlab

4.2.1 Khái niệm về Matlab

Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây.

Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường. Cho phép lập trình tạo ra những ứng dụng mới.

Cho phép mô phỏng các mô hình thực tế. Phân tích, khảo sát và hiển thị dữ liệu. Với phần mềm đồ hoạ cực mạnh.

Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran

4.2.2 Các tính năng chính

Ngày nay MATLAB đã trở thành công cụ cần thiết cho những nhà kỹ thuật chuyên nghiệp trên toàn thế giới. MATLAB thỏa mãn các yêu cầu then chốt của một hệ thống kỹ thuật, bao gồm:

Khả năng tính toán mạnh.

Cho phép lập trình trên ngôn ngữ bậc cao dựa trên nền tảng các phép toán vectơ, mảng và ma trận.

Có khả năng hiển thị và xử lý đồ họa mạnh( kể cả không gian 3 chiều)

Có thư viện lớn các Toolsbox ứng dụng với lời giải đầy đủ cho các lĩnh vực chuyên môn khác nhau.

Chứa SIMULINK là một môi trường mạnh để mô phỏng các hệ thống động học phi tuyến và tuyến tính.

Có kiến trúc mở, ủng hộ việc xây dựng thêm các module tính toán kỹ thuật theo tiêu chuẩn công nghiệp.

4.3 Quy trình 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 các phương pháp đánh giá của Speech enhancement để 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á.

Xây dựng các 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 giảm nhiễu

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ý

4.4 Lưu đồ thuật toán Spectral Subtraction

Hình 4.2 Lưu đồ thuật toán SS

Tính lại mức nhiễu N

End

I=I+1;nhập frame tiếp theo Begin

Phân chia Frame tín hiệu đầu vào

Tinh cong suat nhieu trung binh N ban đầu

I=0;Nhập frame đầu tiên

VAD

X(:,i)=Beta*Y(:,i)

D=YS(:,i)-N; % Thực hiện trừ phổ

X(:,i)=max(D,0);

Y=biến đổi FFT cho các frame

X = X = Đ = X = S Đ SpeechFlag==0? S I<number of frame

Thực hiên IFFT và nối các frame

4.5 Thực hiện và đánh giá thuật toán

Trong quá trình nghiên cứu và triển khai thuật toán ta nhận thấy các thông số sau ảnh hưởng lớn đến thuật toán:

NoiseMargin: Là ngưỡng để nhận biết nhiễu trong VAD. Mặc định của thuật toán NoiseMargin sẽ là 3db.

IS: Hệ số chỉ thời gian không có tiếng nói đầu tiên trong mỗi file âm thanh được dùng để tính toán nhiễu ban đầu. Do khi kiểm tra những đoạn im lặng ban đầu trong các file sạch ta nhận thấy rằng đối với từng file thì từ 0.15s đến 0.2s là những đoạn im lặng.

Gramma: Là hệ số quyết định nhiễu sẽ được trừ theo biên độ hay công suất. Ta chọn giá trị Gramma là 1 tức là thuật toán Subtraction sẽ trừ nhiễu theo biên độ còn Gramma là 2 thì sẻ trừ nhiễu theo công suất.

Chúng ta thực hiện thuật toán trừ phổ xử lý các file âm thanh bị nhiễu xung quanh tương ứng với SNR =15dB và các tham số: Hamming SP = 0.4, L = 25ms, Gamma = 1 (phổ biên độ), Gamma = 2 (phổ công suất), IS = 0.25ms, Beta = 0.03, Noisemargin = 3, Hangover =8.

Dạng sóng và phổ của tín hiệu sạch:

Hình 4.3 Dạng sóng và phổ của tín hiệu sạch

Sau khi xử lý triệt nhiễu bằng thuật toán với Gamma = 1:

Hình 4.5 Dạng sóng và phổ của tín hiệu sau khi xử lý nhiễu bằng thuật toán trừ phổ biên độ

Sau khi xử lý triệt nhiễu bằng thuật toán với Gamma = 2:

Hình 4.6 Dạng sóng và phổ của tín hiệu sau khi xử lý nhiễu bằng thuật toán trừ phổ công suất.

Chúng ta thực hiện thuật toán trừ phổ xử lý các file âm thanh bị nhiễu xung quanh tương ứng với SNR = 5dB và các tham số: Hamming SP = 0.4, L = 25ms, Gamma = 1 (phổ biên độ), Gamma = 2 (phổ công suất), IS = 0.25ms, Beta = 0.03, Noisemargi = 3, Hangover = 8.

Trước khi xử lý nhiễu:

Hình 4.8 Dạng sóng và phổ của tín hiệu bị nhiễu với SNR = 5dB

Sau khi xử lý triệt nhiễu bằng thuật toán với Gamma = 1:

Hình 4.9 Dạng sóng và phổ của tín hiệu sau khi xử lý nhiễu bằng thuật toán trừ phổ biên độ

Sau khi xử lý triệt nhiễu bằng thuật toán với Gamma = 2:

Hình 4.10 Dạng sóng và phổ của tín hiệu sau khi xử lý nhiễu bằng thuật toán trừ phổ công suất.

Nhận xét

Sau khi nghe 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à phổ của tín hiệu sạch, tín hiệu sau khi xử lý triệt nhiễu bằng thuật

toán SS, ta có thể đưa ra nhận xét như sau:

Thuật toán SS có thể xử lý triệt nhiễu tốt hơn ở môi trường có SNR cao hơn, ví dụ với file nhiễu có mức SNR=15dB cho ra file rất sạch còn với file nhiễu có mức SNR=5dB nhiễu còn tương đối nhiều và xử lý tốt hơn với đối với tín hiệu bị nhiễu biến đổi chậm và có phân bố đều.

Ta nhận thấy rằng đối với hệ số gamma=2 tức là trừ phổ theo công suất thì nhiễu bị nén rất ít, file đầu ra không tốt bằng hệ số gamma=1trừ phổ theo biên độ.

Có tính hiệu quả đối với nhiễu ở mức SNR thấp.

4.6 Kết luận chương

Đối với từng loại nhiễu khác nhau thì tác động của các thuật toán tăng cường là khác nhau.

Đối với từng mức nhiễu khác nhau thì thuật toán cũng tác động cũng khác nhau.

4.7 Matlap Code của thuận toán giảm nhiễu

function [output,Speech]=H_SSBoll79(signal,fs,IS) % OUTPUT=SSBOLL79(S,FS,IS)

% Spectral Subtraction based on Boll 79. Amplitude spectral subtraction % Includes Magnitude Averaging and Residual noise Reduction

%

% INPUT: Signal is the noisy signal, fs is the sampling frequency and IS is the initial

% silence (noise only) length in seconds (default value is .25 sec) %

% OUTPUT: output is enhanced speech signal; Speech is VAD vector % % April-05 % Esfandiar Zavarehei if (nargin<3 | isstruct(IS)) IS=0.05 %seconds end

SP=.4; %Shift percentage is 40% (10ms) %Overlap-Add method works good with this value(.4)

wnd=hamming(W); % wnd=rectwin(W);

% IGNORE THIS SECTION FOR CAMPATIBALITY WITH ANOTHER PROGRAM FROM HERE...

if (nargin>=3 & isstruct(IS))%This option is for compatibility with another programme W=IS.windowsize SP=IS.shiftsize/W; nfft=IS.nfft; wnd=IS.window; if isfield(IS,'IS') IS=IS.IS; else IS=.25; end end

% ...IGNORE THIS SECTION FOR CAMPATIBALITY WITH ANOTHER PROGRAM T0 HERE

NIS=fix((IS*fs-W)/(SP*W) +1);%number of initial silence segments Gamma=2;% (1 for magnitude spectral subtraction 2 for power spectrum subtraction)

disp(' Segmentation');

y=segment(signal,W,SP,wnd); disp(' FFT');

Y=fft(y,nfft);

YPhase=angle(Y(1:fix(end/2)+1,:)); %Noisy Speech Phase Y=abs(Y(1:fix(end/2)+1,:)).^Gamma;%Specrogram

numberOfFrames=size(Y,2); FreqResol=size(Y,1);

%size(Y),

disp(' Noise Initialization');

N=mean(Y(:,1:NIS)')'; %initial Noise Power Spectrum mean NRM=zeros(size(N));% Noise Residual Maximum (Initialization) NoiseCounter=0;

NoiseLength=9;%This is a smoothing factor for the noise updating Beta=0.03

disp(' Magnitude Averaged'); YS=Y; %Y Magnitude Averaged for i=2:(numberOfFrames-1)

YS(:,i)=(Y(:,i-1)+Y(:,i)+Y(:,i+1))/3; end

disp(' Spectral Subtraction');

X=zeros(FreqResol,numberOfFrames); for i=1:numberOfFrames

[NoiseFlag, SpeechFlag, NoiseCounter,

Dist]=vad(Y(:,i).^(1/Gamma),N.^(1/Gamma),NoiseCounter); %Magnitude Spectrum Distance VAD

Speech(i,1)=SpeechFlag; if SpeechFlag==0

N=(NoiseLength*N+Y(:,i))/(NoiseLength+1); %Update and smooth noise NRM=max(NRM,YS(:,i)-N);%Update Maximum Noise Residue

X(:,i)=Beta*Y(:,i); else

D=YS(:,i)-N; % Specral Subtraction

if i>1 && i<numberOfFrames %Residual Noise Reduction for j=1:length(D)

if D(j)<NRM(j)

D(j)=min([D(j) YS(j,i-1)-N(j) YS(j,i+1)-N(j)]); end

X(:,i)=max(D,0); end end disp(' Synthesis'); output=OverlapAdd2(X.^(1/Gamma),YPhase,W,SP*W); function ReconstructedSignal=OverlapAdd2(XNEW,yphase,windowLen,ShiftLen); %Y=OverlapAdd(X,A,W,S);

%Y is the signal reconstructed signal from its spectrogram. X is a matrix %with each column being the fft of a segment of signal. A is the phase %angle of the spectrum which should have the same dimension as X. if it is

Một phần của tài liệu Đồ án Tốt nghiệp: Tìm hiểu thuật toán trừ phổ trong xử lý tiếng nói (Trang 34)