Tải bản đầy đủ (.docx) (61 trang)

BÁO CÁO TỐT NGHIỆP TÍN HIỆU HỆ THỐNG MATLAB

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.24 MB, 61 trang )

BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

LAB 1 : MATLAB
1.1 Giới thiệu về MATLAB
- MATLAB là viết tắt của Matrix Laboratory , là một bộ phần mềm toán học của
hãng Mathworks để lập trình , tính tốn số và có tính trực quan rất cao .
- MATLAB làm việc chủ yếu với ma trận . Ma trận cỡ mxn là bảng chữ nhật
gồm mxn số được sắp xếp thành m hàng và n cột. MATLAB có thể làm việc với
nhiều kiểu dữ liệu khác nhau. Với chuỗi kí tự MATLAB cũng xem là một dãy
các kí tự hay là dãy mã số của các ký tự.
- MATLAB dùng để giải quyết các bài tốn về giải tích số, xử lý tín hiệu số, xử
lý đồ họa, … mà khơng phải lập trình cổ điển.
Hiện nay, MATLAB có đến hàng ngàn lệnh và hàm tiện ích. Ngồi các hàm cài
sẵn trong chính ngơn ngữ, MATLAB cịn có các lệnh và hàm ứng dụng chuyên
biệt trong các Toolbox, đểmở rộng môi trường MATLAB nhằm giải quyết các
bài toán thuộc các phạm trù riêng. Các Toolbox khá quan trọng và tiện ích cho
người dùng như tốn sơ cấp, xử lý tín hiệu số, xử lý ảnh, xử lý âm thanh, ma
trận thưa, logic mờ,…
- Giao diện của phần mềm MATLAB khi bắt đầu chạy ứng dụng :

- Một số lệnh phố biến trong MATLAB hỗ trợ người dùng :
• info : hiển thị thơng tin liên lạc về sản phẩm.
• demo : hiển thị các tùy chọn phổ biến trong MATLAB.
1


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

• help : trình bày một số câu lệnh ; help help giải thích cách help làm việc
• helpbrowers : mở ra cửa sổ Help Window
• lookfor : tìm kiếm thơng qua help cho bởi 1 chuỗi xác đinh.


1.2.Các tốn tử
- Có 2 loại toán tử cơ bản là toán tử unary(toán tử một ngơi) và binary (tốn tử
hai ngơi). Ví dụ kí hiệu “-” được hiểu tốn tử một ngơi là giá trị âm và hiểu tốn
tử hai ngơi là tốn tử trừ .
- Dưới đây là một vài toán tử phổ biến được sử dụng với các biểu thức số học :
+

toán tử cộng

- giá trị âm , toán tử trừ
*

toán tử nhân

/

toán tử chia lấy tử (9/3 = 3)

\

toán tử chia lấy mẫu (3/12 = 4)

^ toán tử lũy thừa

1.3.Vector và ma trận
- Vector và ma trận được sử dụng để lưu tập các giá trị có cùng kiểu dữ liệu .
Một vector có thể là vector hàng hoặc vector cột . Một ma trận có thể được hình
thành từ một bảng giá trị .
Ma trận cỡ mxn là bảng số chữ nhật gồm mxn số được sắp xếp thành m hàng và
n cột :

• Nếu m = 1 thì ma trận chuyển thành vector hàng
• Nếu n = 1 thì ma trận chuyển thành vector cột
• Nếu m = n = 1 thì ma trận trở thành đại lượng vơ hướng.
• - Một vector trong MATLAB được coi là mảng 1 chiều trong các ngôn ngữ
khác. Một ma trận được coi là mảng 2 chiều . Vì vậy trong MATLAB , thực hiện
tốn tử với vector và ma trận thì được coi là các toán tử mảng .
2


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG



Tạo vector hàng
- Có nhiều cách tạo biến vector hàng . Cách trực tiếp nhất là đặt các giá trị bạn
muốn vào trong dấu ngoặc vuông , và được phân cách bởi dấu cách hoặc dấu
phẩy . Ví dụ :

Sử dụng colon operator (tốn tử : ) lấy từng giá trị trong khoảng xác định. Ví
dụ :

- Chú ý trong trường hợp này , cặp [] là không cần thiết để định nghĩa vector.
Với colon operator , một giá trị bước nhảy có thể xác định với 1 dấu 2 chấm
khác , theo mẫu sau (giá trị đầu : bước nhảy : giá trị cuối) . Ví dụ :

