NHÂN CHẬP KHỐI DÙNG DPT

Một phần của tài liệu Thực hành xử lý số tín hiệu với matlab (Trang 89 - 93)

Nếu nhân chập một dãy có chiều dài hữu hạn, chẳng hạn h[n] , với một dãy có chiều dài vô hạn , chẳng hạn x[n] , như trong trường hợp xử lý tiếng nói, người ta thường phân dãy có chiều dài vô hạn thành những khối có chiều dài nhỏ hơn rồi thực hiện nhân chập dùng DPT với từng khối một sau đó nối các kết quả nhân chập của mỗi khối với nhau để được kết quả tổng thể. Quá trình này được gọi là lọc khối hay phép nhãn chập phân tầng. Có hai phương pháp thực hiện nhân chân chập phân tầng. Đó là phương pháp cộng chồng phủ (overlap - add) và phương pháp loại bỏ chồng phủ (overlap - save).

6.4.1. Phương pháp cộng chồng phủ

Đây là thuật toán lọc tín hiệu lối vào dùng DPT và IDFT. Trong phương pháp này tín hiệu lối vào được phân thành các khối không chồng phủ nhau. Các khối này được nhân chập thẳng với các hệ số của mạch lọc FIR bằng cách dùng thuật toán FFT và IFFT. Nếu chiều dài của mạch lọc là

M và FFT có số điểm tính là N thì (M-1) mẫu cuối cùng của phép nhân chập thẳng được cộng với (M-1) mẫu đầu tiên của dãy tiếp theo . (N-M+1) mẫu đầu tiên của mỗi tổng thu được là dãy lối ra.

MATLAB sử dụng M-file để thực thi phương pháp cộng chồng phủ. Hàm này có hai dạng khác nhau:

y= fftfilt(h,x) và

y = fftfilt(h,x,N) (6.8)

trong đó h là véctơ đáp ứng xung của mạch lọc FIR, X là véctơ tín hiệu lối

vào cần lọc đã được phân thành các phần liên tiếp nhau còn y là tín hiệu lối ra đã được lọc. Trong phiên bản đầu tiên thì dữ liệu lối vào X được phân thành đoạn liên tiếp nhau mỗi đoạn có chiều dài 512 mẫu, trong khi phiên bản thứ hai tín hiệu lối vào được phân thành các đoạn liên tiếp nhau mỗi đoạn có chiều dài N mẫu tuỳ theo người dùng. Ta minh họa phương pháp này bằng ví dụ sau:

Ví dụ Dùng phương pháp nhân chập khối cộng chồng phủ để lọc tín hiệu:

s[n] = 2[n(0,9)"] (6.9) bị nhiễm tạp âm d[n] ngẫu nhiên:

x[n] = s[n] + d[n] (6.10)

Ị 4 Ị

h[n]= - J ] ô [ n - m ] = - [ 1 1 1 1] (6.11)

h[n] là đáp ứng xung đcfn vị của mạch lọc FIR trung bình động có chiều dài M=4. Chưcmg trình P6-6 viết cho ví dụ này.

% Chương trình P6-6

% Nhân chập khối cộng chồng phủ R=64;

d=rand(R,l)-0.5;

for m = l:l:R ;

s(m) = 2*(m -l)*((0.9r(m -l));

x(m) = s(m) + d(m);

92

end

k = 0 :l;R -l;

M=input('chiều dài của mạch lọc trung bình=');

h=ones(l,M )/M ; y = fftfilt(h,x,4);

plot(k,s,'r-,k,y,'b-') xlabel('chỉ số thời gian');

ylabelCBiên độ’)

legend('r-','s[ni', b-','y[n]').

Đồ thị cho trên hình 6.7.

Hình 6.7. Kết quả nhân chập khối cộng chồng phủ.

6.4.2. Phương pháp loại bỏ chồng phủ

Phép nhân chập khối còn được thực hiện theo phương pháp loại bỏ chồng phủ. Trong phương pháp này, phần chồng phủ của kết quả nhân chập với các khối được loại bỏ đi sau đó xếp nối tiếp với nhau để thu được kết quả cuối cùng. Chẳng hạn x[n] được phân thành các khối có chiều dài N mẫu, còn dãy h[n] có chiều dài M mẫu, ở đây M < N. Nếu ta phân x[n] thành các khối không chồng phủ nhau, thì dãy lối ra thu được sẽ có những khoảng mẫu không đúng. Để hiệu đính sự thiếu chính xác này, ta có thể chia x[n] thành những khối chồng phủ nhau, khối sau chồng phủ lên khối trước một lượng đúng bằng (M-1) mẫu, sau đó thực hiện nhân chập với các k h ố i, kết quả thu được chỉ giữ lại (N-M+1) mẫu lối ra cuối cùng, còn các mẫu của phần chồng

phủ thì loại bỏ đi, sau đó nối các dãy lối ra lần lượt lại với nhau để được kết quả tổng thể cuối cùng.

Chẳng hạn:

x[n] = [ l , 2 , 3 , 4 , 5, 6, 7, 8, 9, 10]

h[n] = [ l , 0 , - l ]

Thực hiện phương pháp loại bỏ chồng phủ với N = 6 để tính nhân chập thẳng giữa x[n] với h[n^.

Vì M = 3, nên số mẫu chồng phủ là M-1 = 2 mẫu. Vậy chúng ta chia dãy x[n] thành ba dãy như sau:

x,[n] = [0, 0, 1, 2, 3, 4]

= [3, 4, 5, 6, 7, 8]

x,[n] = [ 7 , 8 , 9 , 1 0 ,0 ,0 ]

Thực hiện nhân chập vòng các khối Xj[n] với h[n] ta được:

y,[n] = x ,[n ]* h [n ]-[-3,-4,1,2,2,2]

y2[n] = x,[n]*h[n] = [-4,-4,2,2,2,2]

y,[n] = x,[n]*h[n] = [7,-8,2,2,-9,-10]

Rõ ràng hai mẫu đầu tiên của kết quả thu được y ị[ n ] là các mẫu chồng phủ bị loại bỏ. Vì vậy kết quả cuối cùn3 của phép nhân chập thẳng giữa x[n] với h[n] là:

y[n] = [1,2,2,2,2,2,2,2,2,2,-9,-10]

Trong MATLAB phươiig pháp loại bỏ chồng phủ được thực hiện nhờ hàm ovrlpsav(x,h,N).

/unction ly] = ov/7/?íớv(x,h,N)

%Nhân chập khối bằng phương pháp loại bỏ chồng phủ ... ...

Lenx = length(x); M = length(h);

MI = M - 1;L = N - M 1 ; h = [h zeros(l, N-M)];

%

94

x= [zeros(l,M l), X, zeros(l,N-])];

K = floor((Lenx+M l-l)/(L));

Y =zeros(K +l,N );

%Nhân chập với các khối liên tiếp nhau for k = 0;K

xk = x(k*L+l:k*L+N);

Y(k+1,:) = circonvt(xk,h,N);

end

Y = Y(:,M:N)';

y=(Y(:))';

Chương trình P6-7 sau đây cho phép thực hiện nhân chập thẳng giữa hai dãy x[n] và h[n] theo phương pháp đó.

% Chương tình P6-7

% Tính nhân chập thẳng dùng phương pháp loại bỏ chồng phủ n=0:9; x=n+l; h = [l,0 ,-l]; N=6;

y=ovrlpsav(x,h,N) y=

1 2 2 2 2 2 2 2 2 2 -9 -10

Một phần của tài liệu Thực hành xử lý số tín hiệu với matlab (Trang 89 - 93)

Tải bản đầy đủ (PDF)

(419 trang)