1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO cáo THỰC HÀNH – THÍ NGHIỆM TIN học ỨNG DỤNG TRONG điện tử VIỄN THÔNG

56 1,5K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 56
Dung lượng 9,95 MB

Nội dung

1.1.1 Tổng quan về cấu trúc dữ liệu của MATLAP và các ứng dụngCHƯƠNG II: CẤU TRÚC CÚ PHÁP, LẬP TRÌNH GUI, MATLAB SIMULINK TÀ I LIỆU THAM KHẢO CHƯƠNG I: GIỚI THIỆU CHUNG VỀ MATLAB 1.1 TỔN

Trang 1

TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM

KHOA ĐIỆN – ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ – VIỄN THÔNG -o0o -

BÁO CÁO

THỰC HÀNH – THÍ NGHIỆM

TIN HỌC ỨNG DỤNG TRONG ĐIỆN TỬ - VIỄN THÔNG

Trang 2

1.1.1 Tổng quan về cấu trúc dữ liệu của MATLAP và các ứng dụng

CHƯƠNG II: CẤU TRÚC CÚ PHÁP, LẬP TRÌNH GUI, MATLAB SIMULINK

TÀ I LIỆU THAM KHẢO

CHƯƠNG I: GIỚI THIỆU CHUNG VỀ MATLAB

1.1 TỔNG QUAN VỀ MATLAP

Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài toán về kỹthuật Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làmviệc rất dễ dàng cho người sử dụng Dữ liệu cùng với thư viện được lập trình sẵn cho phépngười sử dụng có thể có được những ứng dụng sau đây

• Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường

• Cho phép lập trình tạo ra những ứng dụng mới

• Cho phép mô phỏng các mô hình thực tế

• Phân tích, khảo sát và hiển thị dữ liệu

• Với phần mềm đồ hoạ cực mạnh

• Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran

Trang 3

1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng

Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này không đòi hỏi

về kích thước) Chúng cho phép giải quyết các vấn đề liên quan

đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vectơ và có thể sửdụng ngôn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh

gọi từ Matlab Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư viện về ma trận,

từ đó phần mềm Matlab được viết nhằm

cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận nàyđược phát triển bởi các công trình Linpack và Eispack Ngày nay Matlab được phát triển bởiLapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận

• Kiểu uint8, uint8, uint16, uint64

• Kiểu char ví dụ “Hello”

• Các kỹ sư, các nhà nghiên cứu khoa học

• Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trongsản xuất

Trang 4

CHƯƠNG II: CẤU TRÚC CÚ PHÁP, LẬP TRÌNH GUI, MATLAB SIMULINK

2.1 CẤU TRÚC CÚ PHÁP

+ Công cụ tính toán đa năng:

Các kiểu số cơ bản được sử dụng trong MATLAP là số nguyên, số thực và số phức MATLAPcũng có thể biểu diễn các sô non-number Có hai dạng số non-number trong MATLAP: Ìn, là

số vô cực dương được tạo ra bởi phép chia 1/0 và NaN, là số được tạo ra từ phép toán chẳnghạn như 0/0 hay ∞ -∞

MATLAP là công cụ thực sự hữu dụng với các phép tính Chẳng hạn khi nhập vào lệnh:

mới tạo ra thì được mặc định là số double, kiểu số 32 bit Chúng ta có thể sử dụng lệnh single

để chuyển kiểu số từ double sang single, là kiểu số 16 bit.

Trang 5

Đoạn lệnh ở trên sẽ không cho ra kết quả đúng bởi vì giá trị của x chưa được khởi tạo Biểuthức trên có thể sửa lại bằng cách gán một giá trị bất kỳ cho biến x.

>>x=pi

>> f=x^2+4*sin(x);

Trong MATLAP, tên của một biến phải được bắt đầu bằng một ký tự chữ, có thể là chữ thường

hoặc chữ in hoa, và theo sau bởi các ký tự chữ, các ký tự số, hoặc dấu gạch chân MATLAP

chỉ có thể phân biệt được các biến với nhau bởi 31 ký tự đầu tiên của tên biên.

