Tại sao dùng matlab để mô phỏng

Giải pháp tiện nhất để điều khiển một hệ thống thực là lập trình lại giải thuật điều khiển trên một chip vi điều khiển (đọc lại bài bạn vuongtv-ac đã trả lời ở trên).

Hướng đi sử dụng trực tiếp Matlab và Simulink trên máy tính để điều khiển một hệ thống thực thì có mấy vấn đề các bạn cần giải quyết:

- Có một bo mạch đệm, nó giao tiếp với máy tính (qua các ngõ giao tiếp thông thường như serial, USB, Ethernet, wifi...) và đồng thời nó cũng có các chân (input/output) để đọc tín hiệu cảm biến và ra lệnh cho hệ thống cần điều khiển.

- Nếu bạn có hàm điều khiển (file .m) chạy trên Matlab, bạn cần tìm cách mở được cổng giao tiếp trên máy tính để giao tiếp được với bo mạch đệm.

- Nếu bạn có một bộ điều khiển mô phỏng trên Simulink, bạn phải tìm cách (tạo thêm block mới chẳng hạn) làm cho Simulink kết nối được với bo mạch đệm.

- Bạn chỉ cần lập trình chip trên bo mạch đệm với chức năng là trung gian truyền tín hiệu, không cần tính toán gì.

---

Trên thế giới đã có nhiều công ty cung cấp các bo mạch đệm như vậy, kể cả Mathworks (ví dụ: xem gói "xPC target" trong Simulink, hình như cả gói Real time Embedded workshop gì đó). Nếu bạn muốn mua thì sẽ phải mua cả phần cứng và phần mềm, giá cả tùy theo độ tiện dụng và độ tin cậy.

Nếu bạn muốn tự làm: cũng có thể nghiên cứu được. Các bạn có thể tham khảo cái này:

Control an Arduino from MATLAB | File Exchange Pick of the Week và Arduino Support from MATLAB

MATLAB Support Package for Arduino (aka ArduinoIO Package) - File Exchange - MATLAB Central

Run on Target Hardware | File Exchange Pick of the Week

---

Nếu các bạn muốn tìm giải pháp ít tốn kém, có thể sử dụng phần mềm nguồn mở: hãy học cách cài Linux lên một bo ARM, chạy phần mềm Octave trên Linux (tôi gợi ý Octave vì nó tương thích tốt với Matlab, các file .m của Matlab mang sang Octave hầu như đều chạy được), rồi dùng các chân GPIO trên bo ARM để điều khiển (ngay trong Octave, bạn có thể can thiệp vào phần cứng, kích hoạt các chân GPIO).

Mô hình hóa và mô phỏng thiết bị điện -dành cho sinh viên chuyên ngành TBĐ-ĐT Soạn bởi: Trần Vĩnh Thái B/m Thiết bị điện -điện tử ĐHBK Hà nội ĐHBK Hànội B/m Thiết bị điện -điện tử 2 NỘI DUNG Vai trò của mô hình hóa và mô phỏng Mô hình toán và phương pháp số Mô hình toán của hệ vật lý Phương pháp số giải phương trình vi phân Công cụ MATLAB/Simulink MATLAB Simulink Phân tích, mô phỏng một số mô hình thiết bị điện với MATLAB/Simulink ĐHBK Hànội B/m Thiết bị điện -điện tử 3 Yêu cầu với sinh viên Tham dự lớp đầy đủ Làm các bài tập về nhà Hoàn thành bài tập lớn Thi cuối học kỳ ĐHBK Hànội B/m Thiết bị điện -điện tử 4

Ví dụ 1.1: Các bước tiến hành mô phỏng. 21

Ví dụ 2.1: Cửa sổ lệnh Matlab. 27

Ví dụ 2.2: Khỏi tạo và gán biến trong Matlab. 27

Ví dụ 2.4: Lưu biến thành file trong Matlab. 29

Ví dụ 2.5: Xóa biến trong Workspace. 29

Ví dụ 2.6: Cách sử dụng dấu ; sau câu lệnh để không xuất kết quả ra màn hình. 29

Ví dụ 2.7: Cách sử dụng hàm help trong Matlab. 30

Ví dụ 2.8: Cách khai báo ma trận trong Matlab. 32

Ví dụ 2.9: Cách tạo vector trong Matlab. 33