- Tương tự hàm linspace tạo ra 1 vector có n giá trị từ x đến y . Ví dụ tạo ra
vector với 5 giá trị nằm cách đều trong khoảng từ 3 đến 15 :

- Biến vector cũng có thể được tạo dựa trên các biến có sẵn . Ví dụ tạo một
vector mới chứa 2 vector đã tạo ở trên :


3


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Đặt 2 vector cùng nhau giống như tạo một vector mới được gọi là
concatenating (nối ghép) vector.


Tạo vector cột
- Để tạo vector cột , ta đặt các giá trị cần truyền vào trong cặp dấu ngoặc vuông
và phân cách bởi dấu chấm phẩy (;) :

- Không thể sử dụng colon operator để tạo ra vector cột . Tuy nhiên có một
cách khác là chuyển hàng thành cột để tạo ra vector theo ý . Ví dụ :



Tạo biến ma trận
- Việc tạo biến ma trận thực chất là kết hợp biến vector hàng và cột lại với nhau .
Ví dụ biến mat được tạo bởi các giá trị cho trước :

4


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Yêu cầu để tạo ma trận là số giá trị trên các hàng phải bằng nhau . Nếu khác
thì sẽ hiển thị một thơng báo lỗi , ví dụ :


- Chúng ta có thể có thể tạo ma trận dựa trên colon operator cho các hàng . Ví
dụ :

- Một cách khác để tạo ma trận không cần sử dụng dấu chấm phẩy để kết thúc
một hàng là nhấn phím Enter sau mỗi hàng. Ví dụ :

- Ma trận với các số ngẫu nhiên được tạo bằng cách sử dụng hàm rund và
randint . Hai đối số đầu tiên trong hàm randint xác định số hàng và cột của ma
trận . Đối số cuối xác định các giá trị ngẫu nhiên của ma trận nằm trong khoảng
nào . Ví dụ tạo ma trận 2x4 với các giá trị nằm trong khoảng 10 đến 30 :

- Đối với hàm rand , nếu truyền vào hàm 1 giá trị n thì ma trận nxn sẽ được tạo
với các giá trị ngẫu nhiên kiểu số thực :

5


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Truyền vào 2 giá trị m, n thì ma trận mxn với các giá trị ngẫu nhiên số thực sẽ
được tạo :

- MATLAB cũng cung cấp các hàm để tạo ra các ma trận đặc biệt . Ví dụ là hàm
tạo ma trận với các giá trị 0 . Nếu truyền 1 đối số n thì ma trận nxn được tạo , 2
đối số m, n thì ma trận mxn được tạo :

• MATLAB scripts
- Một script chứa các mã viết bằng MATLAB được lưu trữ trong một file. Nội
dung trong script được hiển thị trên cửa sổ Command Window . Script được

thực thi hoặc chạy bằng cách nhập vào tên file không chứa đuôi mở rộng.
- Quy tắc của tên file giống như cho biến : bắt đầu bằng một chữ cái , sau đó có
thể là chữ cái , chữ số hoặc kí tự đặc biệt.
- File script mặc định được lưu trong Work Directory. Ví dụ , ta tạo 1 file
script1.m để tính diện tích hình trịn . Ta viết mã vào script1.m như sau :
6


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Sau khi lưu lại file, muốn hiển thị nội dung ra Command Window ta sử dụng
lệnh type :

- Để chạy đoạn mã này , ta chỉ cần gõ tên của file script ra Command Window :