Trang 6

2.2 LẬP TRÌNH GUI

Giao diện người sử dụng ( Graphical User Interface – GUI) là giao diện bằng hình ảnh củachương trình Một GUI tốt có thể làm chương trình trở lên dễ sử dụng bằng cách cung cấpthông tin ban đầu cần thiết và với những công cụ điều khiển như: nút nhấn (pushbutton), hộpliệt kê (listbox), thanh trượt (slider), trình đơn ( menu), GUI nên được thiết kế một cách dễhiểu và thân thiện để người sử dụng có thể hiểu và dự đoán được kết quả của một tác động

2.2.1 Cách làm việc của một GUI

GUI bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu, , chúng cung cấp cho người sử

dụng một môi trường làm việc thân thiện để họ tập trung vào các ứng dụng của chương trìnhhơn là đi tìm hiểu cách thức làm việc của chương trình Tuy nhiên tạo ra GUI là công việc khókhăn đối với người lập trình phải được sử lý với các click chuột cho bất kỳ thành phần nào củaGUI và vào bất kỳ thời điểm nào Trong MATLAP, để tạo ra một GUI lưu ý ba yêu cầu chínhsau đây:

• Component (các thành phần): mỗi đối tượng trong GUI(nút nhấn, nhãn, hộp soạnthảo, ) là một thành phần Các thành phần được phân loại thành: công cụ điều khiển( nút nhấn, hộp soạn thảo, thanh trượt, ), các thành phần tĩnh (khung hình, chuỗi kýtự, ), menu và axes (là hệ trục dành để hiển thị đồ họa) Các công cụ điều khiển và cácthành phần tĩnh được tạo ra bởi hàm uicontrol, menu được tạo ra bởi các hàm uimenu vàuicontexmenu, axes được tạo ra bởi hàm axes

• Figure: các thành phần của GUI phải được sắp xếp trong một figure, là một cửa sổ hiểnthị trên màn hình máy vi tính Lệnh figure tạo ra một figure được sử dụng để chưa cácthành phần của GUI

Trang 7

• Callback: cuối cùng, khi người sử dụngtác động vào chương trình bằng cách nhấn chuột hay gõ bàn phím thì chương trình phảiđáp ứng lại mỗi sự kiện này Ví dụ, trong trường hợp người sử dụng tác động vào mộtnút nhấn thì MATLAP sẽ thực thi một hàm tương ứng với nút nhấn đó Mỗi thành phầncủa GUI phải callback một hàm tương ứng của nó Các thành phần cơ bản của GUI phảicallback một hàm tương ứng của nó Các thành phần cơ bản của GUI được tóm tắt trongbảng 2.1 và thể hiện ở hình 2.1 Hình 2.1

Các công cụ điều khiển

hiện bởi 1 vòng tròn nhỏ, trạng thía “on” tươngứng với trường hợp có dấu chấm giữa vong tròn

và ngược lại Trong một nhóm Radio button tachỉ có thể chọn 1 thành phần Khi có tác độngvào mỗi thành phần sẽ có 1 hàm được gọi

Check box Cũng là 1 nút nhấn có 2 trạng thái được thể hiện

bởi 1 hình vuông nhỏ, trạng thái “on” tương ứngvới trường hợp có dấu chấm giữa hình vuông vàngược lại Khi có tác động nó sẽ gọi hàm tươngứng và thay đổi trạng thái từ “on” sang “off”hoặc ngược lại

Trang 8

Lít box Là 1 danh sách các chuỗi Người sử dụng có thể

lựa chọn 1 chuỗi bằng cách click hoặc doubleclick vào nó Chương trình sẽ gọi 1 hàm khi có 1chuỗi đc chọn

Popup menus Là công cụ cho phép chúng ta chọn 1 chuỗi trong

1 nhóm các chuỗi Danh sách tất cả các chuỗi sẽ

đc hiện thị khi có click chuột

Slider Là công cụ cho phép điều khiển 1 cách lien tục

giá trị trong 1 thanh trượt

Các thành phần tĩnh