Ví dụ 2.10: Tạo ma trận số lẻ giảm. 33

Ví dụ 2.11: Cách tạo ma trận rỗng trong Matlab. 33

Ví dụ 2.12: Một số cách tiêu biểu tạo ma trận trong Matlab. 34

Ví dụ 2.13: Cách xác định kích thước và số phần tử ma trận trong Matlab. 36

Ví dụ 2.14: Cách chuyển ma trận bất kỳ thành ma trận hàng trong Matlab. 37

Ví dụ 2.15: Tính tổng theo hàng, cột và toàn ma trận trong Matlab. 38

Ví dụ 2.16: Cách sử dụng hàm mean trong Matlab. 39

Ví dụ 2.17: Cách sử dụng hàm min và max trong Matlab. 41

Ví dụ 2.18: Cách ghép nối ma trận trong Matlab. 42

Ví dụ 2.19: Một số kỹ thuật trích xuất phần tử ma trận trong Matlab. 43

Ví dụ 2.20: Cách sử dụng chỉ số ma trận logic trong Matlab. 46

Ví dụ 2.21: Cách kết hợp phép gán và chỉ số logic trong Matlab. 47

Ví dụ 2.22: Phép xóa các phần tử trong ma trận trong Matlab. 48

Ví dụ 2.23: Lỗi không xóa phần tử trong ma trận của Matlab. 49

Ví dụ 2.24: Các cách mở rộng ma trận trong Matlab. 49

Ví dụ 2.25: Mở rộng ma trận bằng phép nhân phần tử trong Matlab. 50

Ví dụ 2.26: Sử dụng chỉ số tuyến tính để thay đổi giá trị phần tử trong Matlab. 51

Ví dụ 2.27: Cách tạo ma trận có phần tử tăng dần dùng chỉ số tuyến tính. 52

Ví dụ 2.28: Cách sử dụng hàm ind2sub trong Matlab. 52

Ví dụ 2.29: Cách sử dụng hàm sub2ind trong Matlab. 52

Ví dụ 2.30: Cách sử dụng hàm reshape để điều chỉnh kích thước ma trận trong Matlab. 53

Ví dụ 2.31: Phối hợp sử dụng hàm numel và hàm reshape trong điều chỉnh kích thước ma trận trong Matlab. 56

Ví dụ 2.32: Sử dụng toán tử trên từng phần tử ma trận trong Matlab. 56

Ví dụ 2.33: Các phép nhân ma trận trong Matlab. 58

Ví dụ 2.34: Các cách chia ma trận trong Matlab. 60

Ví dụ 2.35: Các hàm đại số tuyến tính cơ bản trong Matlab. 61

Ví dụ 2.36: Cách sử dụng hàm ndims để tìm số chiều một ma trận trong Matlab. 62

Ví dụ 2.37: Mảng đa chiều. 63

Ví dụ 2.38: Tính số ngày của tháng dùng cấu trúc if. 64

Ví dụ 2.39: Tính số ngày của tháng dùng cấu trúc switch. 64

Ví dụ 2.40: So sánh cách dùng vòng lặp for và không dùng vòng lặp for trong Matlab. 65

Ví dụ 2.41: Thay thế vòng lặp for bằng chỉ số và phép gán. 66

Ví dụ 2.42: Cách sử dụng while trong Matlab. 67

Ví dụ 2.43: Mảng ký tự. 68

Ví dụ 2.44: Các hàm xử lý chuỗi trong Matlab. 69

Ví dụ 2.45: Chuyển mã ASSCI trong Matlab. 69

Ví dụ 2.46: Chuyển đổi từ số hệ thập phân sang các hệ cơ số khác. 70

Ví dụ 2.47: Chuyển đổi số thành chuỗi và ngược lại. 70

Ví dụ 2.48: Xử lý chuỗi trong Matlab. 71

Ví dụ 2.49: Xuất chuỗi ra màn hình trong Matlab. 72

Ví dụ 2.50: Lệnh format trong Matlab. 72

Ví dụ 2.51: Mảng cell trong Matlab. 73

Ví dụ 2.52: Xóa trong mảng cell. 73

Ví dụ 2.53: Chuyển đổi giữa ma trận và mảng cell. 73

Ví dụ 2.54: Nối chuỗi trong Matlab. 74

Ví dụ 2.55: Các hàm so sánh chuỗi trong Matlab. 75

