1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thực hành Xử lý số tín hiệu

179 273 3

Đ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 179
Dung lượng 7,9 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 6

Bộ 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 7

Bộ 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 8

Bộ 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 9

Bộ 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 10

Bộ 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 11

Bộ 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 12

Bộ 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 13

Bộ 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 14

Bộ 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 15

Bộ 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 16

Bộ 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 17

Bộ 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 18

Bộ 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ạyMatlab 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 19

Bộ 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 20

Bộ 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 21

Bộ 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 22

Bộ 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 23

Bộ 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 24

Bộ 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ừ 110

 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 25

Bộ 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 26

Bộ 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 27

Bộ 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 28

Bộ 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 29

Bộ 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 30

Bộ 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 31

Bộ 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 32

Bộ 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 33

Bộ 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 34

Bộ 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 35

Bộ 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 36

Bộ 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 37

Bộ 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 38

Bộ 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 39

Bộ 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 40

Bộ 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

Ngày đăng: 26/05/2020, 18:33

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Rulph Chassaing, DSP Applications Using C and the TMS320C6x DSK, 2002, John Wiley &amp; Sons, Inc Sách, tạp chí
Tiêu đề: DSP Applications Using C and the TMS320C6x DSK
Tác giả: Rulph Chassaing
Nhà XB: John Wiley & Sons, Inc
Năm: 2002
[2]. Vinay K. Ingle, John G. Proakis, Digital Signal Processing Using MATLAB Third Edition, 2012, Northeastern University, Cengage Learnin, Stamford USA Sách, tạp chí
Tiêu đề: Digital Signal Processing Using MATLAB Third Edition
Tác giả: Vinay K. Ingle, John G. Proakis
Nhà XB: Northeastern University
Năm: 2012
[4]. Le Tien Thuong, Xử lí số tín hiệu, Vietnam National University of Ho Chi Minh City, 2001 Sách, tạp chí
Tiêu đề: Xử lí số tín hiệu
Tác giả: Le Tien Thuong
Nhà XB: Vietnam National University of Ho Chi Minh City
Năm: 2001
[5]. S J.Orfanidis, Introduction to Signal Processing, Prentice –Hall Publisher 1996, ISBN 0-13-209172-0 Sách, tạp chí
Tiêu đề: Introduction to Signal Processing
Tác giả: S J. Orfanidis
Nhà XB: Prentice –Hall Publisher
Năm: 1996
[6]. Software: MATLAB PACKAGE and DSP Toolbox, Communications toolbox, Wavelets toolbox, Mathworks-Version, TI Code Composer Studio Sách, tạp chí
Tiêu đề: Software: MATLAB PACKAGE and DSP Toolbox, Communications toolbox, Wavelets toolbox
Nhà XB: Mathworks
[7]. Li Tan, Digital Signal Processing 2nd Edition Fundamentals and Applications,ISBN: 978-0-12-415893 Sách, tạp chí
Tiêu đề: Digital Signal Processing 2nd Edition Fundamentals and Applications
Tác giả: Li Tan
[3]. TMS320C6416/C6713 DSK Workshop, Texas Instrument Khác

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w