Frame Unicontrol Được sử dụng để tạo ra 1 khung hình chữ nhật

Frame còn được sử dụng để nhóm các công cụđiều khiển lại với nhau

Text field Được sử dụng để tạo ra 1 nhãn bao gồm các ký

tự, nhưng ko có khả năng gọi hàm

Menu và trục đồ thị

Menu items Uicontrol Được sử dụng để tạo ra menu trong thanh công

cụ Chương trình sẽ gọi hàm khi 1 menu đc chọn.Context menus Nicontextmenu Được sử dụng để tạo ra menu xuất hiện khi right-

click vào 1 hình trong giao diện

Axes Axes Được sử dụng để tạo ra 1 hệ trục đồ thị.Axes ko

có khả năng gọi hàm

Bảng 2.1

2.2.2 Tạo và hiển thị một GUI

Trong MATLAP, công cụ guide được sử dụng để tạo ra các GUI, công cụ này cho phép bố trí,lựa chọn và sắp xếp các thành phần Các thuộc tính mỗi thành phần: tên, màu sắc, kích cỡ, fontchữ, đều có thể được thay đổi Công cụ guide được thực thi bằng cách chọn File →New-

Trang 9

GUI, khi được gọi guide sẽ tạo ra một Layout Editer, như hình 2.2.

Hình 2.2

Sau đây là các bước cơ bản tạo ra giao diện trong MATLAP:

• Xác định các thành phần của giao diện và cacs hàm bị tác động bởi mỗi thành phần.Phác họa trên giấy bị trí của các thành phần

• Mở công cụ tao GUI(File →New- GUI), sắp xếp các thành phần vào vùng làm việccũng như của mỗi thành phần

• Lưu giao diện vừa tạo Khi lưu một giao diênj MATLAP sẽ tạo ra hai file cùng tênnhưng khác phần mở rộng File có phần mở rộng fig chứa nội dung của giao diện, trongkhi file có phần mở rộng m chứa những đoạn mã liên quan đến giao diện

• Viết hàm đê thực thi lệnh gọi của mỗi thành phần trong giao diện

2.3 MATLAP Simulink

Simulink là một công cụ trong MATLAP dùng để mô hình, mô phỏng và phân tích các

hệ thống động với môi trường sử dụng bằng đồ họa Việc xây dụng mô hình được đơngiản hóa bằng các hộp công cụ toàn diện cho cả việc phân tích tuyến tính và phi tuyến.Simulink là một phần quan trọng của MATLAP và có thể dễ dàng chuyển đổi qua lạitrong quá trình phân tích, và vì vậy người dùng có thể tận dụng được ưu thế của cả haimôi trương

CHƯƠNG III: NỘI DUNG VÀ KẾT QUẢ THỰC HÀNH TIN HỌC ỨNG DỤNG TRONG ĐIỆN TỬ - VIỄN THÔNG

3.1 Bài 1: “Nhập dòng lệnh trong Matlab”

1.1 Mục tiêu:

Trang 10

1.1: Thiết lập đường dẫn và không gian làm việc trên MATLAB

1.2: Cửa sổ lệnh và cách nhập dòng lệnh trên MATLAB

1.3: Lưu trữ và load dữ liệu

1.4: SỬ dụng công cụ trợ giúp trên MATLAB

1.5: Cú pháp và biến khi lập trình bằng MATLAB

1.2 Công tác chuẩn bị của sinh viên:

2.1: Tìm hiểu ý nghĩa các từ, cụm từ: path, load, save, command windows

2.2: Các phím tắt khi dùng máy tính và phím tắt chức năng trên phần mềm MATLAB

1.3 Trang thiết bị cần thiết:

3.1: Máy thính PC hoặc Laptop

3.2: Phần mềm MATLAb7.0 hoặc các phiên bản cao hơn đã được cài đặt vào MATLAB

3.3: BỘ công cụ soạn thảo Microsoft Office

1.4 Các nội dung, quy trình:

1.4.1: Tạo Folder với tên “MSVXx-TH.MATLAB”