Ví dụ 2.56: Hàm chuỗi trong chuỗi trong Matlab. 75

Ví dụ 2.57: Tìm chuỗi trong mảng cell. 75

Ví dụ 2.58: Toán tử trên tập trong Matlab. 76

Ví dụ 2.59: Hàm all và any trong Matlab. 78

Ví dụ 2.60: Hàm unique trong Matlab. 78

Ví dụ 2.61: Cấu trúc trong Matlab. 79

Ví dụ 2.62: Vẽ đồ thị 2D dùng hàm plot trong Matlab. 85

Ví dụ 2.63: Điều chỉnh đồ thị trong Matlab. 86

Ví dụ 2.64: Hàm vẽ đồ thị fplot. 86

Ví dụ 2.65: Đặt tên cho đồ thị. 87

Ví dụ 2.66: Giới thiệu cách vẽ đồ thi dạng log theo trục đồ thị. 88

Ví dụ 2.67: Cách thức vẽ thanh lỗi trên đồ thị Matlab. 90

Ví dụ 2.68: Vẽ đồ thị con trong đồ thị. 91

Ví dụ 2.69: 5 bước vẽ biểu đồ tần suất của phân bố Gauss và so sánh lý thuyết. 93

Ví dụ 2.70: Vẽ đồ thị tần suất cho dữ liệu rời rạc. 94

Ví dụ 2.71: Vẽ hàm PDF và CDF của một biến ngẫu nhiên dùng hàm area. 97

Ví dụ 2.72: Cách sử dụng hàm có sẵn trong Matlab để vẽ hàm CDF và PDF của một phân bố cho trước. 98

Ví dụ 2.73: Cách chuyển đổi ảnh mức xám và biểu diễn lên đồ thị trong Matlab. 99

Ví dụ 2.74: Cách thức vẽ biểu đồ nhiệt trong Matlab. 100

Ví dụ 2.75: Chế độ LaTeX trong Matlab. 103

Ví dụ 2.76: Hàm latex và biến symbolic. 104

Ví dụ 2.77: Lập trình giao diện trong Matlab. 107

Ví dụ 2.78: Cách thức lập trình hiệu quả trong Matlab. 109

Ví dụ 2.79: So sánh cách thức lập trình theo Matlab và theo C. 110

Ví dụ 2.80: Theo dõi thời gian chạy của mã lệnh Matlab dùng hàm tic và toc. 110

Ví dụ 3.1: Tạo tín hiệu và xuất lên máy hiện sóng. 116

Ví dụ 3.2: Cách thức ghép nối và cấu hình các khối trong Simulink. 117

Ví dụ 3.3: Mô phỏng kênh truyền nhiễu trắng trong Simulink. 120

Ví dụ 4.1: Sử dụng giải thuật đệ quy để tạo biến ngẫu nhiên phân bố đều. 123

Ví dụ 4.2: Khảo sát chuỗi giả ngẫu nhiên theo giá trị seed. 124

Ví dụ 4.3: Tạo biến ngẫu nhiên bằng phương pháp biến đổi ngược. 125

Ví dụ 4.4: Tạo biến ngẫu nhiên rời rạc bằng phương pháp chấp nhận loại trừ. 127

Ví dụ 4.5: Tạo biến ngẫu nhiên bằng phương pháp tổng hợp. 128

Ví dụ 4.6: Tạo biến ngẫu nhiên bằng phương pháp biến đổi ngược. 130

Ví dụ 4.7: Tạo biến ngẫu nhiên bằng phương pháp loại bỏ. 131

Ví dụ 4.8: Dùng hàm mean để tính kỳ vọng cho biến ngẫu nhiên. 134

Ví dụ 4.9: Lập trình kiểm chứng tính chất của phương sai. 135

Ví dụ 4.10: Cách so sánh kỳ vọng và phương sai theo lý thuyết và mô phỏng trong Matlab. 135

Ví dụ 4.11: Cách tạo biến ngẫu nhiên tương quan và cách kiểm chứng hệ số tương quan. 137

Ví dụ 4.12: Kiểm chứng bất đẳng thức Markov bằng mô phỏng Matlab. 138

Ví dụ 4.13: Kiểm chứng bất đẳng thức Chebyshev bằng mô phỏng Matlab. 139