• Plot và Subplot
- Lệnh plot trong MATLAB cho phép vẽ đồ thị từ dữ liệu là vector. Ví dụ nếu
có biến t là thời gian và y là tín hiệu , gõ lệnh plot(t,y); lập tức xuất hiện giao
diện đồ thị của t và y. Các hàm phổ biến cho plot:
• title (‘………….’) : chú thích tên đồ thị.
• xlabel ('……….’) : chú thích tên trục x của đồ thị.
• ylabel(‘………') : chú thích tên trục y của đồ thị.
• grid on : hiển thị lưới các ô vuông.
- Để hiển thị nhiều đồ thị trên một màn hình , sử dụng hàm subplot. Hàm này
gồm 3 đối số (m,n,p) , m và n chia màn hình ra thành m hàng và n cột . Đối số p
xác định đồ thị nào xuất hiện trước .
• subplot (…,….,…): hiện thị vùng muốn vẽ.
• stem (signal): vẽ chuỗi dữ liệu rời rạc.
• angle(x): argument của số phức a.
7



BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

• real(x): phần thực của x

;

• imag(x): phần ảo của x.
• conj(x): số phức liên hợp của x.
• abs(x) :modun của số phức x.
1.6.Câu lệnh lựa chọn



Biểu thức quan hệ
Các tốn tử quan hệ trong MATLAB là :
Toán tử
>
<
>=
<=
==
~=

Định nghĩa
Lớn hơn
Nhỏ hơn
Lớn hơn hoặc bằng
Nhỏ hơn hoặc bằng

Bằng
Khơng bằng

Các tốn tử Logic :
Tốn tử
||
&&
~


Định nghĩa
Hoặc

Không

Câu lệnh IF
Câu lệnh if xác định 1 điều kiện hoặc 1 nhóm điều kiện xảy ra thì cho phép thực
hiện các câu lệnh . Cú pháp :

8


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG



Câu lệnh IF-ELSE và SWITCH
Câu lệnh if-else sử dụng để lựa chọn giữa 2 điều kiện . Cú pháp :

Câu lệnh switch được sử dụng để thay thế lệnh if-else lồng nhau . Cú pháp :


1.7.Vòng lặp FOR
Vòng lặp for được sử dụng khi cần lặp lại 1 biểu thức nào đó dựa theo số lần cần
lặp được xác định trước. Cú pháp :

9


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

1.8 Nhận xét.
- Từ những giới thiệu và một số hướng dẫn cơ bản, ta có thể thấy Matlab là một
phần mềm với một mơi trường tính tốn số và lập trình mạnh mẽ. Hổ trợ hầu hết
các phép toán( đặc biệt hỗ trợ tốt ma trận) , các ngơn ngữ lập trình phổ biến hiện
nay như C, C++… và nhiều công cụ khác cho những lĩnh vực, ngành khác nhau
(xử lý tín hiệu số, xử lý đồ họa).

1.9 Bài tập
Bài tập 1:
Code:
clc;
F=input('Nhap nhiet do F: ');
C=0;
C=(F-32)*5/9;
fprintf('Nhiet do C la : %f',C);

Kết quả:

Bài tập 2:
Code:

clc;
10


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

A=[3:1:6]
B=[1:0.5:3]
C=[5:-1:2]
Kết quả:

Bài tập 3:
Code:
clc;
A=linspace(4,8,3)
B=linspace(-3,-15,5)
C=linspace(9,5,3)

Kết quả:

11


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

Bài tập 4:
Code:
clc;
MT = [7:-1:5
3:2:7]

Kết quả:

Bài tập 5: Vẽ đồ thị exp(x) với x chạy từ -3 đến 3 , bước nhảy là 0,1 .Đặt title ,
và label cho trục.
Code:
clc;
x=[-3:0.1:3];
y=exp(x);
plot(x,y,'r');
12


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

title('Do thi bai 5: ');
xlabel('truc X ');
ylabel('truc y');
grid on
Kết quả:

Nhận xét: Đồ thị y=exp(x) là 1 đường cong
Bài tập 6: Vẽ đồ thị sin(x) chạy từ -3π tới 3π
Sử dụng 10 điểm trong khoảng này
Sử dụng 100 điểm trong khoản này
Code:
clc;
a = -3*pi
b = 3*pi
x=linspace(a,b,10)
y=sin(x);

subplot(2,1,1);
plot(x,y,'r');
title('do thi y=sin(x) qua 10d');
13


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

xlabel('truc X');
ylabel('truc Y');
grid on
x= linspace(a,b,100);
y=sin(x);
subplot(2,1,2);
plot(x,y,'b');
title('do thi y=sin(x) qua 100d');
xlabel('TRUC X');
ylabel('TRUC Y');
grid on
Kết quả:

Nhận xét: Khi chia nhiều điểm trên trục X, đồ thị sẽ mượt hơn

Bài tập 7 : Một cơn bão là áp thấp , bão hoặc siêu bão được xác định bởi vận tốc
gió trung bình . Là áp thấp nếu sức gió dưới 38 mph(miles per hour). Là bão nếu

14


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG


sức gió từ 39 đến 63 mph. Là siêu bão nếu sức gió trên 74 mph. Viết script cho
phép người dùng nhập sức gió và hiển thị ra loại bão .
Code:
clc;
V=input('nhap van toc bao v : ');
if V > 74
fprintf('la sieu bao');
elseif V < 38
fprintf('la ap thap');
else
fprintf('la bao');
end
Kết quả:

Bài tập 8: Tạo một ma trận 3x5 . Thực hiện các yêu cầu dưới theo 2 cách : sử
dụng hàm có sẵn và sử dụng vịng lặp.
• Tìm giá trị lớn nhất trong mỗi cột.
• Tìm giá trị lớn nhất trong mỗi hàng.
• Tìm giá trị lớn nhất trong cả ma trận.
Code:
clc;
A = randi([0,30],3,5);
A
maxMT = 0;
for i=1:3;
maxHang = 0;
for j=1:5;
if A(i,j) > maxHang
maxHang = A(i,j);

15


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

end
end
fprintf('gia tri lon nhat cua hang %d : %d \n',i,maxHang);
if maxHang > maxMT
maxMT = maxHang;
end
end
for j=1:5;
maxCot=0;
for i=1:3;
if A(i,j) > maxCot
maxCot = A(i,j);
end
end
fprintf('gia tri lon nhat cua cot %d : %d \n',j,maxCot);
end
fprintf('max ma tran : %d',maxMT);
Kết quả:

LAB 2 : CHUỖI FOURIER VÀ BIẾN ĐỔI FOURIER
1.Mục tiêu
16


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG


- Việc phân tích Fourier đóng vai trị quan trọng trong lý thuyết truyền thơng.
Mục đích chính của bài thí nghiệm này là :
• Hiểu và thực hành tốt với chuỗi Fourier, kĩ thuật biến đổi Fourier và ứng
dụng của nó trong lý thuyết truyền thơng.
• Học được cách triển khai kĩ thuật phân tích Fourier bằng MATLAB.
2.Giới thiệu
2.1Chuỗi Fourier
- Chuỗi Fourier (được đặt tên theo nhà toán học Joseph Fourier) của một hàm
tuần hồn là một cách biểu diễn hàm đó dưới dạng tổng của các hàm tuần hồn
có dạng ejnx .
Chuỗi Fourier là việc mở rộng trực giao của tín hiệu tuần hồn với chu kì T0.Tín
hiệu tuần hồn x(t) với chu kì T0 có thể được biểu diễn như sau :

- Với xn được gọi là hệ số Fourier của tín hiệu x(t). Hệ số xn được tính như sau :

- Loại chuỗi Fourier này được gọi chuỗi Fourier hàm mũ. Tần số f0=1/T0 được
gọi là tần số cơ bản của tín hiệu. Sóng thứ n có tần số fn=nf0.
Nếu x(t) là tín hiệu tuần hồn giá trị thực thì tính chất liên hợp phức được thỏa
mãn. Điều này có nghĩa x-n=xn* với * là biểu thị của liên hợp phức. Ta có thể
tính được hệ số âm bằng cách lấy liên hợp phức của hệ số dương. Dựa theo kết
quả này , ta có thể thấy được :

2.2.Biến đổi Fourier
17


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Biến đổi Fourier là việc mở rộng của chuỗi Fourier cho một tín hiệu bất kì.

Biến đổi Fourier của tín hiệu x(t) , kí hiệu là X(f) được định nghĩa :

- Ngược lại , biến đổi Fourier ngược được định nghĩa :

- Nếu x(t) là tín hiệu thực thì X(f) thỏa mãn tính chất liên hợp phức :

3.Lab work
3.1.Chuỗi Fourier
- Các hàm hữu ích trong MATLAB :
• exp(n) : hàm e mũ n
• fft(x,N0) : hàm biến đổi fourier nhanh của tín hiệu x
• length(): tính độ dài của ma trận hoặc vector
• conj : tính liên hợp phức của một số
• abs(x) : lấy giá trị tuyệt đối của x nếu x là số thực , lấy độ lớn của x nếu x
là số phức
• angle: tính pha theo radian của ma trận với các phần tử phức
• stem: vẽ tín hiệu rời rạc
• figure : đặt tên cho form
- Code minh họa dưới đây trình này cách sử dụng hàm fft để áp dụng đối với hệ
số Fourier lớn :

18


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

3.2.Biến đổi Fourier
Bài tập 2: Tín hiệu x1(t) và x2(t) được miêu tả như sau :

Nhận xét chung :

Ý nghĩa chuổi Fourier: dùng để phân tích được sự phân bố năng lượng của tín
hiệu và qua phân tích phổ thì ta biết được năng lượng tập trung chủ yếu ở tần số
thấp. Từ đó có thể đưa ra các phương pháp thiết kế bộ lọc thích hợp để lấy được
năng lượng của tín hiệu tối ưu nhất.
4. Bài tập
Bài tập 1: Có một tín hiệu tuần hồn x(t). Tính tốn và vẽ đồ thị của tín hiệu x(t)
= e-t/2 với t [0,]. Sử dụng hàm biến đổi Fourier nhanh (FFT) trong MATLAB.
Triển khai tín hiệu x(t) với số lượng sóng N0 cần sử dụng là 100, chu kì T0 = ,
bước nhảy ts=T0/N0. Phổ pha và phổ biên độ của dạng sóng trên
Code:
clc;
19


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

T0=pi;
N0=100;
t=0:T0/N0:T0;
x=exp(-t/2);
plot(t,x,'r');
title('ham e^(-t/2)');
xlabel('Truc t');
ylabel('Truc x');
grid on;
figure
X = fft(x,N0)/N0;
X=[conj(X(N0:-1:2)),X];
Xmag = abs(X);
Xangle = angle(X);

k = -N0/2+1:N0/2-1;
stem(k,Xmag(N0/2+1:length(X)-N0/2));
title('pho bien do');
xlabel('f');
ylabel('bien do');
grid on;
figure
stem(k,Xangle(N0/2+1:length(X)-N0/2));
title('pho pha');
xlabel('f');
ylabel('pha');
grid on;
Figure
Kết quả:
20


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

Đồ thị trong miền thời gian:

Nhận xét: Đồ thị exp(-t/2) là một đường cong có giá trị giảm dần theo thời gian

Phổ biên độ:

21


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG


Nhận xét: Biên độ lớn nhất tại điểm f=0, sau đó giảm dần về 2 phía
Phổ pha:

Nhận xét: Tín hiệu ngược pha
Vẽ đồ thị của 2 tín hiệu trên trên miền tần số trong MATLAB.
22


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

- Yêu cầu : vẽ ln tín hiệu trên miền thời gian. Trục x chứa 100 điểm và điểm
bắt đầu là -5 đến 5. Phổ biên độ và phổ pha của tín hiệu này
Code:
clc;
clear all;
t = linspace(-4,4,100);
x1 = zeros(1,length(t));
for i = 1:length(t);
if t(i)>= -1 && t(i)<=0
x1(i) = t(i)+1;
else if t(i) > 0 && t(i) <= 1
x1(i) = 1;
else x1(i) = 0;
end
end
end
subplot(3,2,1);
plot(t,x1, 'r');
title('do thi tan so tren mien thoi gian X1');
xlabel('t');

ylabel('y');
grid on
X1 = fft(x1);
X1abs = abs(x1);
X1angle = angle(x1);
k = (-length(X1)/2:length(X1)/2-1);
23


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

subplot(3,2,3);
stem(k,X1abs);
title('pho bien do X1');
xlabel('f');
ylabel('bien do X1');
grid on
subplot(3,2,5);
stem(k,X1angle);
title('pho pha X1');
xlabel('f');
ylabel('pha X1');
grid on
x2 = zeros(1,length(t));
for i = 1:length(t);
if t(i) >=0 && t(i)<=1
x2(i) = t(i);
else if t(i) > 1 && t(i) <= 2
x2(i) = 1;
else x(i) = 0;

end
end
end
subplot(3,2,2);
plot(t,x2,'r');
title('do thi trong mien thoi gian X2');
xlabel('t');
24


BÁO CÁO: TN TÍN HIỆU HỆ THỐNG

ylabel('y');
grid on;
X2 = fft(x2);
X2abs = abs(X2);
X2angle = angle(X2);
grid on
k = (-length(X2)/2:length(X2)/2-1);
subplot(3,2,4);
stem(k,X2abs);
title('pho bien do X2');
xlabel('f');
ylabel('bien do x2');
grid on
subplot(3,2,6);
stem(k,X2angle);
title('pho pha X2');
xlabel('f');
ylabel('pha X2');


Kết quả x1(t):

25


×