1.4.2: Khởi động MATLAB

1.4.3: Từ phần mềm MATLAB chọn Set Path Xuất hiện hộp thoại Sau đó chọn Add foder Chọn đường

dẫn đến thư mục vừa tạo.

1.4.4: Thiết lập chế độ hiển thị sao cho có thể quan sát được cửa ssoor Command Window một cách dễ

dàng Từ cửa sổ Command Window, tiến hành thực hiện nhập các lệnh cơ bản theo bảng 1.1 Quan sát kết quả trả về, ghi lại và giải thích chức năng và chức sử dụng của các lệnh đó:

Kq =40

4 Sp_1=4*i+(10-6*i),real_=real(Sp_1),imag_=imag(Sp_1)

Sp_1=10.0000-2.0000i real_ =10 imag_ =-2

Trang 11

1.4.5: Bấm tổ hợp phím tắt Ctrl+S Hộp thoại Save As hỏi thiết lập lưu các giá trị vừa thực hiện dưới

dạnh file mở rộng *mat Lưu với tên TH-B01.mat

1.4.6:Trên cửa sổ Command Window, thực hiện gõ lần lượt 2 lệnh sau

>>clc

>>clear all

1.4.7: Gõ lệnh: >>load TH-B01.mat

1.4.8: Load các biến trong Workspace bằng lệnh >>who

1.4.9: Xem độ lớn các biến bằng lệnh >>whos

1.4.10:Liệt kê các hàn toán học có sẵn trong MATLAB bằng lệnh: >.help elfun

Danh sách tên các hàm toán học được hỗ trợ bởi MATLAB được liệt kê và giải thích một cách ngắn gọn Nếu click vào tên hàm cụ thể MATLAB sẽ chỉ dẫn tới tập tin có thể đọc để tìm hiểu về lệnh hay hàm này.

-Nếu biết trước một tên hàm cụ thể nào đó có thể truy vần bằng lệnh: >>help <tên hàm>

-Trong trường hợp chưa rõ điều cần tìm có thể sử dujnh lệnh: >>help help

-Kiểm tra lệnh: >>lookfor inverse

-Kiểm tra lệnh: >.helpwin

Trang 12

3.2 Bài 2: “Các phép toán với vector và ma trận trong MATLAB”2.1 Mục tiêu:

1.1: CÁch thức xây dựng một vector, ma trận trong MATLAB

1.2: CÁc phép toán với vector và ma trận

1.3: Tạo các ma trận đặc biệt, ma trận ngẫu nhiên.

1.4: triscch và tạo một ma trận mới xử lý các phép toán đa chiếu (mảng)

2.2 Công tác chuẩn bị của sinh viên:

2.1: Đọc lại các kiến thức về ma trận, các phép toán cơ bản.

2.2: Ôn lại , nắm chắc cú pháp trong MATLAB (trong bài thực hành 1)

2.3 Trang thiết bi cần thiết:

3.1 Máy tính pc hoặc Laptop

3.2: Phần mềm MATLAB 7.0 hoặc các phiên bản cao hơn đã được cài đặt vào MATLAB 3.3: BỘ công cụ soạn thảo Microsoft Office

2.4 Các nội dung, quy trình:

2.4.1 Tạo một vector A gồm những số lẻ trong khoảng từ 21 đến 49

Trang 13

2.4.5 Cho vector x=[2 1 3 7 9 4 6], hãy giải thích các lệnh sau

Câu lệnh Kết quả Giải thích

x(3) 3 Thành phần ở vị trí số 3 của x

x(6:-2:1) 4 7 1 Trích từ x một vector bắt đầu ở vị trí số 6, lùi

2 bước, kết thúc ở vị trí số 1 x(1:7) 2 1 3 7 9 4 6 Trích một vector từ vị trí 1 đến 7 của x

x(end-2:-3:2) 9 1 Trích từ x một vector bắt đầu ở vị trí số

Trang 14

end-2, lùi 3 bước, kết thúc ở vị trí số 2 x(1:end) 2 1 3 7 9 4 6 Trích một vector từ vị trí 1 đến hết vector x