Ví dụ 4.14: Kiểm chứng định luật số lớn bằng mô phỏng Matlab. 139

Ví dụ 4.15: Kiểm chứng định lý giới hạn trung tâm bằng mô phỏng Matlab với phân bố mũ. 140

Ví dụ 4.16: Kiểm chứng định lý giới hạn trung tâm bằng mô phỏng Matlab với phân bố đều. 142

Ví dụ 4.17: Mô phỏng đường truyền fading Rayleigh do các hiện tượng phản xạ, tán xạ và nhiễu xạ. 143

Ví dụ 4.18: Mô phỏng và kiểm chứng phân bố nhị thức. 146

Ví dụ 4.19: Mô phỏng khả năng thắng trận của một trò chơi dùng mô phỏng. 147

Ví dụ 4.20: Cách sử dụng hàm all trong kiểm chứng mô phỏng các lần thảy liên tiếp nhau. 149

Ví dụ 4.21: Mô phỏng số cuộc gọi đến tổng đài và kiểm chứng lý thuyết. 150

Ví dụ 4.22: Tạo phân bố chuẩn từ hàm Matlab unifrnd. 152

Ví dụ 4.23: Tạo phân bố đều rời rạc và kiểm chứng. 154

Ví dụ 4.24: Sử dụng biến ngẫu nhiên để ước lượng tích phân. 154

Ví dụ 4.25: Mô phỏng ước lượng số pi bằng Matlab. 156

Ví dụ 4.26: Tạo biến ngẫu nhiên có phân bố chuẩn phức. 158

Ví dụ 4.27: Kiểm chứng biểu thức xác suất bằng mô phỏng. 158

Ví dụ 4.28: Cách tạo biến ngẫu nhiên phân bố chuẩn trong Matlab. 159

Ví dụ 4.29: Cách tạo biến ngẫu nhiên phân bố mũ trong Matlab. 161

Ví dụ 4.30: Khảo sát hàm PDF của phân bố Rayleigh theo tham số. 163

Ví dụ 4.31: Mô phỏng biến ngẫu nhiên có phân bố Rayleigh theo tham số cho trước và kiểm chứng với lý thuyết. 164

Ví dụ 4.32: Hãy mô phỏng kiểm chứng có thể tạo biến ngẫu nhiên có phân bố Rayleigh từ phân bố chuẩn. 165

Ví dụ 4.33: Tạo biến ngẫu nhiên có phân bố Nakagami-m từ hàm makedist. 167

Ví dụ 4.34: Tạo biến ngẫu nhiên có phân bố Nakagami-m từ biến ngẫu nhiên có phân bố Gamma. 168

Ví dụ 4.35: Sử dụng hàm tạo và vẽ tính hiệu tương tự. 170

Ví dụ 4.36: Vẽ tín hiệu tương tự theo tham số cho trước. 171

Ví dụ 4.37: Mô phỏng tạo chuỗi bit và tính xác suất xuất hiện. 172

Ví dụ 4.38: Tạo ma trận lỗi theo quy định cho trước. 172

Ví dụ 4.39: Tạo nguồn tín hiệu rời rạc với giá trị cho trước và xác suất xuất hiện cho trước. 173

Ví dụ 4.40: Mô phỏng biến ngẫu nhiên có phân bố Gamma với tham số cho trước. 176

Ví dụ 4.41: Mô phỏng quá trình nén theo luật . 177

Ví dụ 4.42: Lượng tử tín hiệu. 179

Ví dụ 4.43: Giải thuật Lloyds. 180

Ví dụ 4.44: Mô phỏng quá trình mã hóa và giải mã DPCM. 181

Ví dụ 4.45: Mô phỏng mã hóa Huffman và entropy. 183

Ví dụ 4.46: Mô phỏng mã hóa số học trong Matlab. 184

Ví dụ 4.47: Mô phỏng mã CRC trong Matlab. 185

Ví dụ 4.48: Mô phỏng quá trình mã hóa và giải mã Hamming. 186

Ví dụ 4.49: Mô phỏng quá trình mã hóa và giải mã mã vòng. 187

Ví dụ 4.50: Mô phỏng quá trình mã hóa và giải mã BCH dùng Matlab. 188

Ví dụ 4.51: Mô phỏng quá trình mã hóa và giải mã RS dùng Matlab. 189

