Thực hành một số lệnh xử lý tín hiệu và hệ thống rời rạc trong miền thời gia, bộ lọc FIR
Trang 1BÀI THỰC HÀNH MATLAB 5
Mục đích: Cho sinh viên làm quen với một số lệnh xử lý tín hiệu và hệ thống rời rạc trong miền thời gia, bộ lọc FIR
Phần 1 Thực hành lệnh xử lý tín hiệu và hệ thống rời rạc trong miền thời gian
Yêu cầu thực hành: Sinh viên tìm hiểu các lệnh với trợ giúp của phần help trong Matlab, thực hiện
các chương trình theo từng bài và phát triền theo các bài tập
Lệnh zeros: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 0
Lệnh ones: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 1
Lệnh rand: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên được phân bố đều
trong khoảng từ 0 đến 1
Lệnh randn: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên theo phân bố Gauss
có giá trị trung bình bằng 0, phương sai bằng 1
Lệnh min: trả về giá trị nhỏ nhất trong một ma trận
Lệnh max: trả về giá trị lớn nhất trong một ma trận
Lệnh fliplr: lộn ngược lại thứ tự các phần tử trong một ma trận theo hướng xuất phát từ phải
qua trái trở thành từ trái qua phải
Lệnh plot và stem: vẽ đồ thị của một dãy số, plot để thể hiện dạng liên tục, stem để thể hiện
dạng rời rạc, thường sử dụng hàm stem để vẽ tín hiệu ở miền n
Lệnh conv: trả về tích chập của 2 vector
Bài 1: Cho dãy xung đơn vị và chương trình vẽ chúng như sau:
Dãy xung đơn vị:
clf;
% Tao day xung don vi
n = -10:20;
Trang 2delta = [zeros(1,10) 1 zeros(1,20)];
subplot(2,1,1);
stem(n,delta);
xlabel('thoi gian roi rac n'); ylabel('bien do'); title('tao day xung don vi');
axis([-10 20 0 1.2]);
Kết quả cho đồ thị sau:
Bài tập:
Từ chương trình vẽ xung đơn vị trên, hãy viết các chương trình vẽ đồ thị của các tín hiệu có dạng
a Dãy nhảy đơn vị u(n) có dạng sau:
Trang 3b Viết dãy dốc đơn vị r(n);
c Viết chương trình biểu diễn hàm mũ thực trên đồ thị
Bài 2: Cho dãy chữ nhật với chiều dài L và chương trình tạo dẫy xung chữ nhật như sau
clf;
%tao day chu nhat
n = 0:20;
L=10;
chunhat= [ones(1,L) zeros(1,20-L+1)];
subplot(2,1,1);
stem(n,chunhat); grid;
xlabel('thoi gian roi rac n'); ylabel('bien do'); title('tao day xung chu nhat');
axis([0 20 0 1.2]);
Kết quả cho đồ thị sau:
Trang 4Bài tập:
Trên cơ sở chương trình dẫy xung chữ nhật đã cho, sinh viên hãy thực hiện những việc sau:
a Viết thêm vào chương trình đó để vừa vẽ đồ thị đã cho và vừa vẽ đồ thị của tín hiệu trễ đi 3 mẫu như sau:
b Thực hiện việc nhập chiều dài L của dãy từ bàn phím
Trang 5Bài 3
Cho một dãy tín hiệu hình sin dạng tương tự và chương trình vẽ tín hiệu hình sin đó Từ tín hiệu hình sin đã cho hãy vẽ tín hiệu hình sin rời rạc với chiều dài dãy phát từ 0 đến 50, với pha ban đầu của tín hiệu là và /2
n=0:40;
f=0.1;
pha=0;
A=1.5;
goc=2*pi*f*n-pha;
x=A*cos(goc);
clf;
plot(n,x);
axis([0 40 -2 2]);
grid;
title('Day tin hieu hinh sin');
xlabel('Chi so thoi gian n');
ylabel('Bien do');
axis;
Kết quả cho đồ thị sau:
Trang 6Bài tập:
Hãy vẽ dạng tín hiệu hình sin trên thành tín hiệu hình sin rời rạc.
Bài 4:
Viết chương trình tính tích chập của hai dãy hữu hạn sau
% Tinh toan va ve tich chap cua 2 day co chieu dai huu han
% Nhap cac day tu ban phim
x=input('Nhap day kich thich x=');
h=input('Nhap dap ung xung cua he thong h=');
y=conv(x,h);
nx=length(x); %chieu dai cua day x
nh=length(h); %Chieu dai cua day h
ny=nx+nh-1; %Chieu dai cua day y
disp(y);
n=0:ny-1;
subplot(2,1,1);
Trang 7xlabel('Thoi gian roi rac n');
ylabel('Bien do');
title('tich chap cua 2 day co chieu dai huu han');
Chạy chương trình và
Nhap day kich thich x=[2 3 1 2 5]
Nhap dap ung xung cua he thong h=[1 2 3 1 2 1]
Kết quả cho đồ thị sau:
Bài tập:
Hãy thay đổi chương trình để vừa vẽ tích chập của dãy và vẽ dãy trễ của tích chập dãy y, với độ trễ được nhập từ bàn phím
Trang 8Phần 2 Thực hành phép biến đổi Fourier,
Yêu cầu thực hành: Sinh viên tìm hiểu các lệnh với trợ giúp của phần help trong Matlab, thực hiện
các chương trình theo từng bài và phát triền theo các bài tập
Bài 1: Cho chuỗi x(n) =[1,1,1,1], tìm biến đổi Fourier thời gian rời rạc, vẽ biên độ và pha
x = [1,1,1,1];
subplot(1,1,1);
w = [0:1:500]*2*pi/500;
[H] = freqz(x,1,w);
magH = abs(H); phaH = angle(H);
phaH(126)=-47.5841*pi/180;
subplot(2,1,1); plot(w/pi,magH); grid
xlabel('frequency in pi units');
ylabel('|X|'); title('Magnitude of the DTFT')
subplot(2,1,2); plot(w/pi,phaH/pi*180); grid
xlabel('frequency in pi units');
ylabel('Degrees'); title('Angle of the DTFT')
Kết quả cho đồ thị sau:
Bài tập: Hãy thay đổi chương trình để thực hiện với chuỗi nhập từ bàn phím
Bài 2: Cho dãy x=cos(0.48πn)+ cos(0.52πn)πn)+ cos(0.52πn)n)+ cos(0.52πn)+ cos(0.52πn)n)
Trang 9Xác định và vẽ phổ Fourier rời rạc của x(n), 0≤n≤10
n=[0:1:99];
x=cos(0.48*pi*n)+cos(0.52*pi*n);
n1=[0:1:9];y1=x(1:1:10);
subplot(2,1,1);stem(n1,y1);title('signal x(n), 0 <= n
<= 9');xlabel('n')
axis([0,10,-2.5,2.5])
Y1=fft(y1);magY1=abs(Y1(1:1:6));
k1=0:1:5;w1=2*pi/10*k1;
subplot(2,1,2);stem(w1/pi,magY1);title('Samples of DTFT Magnitude');
xlabel('frequency in pi units')
Kết quả cho đồ thị sau:
Bài tập: Xác định và vẽ phổ Fourier rời rạc của x(n), 0≤n≤100
Trang 10Phần 2 Thiết kế bộ lọc FIR
Yêu cầu thực hành: Sinh viên tìm hiểu các lệnh với trợ giúp của phần help trong Matlab, thực hiện
các chương trình theo từng bài và phát triền theo các bài tập
Yêu cầu: Thiết kế mạch lọc thông thấp với hàm của sổ Trong Matlab có các hàm cửa sổ Blackman, hamming, hanning, kaiser là:
W=blackman(L)
W=hamming(L)
W=hanning(L)
W=kaiser(L,beta)
Viết một chương trình loc_thong_thap.m để thiết kế mạch lọc thông thấp với cửa sổ hamming với các quy định
Chương trình như sau:
function loc_thong_thap()
%Thiet ke mach loc thong thap
wp=0.2*pi;ws=0.3*pi;
tr_width=ws-wp;
M=ceil(6.6*pi/tr_width)+1;
n=[0:1:M-1];
wc=(ws+wp)/2;
hd=ideal_lp(wc,M);
w_ham=(hamming(M))';
h=hd.*w_ham;
[db,mag,pha,grd,w]=freqz_m(h,[1]);
delta_w=2*pi/1000;
Rp=-(min(db(1:1:wp/delta_w+1)));
As=-round(max(db(ws/delta_w+1:1:501)));
Trang 11subplot(2,2,1);stem(n,hd);title('Dap ung xung ly
tuong');
axis([0 M-1 -0.1 0.3]);
xlabel('n');ylabel('hd[n]');
subplot(2,2,2);stem(n,w_ham);title('Cua so hamming'); axis([0 M-1 0 1.1]);
xlabel('n');ylabel('w(n)');
subplot(2,2,3);stem(n,h);title('Dap ung xung thiet ke');
axis([0 M-1 -0.1 0.3]);
xlabel('n');ylabel('h(n)');
subplot(2,2,4);plot(w/pi,db);title('Dap ung bien do, dB');grid;
axis([0 1 -100 10]);
xlabel('Tan so, w/pi');ylabel('Decibels');
function hd = ideal_lp(wc, M)
% Ideal LowPass filter computation
%
-% [hd] = ideal_lp(wc, M)
% hd = ideal impulse response between 0 to M-1
% wc = cutoff frequency in radians
% M = length of the ideal filter
%
alpha = (M-1)/2;
n = [0:1:(M-1)]
M = n - alpha + eps; % add smallest number to avoid divide by zero
hd = sin(wc*M) / (pi*M);
function [db, mag, pha, grd, w] = freqz_m(b, a)
% Modified version of freqz sunroutine
Trang 12%
-% [db,mag,pha,grd,w] = freqz_m(b, a)
% db = Relative magnitude in dB computed over 0 to pi radians
% mag = absolute magnitude computed over 0 to pi
radians
% pha = Phase response in radians over 0 to pi
radians
% grd = group delay over 0 to pi radians
% w = 501 frequency samples between 0 to pi radians
% b = numerator polynimial of H(z) (for FIR: b=h)
% a = denominator polynomial of H(z) (for FIR: a=[1])
%
[H,w] = freqz(b,a,1000,'whole');
H = (H(1:1:501));
w = (w(1:1:501));
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
grd = grpdelay(b,a,w);
% End of function
Kết quả cho đồ thị sau:
Trang 13Bài tập:
1 Tìm hiểu các function, các lệnh trong chương trình loc_thong_thap.m
2 Thay đổi chương trình lọc thông thấp trên với các hàm cửa sổ khác là Blackman, hanning, kaiser.