sum(x) 32 Tổng các thành phần trong x

x(1:end-1) 2 1 3 7 9 4 Trích một vector từ vị trí 1 đến end-1 vector

x mean(x) 4.5714 Tính giá trị trung bình các thành phần trong

x x(2:2:6) 1 7 4 Trích từ x một vector bắt đầu ở vị trí số 2,

nhảy 2 bước, kết thúc ở vị trí số 6 min(x) 1 Giá trị nhỏ nhất trong x

2.4.6 Cho x=[1+3i,2-2i] là một vector phức Kiểm tra các biểu thức:

-x' là chuyển vị lên hợp của x

Lấy cột thứ 3 của A

y=A(3:3,1:4) y =

1 1 1 1

Ma trận con gồm hàng thứ 3 cột từ 1 đến 4 của A

B=A(1:3,2:2) B =

2 6 1

Ma trận con có hàng từ 1 đến

3 và cột 2 của A

A=(A;2 1 7 7;7 7 4 5) A = Thêm các hàng [2 1 7 7] và [7

7 4 5] vào ma trận A

Trang 15

C=A([1,3],2) C =

2 1 A(2:3,1:3)=[0 0 0;0 0 0] A =

1 2 3 4

0 0 0 8

0 0 0 1

Thay hàng 2,3 cột 1,2,3 của A bằng 0

- Gán cột thứ hai của G cho N: N=G(:,2)

- Chỉ nhân cột thứ 3 của A cho 5: A(:,3)*5

- H=A’ = 1 3

5 0

6 8

- Cộng M và N: M+N

Trang 16

- J=B/D J = 3.5000 1.5000 2.5000

1.0000 4.0000 0.5000

- tìm tổng tất cả các giá trị của ma trận A: sum(A)

2.4.9 Từ Command Window nhập lệnh clear sau đó nhập lệnh clc Định nghĩa ma trận T=[3 3;1 8;-4 3];

A=[diag(-1:2:3)T;-4 4 1 2 1] Thực hiện phép biến đổi sau đây với ma trận A.

Trích ra một vecto bao gồm thành phần thứ 2 và 4 của hang thứ 3 A(3, [2 4])

Tìm giá trị nhỏ nhất của cột thứ 3 min(A(:,3))

Tìm giá trị lớn nhất của hàng thứ 2 max(A(2,:))

Tính tổng các thành phần của cột thứ 2 sum(A(:,2))

Tính giá trị trung bình của hàng thứ 1và thứ 4 mean(A(1,:))

mean(A(4,:)) Trích ma trận con bao gồm hàng thứ 1 và thứ 3 A(1:3,:)

