You are on page 1of 26

Bài tập bài thực hành 1

Bài 1: - Tạo 100 mẫu tín hiệu điện áp có biểu thức: . Biết ,
tần số rời rạc hóa Fs=1000 (Hz).

- Sử dụng các lệnh plot, stem để vẽ đồ thị tín hiệu nêu trên, trên đồ thị có ghi chú như hình 4, kèm theo
tên học viên. Học viên tự chọn số lượng mẫu để hiển thị, sao cho hình dễ quan sát.

a, Sử dụng lệnh plot để vẽ đồ thị tín hiệu

A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*cos(2*pi*F*n/Fs);
plot(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) :Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');

A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*cos(2*pi*F*n/Fs);
plot(n/Fs, s);
title('tin hieu hinh sin A=10(v), Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');

A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*cos(2*pi*F*n/Fs);
stem(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
Bài tập 2: - Tạo 100 mẫu tín hiệu điện áp có biểu thức: . Biết ,
tần số rời rạc hóa Fs=1000 (Hz).

- Sử dụng các lệnh plot, stem để vẽ đồ thị tín hiệu nêu trên, trên đồ thị có ghi chú như hình 4, kèm theo
tên học viên. Học viên tự chọn số lượng mẫu để hiển thị, sao cho hình dễ quan sát.

A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*sin(2*pi*F*n/Fs);
plot(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*sin(2*pi*F*n/Fs);
plot(n/Fs,s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
F=100;
Fs=1000;
anfa=0.001;
s=A*exp((-anfa)*n/Fs).*sin(2*pi*F*n/Fs);
stem(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
Bài 3:
- Tạo 100 mẫu tín hiệu điện áp có biểu thức: . Biết
, tần số rời rạc hóa Fs=1000 (Hz).

- Sử dụng các lệnh plot, stem để vẽ đồ thị tín hiệu nêu trên, trên đồ thị có ghi chú như hình 4, kèm theo
tên học viên ở phần tiêu đề (title). Học viên tự chọn số lượng mẫu để hiển thị, sao cho hình dễ quan sát.

A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*cos(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
plot(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*cos(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
plot(n/Fs,s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*cos(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
stem(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
Bài 4: - Tạo 100 mẫu tín hiệu điện áp có biểu thức: . Biết , tần số rời rạc hóa Fs=1000 (Hz).

- Sử dụng các lệnh plot, stem để vẽ đồ thị tín hiệu nêu trên, trên đồ thị có ghi chú như hình 4,
kèm theo tên học viên ở phần tiêu đề (title). Học viên tự chọn số lượng mẫu để hiển thị, sao cho
hình dễ quan sát.

A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*sin(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
plot(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*sin(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
plot(n/Fs,s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
A=10;
n=1:100;
Fs=1000;
anfa=0.001;
F=100+10*sin(2*pi*5*n/Fs);
s=A*cos(2*pi*F.*n/Fs);
stem(s);
title('tin hieu hinh sin A=10, Fs=1000(Hz) : Nguyen Manh Long’);
xlabel('thoi gian(s)');
ylabel('volt');
Bài tập thực hành 2
Bài 1 Mỗi học viên lấy ngày, tháng, năm sinh của mình để tạo ra dãy rời rạc theo qui tắc sau:

Năm – tháng - ngày sinh. Sau đó sử dụng DFT phân tích phổ cho dãy này. Vẽ các đồ thị
và ghi chú đầy đủ theo hướng dẫn, bao gồm cả tên học viên.

Học viên Nguyễn mạnh Long sinh năm 1989, tháng 06, ngày 20 thì dãy rời rạc là
x= [1 9 8 9 0 6 2 0]

Chương trình M-file

x=[1 9 8 9 0 6 2 0];

X=fft(x);

pho_bien_do=abs(X);

stem(pho_bien_do);

title('Do thi pho bien do__ Nguyen Manh Long’);


x=[1 9 8 9 0 6 2 0];
X=fft(x);
pho_pha=angle(X);
stem(pho_pha);
title('Do thi pho pha__ Nguyen Manh Long’);
x=[1 9 8 9 0 6 2 0];
X=fft(x);
f=2*pi/8*[0:1:7];
pho_bien_do=abs(X);
stem(f,pho_bien_do);
title('Do thi pho bien do, truc hoanh tan so chuon hoa__ Nguyen Manh Long’);

x=[1 9 8 9 0 6 2 0];
X=fft(x);
f=2*pi/8*[0:1:7];
pho_pha=angle(X);
stem(f,pho_pha);
title('Do thi pho pha, truc hoanh tan so chuon hoa__ Nguyen Manh Long’);
Bài 2:

- Hãy nêu rõ tác dụng và ý nghĩa của các dòng lệnh phân tích phổ cho tín hiệu thoại. Vì sao lại chỉ
cần lấy một nửa số mẫu?
- Mỗi học viên tự tạo một file .wav , sau đó thực hiện phân tích phổ cho file này. Vẽ đồ thị phổ
biên độ theo hướng dẫn. Nội dung file: “ Tên tôi là…….. . Lớp…….”.
-Tác dụng và ý nghĩa của dòng lệnh phân tích phổ cho tín hiệu thoại

1. Giải thích các lệnh:


>> Fs=8000; % Tần số rời rạc hóa bằng 8KHz.

>> N=length(s); %Độ dài của dãy tín hiệu rời rạc hóa.

>> M=round(N/2); %Lấy một nửa độ dài mẫu.

>> S=fft(s); %Biến đổi DFT của tín hiệu s.

>> f=fs*(1:M)/N; % Lấy ra lưới tần số vật lý ( đo bằng Hz)

>> PhoBD=abs(S); % Xác định phổ biên độ của tín hiệu s.

>> Pho=PhoBD(1:M);% Chỉ lấy một nửa số mẫu.

>> plot(f,Pho); % Vẽ phổ của tín hiệu s.


- Ở đây ta chỉ lấy một nửa số mẫu vì tín hiệu âm thanh ở đây là tín hiệu thực, do
đó phổ biên độ của nó đối xứng, ta chỉ cần lấy một nửa số mẫu để nghiên cứu
là được. Một nửa số mẫu còn lại hoàn toàn giống so với phần phổ ta nghiên
cứu.

Vẽ đồ thị phổ biên độ


Chương trình M-file

[s,fs]=wavread('Long');

N=length(s);

M=round(N/2);

S=fft(s);

f=fs*(1:M)/N;

pho_bien_do= abs(S);

pho=pho_bien_do(1:M);

plot(f,pho);

title(‘do thi pho bien do__ Nguyen Manh Long’);

Đồ thị
Từ hình ta nhận thấy phổ của file âm thanh này tập trung chủ yếu ở khu vực từ 300 Hz tới 2000
Hz., tần số cực đại của phổ khoảng 3500 Hz.

Bài thực hành 3

Bài 1: Khai thác đầy đủ lệnh fir1

Fir1 thực hiện theo phương pháp cổ điển của giai đoạn cửa sổ tuyến tính kỹ thuật số thiết
kế bộ lọc FIR [1]. Nó thiết kế các bộ lọc trong dải thông thấp tiêu chuẩn, dải thông cao, dải
thông, và cấu hình dải chặn. Theo mặc định các bộ lọc được chuẩn hoá để đáp ứng cường độ của
bộ lọc tại các tần số trung tâm của dải thông là 0 dB.

Các cú pháp:

b = fir1(n,Wn)

b = fir1(n,Wn,'ftype')

b = fir1(n,Wn,window)

b = fir1(n,Wn,'ftype',window)

b = fir1(...,'normalization')

a/ Lệnh B = FIR1(N,Wn)
lệnh này cho phép tổng hợp lọc FIR thông thấp, cửa sổ mặc định là Hamming. Với N là bậc của mạch
lọc, Wn là tần số cắt chuẩn hóa, 0 < Wn < 1. Giá trị 1 tương ứng với một nửa tần số rời rạc hóa, đây là
điểm khác biệt với lý thuyết. Tần số cắt tương ứng với đặc tính biên độ tần số giảm xuống -6dB.
Nếu WN là một vector hai yếu tố, WN = [w1 W2], fir1 trả về một bộ lọc với dải thông BandPass w1
<<W2. Nếu WN là một vector đa yếu tố, WN = [w1 W2 w3 W4 W5 ... ] WN, fir1 để trả về một n lọc với
nhiều băng băng 0 <<w1, w1 <?? <W2, ..., <WN? <1. Theo mặc định, các bộ lọc được thu nhỏ để các
trung tâm của dải thông đầu tiên có cường độ chính xác 1 sau khi cửa sổ.

Ví dụ: B= fir1(100,0.5)

Sẽ tổng hợp lọc FIR thông thấp, cửa sổ Hamming có bậc 100, tần số cắt chuẩn hóa bằng 0.5. Như vậy
lệnh này lấy ra vector B có 101 hệ số lọc.

b/ Lệnh B = FIR1(N,Wn,'ftype') : xác định một loại bộ lọc. Với ftype là các kiểu:

 'high' cho phép thiết kế bộ lọc thông cao với WN tần số cắt.
      'Stop' cho phép thiết kế một bộ lọc dải chặn, nếu WN = [w1 W2]. vớiW1 < W < W2, thì lệnh B =
FIR1(N,Wn) sẽ thiết kế lọc thông dải. Các tần số cắt là W1, W2.
      "DC-1" để làm cho các dải đầu tiên của dãy băng một bộ lọc một dải thông.
      'DC-0 "để làm cho các dải tần đầu tiên của dãy băng một bộ lọc một dải chặn.
fir1 luôn luôn sử dụng một bộ lọc ngay cả bộ lọc dải thông cao và cấu hình dải chặn. Điều này là do các
bộ lọc đơn lẻ, đáp ứng tần số của tần số Nyquist là 0, mà là không thích hợp cho dải thông cao và bộ lọc
dải chặn. Nếu ta chỉ định một giá trị n lẻ, fir1 gia tăng bằng 1.

c/ b = fir1 (n, WN, window) sử dụng các cửa sổ theo quy định tại cửa sổ vector cột cho thiết kế. Cửa sổ
vector phải la n +1 phần tử dài. Nếu cửa sổ không có quy định, fir1 sử dụng một cửa sổ Hamming có độ
dài n+1
b = fir1 (n, WN, 'ftype', cửa sổ) chấp nhận cả hai kiểu thông số ‘ftype 'và các thông số cửa sổ.
b = fir1 (...,' normalization') xác định có hoặc không có biên độ lọc là bình thường. Chuỗi 'bình thường'
có thể là sau đây:
      'scale’(mặc định): Chuẩn hóa các bộ lọc để đáp ứng cường độ của bộ lọc tại các tần số trung tâm của
dải thông là 0 dB.
      'Noscale': Không bình thường hóa các bộ lọc.
Việc chậm trễ nhóm FIR các bộ lọc được thiết kế bởi fir1 là n / 2.
Thuật toán
fir1 sử dụng phương pháp thiết kế cửa sổ của bộ lọc FIR [1]. Nếu w (n) biểu thị một cửa sổ, nơi mà 1 = n
= N, và đáp ứng xung của bộ lọc lý tưởng là h (n), trong đó h (n) là biến đổi Fourier nghịch đảo của phản
ứng tần số lý tưởng, sau đó các cửa sổ kỹ thuật số hệ số bộ lọc được cho bởi

b(n)=w(n)h(n) 1≤n≤N

Bài 2: Tổng hợp lọc FIR thông cao sử dụng phương pháp cửa sổ, dùng cửa sổ Hamming. Biết bậc của
mạch lọc bằng 50, tần số cắt bằng 2000 Hz. Cho tần số rời rạc hóa bằng 18000 Hz. Khảo sát đặc tính tần
số của mạch lọc đã tổng hợp.

Giải: Tần số chuẩn hóa 1.0 ứng với 18000/2= 9000 Hz. Vậy 2000 Hz ứng với tần số chuẩn hóa
bằng 2/9.
Tìm các hệ số của mạch lọc

>> B= fir1(50,2/9,'high')

B=

Columns 1 through 7

0.0010 0.0010 0.0004 -0.0006 -0.0018 -0.0026 -0.0022

Columns 8 through 14

-0.0000 0.0035 0.0067 0.0073 0.0035 -0.0043 -0.0131

Columns 15 through 21

-0.0179 -0.0140 0.0000 0.0201 0.0373 0.0403 0.0199

Columns 22 through 28

-0.0257 -0.0890 -0.1546 -0.2041 0.7785 -0.2041 -0.1546

Columns 29 through 35

-0.0890 -0.0257 0.0199 0.0403 0.0373 0.0201 0.0000

Columns 36 through 42

-0.0140 -0.0179 -0.0131 -0.0043 0.0035 0.0073 0.0067

Columns 43 through 49

0.0035 -0.0000 -0.0022 -0.0026 -0.0018 -0.0006 0.0004

Columns 50 through 51

0.0010 0.0010

Như vậy ta nhận được 51 hệ số lọc. Tuy nhiên độ chính xác chỉ đạt tới 4 chữ số thập phân. Để
tăng độ chính xác biểu diễn, ta gõ vào lệnh

>> format long

>> B

B=

Columns 1 through 3
0.001004039126333 0.000961427056832 0.000447489694822

Columns 4 through 6

-0.000556248498806 -0.001798707649275 -0.002633283730597

Columns 7 through 9

-0.002206107586846 -0.000000000000000 0.003535940855221

Columns 10 through 12

0.006748663222255 0.007318301833188 0.003532171142842

Columns 13 through 15

-0.004284274759620 -0.013080430245999 -0.017861496791423

Columns 16 through 18

-0.013969960897358 0.000000000000000 0.020133281812202

Columns 19 through 21

0.037347343574746 0.040252994666014 0.019879071851403

Columns 22 through 24

-0.025692072095988 -0.089001649129874 -0.154613907503851

Columns 25 through 27

-0.204050913562666 0.778492805056926 -0.204050913562666

Columns 28 through 30

-0.154613907503851 -0.089001649129874 -0.025692072095988

Columns 31 through 33

0.019879071851403 0.040252994666014 0.037347343574746

Columns 34 through 36

0.020133281812202 0.000000000000000 -0.013969960897358

Columns 37 through 39

-0.017861496791423 -0.013080430245999 -0.004284274759620


Columns 40 through 42

0.003532171142842 0.007318301833188 0.006748663222255

Columns 43 through 45

0.003535940855221 -0.000000000000000 -0.002206107586846

Columns 46 through 48

-0.002633283730597 -0.001798707649275 -0.000556248498806

Columns 49 through 51

0.000447489694822 0.000961427056832 0.001004039126333

Nhận thấy các hệ số lọc được cho với độ chính xác cao hơn nhiều.

Khảo sát đặc tính tần số của mạch lọc:

Sử dụng hàm freqz (B)

>> freqz(B)

Nhấn Enter, ta nhận được hình:

BÀI 3:
Tổng hợp lọc FIR thông dải sử dụng phương pháp cửa sổ, dùng cửa sổ Hamming. Biết bậc của
mạch lọc bằng 50, tần số cắt 1 bằng 4000 Hz, tần số cắt 2 bằng 6000 Hz. Cho tần số rời rạc hóa
bằng 18000 Hz. Khảo sát đặc tính tần số của mạch lọc đã tổng hợp.

Giải: Tần số chuẩn hóa 1.0 ứng với 18000/2= 9000 Hz. Vậy 4000 Hz ứng với tần số chuẩn hóa
bằng 4/9; 6000 Hz ứng với tần số chuẩn hóa bằng 2/3.

Tìm các hệ số của mạch lọc

>> B=fir1(50,[4/9 2/3]); % Hoặc dùng lệnh B=fir1(50,[4/9 2/3],’bandpass’).

B=

Columns 1 through 3

0.001227211474848 -0.000957972981406 -0.001966996990306

Columns 4 through 6

0.002445059932491 0.001792245513802 -0.003218595696088

Columns 7 through 9

-0.000406207578962 -0.000000000000000 0.000651067963647

Columns 10 through 12

0.008248719326788 -0.007292009701779 -0.015526100573050

Columns 13 through 15

0.018832066202465 0.013033436776918 -0.021831653015801

Columns 16 through 18

-0.002572269833145 -0.000000000000000 0.003707113701194

Columns 19 through 21

0.045648707692700 -0.040108379555910 -0.087380949671490

Columns 22 through 24

0.112932720177144 0.088681896937642 -0.188980644761089

Columns 25 through 27

-0.037571616215634 0.221627414065460 -0.037571616215634


Columns 28 through 30

-0.188980644761089 0.088681896937642 0.112932720177144

Columns 31 through 33

-0.087380949671490 -0.040108379555910 0.045648707692700

Columns 34 through 36

0.003707113701194 -0.000000000000000 -0.002572269833145

Columns 37 through 39

-0.021831653015801 0.013033436776918 0.018832066202465

Columns 40 through 42

-0.015526100573050 -0.007292009701779 0.008248719326788

Columns 43 through 45

0.000651067963647 -0.000000000000000 -0.000406207578962

Columns 46 through 48

-0.003218595696088 0.001792245513802 0.002445059932491

Columns 49 through 51

-0.001966996990306 -0.000957972981406 0.001227211474848

Khảo sát đặc tính tần số của mạch lọc:

Sử dụng hàm freqz (B)

>> freqz(B)

Nhấn Enter, ta nhận được hình:


BÀI 4:

Tổng hợp lọc FIR dải chặn sử dụng phương pháp cửa sổ, dùng cửa sổ Hamming. Biết bậc của
mạch lọc bằng 50, tần số cắt 1 bằng 4000 Hz, tần số cắt 2 bằng 6000 Hz. Cho tần số rời rạc hóa
bằng 18000 Hz. Khảo sát đặc tính tần số của mạch lọc đã tổng hợp.

Giải: Tần số chuẩn hóa 1.0 ứng với 18000/2= 9000 Hz. Vậy 4000 Hz ứng với tần số chuẩn hóa
bằng 4/9; 6000 Hz ứng với tần số chuẩn hóa bằng 2/3.

Tìm các hệ số của mạch lọc:

>> B= fir1(50,[4/9 2/3],’stop’)

B=

Columns 1 through 3

-0.001231000184460 0.000960930484263 0.001973069603346

Columns 4 through 6

-0.002452608445733 -0.001797778625205 0.003228532308238


Columns 7 through 9

0.000407461643637 -0.000000000000000 -0.000653077973741

Columns 10 through 12

-0.008274185192162 0.007314521964593 0.015574033539527

Columns 13 through 15

-0.018890205513990 -0.013073674265086 0.021899052804126

Columns 16 through 18

0.002580211075255 0.000000000000000 -0.003718558490948

Columns 19 through 21

-0.045789636702225 0.040232204182941 0.087650716578616

Columns 22 through 24

-0.113281371808307 -0.088955680195261 0.189564075408565

Columns 25 through 27

0.037687609218002 0.778090717172015 0.037687609218002

Columns 28 through 30

0.189564075408565 -0.088955680195261 -0.113281371808307

Columns 31 through 33

0.087650716578616 0.040232204182941 -0.045789636702225

Columns 34 through 36

-0.003718558490948 0.000000000000000 0.002580211075255

Columns 37 through 39

0.021899052804126 -0.013073674265086 -0.018890205513990

Columns 40 through 42

0.015574033539527 0.007314521964593 -0.008274185192162

Columns 43 through 45
-0.000653077973741 -0.000000000000000 0.000407461643637

Columns 46 through 48

0.003228532308238 -0.001797778625205 -0.002452608445733

Columns 49 through 51

0.001973069603346 0.000960930484263 -0.001231000184460

Như vậy ta có 51 hệ số mạch lọc.

- Khảo sát đặc tính tần số của mạch lọc:

Sử dụng hàm freqz (B)

>> freqz(B)

Nhấn Enter, ta nhận được hình:

You might also like