Tài liệu thực hành xử lý số tín hiệu, trường Đại học Công nghiệp thành phố Hồ Chí Minh, cung cấp cho sinh viên kiến thức và cách sử dụng phần mềm Matlab, CCS7 với nội dung đầy đủ sẽ giúp sinh viên trang bị kĩ năng thực hành bằng phần mềm và học tốt môn xử lý tín hiệu số.
Trang 1
BÀI GIẢNG THÍ NGHIỆM XỬ LÝ SỐ
TỔNG HỢP: LÊ VĂN HÙNG
Trang 2
PHẦN I THÍ NGHIỆM XỬ LÝ SỐ
THỰC HIỆN BẰNG MATLAB
BÀI GIẢNG LƯU HÀNH NỘI BỘ
(Biên soạn theo giáo trình chính[2])
Trang 3
Bài 1 Làm quen Matlab và ứng dụng trong DSP 1
1.1 Cài đặt matlab 1
1.2 Làm quen với Matlab 3
Giao diện người dùng 3
1.2.1. Command Window (command line) 4
1.2.2. Current folder (thư mục hiện hành/ thư mục làm việc) 7
1.2.3. Script file 7
1.2.4. Hàm (Function) 11
1.2.5. Workspace 16
1.2.6. Thế mạnh của Matlab ứng dụng trong DSP 18
1.2.7. Nhập mảng với Matlab 19
1.2.8. Thao tác trên Ma trận 20
1.2.9. Phân tích thế mạnh toán Ma trận của Matlab trong lập trình DSP 24
1.2.10 1.3 Bài tập: 26
Bài 2 Tín hiệu và hệ thống rời rạc, HỆ THỐNG LTI 31
2.1 Tín hiệu và hệ thống rời rạc 31
Hàm xung đơn vị 31
2.1.1. Hàm bước nhảy đơn vị 32
2.1.2. Các phép toán trên tín hiệu rời rạc 33
2.1.3 2.2 Biểu diễn tín hiệu rời rạc 35
2.3 Đáp ứng xung của hệ thống LTI 41
2.4 Phương trình vi phân 44
2.5 Tương quan giữa 2 tín hiệu: 47
Trang 4
Tự tương quan 48
2.5.2 2.6 Bài tập 50
Bài 3 Tín hiệu và hệ thống trong miền tần số, miền Z 54
3.1 DTFT/DFT/FFT 54
Phân biệt các dạng FOURIER: 54
Fourier liên tục thời gian 54
3.1.1. Fourier Rời rạc thời gian 54
3.1.2. Fourier thuật toán 55
3.1.3. Phân biệt 55
3.1.4. DFT FFT 67
3.1.5. ĐẶC TÍNH CỦA BIẾN ĐỔI IFFT VÀ RÒ RỈ PHỖ 75
3.1.6. Rò rỉ phổ 76
3.1.7. Ví dụ về FFT 76
3.1.8 3.2 Biểu diễn hệ thống trong miền Z 89
3.3 Bài tập (xem giáo trình tiếng anh) 91
Bài 4 Cấu trúc FIR, thiết kế FIR 93
4.1 Phân tích cấu trúc của lọc FIR 93
4.2 Thiết kế FIR bắng phương pháp cửa sổ 96
4.3 Bài tập 112
Bài 5 Các loại lọc IIR, thiết kế IIR 115
5.1 Các loại lọc IIR 115
5.2 Thiết kế lọc IIR dùng Matlab 120
BUTTERWORTH LOWPASS FILTERS 120
5.2.1.
Trang 5
Bài 6 LÀM QUEN MÔI TRƯỜNG LẬP TRÌNH CCS7 127
6.1 Cài đặt ccs 127
6.2 Cách tạo project trên ccs 127
6.3 Cách tạo một project chạy trên KIT DSK6416 dựa vào lab mẫu 128
Bài 7 LẬP TRÌNH XUẤT NHẬP CƠ BẢN TRÊN KIT TMS320C6416 (LAB_1) 130
Bài 8 THUẬT TOÁN TẠO TÍN HIỆU SÓNG VỚI TẦN SỐ VÀ BIÊN ĐỘ THAY ĐỔI (LAB_2) 140
Bài 9 XUẤT/NHẬP TÍN HIỆU AUDIO TRÊN KIT DSP SỬ DỤNG AUDIO CODEC, PHÂN TÍCH PHỖ TÍN HIỆU (LAB_3) 146
Bài 10 , 11 THỰC HIỆN BỘ LỌC FIR CHO DỮ LIỆU AUDIO TRÊN KIT DSP (LAB_4, 5) 159
Bài 12 Thực hiện bộ lọc IIR cho dữ liệu Audio trên kit DSP (LAB_6) 169
Trang 6Bộ môn viễn thông-Bài giảng lưu hành nội bộ 1
CHƯƠNG 1: TÍN HIỆU VÀ HỆ THỐNG LTI TRÊN
Cài đặt tùy chọn Hình 1.1:
Chọn công cụ cần cài đặt:
MATLAB 8.1
Simulink 8.1
Communications System Toolbox 5.4
Computer Vision System Toolbox 5.2
Trang 7Bộ môn viễn thông-Bài giảng lưu hành nội bộ 2
Control System Toolbox 9.5
Data Acquisition Toolbox 3.3
DSP System Toolbox 8.4
Fixed-Point Designer 4.0
Fuzzy Logic Toolbox 2.2.17
Image Acquisition Toolbox 4.5
Image Processing Toolbox 8.2
MATLAB Report Generator 3.14
Model Predictive Control Toolbox 4.1.2
Neural Network Toolbox 8.0.1
RF Toolbox 2.12
Robust Control Toolbox 4.3
Signal Processing Toolbox 6.19
SimPowerSystems 5.8
SimRF 4.0
Simulink Control Design 3.7
Simulink Design Optimization 2.3
Simulink Design Verifier 2.4
Simulink PLC Coder 1.5
Simulink Report Generator 3.14
Symbolic Math Toolbox 5.10
System Identification Toolbox 8.2
Wavelet Toolbox 4.11
xPC Target 5.4
xPC Target Embedded Option 5.4
Trang 8Bộ môn viễn thông-Bài giảng lưu hành nội bộ 3
Chọn mục cần cài đặt Hình 1.2:
1.2 Làm quen với Matlab
Giao diện người dùng
Cách hiển thị giao diện mặc định Hình 1.3:
Trang 9Bộ môn viễn thông-Bài giảng lưu hành nội bộ 4
Kết quả của biến n được hiển thị theo chú thích columns
Command Window (command line)
1.2.2.
Đây là cửa sổ nhập lệnh và hiển thị kết quả của Matlab Cửa sổ đặc biệt này dùng
để chạy từng dòng lệnh, một đoạn lệnh và các lệnh truy suất khác của Matlab
Nó tương tự như CMD màn hình DOS của Window, nhưng nó cũng giống như cửa
sổ conlsole xuất kết quả, proplem hoặc kết quả build của các IDE mã nguồn C
Ví dụ 1.1: Muốn nhập một mảng gồm 10 phần tử số nguyên ta thực hiện ngay
Không gian biến
Trang 10Bộ môn viễn thông-Bài giảng lưu hành nội bộ 5
Kết quả là số liệu
Nhập một đoạn chương trình
Muốn kết quả không hiển
thị ta thêm dấu chấm phẩy cuối
mỗi lệnh hoặc hàm
đoạn thực hiện chức năng vẽ đồ
thị hình sin ta thực hiện như
Kết quả sẽ xuất cửa sổ đồ thị hình sin
Hiển thị kết quả đồ họa Hình 1.6:
Kết quả là Đồ họa luôn được hiển thị cửa sổ riêng (figure)
Trang 11Bộ môn viễn thông-Bài giảng lưu hành nội bộ 6
Ví dụ command line xuất Error nếu sai cú pháp và các lỗi khác
>> y=sin(2*pi/10*n))
Chú ý: dựa vào thông báo chỉ lỗi này, người viết chương trình có thể sửa lỗi khi bị
sai cú pháp Trong trường hợp ví dụ trên, lỗi dư một dấu ngoặc đơn được trình gỡ lỗi thông báo
Ngoài ra ta có thể thực hiện các lệnh, hàm, các thao tác khác của matlab trên command line
Ví dụ ta muốn truy suất cửa số help của Matlab về cú pháp của hàm plot, ngay command line ta nhập:
>>doc plot
Nhược điểm của command window : quản lý mã nguồn kém do chỉ lưu lại từng dòng lệnh dưới dạng history, không cho phép quay lại và chỉnh sửa một đoạn chương trình Do đó nó được dùng chủ yếu để debug và chạy từng lệnh để kiểm chứng hoặc để dùng các chức năng truy suất khác của matlab
Cửa sổ help của lệnh doc plot Hình 1.7:
Lỗi cú pháp được thông báo ngay command line
Trang 12Bộ môn viễn thông-Bài giảng lưu hành nội bộ 7
Để xóa màn hình command line ta dùng lệnh clc
Để hiển thị cửa số này ta cần Matlab xuất hiện layout mặc định Thư mục làm việc
của matlab chứa file quan trọng nhất là file m hay còn gọi là M-file
M-file có hai loại là Script file và Function
Script file
1.2.4.
Script file là file chứa mã nguồn của một chương trình thực hiện một vai trò chức
năng cố định Nó được lưu bởi tên do người dùng tự đăt tự đặt Tuy nhiên cách đặt tên đúng phải như sau:
Không đặt các ký tự đặc biệt trùng với các toán hạng của Matlab như +-*/
Không đươc đặt tên file hoàn toàn số vd 124.m nên vừa có chữ vừa có số vd
bt_124.m
Trang 13Bộ môn viễn thông-Bài giảng lưu hành nội bộ 8
Không đặt tên file là tiếng việt có dấu vd: bài tập.m
Không đặt tên file có khoảng trắng giữa các ký tự
Không đặt tên file có dấu chấm vd: baitap.1.m thay vao đó là baitap_1.m
Nên thay gạch ship (_) ngăn cách giữa các ký tự Vd: Ex_2_1.m
Cách mở Script file như sau:
Hoặc nhấn tổ hợp phím Ctr+N ta có cửa số soạn thảo mở được ra
Ví dụ ta muốn viết chương trình thực hiện chức năng vẽ hình sin và lưu lại là vedothisin.m
Nhập đoạn code matlab sau vào Script file:
>>n=1:10;
>>y=sin(2*pi/10*n);
Trang 14Bộ môn viễn thông-Bài giảng lưu hành nội bộ 9
>>plot(n,y)
File được lưu lại như hình dưới:
Chú ý: để chú thích hay comment một dòng nào đó thì trước mỗi dòng là ký hiệu
%, khi gặp ký hiệu này Matlab sẽ bỏ qua các ký tự sau nó
Muốn chạy được file này ta phải lưu ở thư mục hiện hành như hình 1.8
Chú ý: Đối với môn thí nghiệm DSP Matlab, sinh viên nên có cách đặt thư mục
hiện hành cho hợp lý để dễ quản lý Thông thường khi thư mục hiện hành có nhiều
mã nguồn được lưu ở nhiều file, tốt nhất nên tổ chức thành thư mục với những mã nguồn có liên quan cùng chức năng
run
Trang 15Bộ môn viễn thông-Bài giảng lưu hành nội bộ 10
Vùng thư mục hiện hành Hình 1.8:
Ví dụ giáo trình thực hành DSP Matlab có 3 chương ta nên tổ chức thành 3 thư mục chứa mã nguồn theo từng chương như sau:
Trong từng chương có ví dụ và các bài tập nên ở phần thực hành Matlab ta cũng đặt tên giống với cách đặt tên của sách cho đồng bộ và dễ quản lý
Ví dụ: Chương 2 có các ví dụ Ex2.1 đến Ex2.10 ta nên đặt tên cho mfile của Matlab
là Ex2_1.m, Ex2_2.m… Ex2_10.m các bài tập thì lưu lại dạng P2_1.m, P2_2.m
Hàm sẽ được gọi bởi các Script file trên
Script file và hàm được sắp xếp riêng biệt
Chương trình chỉ
chạy khi file được
lưu và thấy ở đây
Trang 16Bộ môn viễn thông-Bài giảng lưu hành nội bộ 11
Chú ý quan trọng: Đầu đoạn code của một Script file nên ghi ba lệnh dưới đây:
>>clc : xóa màn hình xuất kết quả của mfile khác hoặc của chính mfile này của lần chạy trước đó khi chạy chương trình những gì xuất ra tại cửa sổ command window là của chương trình thuộc mfile đang mở và được chạy sau lệnh clc này
>>clear all : xóa các biến trước đó
>>close all : đóng tất cả các cửa sổ hình đã xuất ra trước đó Vì khi chạy một mfile nếu có hình ảnh đã xuất ra của lần chạy trước đó, hoặc của mfile khác thì cửa sổ hình của lần chạy này không tự mở ra mà nằm ẩn bên dưới thanh taskbar của window Kết quả của lần chạy này sẽ chồng lên hình cũ Nếu không có lệnh đóng cửa số, người viết chương trình không biết hình ảnh xuất ra hiện tại là của lần chạy nào hoặc của mfile nào
Ví dụ một cript file mẫu phải có các thông tin như sau:
Việc thực hiện 3 lệnh này trước mỗi chương trình trong Script file giúp ta gỡ lỗi dễ dàng hơn vì những gì báo lỗi tại command line chắc chắn thuộc Script file này chứ không phải của file khác hoặc của các lần chạy trước đó
Hàm (Function)
1.2.5.
Hàm trong matlab thường được lưu lại mfile có thể tự chạy hoặc được gọi bởi một Script file hay command line, tuy nhiên cấu trúc của hàm luôn có dạng:
Trang 17Bộ môn viễn thông-Bài giảng lưu hành nội bộ 12
function [ output_args ] = function_name( input_args )
%UNTITLED5 Summary of this function goes here
% Detailed explanation goes here
End
Trong đó function_name là tên do ta tự đặt theo kiểu gợi nhớ và không được trùng
lắp với thư viện hàm của Matlab
Có hai loại hàm:
Hàm không có đối số
Hàm không có đối số thực hiện chức năng cố định giống mfile
Ví dụ viết hàm thực hiện chức năng vẽ đồ thị hàm Cos:
function vedothi()
%UNTITLED5 Summary of this function goes here
% Detailed explanation goes here
n=1:10;
y=cos(2*pi/10*n);
plot(n,y)
end
Trang 18Bộ môn viễn thông-Bài giảng lưu hành nội bộ 13
Khi lưu file function Matlab mặc định sẽ lưu vào thư mục hiện hành và bắt buộc tên lưu cũng chính là tên hàm, nếu lưu tên khác hàm function sẽ không chạyMatlab báo lỗi
Cách tổ chức hàm Hình 1.9:
Đặc điểm của hàm không đối số:
Các biến sẽ không lưu lại ở không gian biến workspace, các biến trong hàm chỉ
có giá trị trong hàm, đó là các biến cục bộ là các biến tạm không sử dụng được ngoài hàm
Thực hiện chức năng cố định không cần đối số
Có thể có kết quả trả về hoặc không cần có kết quả trả về
Bản thân hàm tự chạy hoặc được gọi bởi chương trình khác nhưng với điều kiện
hàm và chương trình đó (Script file) phải lưu cùng thư mục hiện hành
Hàm có đối số
Hàm có đối số có chức năng cố định nhưng đối số sẽ thay đổi
Ví dụ 1.3: Ví dụ hàm thực hiện chức năng tính tổng hàm sin ( chuỗi Fourier)
function xt=sinsum(T,K,bn)
t = 0:0.01:T;
k = 1:bn:K;
Trang 19Bộ môn viễn thông-Bài giảng lưu hành nội bộ 14
T: giới hạn khoảng thời gian từ 0 T với chu kỳ lấy mẩu là 0.01s
K: Giới hạn tần số với bước nhãy là bn (khoảng cách tần số)
Tất cả các biến là các biến tham chiếu chưa có giá trị thực nên bản thân hàm không tự chạy được nếu không được gọi với đối số đầu vào
Nếu nhấn biểu tượng Run (biểu tượng tam giác màu xanh) hàm sẽ báo lỗi không
đối số Để hàm chạy được, tại command line ta nhập
>> simsum(2,10,2)% chức năng tính tổng hàm sin với tần số từ 010 và trong thời gian 2s
Muốn tính tổng hàm sin trên với thời gian thay đổi tùy ý, tần số và bước nhãy tùy ý
thì ta không cần thay đổi mã nguồn của hàm (tức chức năng tính tổng hàm sin của Function sinsum không thay đổi) ta chỉ cần nhập đối số theo yêu cầu là được
Trang 20Bộ môn viễn thông-Bài giảng lưu hành nội bộ 15
Ví dụ bây giờ ta muốn tính tổng hàm sin trong khoảng thời gian là 10s và bước tần
số kết thúc 15 với bước nhãy là 3 thì ta chỉ cần gọi hàm trong command line như sau:
>> simsum(10,15,3)
Kết quả của hàm sinsum
Hình 1.10:
Hàm có thể gọi nhiều lần trong một Script file với đối số khác nhau, tuy nhiên hàm
và Script file phải nằm trong cùng thư mục hiện hành
Ví dụ ta viết chương trình lưu lại dạng mfile với chức năng gọi hàm sinsum và vẽ
đồ thì của hàm tổng
Trang 21Bộ môn viễn thông-Bài giảng lưu hành nội bộ 16
Lúc đó hàm và Scipt file phải nằm cùng thư mục hiện hành như sau
Mở file goisinsum.m và nhấn F5 (run) ta có kết quả như hình dưới
Workspace
1.2.6.
Không gian biến được lưu lại ở dạng sheet như Excel hiển thị tất cả các biến
toàn cục đang sử dụng của Matlab
Việc quản lý không gian biến tốt giúp người viết chương trình không dùng lại
biến đã dùng trước đó, không dùng quá nhiều biến
Không gian biến chỉ được lưu lại khi chạy Script file hoặc các biến nhập từ
command line
-1.5 -1 -0.5 0 0.5 1
1.5
ham xung vuong tinh duoi dang chuoi Fourier ham rang cua tinh duoi dang chuoi Fourier
Trang 22Bộ môn viễn thông-Bài giảng lưu hành nội bộ 17
Các biến của Matlab được gán trực tiếp và được lưu lại không gian biến theo
kiểu định dạng được nhập mà không cần khai báo như C
Biến của matlab sẽ không lưu lại nếu nó là biến trong Function
Ví dụ ta chạy chương trình vẽ đồ thị sin như sau:
Không gian biến sẽ lưu lại các biến được dùng
Tuy nhiên khi ta chạy hàm không đối số chương trình vẫn chạy nhưng workspace không lưu lại biến Kết quả chạy file vedothi.m như hình 1.11
Trang 23Bộ môn viễn thông-Bài giảng lưu hành nội bộ 18
Hàm không đối số và kết quả trả về Hình 1.11:
Thế mạnh của Matlab ứng dụng trong DSP
1.2.7.
Matlab phần mềm của hãng Matwork có thế mạnh về toán Nó là môi trường cho phép mô phỏng tính toán và lập trình và là môi trường gần gũi người dùng nhất Nếu chúng ta muốn tính toán mô phỏng, mô hình hóa một vấn đề gì đó thì matlab là môi trường, là công cụ gần gũi dễ sử dụng và do đó ta dễ dàng thực hiện được những điều mình muốn Tuy nhiên khả năng hỗ trợ phần cứng của Matlab kém hơn ngôn ngữ hướng đối tượng như C nhất là vấn đề thời gian thực, xử lý thích nghi… Matlab cung cấp sẵn một thư viện hàm đồ sộ với rất nhiều các toolbox của các lĩnh vực chuyên môn khác nhau Riêng về lĩnh vực DSP, Matlab có toolbox hỗ trợ là DSP toolbox với rất nhiều tính năng và hàm hỗ trợ phong phú
Matrix computations and linear algebra
Solving nonlinear equations
Numerical solution of differential equations
Mathematical optimization
Statistics and data analysis
Signal processing
Modelling of dynamical systems
Solving partial differential equations
Simulation of engineering systems
Trang 24Bộ môn viễn thông-Bài giảng lưu hành nội bộ 19
…
Matlab thao tác và xử lý số liệu chủ yếu trên ma trận và véc tơ và đây chính là thế mạnh của Matlab hơn so với các môi trường khác Chính vì thế mã nguồn của Matlab thường gọn và dễ hiểu, rất gần gũi với người dùng
Matlab sẽ hiểu biến n là kiểu số nguyên là một véc tơ có 10 phần tử từ 110
Matlab không cần phải khai báo biến như C
So với ngôn ngữ C, C thường gọi biến cấu trúc là mảng một chiều hay mảng nhiều chiều, ngược lại tất cả các biến kiểu số liệu matlab đều gọi là véc tơ hoặc vô hướng,
so sánh cách nhập mảng với ngôn ngữ C như sau:
Rõ ràng với hầu như cách viết code theo kiểu control flow như thế này thì mã
nguồn của C rườm rà hơn nhiều so với Matlab Điều này cũng tương tự khi ta so sánh C với ngôn ngữ máy (assembler)
Trang 25Bộ môn viễn thông-Bài giảng lưu hành nội bộ 20
>> n=1:0.01:10 % với cách nhập vecto này ta hiểu n bắt đầu nhận giá trị 1, kết
thúc nhận giá trị 10 và chu kỳ mẫu (hay bước nhãy) là 0.01 Rất thuận tiện và dễ dàng nhập mảng với các tùy chọn mong muốn
Tóm lại: Khi một môi trường lập trình nào gần gũi với người dùng thì nó hơi “xa”
với phần cứng và ngược lại nó gần với phần cứng thì lại rườm rà và phức tạp đối với người dùng
Thao tác trên Ma trận
1.2.9.
Như đã nói ở trên, Matlab có thế mạnh tính toán trên ma trận và véc tơ , do đó hầu hết mã nguồn Matlab thường dùng các phép toán trên các biến cấu trúc này và ít dùng theo kiểu cấu trúc control flow Để lập trình không bị báo lỗi ta phải nhớ lại các quy tắc phép toán trên ma trận
VD: ta có hai ma trận A (kích thước mxn) và B ( kích thước lxk)
Điều kiện để C=AxB tồn tại là n=l và tạo thành ma trận C kích thước mxk
Trang 26Bộ môn viễn thông-Bài giảng lưu hành nội bộ 21
Điều kiện để C=BxA tồn tại là k=m và tạo ma trận C kích thước lxn
Ví dụ 1.4: Ví dụ: nhập ma trận một chiều (vec tơ)
Trang 27Bộ môn viễn thông-Bài giảng lưu hành nội bộ 22
Báo lỗi vì hai ma trận không đúng kích thước m và n cùng có kích thước 1x4
(1x4)x(1x4) sai điều kiện nhân hai ma trận
>> m*n'
>> m*n'
ans =
10
Ma trận n có kích thước (1x4) chuyển vị của n có kích thước (4x1)
m*n' là nhân của hai ma trận có kích thước (1x4)x(4x1)=(1x1)= vô hướng
Đây là tích vô hướng của hai véc tơ
m’ có kích thước (4x1) n có kích thước (1x4) m'*n có kích thước (4x4)
Malab ngoài các toán hạng bình thường như công +, trừ -, nhân *,chia /, lũy thừa ^ còn có các phép toán trên mảng và vô hướng và phân phối như *, / .^
Ví dụ 1.5: Một số phép tính phổ biến
>>2^n
Trang 28Bộ môn viễn thông-Bài giảng lưu hành nội bộ 23
Inputs must be a scalar and a square matrix
To compute elementwise POWER, use POWER (.^) instead
Matlab báo lỗi vì không thể lũy thừa vô hướng với một có hướng
Nhưng với phép lũy thừa phân phối ta có:
Trang 29Bộ môn viễn thông-Bài giảng lưu hành nội bộ 24
Tóm lại: Cần chú ý đến các toán hạng của matlab nhất là phải biết cách dùng các
toán hạng phân phối giữa vô hướng và véc tơ như .*, .^, ./ Đây là các toán hạng được sử dụng nhiều trong DSP sử dụng Matlab ở hầu hết các chương và các thuật toán
Phân tích thế mạnh toán Ma trận của Matlab trong lập trình DSP
1.2.10.
Để kiểm chứng tính thuận tiện và rút gọn của Matlab cũng như cách sử dụng các toán hạng phân phối ta xét ví dụ sau:
Cho x(t) = sin(2 ) + sin(6πt) + sin(10πt) =∑ sin(2πkt), 0 ≤ t ≤ 1
Tính các giá trị x(t) được lấy mẫu trong khoảng 0 đến 1s với chu kỳ lấy mẫu 0.01 (t=0:0.01:1)
Với cách giải quyết bài này theo C hay Fortran ta có code theo kiểu cấu trúc control flow như sau:
Trang 30Bộ môn viễn thông-Bài giảng lưu hành nội bộ 25
Tuy nhiên với Matlab ta cũng tính x(t) theo yêu cầu trên nhưng với mã nguồn ngắn
ma trận
Để hiểu rõ tại sao matlab có mã nguồn gọn hơn C nhưng lại tính toán cùng một kết quả ta phân tích ví dụ này với thời gian rời rạc 4 mẫu từ t1, t2, t3, t4 cho đơn giản Với giả thiết này rõ ràng yêu cầu bài toán cần tính x(t1), x(t2), x(t3), x(t4) và bằng phép thế đơn giản ta có kết quả như sau:
x(t1) = sin(2πt1) + sin (2π3t1) + sin(2π5t1)
x(t2) = sin(2πt2) + sin (2π3t2) + sin(2π5t2)
x(t3) = sin(2πt3) + sin (2π3t3) + sin(2π5t3)
x(t4) = sin(2πt4) + sin (2π3t4) + sin(2π5t4)
Dễ dàng viết lại dưới dạng ma trận
sin(2πt1) sin(2π3t1) sin(2π5t1)
sin(2πt2) sin(2π3t2) sin(2π5t2)
sin(2πt3) sin(2π3t3) sin(2π5t3)
sin(2πt4)sin (2π3t4) sin(2π5t4)
1
Tuy nhiên ma trận vuông hàm sin thực chất là phép tác động phân phối của hàm sin
lên ma trận đối số của nó, do đó ta viết lại:
x(t1) x(t2) x(t3) x(t4)
= sin(2π
(t1) (t2) (t3) (t4)[1 3 5] )
1
Thực hiện phép chuyển vị cuối cùng ta có:
Trang 31Bộ môn viễn thông-Bài giảng lưu hành nội bộ 26
[x(t1) x(t2) x(t3) x(t4)] = 1 sin (2π
135[ 1 2 3 4 ]
Do đó code thực hiện sẽ là:
t = 0:0.01:1; k = 1:2:5;
xt = (1./k)*sin(2*pi*k'*t);
1.3 Bài tập:
P.1.1 Khởi động matlab và Tạo thư mục hiện hành là TEST1_MATLAB, đưa
giao diện Matlab về mặc định như hình dưới
a VIết đoạn code matlab sau vào Scrip file và lưu tên file bằng tên của mình ( VD:nguyen_van_A.m)
Trang 32Bộ môn viễn thông-Bài giảng lưu hành nội bộ 27
P.1.2 Nhập hai vec tơ như sau:
Trang 33Bộ môn viễn thông-Bài giảng lưu hành nội bộ 28
f Tìm G là vec tơ có các thành phần là nghịch đảo của A
g Tìm H là vec tơ có các thành phần là tích của các thành phần tương ứng của A và a
h Nhập vec tơ I có các thành phần như sau [
1 2 4 5 3 9 4 2
2 2 2 2 2 2 2 2 ] P.1.3 Viết một Fuction với chức năng tạo tín hiệu sin rời rạc của xt=sin(2*pi*t),
c Giống như câu b nhưng vẽ đồ thị vẽ chồng nhau như hinh 1.14
Đồ thị sin Hình 1.12:
0 20 40 60 80 100 120 -1
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Thoi gian roi rac
DO THI TIN HIEU SIN
tin hieu sin
Trang 34Bộ môn viễn thông-Bài giảng lưu hành nội bộ 29
Hai đồ thị trên một figure Hình 1.13:
Hai đồ thị vẽ chồng nhau Hình 1.14:
DO THI TIN HIEU SIN
tin hieu sin
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
Thoi gian roi rac
DO THI TIN HIEU SIN
tin hieu sin Tin hieu vuong
Trang 35Bộ môn viễn thông-Bài giảng lưu hành nội bộ 30
Bảng checklist sinh viên
Trang 36Bộ môn viễn thông-Bài giảng lưu hành nội bộ 31
BÀI 2 TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC, HỆ THỐNG LTI
2.1 Tín hiệu và hệ thống rời rạc
Trong phần học lý thuyết DSP chúng ta cũng đã làm quen với cách tạo và biểu diễn tín hiệu rời rạc cơ bản, làm các phép toán cơ bản cũng như tính toán ngõ ra cho hệ thống LTI rời rạc thời gian Trong phần này chúng ta sẽ thực hiện các chức năng trên với phần mềm Matlab
Để tạo tín hiệu rời rạc trong Matlab cho tín hiệu rời rạc bất kỳ theo cú pháp liệt kê, Matlab cung cấp phép gán vec tơ cơ bản để thực hiện Chẳng hạn để tạo tín hiệu rời rạc x(n) = {2, 1, −1, 0 , 1, 4,3,7} Thực hiện trên Matlab như sau:
>> n=[-3,-2,-1,0,1,2,3,4]; x=[2,1,-1,0,1,4,3,7];
Các hàm rời rạc cơ bản khác được thực hiện thông qua các thư viện hàm có sẵn của Matlab Ví dụ để tạo tín hiệu Sin rời rạc ta chỉ cần lấy mẫu thời gian rời rạc trong hàm Sin
n=0:0.01:2;
xn=sin(2*pi*n);
Hầu hết các cú pháp trong hàm tạo tín hiệu rời rạc là các phép tạo vec tơ, các phép gán có điều kiện, phép so sánh Tuy nhiên để tạo được các tín hiệu rời rạc bất kỳ và được gọi nhiều lần mà không phải viết code lại ta phải tạo ra các Function làm chức năng đó và được lưu lại thành mfile trong thư mục hiện hành Sau đây là một số hàm cơ bản tạo tín hiệu và một số hàm cơ bản tác động lên các tín hiệu rời rạc
Trang 37Bộ môn viễn thông-Bài giảng lưu hành nội bộ 32
Thực hiện Function trong Matlab như sau:
function [x,n] = impseq(n0,n1,n2)
% Generates x(n) = delta(n-n0); n1 <= n <= n2
%
-% [x,n] = impseq(n0,n1,n2)
% (n-n0) == 0 day la phep gan logic neu cac phan tu nao cua n
% tru no ma bang 0 thi gan bang muc
% logic 1, nguoc lai khong bang thi gan
% bang 0
%0
n = [n1:n2]; x = [(n-n0) == 0]; % (n-n0) == 0 day la phep gan logic neu cac phan
tu nao cua n
% tru no ma bang 0 thi gan bang muc
% logic 1, nguoc lai khong bang thi gan
% (n-n0) >= 0 day la phep gan logic neu cac phan tu nao cua n
% tru no ma lon hon hoac bang 0 thi gan bang muc
% logic 1, nguoc lai khong bang thi gan
Trang 38Bộ môn viễn thông-Bài giảng lưu hành nội bộ 33
% bang 0
n=[n1:n2]; x = [(n-n0) >= 0];
Các phép toán trên tín hiệu rời rạc
2.1.3.
1 Phép cộng hai tín hiệu rời rạc
Phép cộng hai tín hiệu rời rạc theo từng mẫu
{x 1 (n)} + {x 2 (n)} = {x 1 (n) + x 2 (n)}
Thực hiện Function trong Matlab như sau:
function [y,n] = sigadd(x1,n1,x2,n2)
% implements y(n) = x1(n)+x2(n)
% -% [y,n] = sigadd(x1,n1,x2,n2)
% y=sum sequence over n, which includes n1 and n2
%x1=first sequence over n1
%x2=second sequence over n2 (n2 can be different from n1)
%
n=min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; % initialization
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y=y1+y2; % sequence addition
2 Nhân hai tín hiệu rời rạc
{x 1 (n)} · {x 2 (n)} = {x 1 (n)x 2 (n)}
Thực hiện Function trong Matlab như sau:
function [y,n] = sigmult(x1,n1,x2,n2)
Trang 39Bộ môn viễn thông-Bài giảng lưu hành nội bộ 34
% x1 = first sequence over n1
% x2 = second sequence over n2 (n2 can be different from n1)
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1 * y2; % sequence multiplication
3 Dịch chuyển tín hiệu
y(n) = {x(n - k)}
Thực hiện Function trong Matlab như sau:
function [y,n] = sigshift(x,m,k)
Thực hiện Function trong Matlab như sau:
function [y,n] = sigfold(x,n)
5 Hàm kiểm tra tính chẵn lẻ của tín hiệu
function [xe, xo, m] = evenodd(x,n)
Trang 40Bộ môn viễn thông-Bài giảng lưu hành nội bộ 35
% Real signal decomposition into even and odd parts
cả các Fuction ở trên và lưu vào thư mục như hình dưới
Gồm các hàm sau:
Impseq : Tạo tín hiệu xung denta
Stepsep: Tạo tín hiệu bước nhãy
Sigfold : Gấp tín hiệu, đảo biến
Sigadd: Công hai tín hiệu
Sigsift: Dịch chuyển tín hiệu theo thời gian
Sigmult: Nhân hai tín hiệu
2.2 Biểu diễn tín hiệu rời rạc