Trích ma trận con bao gồm hàng thứ 1 và 2 của cột 3 4 5 A(1:2,[[ 3 4 5])

Tính tổng các thành phần của hai hàng 1 và 2 sum(A(1,:))+sum(A(2,:))

Cộng các thành phần của cột thứ 2 và thứ 3 với 3 A(:,2)+3

A(:,3)+3

2.4.10 cho A=[2 7 9 7;3 1 5 6;8 1 2 5] Giải thích kết quả các lệnh:

-A’= là ma trận chuyển vị của A.

-sum(A)= [13 9 16 18] là tổng các cột của ma trận A.

-A(1,:)=[ 2 7 9 7] là ma trận con bao gồm hàng 1 của A.

-sum(A')= 25 15 16 là tổng các cột của ma trận A’.

Trang 17

- reshape(A,2,6)= chuyển ma trận A thành ma trận có kích thước 2x6.

- mean(A,2)= giá trị trung bình các hàng của A.

-flipud(A)= chuyển các phần tử của ma trận A theo thứ tự hàng ngược lại.

- min(A)= lọc giá trị nhỏ nhất trong các cột của A.

-fliplr (A)= Chuyển các phần tử của các ma trận A theo thứ tự cột ngược lại.

- max(A')= lọc giá trị lớn nhất theo hàng của ma trận A.

- [A;A(end,:)]= ma trận A gộp thêm hàng cuối của A.

- min(A(:,4))=5 là giá trị nhỏ nhất của hàng thứ 4 ma trận A.

- [A;A(1:2,:)]= ma trận A gộp thêm 2 hàng đầu của ma trận A.

-[min(A’) max(A)’]= kết nối 2 ma trận

- max(min(A))=5 lọc giá trị lớn nhất của tập các giá trị nhỏ nhất của ma trận A -[[A; sum(A)] [sum(A, 2); sum(A(:))]]=

Trang 18

3.1.1: Thể hiện các kết quả tính toán, hoặc số liệu vào dưới dạng đồ thị hoặc các biểu đồ.

3.1.2: Các loại đồ thị 2D, 3D cấu trúc hàm và các đặc tính và các tham số hiệu chỉnh đồthị

3.1.3: Tối ưu cách thể hiện đồ thị, biểu đồ thành hình ảnh, hình động,

film

3.2 Công tác chuẩn bị của sinh viên :

3.2.1: Ý nghĩa của lệnh figure, plot, gird on, grid off

3.2.2: Cấu trúc hàm vẽ đồ thị, các đặc tả đường nét, ký hiệu và phương

thức vẽ

3.2.3: Bề mặt đồ thị và cách xử lý trong không gian 3 chiều

3.2.4: Xử lý dữ liệu dạng ma trận, các phép toán tuyến tính hóa, làm tròn Cách lấy phầnthực, phần ảo trong sổ phức

3.2.5: Sử dụng lệnh >> help plot để tìm hiểu thêm về phương thức thiết

lập đồ thị

3.3 Trang thiết bị cần thiết:

3.3.1: Máy tính PC hoặc Laptop

Trang 19

3.3.2: Phần mềm MATLAP 7.0 hoặc các phiên bản cao hơn đã cài đặt vào máy tính3.3.3: Bộ công cụ soạn thảo Microsoft office

3.4 Các nội dung, quy trình:

3.4.1: Thực hành với các đồ thị cơ bản 2D

- Từ Command Window nhập lệnh: >> clear, clc

- Thiết lập các câu lệnh sau tại cửa sổ lệnh:

Trang 20

Nhận xét:

 lệnh title: tiêu đề của đồ thị

 lệnh xlabel, ylabel: nhãn cho các trục

3.4.2: Hãy mở một trình soạn thảo text hoặc Word để soạn thảo các code lệnh sau:

>>

Trang 21

- Vẽ đường thẳng bằng nét gạch ngắn màu đỏ nối các điểm sau sát lại với nhau: (2,6), (2.5,18),(5,17.5),(4.2,12.5),(2,12)

Trang 22

-Vẽ đồ thị của hàm sin(x)+x-xcos(x) trong hai cửa sổ riêng biệt với hai khoảng 0<x<30

và -100<x<100 Cộng thêm tiêu đề và mô tả của các trục vào đồ thị.

Trang 23

- vẽ đường tròn có bán kính bằng 2, biết rằng phương trình của đường tròn là: [x(t); y(t)]= [r cos(t);r sin(t)] với t=[0; 2*pi]

Trang 24

3.4.4 Vẽ dồ thị các hàm f(x)=x, g(x)=x^3, h(x)=e^x, z(x)=e^(x^2) với x thuộc [0, 4] trên cùn gmoojt cửa sổ hình và với hệ trục có độ chia bình thường và hệ trục tọa độ có dộ chia log-log Lấy mẫu thích hợp để làm phẳng đồ thị Mô tả mỗi đồ thị bằng các hàm:

xlabel, ylabel, title, legend.

Trang 25

3.4.5 Vẽ đồ thị của các hàm f(x)=sin(1/x), g(x)=cos(1/x) trên cùng một cửa sổ hình, với

x thuộc [0.01 0.1] lấy mẫu thích hợp đẻ các đường cong rõ ràng nhất

Trang 26

3.4.6: thực thi các lệnh sau và mô tả kết quả

Trang 27

>>

Trang 28

>>

Ngày đăng: 21/05/2016, 15:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w