[th&ht]tai Lieu Thuc Hanh 20181

  • Uploaded by: Tinh Le
  • 0
  • 0
  • August 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View [th&ht]tai Lieu Thuc Hanh 20181 as PDF for free.

More details

  • Words: 8,090
  • Pages: 35
Phần 1. Giới thiiệu chung về v Matlab I Giới thiệu về phần mềm Matllab I. - Matlab là gì? + Matrix Laaboratory + Là ngôn ngữ n lập trình h bậc cao cho c các ngànnh khoa học và kỹ thuật. + Được pháát triển bởi Mathwork M I Inc. - Khả năng của Matlabb: + Tính toánn khoa học (một ( công cụ c tính toánn rất mạnh) + Dụng cụ vvẽ đồ thị hààm số. + Thực hiệnn các thuật toán. t + Mô phỏngg các hệ thốống khác nhhau. + Giao tiếpp được vớii các phần mềm được viết trên các ngôn ngữ khác (C, C++, Java, F Fortran) - Các lĩnh vvực ứng dụnng: + Kĩ thuật + Khoa học + Y sinh + Kinh tế + +… I Thông tin căn bản II. n: - Giao diện phần mềm

- Dấu nhắc lệnh của Matlab: M >> B có thể viết Bạn v các lệnnh Matlab saau dấu nhắcc lệnh này. - Ví dụ về sử dụng Matlab để tínhh toán:

>> 3+2*5 ans = 13 >> sqrt(1+6*8)-3^2 ans = -2 >> 48/(6+2) ans = 6 >>

- Các kí hiệu phép toán trong Matlab Phép toán Ví dụ 2+3 Cộng Trừ − 2−3 * Nhân 2*3 2/3 / Chia - Biến trong Matlab: Chúng ta có thể gán giá trị cho các biến trong Matlab Kí hiệu +

+ Ví dụ: >> x = 3 x = 3 >> y = 5 y = 5 >> x+y*2 ans= 13 >>

- Dấu chấm phẩy: Thêm dấu chấm phẩy vào cuối một câu lệnh sẽ ngừng việc hiển thị ra màn hình kết quả của nó. + Ví dụ: >> x = 3; >> y = 2; >> z = (x^2-1)/y; >> z z = 4 >>

Trang 2

- Biến ans: Nếu chúng ta không gán kết quả của một biểu thức cho một biến nào đó, nó sẽ được lưu vào biến ans một cách mặc định. - Một số hàm cơ bản trong Matlab: cos(x)

Hàm tính cos

abs(x)

sin(x)

Hàm tính sin

sign(x)

tan(x)

Hàm tính tan

max(x)

acos(x)

Hàm tính arccos

min(x)

asin(x)

Hàm tính arcsin

ceil(x)

atan(x)

Hàm tính arctan

floor(x)

exp(x)

Hàm lũy thừa e

rem(x)

sqrt(x)

Hàm lấy giá trị tuyệt đối Hàm xét dấu Hàm tìm giá trị lớn nhất Hàm tìm giá trị nhỏ nhất Hàm làm tròn lên Hàm làm tròn xuống Lấy phần dư sau khi thực hiện phép chia Hàm lấy góc pha

Hàm căn bậc hai angle(x) Hàm logarit tự log(x) conj(x) Hàm lấy liên hợp nhiên Hàm logarit cơ số log10(x) 10 - Có thể sử dụng lệnh help command để lấy thông tin chi tiết về từng hàm. - Hằng số: Số π , π = 3.14159... Đơn vị ảo i , −1 Vô cùng, ∞ Not a number

pi i, j Inf NaN + Nên tránh sử dụng i hoặc j làm biến. + Ví dụ: > clear all >> (3*i)^2 ans = -9

>> i = 2; → nên tránh sử dụng như này bởi vì i đã được sử dụng mặc định làm hằng số. >> (3*i)^2 ans= 36 >>

- Matlab workspace

Trang 3

+ Là tập hợpp các biến đã đ được địnnh nghĩa. + Có thể sử dụng lệnh who để hiểển thị tất cả các biến đaang có. V dụ: Ví >> x = 3; >> y = 5; >> z = x^2 + y; y >> sqr rt(16)/2; >> who Your variables v s are: ans x

y

>>

+ Dùng lệnhh clear để xóa một phần p hoặc tất cả worksspace V dụ: Ví >> x = 3; >> y = 5; >> z = x^2 + y; y >> who v s are: Your variables x

y

z

>> clear x >> who Your variables v s are: ans y

z

>> clear >> who >> y+1 Undefined func ction or variable e ‘y'. → thông báo b lỗi

- Lịch sử lệnnh: + Khi bạn bắt b đầu viếtt một câu lệệnh, có thể sử dụng núút mũi tên lên và xuốnng trên bàn pphím đ gọi lại cáác lệnh đã được để đ nhập vào v từ lúc trrước. + Một khi m mà lệnh đãã được gọi lại, bạn cóó thể sử dụnng mũi tênn sang trái và v sang phhải để c chỉnh sửa cââu lệnh.

- Hỗ trợ hoààn thiện câu u lệnh: + Sau khi vviết vài kí tự, t bạn có thể t sử dụngg nút Tab trên bàn phhím để hiệnn ra các lệnnh và b bắt đầuu với các kí tự đó. biến + Ví dụ: nhậập vào pl sau s đó nhấnn Tab sẽ hiiện ra như hhình.

- Lệnh help + Cấu trúc: help command_n c name

+ Ví dụ: >> help sqrt sqrt

Square e root.

sq qrt(X) is s the squ uare root t of the elements s of X. Complex C results ar re produc ced if X is not positive. p . See also sqrtm, s re ealsqrt, hypot. Reference page for r sqrt Other func ctions na amed sqrt t

- Lệnh lookfor + Cấu trúc: lookfor keywor rd

+ Lệnh này sẽ trả lại kếết quả là cáác lệnh có từ ừ keyword ở phần đầu tiên trong file f trợ giúpp. + Ví dụ: tìm m các lệnh để đ chơi nhạcc >> lookfor aud dio audiop player

- Audio o player object.

audior recorder

- Audio o recorde er object t.

audioOscillato or

- Gener rate tuna able audi io waves

PluginInt terface audioP genera ated audi io plugin n

- Sp pecify th he inter rface of the

audioP PluginPar rameter genera ated audi io plugin n

- Specify S one para ameter o of a

audioTestBench h in MATLAB clas sses.

- Audio o Test Be ench for audio pl lug-

crossoverFilte er

- Multi iband aud dio cross sover fil lter

audioBrokenLinksMapping - Broken links restoration mapping for Audio System Toolbox blocks audioRelinkFigure the block's user data

- : Restore the figure handle to

audioUnlinkFigure the block's user data

- : Remove the figure handle from

audio_links information

- Display and return library link



III. Véctơ và ma trận: Véctơ và ma trận là nền móng của Matlab. - Matlab được thiết kế đặc biệt cho các phép toán véctơ và ma trận. - Các phép toán trực tiếp với véctơ và ma trận thường nhanh hơn nhiều so với sử dụng các cấu trúc vòng lặp vô hướng. - Hãy cố gắng sử dụng véctơ và ma trận nhiều nhất có thể và hạn chế các cấu trúc vòng lặp (vì nó khá chậm ở Matlab). 1. Véctơ. - Định nghĩa véctơ hàng: (sử dụng , để ngăn cách) >> a = [3, 1, 2, 8]

% [ ] chỉ ra đây là 1 véctơ.

a = 3

1

2

8

- Định nghĩa véctơ cột: (sử dụng ; để ngăn cách) >> b = [3;1;2;8] b = 3 1 2 8

- Phép chuyển vị: .’ >> b.' ans = 3

1

2

8

- Các cách định nghĩa véctơ: + Bắt đầu tại 1, kết thúc tại 10 với bước là 2. >> c = [1:2:10]

% ngoặc vuông là không bắt buộc

c = 1

3

5

7

9

+ Bắt đầu tại 5, kết thúc tại 8, với bước là 1. >> d = 5:8 Trang 6

d = 5

6

7

8

+ Bắt đầu tại 6, kết thúc tại 0, với bước là -2. >> e = [6:-2:0] e = 6

4

2

0

+ Tạo 5 điểm cách đều nhau giữa 2 và 20. >> linspace(2, 20, 5) ans = 2.0000

6.5000

11.0000

15.5000

- Lấy thông tin về một véctơ: Coi a = [3

1

2

8].

+ Lấy phần tử thứ 3 của một véctơ: >> a(3) ans= 2

+ Phần tử thứ 2, 3, 4. >> a(2:4) ans = 1

2

8

+ Phần tử thứ 2 và 4. >> a(2:2:4) ans = 1 8

+ Phần tử thứ 1 và 4. >> a([1,4]) ans = 3

8

2. Ma trận: - Định nghĩa một ma trận 2 × 3 : >> a = [2, 5, 7; 1, 4, 9] a = 2

5

7

1

4

9

- Chuyển vị ma trận: .’ >> a.' ans = 2

1 Trang 7

20.0000

5

4

7

9

- Lấy phần tử nằm ở hàng thứ nhất, cột thứ ba. >> a(1, 3) ans= 7

- Lấy hàng đầu tiên. >> a(1, :) ans = 2

5

7

- Lấy cột thứ hai. >> a(:, 2) ans = 5 4

- Lấy phần tử thứ 2 và 3 ở hàng thứ 2. >> a(2, [2,3]) ans = 4

9

- Lấy các phần tử ở cột 1 và cột 3. >> a(:, [1, 3]) ans = 2

7

1

9

- Tạo một ma trận chứa hàng 2 và hàng 3, cột 1 và cột 3 của một ma trận có sẵn.

⎡ 1 2 3⎤ ⎢ ⎥ b = ⎢⎢4 5 6⎥⎥ ⎢ 7 8 9⎥ ⎢⎣ ⎥⎦ >> b([2, 3], [1, 3]) ans = 4

6

7

9

- Đổi chỗ cột 1 và cột 3 >> b(:, [3, 2, 1]) ans = 3

2

1

6

5

4

9

8

7 Trang 8

- Xây dựng một ma trận với các véctơ hàng: >> v1 = [1 3 5]; >> v2 = [2 4 6]; >> m = [v1; v2] m = 1

3

5

2

4

6

- Xây dụng một ma trận với các véctơ cột: >> c1 = [1; 2]; >> c2 = [3; 4]; >> c3 = [5; 6]; >> m2 = [c1, c2, c3] m2 = 1

3

5

2

4

6

- Các phép tính với ma trận: ⎡2 5 7 ⎤ ⎥ , m2 = Cho các ma trận sau: m1 = ⎢⎢ ⎥ 1 4 9 ⎢⎣ ⎥⎦

⎡ 1 2 3⎤ ⎢ ⎥ ⎢ 4 5 6⎥ , v1 = ⎢⎣ ⎥⎦

⎡1⎤ ⎢ ⎥ ⎡ 7 8 9⎤ , v 2 = ⎢ 2 ⎥ ⎢ ⎥ ⎢⎣ ⎥⎦ ⎢ 3⎥ ⎢⎣ ⎥⎦

+ Phép cộng và phép trừ (các ma trận phải cùng kích thước) >> m1-m2 ans = 1

3

4

-3

-1

3

>> v1+v2 Error using

+

Matrix dimensions must agree. → thông báo lỗi do các ma trận không có cùng kích thước >> v1+v2.' ans = 8

10

12

+ Phép nhân từng phần tử ở cùng vị trí: .* >> m1.*m2 ans = 2

10

21

4

20

54

+ Phép chia các phần tử ở cùng vị trí: ./ >> v1./v2 Trang 9

Error using

./

Matrix dimensions must agree. >> v1./v2.' ans = 7

4

3

+ Phép nhân ma trận: * >> m1*m2 Error using

*

Inner matrix dimensions must agree.

→lỗi do 2 ma trận không có kích thước thỏa mãn >> m1*m3 ans = 31

30

23

31

33

20

+ Tìm ma trận nghịch đảo >> inv(m3) ans = -0.2778

0.3889

0.0556

0.0556

-0.2778

0.3889

0.3889

0.0556

-0.2778

+ Cộng véctơ v1 vào hàng 2 của ma trận m1, sau đó gán kết quả vào một ma trận mới mat1 >> mat1 = m1; >> mat1(2, :) = mat1(2, :) + v1 mat1 = 2

5

7

8

12

18

+ Thay thế cột thứ 3 của ma trận m2 với cột thứ nhất của ma trận m1, sau đó gán kết quả vào một ma trận mới mat2. >> mat2 = m2; >> mat2(:, 3) = m1(:, 1) mat2 = 1

2

2

4

5

1

- Các phép tính với đối tượng vô hướng: >> m1+2 ans = 4

7

9

3

6

11

>> m1*2 Trang 10

ans = 4

10

14

2

8

18

>> m1/2 ans = 1.0000

2.5000

3.5000

0.5000

2.0000

4.5000

- Phép chuyển vị (.’) và chuyển vị phức (‘) ⎡2 + i 5 + 2i 7 + 3i ⎤ ⎥ m 4 = ⎢⎢ ⎥ 1 4 9 ⎣⎢ ⎦⎥

+ Phép chuyển vị: .’ >> m4.' ans = 2.0000 + 1.0000i

1.0000

5.0000 + 2.0000i

4.0000

7.0000 + 3.0000i

9.0000

+ Phép chuyển vị phức: ‘ >> m4' ans = 2.0000 -1.0000i

1.0000

5.0000 -2.0000i

4.0000

7.0000 -3.0000i

9.0000

- Phép tính logic. ⎡2 5 7 ⎤ ⎥ , m2 = m1 = ⎢⎢ ⎥ 1 4 9 ⎢⎣ ⎥⎦

Ví dụ: lấy tất cả các phần tử ở m1 mà > 4 . >> logic_mat = (m1 > 4) logic_mat = 0

1

1

0

0

1

>> m1(logic_mat) ans = 5 7 9

Cách khác: >> m1(m1>4) Trang 11

⎡ 2 2 3⎤ ⎢ ⎥ ⎢ 4 5 9⎥ ⎢⎣ ⎥⎦

ans = 5 7 9

- Kích thước ma trận: size( ) ⎡2 5 7 ⎤ ⎥ m1 = ⎢⎢ ⎥ 1 4 9 ⎢⎣ ⎥⎦

>> size(m1) ans= 2

3

>> [m,n] = size(m1) m = 2 n = 3

- Đường chéo của một ma trận: ⎡ 1 2 3⎤ ⎢ ⎥ ⎢ m1 = ⎢ 3 1 2⎥⎥ , v1 = ⎡⎢7 8 9⎤⎥ ⎣ ⎦ ⎢ ⎥ ⎢⎣2 3 1⎥⎦

+ diag(a): trả lại đường chéo chính của matrix a. >> diag(m3) ans = 1 1 1

+ diag(v1): tạo một ma trận đường chéo nhận véctơ v1 làm đường chéo của nó. >> diag(v1) ans = 7

0

0

0

8

0

0

0

9

- Tạo các ma trận đặc biệt + Ma trận “1”: >> ones(2, 3) ans = 1

1

1

1

1

1 Trang 12

+ Ma trận “0”: >> zeros(1, 2) ans = 0

0

+ Ma trận đơn vị: >> eye(3) ans = 1

0

0

0

1

0

0

0

1

IV. Vẽ đồ thị: - Vẽ đồ thị đơn giản: >> x = [1 2 3 4 5]; >> y = [3 -1 2 -3 -4]; % véctơ x và y phải cùng độ dài. >> plot(x, y) >> x = linspace(0, 2*pi, 100); >> y = cos(x + pi/3); >> plot(x, y) >> xlabel('x'); >> ylabel('y');

% đặt một nhãn cho trục x % đặt một nhãn cho trục y

>> title('cos(x + \pi/3)');

% đặt tiêu đề cho đồ thị

>> set(gca,'fontsize',24); % đặt cỡ chữ >> grid on;

% bật lưới

y

>> print –djpegfig.jpg; % lưu hình vào một file.

- Vẽ nhiều đường cong trên cùng một đồ thị: sử dụng lệnh “hold on” >> x = [0:0.01:5]; >> y1 = cos(x); >> y2 = exp(-x); >> y3 = sinc(x); Trang 13

>> plot(x, y1, 'linewidth', 2); >> hold on; >> plot(x, y2, 'k--', 'linewidth', 2); % đen, gạch đứt >> plot(x, y3, 'r-.', 'linewidth', 2); % đỏ, gạch chấm >> legend('cos(x)', 'exp(-x)', 'sinc(x)'); % thêm chú thích >> set(gca, 'fontsize', 24);

- Sử dụng lệnh “help plot” để tìm thêm nhiều loại đường thẳng và màu sắc. - Căn chỉnh một đồ thị: sử dụng lệnh axis >> x = [-20:0.01:20]; >> plot(x, sinc(x)) >> axis([-5, 5 -0.3 1]); % x range: [-0.5, 0.5], y-range: [-0.3, 1]

- Tắt một hoặc nhiều đồ thị. + figure(1); % make figure 1 the current figure + close; % close the current figure + close all; % close all figures V. Sử dụng M-file: - Chúng ta có thể viết một dãy các lệnh Matlab trong một file bên ngoài với phần mở rộng là *.m. Những file này thường được gọi là m-file. - Thực thi m-file sẽ thực thi tất cả các lệnh trong file. 1. Tạo một script file: - Trong cửa sổ Matlab, nhấn vào File → New → Script để mở trình biên dịch mặc định. - Trong cửa sổ biên dịch, nhập vào chuỗi lệnh sau: x = [0:0.01:10]; y1 = cos(x); y2 = exp(-x); Trang 14

plot(x, y1); hold on; plot(x, y1+y2, 'r--');

- Lưu file vừa tạo lại bằng cách nhấn vào File → Save → test.m trong cửa sổ biên dịch. - Thực thi file vừa tạo bằng cách nhấn vào Debug → Run test.m trong cửa sổ biên dịch. 2. Chạy thử m-file: - Chuyển sang cửa sổ command window. - Tại dấu nhắc lệnh, nhập: >> test

% chú ý rằng không ghi thêm .m vào câu lệnh.

- Quan trọng: m-file được thực thi phải nằm trong thư mục làm việc hiện tại. >> pwd

% hiển thị thư mục làm việc hiện tại

ans= c:\skydrive\teaching\ELEG3124\Matlab >> ls *.m

% liệt kê tất cả các m-file nằm trong thư mục làm việc hiện tại

test.m

3. Viết hàm: - Một hàm có thể được định nghĩa và lưu vào một m-file riêng biệt. - Ví dụ: function y = average(x) % function y = average(x) % compute the average of a vector x, and return the value to y N_element = length(x); y = sum(x)/N_element;

- Buộc phải bắt đầu với function - Lưu vào một m-file: trong cửa sổ editor, nhấn vào File → Save → average.m (tên của mfile phải là tên của hàm). - Những chú thích sau tiêu đề của function sẽ được hiển thị khi bạn nhập lệnh help average vào dòng lệnh. 4. Gọi hàm: - Trong cửa sổ command window, nhập vào: >> x = 1:10; >> y = average(x) >> z = sqrt(x); >> average(z)

5. Hàm với nhiều đầu vào và/hoặc nhiều đầu ra: function[addition, difference] = total_diff(x, y) % function [total, difference] = total_diff(x, y) % find the sum and difference between two vectors addition = x + y; difference = x -y; Trang 15

VI. Các cấu trúc điều khiển chương trình trong Matlab: 1. Cấu trúc if…end x = 10; y = sqrt(x)-x/3; if y < 0 'y nho hon 0' y = y + 1; end

2. Cấu trúc if…else…end x = 10; y = sqrt(x)-x/3+1; if y < 0 'y nho hon 0' y = y + 1; else 'y lon hon hoac bang 0' y = y -1; end

3. Cấu trúc if…elseif…else…end y = 0; if y < 0 'y nho hon 0' y = y + 1; elseif y == 0 'y bang 0' else 'y lon hon 0' y = y - 1; end

4. Cấu trúc for…end for mm = 1:2:10 y(mm) = mm^2; end * Cách khác (hiệu quả hơn): y = [1:2:10].^2;

5. Vòng lặp đôi: A = [1 3 2; 4 -1 0]; [n_row, n_col] = size(A); for mm = 1:n_row row_avg(mm) = mean(A(mm, :)); for nn = 1:n_col B(mm, nn) = A(mm, nn).^2; end end

6. Cấu trúc while…end x = 1; while x <= 20 x = 3*x + 2; Trang 16

end

VII. Phép toán sử dụng biến tượng trưng: - Phân tích, giải quyết và sử dụng các biểu thức toán học sử dụng biến tượng trưng. (tất cả các phần bên trên đều dựa trên tính toán số học: biến phải có giá trị). - Trong phép toán này, biến không cần phải có giá trị cụ thể. - Ví dụ, chúng ta có thể sử dụng phép toán với biến tượng trưng để thực hiện các phép nguyên hàm, vi phân. 1. Khai báo biến tượng trưng: - Khai báo các biến a, b, x như là biến tượng trưng (chúng không cần phải có một giá trị số cụ thể). - Định nghĩa một hàm dùng biến tượng trưng f (x ) = x ae −bx >> syms a b x

% khai bao cac bien tuong trung

>> f = x^a*exp(-b*x) ham so

% su dung bien tuong trung dinh nghia mot

f = x^a/exp(b*x)

2. Phép vi phân: lệnh diff Tìm vi phân bậc nhất của hàm số f (x ) = x ae −bx . >> diff_f = diff(f, x)

% vi phân

diff_f = (a*x^(a - 1))/exp(b*x) - (b*x^a)/exp(b*x) >> simplify(diff_f)

% yêu cầu Matlab đơn giản hóa kết quả.

ans = (x^(a - 1)*(a - b*x))/exp(b*x)

3. Phép tích phân: lệnh integral - Tìm tích phân không xác định của hàm số f2 (x ) = xe −ax >> syms a x >> f2 = x*exp(-a*x) f2 = x/exp(a*x) >> int_f = int(f2, x)

% tích phân không xác định

int_f = -(a*x + 1)/(a^2*exp(a*x)) 10

- Tích phân xác định:

∫ xe

−ax

dx

0

Trang 17

>> int(f2, x, 0, 10) ans = 1/a^2 - (10*a + 1)/(a^2*exp(10*a))

4. Câu lệnh thay thế: - Lệnh subs sẽ thay thế một số vào vị trí của một biến tượng trưng trong biểu thức sử dụng biến tượng trưng. - Ví dụ 1: tính giá trị hàm số f (x ) = x ae −bx khi a = 2, b = 1 , và x = 3 . >> syms a b x >> f = x^a*exp(-b*x) f = x^a/exp(b*x) >> subs(f, {a, b, x}, {2, 1, 3}) ans = 0.4481 10

- Ví dụ 2: Tính tích phân

∫ xe

−ax

dx khi a = 2 .

0

>> syms a x >> f2 = x*exp(-a*x) f2 = x/exp(a*x) >> int_f2 = int(f2, 0, 10) int_f2 = 1/a^2 - (10*a + 1)/(a^2*exp(10*a)) >> subs(int_f2, a, 2) ans = 0.2500

5. Vẽ đồ thị hàm số với lệnh ezplot: Ví dụ: vẽ đồ thị hàm số f (x ) = x ae −bx khi a = 2 và b = 1 cho biến x trong khoảng từ ⎡ 0;10⎤ ⎢⎣ ⎥⎦ >> syms x y a b >> f = x^a*exp(-b*x); >> f3 = subs(f, {a, b}, {2, 1}) f3 = x^2/exp(x) >> ezplot(f3, [0, 10])

Trang 18

Trang 19

Bài 1. Làm quen với Matlab Bài 1. Sử dụng Matlab để tính toán các biểu thức sau: 1. x =

1 21

+

122 − 2 . 36 + log (5)

2. y = 2 → z =

x + log (x ) log10 (y ) + x y . y

Bài 2. Sử dụng lệnh lookfor để tìm ra các lệnh thực hiện hàm tính log2 (x ) , sau đó sử dụng lệnh help để tìm thêm thông tin về hàm này. Bài 3. 1. Tạo một véctơ hàng bắt đầu từ −10 , kết thúc tại 18, với bước cộng là 4. 2. Tạo một véctơ cột bắt đầu từ 6, kết thúc tại − 9 , với bước là − 3 . 3. Tạo một véctơ hàng bắt đầu với 1, kết thúc tại 90 và có đúng 20 phần tử. Bài 4. ⎡1 + i 2 ⎤⎥ ⎢ ⎡2 3 7⎤ ⎡1 2 3⎤ ⎢ ⎥, B = ⎢ ⎥ 4 + i ⎥⎥ 1. Tạo các ma trận sau: A = ⎢⎢ ⎢ 4 5 6⎥ , C = ⎢ 3 ⎥ 1 5 6 ⎢ ⎥ ⎢⎣ ⎥⎦ ⎢⎣ ⎥⎦ 6 ⎥ ⎢⎣ 5 ⎦

2. Tính A + B , B + 2 , A − C .' , A. * B và A. / B . 3. Có tồn tại phép A * B , A * B .' không? 4. Sử dụng các lệnh lấy giá trị ma trận của Matlab tìm các giá trị sau: - Phần tử nằm ở hàng thứ 2 và cột thứ 3 của ma trận A . - Hàng 2 của ma trận B . - Cột 3 của ma trận A . - Các phần tử nằm ở hàng thứ 2 và cột thứ 2 và 3 của ma trận A . - Tạo một ma trận D có kích thước 2 × 2 , cột đầu tiên của ma trận D là cột thứ 2 của ma trận A , và cột thứ 2 của ma trận D là cột thứ 3 của ma trận B . 5. Sử dụng các lệnh ma trận logic để xác định vị trí các phần tử mà ma trận A và ma trận B có chung giá trị. 6. Tìm các phần tử nhỏ hơn hoặc bằng 3 của ma trận B . Bài 5. 1. Vẽ phần thực, phần ảo và biên độ của hàm số sau trong cùng một hình vẽ. Sử dụng các lệnh xlabel, ylabel, legend, grid, và cho các đường cong có màu sắc và kiểu đường thẳng khác nhau. Sử dụng phông chữ 14. S (t ) = e −te j 2 πt , 0 ≤ t ≤ 10

2. Căn chỉnh đồ thị trên với x từ 0 đến 5, y từ −2 đến 2. Trang 20

Bài 6. Viết hàm tính độ lệch chuẩn của một véctơ, với x i là phần tử thứ i của véctơ đó, x là giá trị trung bình của véctơ. y=

1 n xi − x n∑ i =1

(

)

2

Sử dụng hàm trên, tính độ lệch chuẩn của véctơ sau đây: x = ⎡⎢⎣0, 3,1, 5, −2, −4, 3,2, −5⎤⎥⎦ . Bài 7. Viết một hàm nhận véctơ x làm đầu vào. Đầu ra y là một véctơ cùng kích thước với x , được định nghĩa như sau: ⎧⎪ ⎪⎪ x n , khi x n > 0 ⎪ yn = ⎨0, khi x n == 0 ⎪⎪ 2 ⎪⎪−x n , khi x n < 0 ⎪⎩

Thử hàm vừa viết với véctơ x = −3 : 3 . Bài 8. Cho chuỗi: x 1 = 0, x n = 2x n3/2 + 1. −1 Sử dụng cấu trúc lặp để tìm số n nhỏ nhất thỏa mãn x n > 100 .

Trang 21

Bài 2. Luyện tập sử dụng Matlab I. Sử dụng các công cụ tính toán số học thông thường: Bài 1. Sử dụng một lệnh Matlab duy nhất để tạo ra một véctơ chứa tất cả các số lẻ từ 7 đến 101. Sử dụng Matlab để tìm số phần tử của véctơ này. Bài 2. Tạo các ma trận sau: ⎡2 5 1⎤ ⎡ 3 1 6⎤ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ A = ⎢4 3 7 ⎥ , B = ⎢2 3 8⎥⎥ ⎢ ⎥ ⎢ ⎥ ⎢⎣8 6 1⎥⎦ ⎢⎣7 2 0⎥⎦

a. Sử dụng một lệnh duy nhất để tìm tổng tất cả các phần tử trên cùng một hàng của ma trận A. b. Sử dụng một lệnh duy nhất để tìm tổng tất cả các phần tử trên cột thứ nhất của ma trận B. c. Sử dụng một vòng lặp for, tìm tổng các phần tử nằm trên đường chéo của ma trận A. d. Tìm A. * B và A * B bằng tay, sau đó kiểm tra lại kết quả tìm được với Matlab. Bài 3. Sử dụng Matlab để tạo véctơ x = e −2t , t = 0 : 0.1 : 10 , sau đó: a. Cộng mỗi phần tử của x với 5, và lưu kết quả thu được vào một véctơ khác. b. Cộng thêm 3 vào các phần tử nằm ở vị trí lẻ của x (ví dụ: x (1), x (3), x (5),…), sau đó lưu kết quả vào véc tơ mới là y . Bài 4. Viết một hàm y = rms (x ) và lưu nó trong file rms.m trong thư mục làm việc hiện tại. Đầu vào của hàm số này là một véctơ x , đầu ra của hàm số này là một đại lượng vô hướng y, là giá trị hiệu dụng của x . Được mô tả như sau: y=

1 N

N

x 2 (n ) . ∑ n =1

Thử lại hàm vừa viết với véctơ x = ⎡⎢1 5 2 3 8⎤⎥ . ⎣ ⎦ II. Sử dụng các công cụ tính toán với biến tượng trưng: Bài 1. Vẽ đồ thị các hàm số sau với x nằm trong đoạn từ 0 đến 5. a. exp (−x ) cos (2πx ) . b. sinc2 (x ) . Bài 2. Cho hàm số x .exp (3x 2 ) . a. Tìm vi phân của nó. b. Tìm

2 ∫ x .exp (3x )dx .

3

c. Tìm

2 ∫ x.exp (3x )dx . 0

Trang 22

Bài 3. Cho hàm số mũ y = exp (−ax ) . a. Tìm dy / dx bằng tay. Sau đó sử dụng Matlab để kiểm tra lại kết quả. b. Tìm

b

∫a exp (−ax )dx

bằng tay. Sau đó sử dụng Matlab để kiểm tra lại kết quả tính toán

của bạn. c. Vẽ đồ thị của y khi a = 2 . d. Vẽ đồ thị của y khi a = 0,5 .

Trang 23

Bài 3. Tín hiệu liên tục I. Hàm bước nhảy đơn vị (unit step) và hàm dốc đơn vị (ramp) Bài 1. Viết hàm y = ustep (t ) để biểu diễn hàm bước nhảy đơn vị. Bài 2. Viết hàm y = uramp (t ) để biểu diễn hàm dốc đơn vị. Bài 3. Sử dụng các hàm vừa viết, vẽ đồ thị của các tín hiệu liên tục sau trên đoạn −10 ≤ t ≤ 10 + 5u (t − 2) . + 3r (t + 5) . + y (t ) = 2r (t + 2, 5) − 5r (t ) + 3r (t − 2) + u (t − 4) . + y (t ) = sin (t ) * ⎡⎢u (t + 3) − u (t − 3)⎤⎥ . ⎣



Bài 4. Sử dụng hai hàm trên để tạo ra các tín hiệu có đồ thị như sau:

II. Tín hiệu chẵn, lẻ: Bài 1. Xây dựng hàm số trả về kết quả là phần chẵn và phần lẻ của một tín hiệu như sau: Trang 24

function [ye,yo] = evenodd(y) % even/odd decomposition % y: analog signal % ye, yo: even and odd components % USE [ye,yo] = evenodd(y) % yr = fliplr(y); ye = 0.5*(y + yr); yo = 0.5*(y – yr);

Bài 2. Sử dụng hàm số trên để tìm phần chẵn và phần lẻ của các tín hiệu liên tục sau và vẽ đồ thị của tín hiệu chính cũng như phần chẵn và phần lẻ của nó trong cùng một đồ thị sử dụng các dạng đường thẳng và màu sắc khác nhau: (giả sử −10 ≤ t ≤ 10 ). y (t ) = 2r (t + 2, 5) − 5r (t ) + 3r (t − 2) + u (t − 4)

III. Tổng của các tín hiệu tuần hoàn: Vẽ dạng của các tín hiệu sau trên đoạn −10 ≤ t ≤ 10 . Tín hiệu đó có phải là tín hiệu tuần hoàn hay không? Nếu có, tìm chu kì của nó? a. x 1 (t ) = 1 + 1, 5 cos (2πΩ0t ) − 0, 6 cos (4Ω0t ) với Ω0 = b. x 2 (t ) = 1 + 1, 5 cos (6πt ) − 0, 6 cos (4Ω0t ) với Ω0 =

π . 10

π . 10

III. Năng lượng, công suất của một tín hiệu: Năng lượng của một tín hiệu trong khoảng T + 2 T − 2

E=∫

x (t )

2

⎡ T T⎤ ⎢− ; ⎥ ⎢ 2 2⎥ ⎣ ⎦

được định nghĩa là

1 dt . Công suất của nó thì được định nghĩa là P = T

T + 2 T − 2



2

x (t ) dt . Tìm

năng lượng và công suất của tín hiệu sau trên đoạn −10 ≤ t ≤ 10 bằng cách sử dụng công cụ biến tượng trưng của Matlab. x (t ) = e −t cos (2πt ) u (t ) .

IV. Phép dịch, phép co giãn và phép đảo tín hiệu: Bài 1. Vẽ đồ thị của các hàm số sau trên cùng một đồ thị: x (t ) , x (t − 2) và x (t + 2) (giả sử

−10 ≤ t ≤ 10 ) với: x (t ) = e

−t

.

Bài 2. Vẽ đồ thị của các hàm số sau trên cùng một đồ thị: x (t ) , x (2t ) và x (0, 5t ) (giả sử

−10 ≤ t ≤ 10 ) với: x (t ) = e

−t

.

Bài 3. Vẽ đồ thị của các hàm số sau trên cùng một đồ thị: x (t ) và x (−t ) (giả sử

−10 ≤ t ≤ 10) với: x (t ) = e

−t

.

Trang 25

Bài 4. Hàm tuyến tính I. Chuẩn bị trước thí nghiệm: Bài 1. Tính các tích chập sau bằng tay: A. exp (−t ) p (t ) ⊗ p (t ) . B. tp (t ) ⊗ p (t ) . Bài 2. Làm lại ví dụ ở phần II để hiểu chương trình Matlab. II. Ví dụ: Tích chập có thể được tính gần đúng bằng cách sử dụng hàm Conv(a,b) của Matlab, hàm này sẽ tính

a (m − n )b (n ) . Chúng ta có một xấp xỉ của y (t ) = ∫ x (t − τ ) h (τ )d τ ∑ n



y (m ⋅ dt ) ≈ ∑ x (m ⋅ dt − n ⋅ dt )h (n ⋅ dt )dt khi thời gian trích mẫu dt là đủ nhỏ. n

⎧⎪1, − 1 ≤ t ≤ 1 , và so sánh với Ví dụ sau đây sẽ tính tích chập p (t ) ⊗ p (t ) , với p (t ) = ⎪⎨ ⎪⎪0, coø n laï i ⎪⎩

kết quả theo lý thuyết. Hàm xung đơn vị: upulse.m function y = upulse(x) % function y = upulse(x) % y = 1 if -1 <= x <= 1, % y = 0 otherwise % % tim so phan tu cua vecto x. N_element = length(x); % khoi tao y la mot vecto co tat ca cac phan tu bang nhau. y = zeros(1, N_element); % neu -1 <= x <= 1 thi y=1 one_idx_logic = and(x >= -1, x <= 1); y(one_idx_logic) = 1;

Chương trình chính: main.m clear all; % thoi gian trich mau dt dt = 0.01; % vecto thoi gian t = [-5:dt:5]; % tin hieu x(t) x = upulse(t); % tin hieu h(t) Trang 26

h = upulse(t); % tinh tich chap giua x(t) va h(t) y = conv(x, h, 'same')*dt; % ve do thi ket qua plot(t, y) % dat ten cho cac truc toa do xlabel('time (second)'); ylabel('y(t)'); % bat luoi grid on; % % % % %

so sanh ket qua tinh toan voi ket qua ly thuyet ket qua tinh bang tay y(t) = t+2, -2 <= t <= 0, y(t) = -t+2, 0 <= t <= 2, y(t) = 0, con lai

% giu lai ket qua truoc hold on; % ve do thi ket qua tinh toan bang tay tren cung do thi t1 = [-2:dt:0]; plot(t1, t1+2, 'r--'); t2 = [0:dt:2]; plot(t2, -t2+2, 'r--'); legend('Numerical Result', 'Theorectical Result');

II. Nội dung thực hành: Bài 1. Sử dụng Matlab để tính các tích chập ở phần chuẩn bị. Với mỗi tích chập: a. Vẽ đồ thị kết quả tính toán bằng Matlab. b. Vẽ đồ thị kết quả tính toán bằng tay theo lý thuyết trên cùng đồ thị đó. Bài 2. Bộ lọc thông thấp: Cho một hệ tuyến tính, bất biến với đáp ứng xung là h (t ) = 20 sinc (20t ) . Nó là một bộ lọc thông thấp với tần số cắt là 10Hz, nghĩa là nó sẽ chỉ cho các tín hiệu có tần số nhỏ hơn hoặc bằng 10Hz đi qua. Chúng ta sẽ kiểm chứng tính chất của bộ lọc này bằng cách cho các tín hiệu hình sin ở các tần số khác nhau đi qua. a. Vẽ đồ thị của h (t ) trong khoảng −10 ≤ t ≤ 10 với thời gian trích mẫu là dt = 0, 001 . Chỉnh lại tỷ lệ của đồ thị để hiển thị kết quả trong khoảng −1 ≤ t ≤ 1 (sử dụng lệnh “axis”). b. Nếu đầu vào x 1 (t ) là một tín hiệu hình sin có tần số 9Hz, sử dụng lệnh tính tích chập để tìm tín hiệu đầu ra (sử dụng −10 ≤ t ≤ 10 với dt = 0, 001 ). Sử dụng lênh “subplot” để biểu diễn cả tín hiệu đầu ra và đầu vào xong đó căn chỉnh lại đồ thị trong khoảng −1 ≤ t ≤ 1 và −1, 5 ≤ y ≤ 1, 5 . Ghi lại biên độ của tín hiệu đầu ra.

Trang 27

c. Nếu đầu vào x 2 (t ) là một tín hiệu hình sin có tần số 11Hz, lặp lại những bước trên. d. Nếu đầu vào là x = x 1 (t ) + x 2 (t ) , lặp lại những bước trên. Tìm tần số của tín hiệu ra bằng cách đếm số chu kì trong một giây. e. Đáp ứng biên độ. Tìm biên độ của tín hiệu ra khi mà tín hiệu vào là xung hình sin có tần số 1Hz. Lặp lại với các tín hiệu hình sin có tần số 3 : 2 : 15 Hz. Lập bảng và vẽ đồ thị biên độ của tín hiệu ra như một hàm của tần số. Đây là đáp ứng biên độ của hệ tuyến tính, bất biến. Bài 3. Tần số và nốt nhạc Tần số của các nốt nhạc được cho trong bảng dưới đây Bảng 1. Tần số các nốt Note C D E F G A B Freq (Hz) 262 294 330 349 392 440 494 Mỗi nốt nhạc là một tín hiệu hình sin với một tần số nhất định. Ví dụ sau đây sẽ cho thấy cách để chơi một nốt nhạc bằng Matlab. % tan so mau la 100KHz Fs = 100e3; % thoi gian trich mau la Ts = 1/Fs Ts = 1/Fs; % moi not nhac duoc phat trong 0,5 giây t = [0:Ts:0.5]; % tan so cua not C la 262 Hz Fc = 262; % tao tin hieu sin co tan so la Fc notec = cos(2*pi*Fc*t); % phat nhac sound(notec, Fs);

Hãy viết một chương trình Matlab để chơi bản nhạc sau: CCGGAAG--, FFEEDDC--, Bạn có thể căn chỉnh độ dài của từng nốt để có kết quả tốt hơn.

Trang 28

Bài 5. Ch huỗi Fourier I Chuẩn bịị ở nhà: I. B 1. Tìm hàm Bài h truyền n của mạch RC sau:

Mạạch RC B 2. Nếu đầu Bài đ vào củaa mạch RC là x (t ) = ccos (2π f0t ) , tìm tín hiệuu ra y (t ) . B 3. Đọc ví Bài v dụ ở phầần II. I Chươngg trình tính II. h chuỗi Fou urier Chương trình sau đây đ tính toánn chuỗi Fouurier của tínn hiệu sau bằng b công cụ c tính toánn biến 5, τ = 1 . t trung gian ccủa Matlab, với T0 = 5

x chữ nhhật Tín hiệu xung H tính chhuỗi Fourieer: FourierSSeries.m Hàm function [X, w] w = Four rierSerie es(x, T0, k_vec) % func ction [X, w] = Fo ourierSer ries(x, T0, T k_vec c) % % symb bolically y calcula ate the Fourier F S Series, a and retur rn the % numerical re esults % signal wi ithin one e period; ; % x: the time domain s % it must have h defi inition over o [0, T0] % it must be b a symb bolic fun nction of f t % % T0: the peri iod of th he signal l % k_vec: the range r of Harmonic cs to be calculat ted syms t for mm m = 1:len ngth(k_ve ec) k = k_vec(mm);

end

% chuoi Fourier X1(mm) = int(x*exp(-j*2*pi*k*t/T0), t, 0, T0)/T0 % chuyen gia tri bien tuong trung sang gia tri so X(mm) = subs(X1(mm)); % tan so goc w(mm) = k*2*pi/T0;

Chương trình chính: main.m % main.m % Calculates the Fourier series through symbolic cacluations clear all syms t; tau = 1; T0 = 5; k_vec = [-3:3]; % !!!CHÚ Ý!!!: dinh nghia cua tin hieu phai bao trum het khoang tu 0 den T0 % tin hieu duoc dinh nghia tren khoang tu -T0 den 2T0, do do thoa man dieu kien bao trum khoang tu 0 den T0. xt = heaviside(t+tau/2)-heaviside(t-tau/2) + heaviside(t-(T0tau/2)) - heaviside(t-(T0+tau/2)); [Xw, w] = FourierSeries(xt, T0, k_vec); % dung do thi ket qua tinh toan bang matlab stem(w,abs(Xw), 'o-'); hold on; % ket qua tinh toan theo ly thuyet Xw_manual = tau/T0*sinc(k_vec*tau/T0); stem(w, abs(Xw_manual), 'r--'); legend('Matlab calculation', 'Manual calculation'); xlabel('\omega (rad/sec)'); ylabel('|c_k|');

III. Luyện tập: Bài 1. Sử dụng Matlab để tính toán chuỗi Fourier của các tín hiệu sau. Vẽ đồ thị tần số và biên độ của tín hiệu tuần hoàn. Vẽ trên cùng đồ thị kết quả của cả tính toán bằng Matlab và tính toán theo lý thuyết.

Trang 30

H Hình 3 B 2. Hiện Bài n tượng Gib bbs: C {cn } làà hệ số chuỗỗi Fourier ccủa hàm x (t ) . Ta địnhh nghĩa x N (t ) = Coi

+N

cne jnΩ t ∑ n =−N 0

là pphiên

b rút gọnn của tín hiiệu gốc. Chhuỗi lệnh sau bản s đây môô tả cách đểể dựng đồ thị của tín hiệu x N (t ) cho ttín hiệu ở hình 3(a) % Plot Fig. 3(a) N = 99; n_vec = [-N:N]; T0 = 2; Omega0 = pi; % he so cua ch huoi Four rier Cn = zeros(size(n_vec)); % than nh phan he h so o v vi tri le e Cn(1:2:end) = 2./(j*n_ _vec(1:2:end)*pi); nh phan he h so o v vi tri ch han % than Cn(2:2:end) = 0; dt = 0.01; t = [-3:dt:3]; xt = 0; for m = 1:leng gth(n_vec c) xt = xt + Cn(m)*ex xp(j*n_ve ec(m)*Ome ega0*t); end

B tập: Dự Bài ựng đồ thị của x N (t ) của tín hiệệu trong hìình 3(b) nhhư là một hàm số theoo thời g với N = 3, 9,19, 99 gian 9 . B 3. Hệ tu Bài uyến tính, bất biến cóó đầu vào là tín hiệu tuần t hoàn: Với các hệ ttuyến tính, bất biến vớ V ới đầu vào là l tín hiệu tuần t hoàn, ttín hiệu ra có c thể đượcc tính t toán bằng hai h cách: tícch chập và hàm truyềnn. Chúng tôôi sẽ biểu diễn d cả hai cách c trong phần n của bài thí nghiệm này m, sau đó so sánh kết quuả của chúnng. T hiệu vàoo: x (t ) = cos (2π f0t ) . Tín

a. Sử dụng phép tính tích chập để tìm đầu ra của mạch RC trong phần chuẩn bị, lập bảng và vẽ đồ thị của biên độ tín hiệu ra theo tần số ⎡⎣⎢1 : 10 : 100⎤⎦⎥ Hz. (sử dụng −1 ≤ t ≤ 1, dt = 0.01 , và tính toán biên độ của tín hiệu ra trong khoảng −1 ≤ t ≤ 1 ). b. Sử dụng hàm truyền để tìm tín hiệu ra, sau đó lập bảng và vẽ đồ thị biên độ tín hiệu ra theo tần số ⎡⎣⎢1 : 10 : 100⎤⎦⎥ Hz. c. Vẽ đồ thị biên độ và góc pha của hàm truyền đạt.

Trang 32

Bài 6. Phép biển đổi Fourier

I. Chuẩn bị: Bài

1.

Cho

một

bộ

lọc

băng

thông



tưởng



hàm

truyền



⎛ w − w ⎞⎟ ⎛ w + w ⎞⎟ ⎜⎜ 0⎟ 0⎟ + rect ⎟ ⎟, với w 0 là tần số trung tâm (đơn vị: rad/s) của dải ⎜⎜ w ⎜⎝ wB ⎠⎟⎟ ⎝ ⎠⎟⎟ B

H (w ) = rect ⎜⎜⎜

thông, và wB < 2w0 là bề rộng của dải. Tìm đáp ứng xung h (t ) . Bài 2. Đọc hiểu ví dụ dưới đây. II. Ví dụ: ⎛t ⎞ Chương trình dưới đây sẽ tính toán biến đổi Fourier của xung chữ nhật x (t ) = rect ⎜⎜⎜ ⎟⎟⎟ . ⎜⎝ τ ⎠⎟

Kết quả tính toán bằng Matlab sẽ được so sánh với kết quả lý thuyết. (Chú ý: hàm để mô phỏng hàm bước nhảy đơn vị sử dụng biến tượng trưng là hàm heaviside). % su dung cong cu fourier.m cua Matlab de tim bien doi Fourier syms t w tau = 1; % symbolic rect(t/tau) rect_sym = heaviside(t+tau/2)-heaviside(t-tau/2); % ham F[rect(t)] viet duoi dang bien tuong trung fourier_rect_sym = fourier(rect_sym); % su dung lenh subs( ) de tinh gia tri cua ham rect(t) t_vec = [-3:0.01:3]; rect_t = subs(rect_sym, t, t_vec); figure(1) plot(t_vec, rect_t); axis([-3 3 -0.1 1.1]); xlabel('t (sec)'); ylabel('x(t)'); % su dung lenh subs( ) de tinh gia tri so cua bien doi fourier w_vec = [-50:0.01:50]; fourier_rect_w = subs(fourier_rect_sym, w, w_vec); figure(2); % ve do thi bien do subplot(2, 1, 1); plot(w_vec, abs(fourier_rect_w)); axis([-50, 50, -0.5 1.5]); xlabel('\omega (rad/s)'); ylabel('|X(\omega)|') % ve do thi goc pha subplot(2, 1, 2); plot(w_vec, phase(fourier_rect_w)); xlabel('\omega (rad/s)'); ylabel('phase (rads)') Trang 33

% ket qua bien doi Fourier theo ly thuyet fourier_rect_w_theo = tau*sinc(w_vec*tau/(2*pi)); % ve do thi bien do subplot(2, 1, 1); hold on; plot(w_vec, abs(fourier_rect_w_theo), 'r--'); legend('symbolic', 'theorectical'); % ve do thi goc pha subplot(2, 1, 2); hold on; plot(w_vec,% phase(fourier_rect_w_theo), 'r--'); legend('symbolic', 'theorectical');

III. Nội dung: Bài 1. Sử dụng Matlab để tính toán biến đổi Fourier của các tín hiệu sau. Vẽ cả đồ thị biên độ và góc pha. Vẽ trên cùng một đồ thị cả kết quả tính toán bằng Matlab và kết quả tính toán theo lý thuyết. a. x 1 (t ) = exp (−t ) u (t ) . b. x 2 (t ) = exp (− t ) . Bài 2. Bộ lọc băng thông của tín hiệu âm thanh. Chương trình dưới đây là một ví dụ của việc truyền một tín hiệu âm thanh qua một bộ lọc thông thấp với tần số cắt là 1500Hz. % doc file [data, Fs, Nbits]=wavread('female_voice.wav'); * Lưu ý: trong các phiên bản Matlab từ 2014 trở đi lệnh wavread này được thay thế bởi lệnh audioread data = data(:, 1).'; % Fs: tan so trich mau; Ts: Thoi gian trich mau Ts = 1/Fs; % phat lai am thanh bi hong sound(data, Fs); % vecto thoi gian t = [-10:Ts:10]; % tan so cat cua bo loc la 1500Hz wb = 1500*2*pi; % bo loc thong thap ly tuong voi tan so cat wb % bien doi fourier: rect(w/wb) ht = wb/(2*pi)*sinc(wb*t/(2*pi)); % dau vao: du lieu, dap ung tuyen tinh, bat bien: ht % dau ra: y = tich chap cua du lieu voi ht Trang 34

y = conv(data, ht, 'same'); % chuan hoa am thanh da xu ly tranh su cat xen y = y/max(abs(y)); % phat lai am thanh da duoc xu ly sound(y, Fs);

a. Chỉnh tần số cắt của bộ lọc và xem ảnh hưởng của nó lên âm thanh thu được. b. File corrupted_male_voice.wav chứa một giọng nam bị làm méo bằng hai âm điệu có tần số 100Hz và 6000Hz tương ứng. Dựa vào kết quả của phần chuẩn bị, thiết kế một bộ lọc thông thấp có dải thông là ⎡⎣⎢250, 3750⎤⎦⎥ Hz. Tìm giá trị của w0 và wB ? c. Cho âm thanh bị làm méo đi qua bộ lọc, sau đó phát âm thanh đó lên. Bài 3. Bộ lọc thông thấp: ⎛ w ⎞⎟ ⎜ ⎟ ⎟ . Tín hiệu đầu vào là ⎜⎜⎝ w f ⎠⎟⎟

Cho một hệ thống có hàm truyền là H (w ) = rect ⎜⎜

⎛ 5t ⎞ ⎛10t ⎞ x (t ) = 5 sinc ⎜⎜⎜ ⎟⎟⎟ + 10 sinc ⎜⎜⎜ ⎟⎟⎟ . Viết chương trình tính tích chập để tìm tín hiệu đâu ra ⎝⎜ π ⎠⎟ ⎝⎜ π ⎠⎟

y (t ) cho các giá trị w f sau, rồi so sánh với kết quả tính toán theo lý thuyết. Sử dụng dt = 0, 001 và t = ⎡⎢−10 : dt : 10⎤⎥ . ⎣ ⎦

a. w f = 7 rad / sec . b. w f = 3rad / sec .

Trang 35

Related Documents

Thuc Hanh Java
November 2019 24
Thuc Hanh Excel
November 2019 24
Bai Thuc Hanh 1
November 2019 26
Thuc Hanh Vba
November 2019 18

More Documents from ""

December 2019 19
May 2020 21
December 2019 30
Giayxacnhan
June 2020 13