Professional Documents
Culture Documents
BÀI 1: ..................................................................................................................................................... 2
a.Với N = 1, vẽ đáp ứng xung của bộ lọc (100 mẫu đầu tiên), vẽ đáp ứng biên độ của bộ lọc và group
delay. .................................................................................................................................................. 2
b.Vẽ giản đồ cực và zero của bộ lọc. (Học viên có thể tham khảo hàm root trong Matlab).................... 5
c.Trong file bail.mat có chứa một biến là speech (một tín hiệu được lấy mẫu với tần số fs = 11025 Hz).
Sử dụng bộ lọc ở câu a để lọc tín hiệu này và vẽ so sánh xem tín hiệu có giống/khác tín hiệu ban đầu. . 6
d.Với N = 50, vẽ đáp ứng xung của bộ lọc (5000 mẫu đầu tiên), vẽ đáp ứng biên độ của bộ lọc và
group delay. ........................................................................................................................................ 8
f.Thực hiệu lại câu b và so sánh kết quả khi sử dụng 02 bộ lọc này....................................................... 9
BÀI 2 .................................................................................................................................................... 11
Câu a: Tìm bậc của bộ lọc ................................................................................................................. 12
Câu c: Vẽ đáp ứng biên độ của bộ lọc. Vẽ giản đồ cực và zero của bộ lọc. Vẽ đáp ứng xung của bộ lọc
(100 trọng số đầu tiên)....................................................................................................................... 16
Câu d: Thực hiện việc lọc tín hiệu ban đầu. So sánh kết quả khi thực hiện bằng 03 bộ lọc trên. Rút ra
nhận xét. ............................................................................................................................................ 25
BÀI 3: ................................................................................................................................................... 28
a) Phổ tín hiệu trước khi lấy mẫu: .................................................................................................. 29
b) Tính và vẽ phổ tín hiệu trước khi lấy mẫu:.................................................................................. 31
BÀI 1:
Trong nội dung chương trình học, khi một tín hiệu đi qua một bộ lọc, người ta thường chỉ quan
tâm tới việc biên độ của tín hiệu sẽ bị thay đổi theo đáp ứng của bộ lọc mà bỏ qua sự ảnh hưởng
của việc thay đổi góc pha của tín hiệu do đáp ứng của bộ lọc. Điều này là vì quan điểm tai người
ít nhạy với sự thay đổi về góc pha của tín hiệu âm thanh. Điều đó có nghĩa rằng nếu một tín hiệu
âm thanh được lọc bởi một bộ lọc all-pass (cho qua mọi tần số) thì tai người sẽ không nhận thấy
sự thay đổi. Bài tập này dùng để kiểm chứng điều này. Cho một bộ lọc all-pass có hàm truyền có
dạng:
Các chỉ số ak và bk có được lưu trong các biến a và b có trong file bail.mat. Học viên sử dụng
Matlab để load file này để có được các chỉ số này. Chú ý: a(k+1) = ak và b(k+1) = bk.
a.Với N = 1, vẽ đáp ứng xung của bộ lọc (100 mẫu đầu tiên), vẽ đáp ứng biên độ của bộ lọc và
group delay.
%Dap ung xung
tu = b; %Tu so
mau = a; %Mau so
figure(1)
subplot(2,2,1);
range = 0:1:100;
h = impz(tu,mau,range+1); %Convert H(z) to h(n)
stem(range,h); %Ve do thi ham roi rac
title('Đáp ứng xung h(n)');
xlabel('n'); ylabel('h(n)');
%Group Delay
subplot(2,2,[3,4])
plot(w/pi,grpdelay(tu,mau,w));
grid on;
title('Group delay');
xlabel ('frequency in pi units');
ylabel ('Group delays in samples');
b.Vẽ giản đồ cực và zero của bộ lọc. (Học viên có thể tham khảo hàm root trong Matlab)
root : hàm dùng để tìm nghiệm trong mathlab
zplane: hàm dùng để biểu diễn trên đồ thị mặt phẳng z
tu = b;
mau = a;
figure(1);
pole = roots(tu);
zero = roots(mau);
subplot(2,2,1);
zplane(pole,zero);
title('bieu do cuc-zero theo vong tron don vi');
xlabel('truc thuc');
ylabel('truc ao');
subplot(2,2,2)
plot(real(pole), imag(pole), 'gx', real(zero), imag(zero), 'bo');
title('bieu do cuc-zero');
xlabel('Re');
ylabel('Im');
grid on;
c.Trong file bail.mat có chứa một biến là speech (một tín hiệu được lấy mẫu với tần số fs =
11025 Hz). Sử dụng bộ lọc ở câu a để lọc tín hiệu này và vẽ so sánh xem tín hiệu có giống/khác
tín hiệu ban đầu.
Hàm speech
Ở câu này, chúng em sử dụng hàm filter để thực hiện việc so sánh
Filter:
- Công dụng:
Lọc dữ liệu với đáp ứng xung không xác định hay đáp ứng xung xác định.
- Cú pháp:
y = filter(b,a,X)
[y,zf] = filter(b,a,X)
[y,zf] = filter(b,a,X,zi)
y = filter(b,a,X,zi,dim)
[.] = filter(b,a,X,[ ],dim)
- Giải thích:
Lệnh fiter lọc dữ liệu tuần tự sử dụng bộ lọc số cho các ngõ vào thực và phức.
y = filter(b,a,X) lọc dữ liệu trong vector X với bộ lọc được mô tả bởi vector hệ số tử số b
và vector hệ số mẫu số a. Nếu a(1) không bằng 1, bộ lọc sẽ chuẩn hóa hệ số lọc bởi a(1).
Nếu a(1) bằng 0 thì sẽ báo lỗi.
Nếu X là một ma trận, bộ lọc sẽ thực hiện trên các cột của X. Nếu X là một mảng đa chiều,
bộ lọc sẽ thực hiện theo chiều duy nhất.
[y,zf] = filter(b,a,X) tạo ma trận điều kiện cuối cùng zf của bộ trễ. Ngõ ra zf là một vector
của max(size(a),size(b)) hoặc một tập hợp các vector với mỗi vector là một cột của X.
tu = b; %tu so H(z)
mau = a; %mau so H(z)
d.Với N = 50, vẽ đáp ứng xung của bộ lọc (5000 mẫu đầu tiên), vẽ đáp ứng biên độ của bộ
lọc và group delay.
Hz = tf(b,a,1/fs,'Variable','z^-1'); %Ham truyen
figure(1);
subplot(2,2,1);
Hz = Hz^50;
ts = Hz.Numerator{1, 1};
ms = Hz.Denominator{1, 1};
impz(ts,ms,5000);
grid on;
title('Dap ung xung cua he thong');
%
[h1,w1] = freqz(ts,ms,5000,fs);
mag1 = 20*log10(abs(h1));
phase1 = angle(h1)*180/pi;
subplot(2,2,2);
plot(w1/pi,mag1);
xlabel('tan so');
ylabel('bien do');
title('Dap ung bien do cua he thong');
grid on;
axis tight;
subplot(2,2,3);
plot(w1/pi,phase1);
xlabel('Frequency');
ylabel('Phase');
title('Dap ung pha cua he thong');
grid on;
axis tight;
%
subplot(2,2,4);
grpdelay(ts,ms,5000,fs);
grid on;
title('Do tre group delay');
f.Thực hiệu lại câu b và so sánh kết quả khi sử dụng 02 bộ lọc này.
-Vẽ biểu đồ cực zero của N=50
figure(2);
pole = roots(tu);
zero = roots(mau);
subplot(2,2,1);
zplane(pole,zero);
title('bieu do cuc zero');
xlabel('Re');
ylabel('Im');
subplot(2,2,2);
plot(real(pole), imag(pole), 'gx', real(zero), imag(zero), 'bo');
title('bieu do cuc zero');
xlabel('Re');
ylabel('Im');
grid on;
-So sánh
BÀI 2
1.1. Đề bài
Mục tiêu của bài tập này là để sinh viên biết cách thiết kế một bộ lọc FIR/IIR và thấy được đáp
ứng biên độ của bộ lọc thực tế sẽ khác như thế nào so với bộ lọc lý tưởng. Trong file bai2.mat có
chứa một biến là noisy. Đây là âm thanh được lấy mẫu với tần số 44100 Hz. Âm thanh này là sự
kết hợp của một giọng nói có tần số dưới 4KHz và một âm thanh nhiễu với tần số lớn hơn 4KHz.
Để nghe được giọng nói, ta cần lọc âm thanh đã cho với một bộ lọc thông thấp có cần số cắt là
4KHz. Thiết kế 01 bộ lọc FIR sử dụng của sổ Kaiser, 01 bộ lọc IRR bằng phương pháp Betterworth
và 01 bộ lọc IRR bằng phương pháp Chebyshev type II với một số yêu cầu:
=> N = 95
[n,Wc] = buttord(Wp,Ws,Rp,Rs);
%Thong so
fpass = 2500; %don vi Hz
fstop = 4000; %don vi Hz
bandpass_ripple = 3; %Rp = 3dB
bandstop_ripple = 55; %Rs = 55dB
%Tim Ws,Wp,Rp,Rs
Wp = (2*pi*fpass)/(2*pi*fs);
Ws = (2*pi*fstop)/(2*pi*fs);
Rp = bandpass_ripple;
Rs = bandstop_ripple;
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
freqz(hh)
*Vẽ đáp ứng xung với N = 100 mẫu
%He so b va a
[b,a] = butter(n,Wc,'low');
figure(1);
subplot(2,2,1);
plot(w/pi,20*log10(abs(h)));
grid on;
title('Dap ung bien do');
xlabel(' frequency (x pi)');
ylabel('dB');
subplot(2,2,1);
plot(w/pi,20*log10(abs(h))); grid on;
title('Magnitude response');
xlabel('frequency in pi units');
ylabel('Magnitude in dB');
%he so b va a
[b,a] = cheby2(n,Rs,Wc,'low');
%Ve Input
subplot(2,1,1);
plot(noisy); grid on
title('Input');
xlabel('t');
ylabel('A');
%Ve output
y = filter(b,1,noisy);
subplot(2,1,2);
plot(y); grid on
title('Output');
xlabel('t');
ylabel('A');
Bộ lọc butterworth
[n,Wc] = buttord(Wp,Ws,Rp,Rs);
%he so b va a
[b,a] = butter(n,Wc,'low');
%Ve Input
subplot(2,1,1);
plot(noisy); grid on
title('Input');
xlabel('t');
ylabel('A');
%Ve output
y = filter(b,a,noisy);
subplot(2,1,2);
plot(y); grid on
title('Output');
xlabel('t');
ylabel('A');
Bộ lọc chebyshev
%he so b va a
[b,a] = cheby2(n,Rs,Wc,'low');
%Ve Input
subplot(2,1,1);
plot(noisy); grid on
title('Input');
xlabel('t');
ylabel('A');
%Ve output
y = filter(b,a,noisy);
subplot(2,1,2);
plot(y); grid on
title('Output chebyshev');
xlabel('t');
ylabel('A');
Nhận xét : ta thấy được rằng các phương pháp hầu hết sẽ lọc được nhiễu.
Tuy nhiên sẽ có độ phẳng khác nhau giữa các phương pháp
BÀI 3:
Gọi ABCD lần lượt là trung bình cộng 4 số cuối cùng của MSSV của các thành viên trong nhóm (Vd: giả
sử nhóm có 02 thành viên, 4 chữ số cuối cùng của 2 thành viên lần lượt là A1B1C1D1 và A2B2C2D2 thì
ABCD = round((A1B1C1D1+ A2B2C2D2)/2). Tương tự cho nhóm có nhiều thành viên hơn). Nếu số nào
trong các số A, B, C, D có giá trị là 0 thì sinh viên tự động cộng thêm 5 cho số đó. (Vd: A = 0 sẽ điều chỉnh
thành A = 5).
Cho tín hiệu x(t) = 5cos (2,vB/) + 4sin (2ftCt) + 3sin (2ftDt) trong đó t có đơn vị (ms). Tín hiệu được
a/ Thực hiện vẽ phổ của tín hiệu trước và sau khi lấy mẫu theo lý thuyết (Thực hiện tính phổ của tín hiệu
trước khi lấy mẫu bằng tay, sau đó dùng hàm stem để vẽ phổ này. Tương tự đối với phổ của tín hiệu sau
khi lấy mẫu).
b/ Sử dụng matlab, tính phổ của tín hiệu trước và sau khi lấy mẫu (bằng hàm fft hoặc dft). Thực hiện vẽ
phổ biên độ của tín hiệu trước và sau khi được lấy mẫu với kết quả vừa tính được. So sánh với kết quả tìm
được ở câu trên.
c/ Trước khi lấy mẫu và phục hồi lý tưởng, tín hiệu được đi qua một bộ tiền lọc thông thấp. Tìm tín hiệu
sau khi phục hồi. Thông số của bộ lọc thông thấp như sau: bộ lọc có biên độ là 5 trong khoảng [0, f ]; suy
giảm 10xA (dB/octave) (10 lần A) trong khoảng (f, f ] và 30xA (dB/octave) trong khoảng (f, /); trong đó
f (KHz) = min (A,B,C,D) và f (KHz) = f + 5 . d/ Sử dụng matlab, vẽ phổ biên độ của bộ tiền lọc, phổ
biên độ của tín hiệu trước và sau khi đi qua bộ lọc.
e/ Lấy ABCD có giá trị như trên. Nếu số nào trong các số A, B, C, D có giá trị là 0 thìsinh viên tự
động cộng thêm 5 cho số đó. (Vd: A = 0 sẽ điều chỉnh thành A = 5). Nếu có 02 số có giá trị bằng
nhau thì tự động một số cộng thêm một số sao cho khác 3 số còn lại. Vd: 1056 => 1256 hoặc 1856 đều
được. Sắp xếp 4 số trên thành thứ tự từ nhỏ đến lớn, tạm gọi là DEFG.
Thiết kế 02 bộ lọc thông dải theo các yêu cầu sau (bộ lọc FIR sử dụng cửa sổ Kaiser và bộ lọc IRR
Chebyshev type II):
• Biên độ của dải thông dao động: G (dB) - G+3 (dB) (Vd G = 3 thì biên độ dải thông là 3 - 6dB).
• Biên độ của dải chắn cao nhất là: -15xD (dB) (Vd D = 3 thì biên độ dải chắn không vượt quá -
45dB).
• Cạnh dưới của dải chắn: fsa = Tĩ / G
• Cạnh dưới của dải thông: f = Tĩ / F
• Cạnh trên của dải thông: fpb = Tĩ / E
• Cạnh trên của dải chắn: f, = Tĩ / D
Tìm bậc của 02 bộ lọc này. Vẽ đáp ứng biên độ của 02 bộ lọc này. Tiến hành lọc tín hiệu x (t) với 02 bộ
lọc vừa thiết kết và vẽ hình so sánh kết quả đầu ra.
𝑓𝑆 = 𝑟𝑜𝑢𝑛𝑑(𝑚𝑒𝑎𝑛(9,3,5)) = 6 KHz