Ví dụ 4.52: Mô phỏng quá trình mã hóa và giải mã mã xoắn dùng Matlab. 190

Ví dụ 4.53: Mô phỏng điều chế FM băng gốc dùng Matlab. 192

Ví dụ 4.54: Mô phỏng điều chế AM và SSB dùng Matlab. 193

Ví dụ 4.55: Mô phỏng điều chế AM và SSB dùng Matlab. 194

Ví dụ 4.56: Khảo sát phổ của điều chế SSB trước và sau điều chế. 196

Ví dụ 4.57: Mô phỏng điều chế QAM. 196

Ví dụ 4.58: Mô phỏng mã Gray trong điều chế. 199

Ví dụ 4.59: Mô phỏng quá trình điều chế và giải điều chế BPSK ở kênh truyền nhiễu tắng. Kiểm chứng với lý thuyết. 200

Ví dụ 4.60: Hàm berawgn trong Matlab. 201

Ví dụ 4.61: Mô phỏng điều chế MPSK. 202

Ví dụ 4.62: Mô phỏng điều chế MPAM. 204

Ví dụ 4.63: Biểu đồ chòm sao trong điều chế. 205

Ví dụ 4.64: Lọc tín hiệu trong Matlab. 207

Ví dụ 5.1: Mô phỏng kênh truyền nhị phân. 211

Ví dụ 5.2: Tạo kênh truyền nhị phân bằng hàm bsc trong Matlab. 212

Ví dụ 5.3: Tạo nhiễu trắng dùng hàm awgn trong Matlab. 213

Ví dụ 5.4: Cộng nhiễu trắng vào tín hiệu điều chế MQAM. 214

Ví dụ 5.5: Tạo nhiễu trắng và cộng vào tín hiệu điều chế MQAM bằng phương pháp trực tiếp. 215

Ví dụ 5.6: Mô phỏng kênh truyền nhiễu trắng với điều chế BPSK. 216

Ví dụ 5.7: Mô phỏng kênh truyền log-normal. 218

Ví dụ 5.8: Mô phỏng kênh truyền fading Rayleigh bằng 3 cách. 220

Ví dụ 5.9: Mô phỏng kênh truyền Nakagami-m bằng 3 cách. 223

Ví dụ 5.10: Mô phỏng kênh truyền fading Rician bằng hai cách. 226

Ví dụ 5.11: Mô phỏng kênh truyền tương quan. 228

Ví dụ 6.1: Mô phỏng và ước lượng tỷ số tín hiệu trên nhiễu ở kênh truyền fading Rayleigh. 234

Ví dụ 6.2: Mô phỏng và ước lượng tỷ số tín hiệu trên nhiễu trung bình của hệ thống kết hợp lựa chọn. 235

Ví dụ 6.3: Mô phỏng và ước lượng tỷ số tín hiệu trên nhiễu trung bình của hệ thống kết hợp theo tỷ lệ tối ưu trong Matlab. 236

Ví dụ 6.4: Mô phỏng và ước lượng dung lượng hệ thống SISO ở kênh truyền nhiễu trắng và kênh truyền fading. 238

Ví dụ 6.5: Mô phỏng và ước lượng xác suất dừng hệ thống SISO ở kênh truyền fading Rayleigh. 240

Ví dụ 6.6: Mô phỏng và ước lượng xác suất dừng của hệ thống phân tập thu. 243

Ví dụ 6.7: Mô phỏng và ước lượng tỷ lệ lỗi bit trung bình của điều chế BPSK của hệ thống phân tập thu SC trên kênh truyền fading Rayleigh. 244

Ví dụ 6.8: Mô phỏng và ước lượng xác suất dừng của hệ thống MRC ở kênh truyền fading Rayleigh. 248

Ví dụ 6.9: Mô phỏng và ước lượng tỷ lệ lỗi bit trung bình của hệ thống MRC cho điều chế BPSK ở kênh truyền fading Rayleigh. 249

Ví dụ 6.10: Mô phỏng và ước lượng hệ thống mã không gian thời gian cho điều chế BPSK ở kênh truyền fading Rayleigh. 253

Ví dụ 6.11: Mô phỏng hệ thống điều chế thích ứng ở kênh truyền fading. 257

Ví dụ 6.12: Mô phỏng hệ thống chuyển tiếp hai chặng ở kênh truyền fading Rayleigh. 264