57
Tài liu thí nghim Xlý stín hiu 1 Trường Đại học Tôn Đức Thắng Khoa Điện – Điện Tử Bộ môn Điện tử - Viễn Thông XỬ LÝ SỐ TÍN HIỆU Tài liệu thí nghiệm PTN Viễn thông 2007

Tai Lieu TN DSP TonDucThang

Embed Size (px)

Citation preview

Page 1: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

1

Trường Đại học Tôn Đức Thắng

Khoa Điện – Điện Tử

Bộ môn Điện tử - Viễn Thông

XỬ LÝ SỐ TÍN HIỆU Tài liệu thí nghiệm

PTN Viễn thông

2007

Page 2: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

2

GIỚI THIỆU

Các bộ xử lý số tín hiệu được sử dụng trong rất nhiều ứng dụng thực tế, từ truyền

thông và điều khiển cho đến xử lý tiếng nói và hình ảnh... Hầu hết các thiết bị gia

dụng hiện nay cũng tích hợp các bộ xử lý số tín hiệu. Chúng được sử dụng trong điện

thoại di động, máy ảnh số, HDTV, radio, truyền fax, các modem, máy in, máy trợ

thính và nhiều thiết bị khác…

Hệ thống xử lý số tín hiệu cơ bản bao gồm một bộ biến đổi A/D để thu nhận tín hiệu

vào. Sau đó, dạng biểu diễn số của tín hiệu vào sẽ được xử lý bởi một bộ xử lý số tín

hiệu và tín hiệu ra được đưa qua bộ biến đổi D/A. Hệ thống cơ bản này cũng bao gồm

một bộ lọc ngõ vào chống chồng lấn phổ và một bộ lọc ngõ ra để khôi phục tín hiệu đã

xử lý.

Trong các bài thí nghiệm này, chúng ta được trang bị kit TMS320C6713 của Texas

Instruments. Kit TMS320C6713 là một công cụ mạnh với các phần cứng và phần

mềm cần thiết cho xử lý tín hiệu thời gian thực. Nó là một hệ thống xử lý số tín hiệu

hoàn chỉnh, bao gồm một bộ xử lý số dấu chấm động C6713 và bộ codec 32-bit stereo

TLV320AIC23 (gọi tắt là AIC23) cho việc xuất nhập tín hiệu.

Qua các bài thí nghiệm này, hi vọng các bạn sinh viên sẽ hiểu rõ thêm các khái niệm

đã học trong môn Xử lý số tín hiệu, cũng như nắm được các bước cơ bản trong việc

thực hiện một ứng dụng xử lý số tín hiệu lên một bộ xử lý số, như chip C6713 của

Texas Instruments.

Page 3: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

3

BÀI 1: SỬ DỤNG MATLAB ĐỂ THIẾT KẾ BỘ LỌC SỐ

1. SỬ DỤNG MATLAB ĐỂ THIẾT KẾ BỘ LỌC SỐ

1.1 Thiết kế bộ lọc số bằng công cụ SPTool

SPTool là một công cụ có giao diện tương tác dùng cho xử lý số tín hiệu. Công cụ này

có thể được sử dụng để phân tích tín hiệu, thiết kế các bộ lọc, phân tích các bộ lọc, lọc

tín hiệu và phân tích phổ của tín hiệu.

Để khởi động SPTool, từ dấu nhắc lệnh của MATLAB, nhập lệnh

>> sptool

Khi đó, giao diện của SPTool sẽ xuất hiện như sau:

Hình 1. Giao diện của SPTool

Khi mới mở SPTool, nó chứa một tập hợp các tín hiệu, bộ lọc và phổ mặc định. Trên

giao diện của SPTool, có 3 cột: Signals, Filters và Spectra. Dưới mỗi cột có các nút sử

dụng cho cột đó. Cột Signals hiển thị các tín hiệu, cột Filters hiển thị các bộ lọc và cột

Spectra hiển thị các phổ trong workspace (vùng làm việc) của SPTool.

Các tín hiệu, bộ lọc hoặc phổ trong workspace của MATLAB có thể được đưa vào

SPTool bằng lệnh Import trong menu File của SPTool. Các tín hiệu, bộ lọc hoặc phổ

được tạo ra hoặc được import vào SPTool tồn tại dưới dạng các cấu trúc của MATLAB.

Để lưu lại các tín hiệu, bộ lọc và phổ đã tạo ra hoặc chỉnh sửa trong SPTool, sử dụng

lệnh Export trong menu File, chúng cũng sẽ được lưu lại dưới dạng các cấu trúc

MATLAB.

Để bắt đầu thiết kế một bộ lọc mới, các bạn hãy nhấn vào nút New ngay dưới cột

Filter. Khi đó, giao diện Filter Designer dùng để thiết kế bộ lọc như sau sẽ xuất hiện.

Filter Designer cung cấp một môi trường đồ họa tương tác để thiết kế các bộ lọc số IIR

hoặc FIR dựa trên các tiêu chuẩn do người dùng xác định.

- Các loại bộ lọc có thể thiết kế: Thông thấp, thông cao, thông dải, chắn dải.

- Các phương pháp thiết kế bộ lọc FIR: Equiripple, Least squares, Window

Page 4: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

4

- Các phương pháp thiết kế bộ lọc IIR: Butterworth, Chebyshev loại I, Chebyshev

loại II, Elliptic.

Hình 2. Giao diện Filter Designer

Ví dụ 1: Thiết kế một bộ lọc FIR chắn dải bằng SPTool

Bộ lọc, được thiết kế bằng phương pháp cửa sổ Kaiser, với các thông số sau:

Chiều dài của đáp ứng xung: N = 89 (MATLAB hiển thị bậc bộ lọc bằng 88)

Tần số trung tâm: 2700 Hz

Tần số cắt: 2500 Hz và 2900 Hz

Giá trị của = 4

Tần số lấy mẫu 8000 Hz

Các bước thiết kế như sau:

1. Khởi động SPTool. Dưới cột Filters, nhấn nút New để mở cửa sổ Filter Designer.

2. Trong giao diện của Filter Designer:

a. Trong text box Filter: Tên bộ lọc được tự đặt (ở đây là filt1). Tên này có thể

thay đổi sau này.

b. Nhập các thông số thiết kế vào:

i. Design method -> FIR -> Windows

ii. Option -> Windows -> Kaiser

iii. Bỏ chọn ở check box Minimum Order. (nếu chọn thì sẽ thiết kế bộ lọc

có bậc tối thiểu).

Page 5: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

5

iv. Filter Order = 88, Respone Type = Bandstop, Fc1 = 2500, Fc2 = 2900,

Beta = 4

c. Nhấn Design Filter. Khi đó đáp ứng tần số của bộ lọc thiết kế sẽ được hiển thị.

Hình 3. Đáp ứng tần số của bộ lọc đã thiết kế

3. Trở về cửa sổ SPTool, trong cột Filters sẽ xuất hiện thêm một dòng filt1 [design].

Đây chính là bộ lọc vừa thiết kế. Sau này, nếu muốn sửa đổi thiết kế, chọn lại tên

bộ lọc và nhấn nút Edit ở phía dưới. Để dễ nhớ, ta sẽ thay đổi tên bộ lọc trên

thành bs2700 bằng cách chọn Edit Name…filt1 [design]. Trong cửa sổ mới

xuất hiện, nhập tên mới.

Khi thiết kế một bộ lọc FIR như trên, kết quả mà ta cần nhận được sau khi thiết kế là

các giá trị của vector đáp ứng xung h của bộ lọc thiết kế. Để lấy các giá trị của vector

đáp ứng xung, ta thực hiện như sau:

1. Từ cửa sổ SPTool, chọn File Export… Trong Export list xuất hiện, chọn

Filter: bs2700 [design] rồi nhấn nút Export to workspace

2. Đóng cửa sổ SPTool lại. Một thông báo xuất hiện hỏi có muốn lưu lại phiên làm

việc hiện tại hay không. Nếu muốn lưu lại, chọn Save.

3. Mở cửa sổ Workspace của MATLAB, ta sẽ thấy trong workspace sẽ xuất hiện

biến mới là bs2700. Đây chính là bộ lọc mà ta đã thiết kế trong SPTool và xuất ra

workspace của MATLAB. Biến này được lưu dưới dạng một cấu trúc mô tả bộ

lọc đã thiết kế. Nhấn đúp chuột vào tên biến bs2700 trong workspace, ta sẽ thấy

được các field của cấu trúc này như sau:

Page 6: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

6

Hình 4. Các field của bs2700

4. Trong các field này, field tf thể hiện hàm truyền của bộ lọc. Field này cũng là một

cấu trúc gồm 2 field: tf.num và tf.den thể hiện tương ứng các hệ số của đa thức

tử số và đa thức mẫu số. Đối với bộ lọc FIR, hàm truyền chỉ có tử số và các hệ số

của tử số chính là đáp ứng xung của bộ lọc. Do đó, với bộ lọc trên, các giá trị của

vector đáp ứng xung được lưu trong bs2700.tf.num. Trong cửa sổ Array Editor

trên, lần lượt nhấn đúp vào field tf rồi nhấn đúp vào num, ta sẽ thấy các hệ số đáp

ứng xung của bộ lọc. Để gán các hệ số này vào một vector h, trong MATLAB có

thể dùng lệnh sau:

>> h = bs2700.tf.num

Hình 5. Vector đáp ứng xung của bộ lọc đã thiết kế

Các giá trị thu được của vector đáp ứng xung sẽ được sử dụng để thực hiện bộ lọc số

lên trên kit DSP.

Ví dụ 2: Thiết kế bộ lọc IIR chắn dải bằng SPTool

Sử dụng phương pháp Elliptic để thiết kế một bộ lọc IIR chắn dải bậc 10, tần số trung

tâm 1750Hz. Chú ý rằng MATLAB hiển thị bậc bộ lọc là 5, biểu diễn số phần bậc 2 của

bộ lọc. (Điều này đúng với các bộ lọc IIR thông dải và chắn dải)

Page 7: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

7

Các thông số của bộ lọc này như sau.

Tần số cắt: 1700 Hz và 1800 Hz

Độ gợn dải thông và dải chắn tương ứng là 1 dB và 60 dB

Tần số lấy mẫu: 8000 Hz

Thực hiện tương tự như ví dụ trên, lưu bộ lọc thiết kế với tên bs1750 và xuất ra

workspace. Trong workspace sẽ có một cấu trúc tên là bs1750. Các hệ số tử số và mẫu

số của hàm truyền được lưu tương ứng trong các biến bs1750.tf.num và bs1750.tf.den.

Hình 6. Đáp ứng tần số của bộ lọc IIR đã thiết kế

Dạng cực – zero của một hàm truyền H(z) như sau:

m

n

pzpzpz

zzzzzzkzH

...

...)(

21

21

Hàm truyền trên có thể được viết lại như sau:

L

k kk

kkkL

k

kzaza

zbzbbgzHgzH

12

2

1

1

2

2

1

10

1 1)(

Với L là số nguyên gần nhất lớn hơn cực đại của n/2 và m/2.

Trong MATLAB, các phần bậc 2 của H(z) được lưu trong 1 ma trận như sau:

Page 8: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

8

LLLLL aabbb

aabbb

aabbb

sos

21210

2212221202

2111211101

1

1

1

Từ các hệ số tử và mẫu ở trên, ta sẽ chuyển thành dạng các phần bậc hai bằng các lệnh

sau:

>> [z,p,k] = tf2zp(bs1750.tf.num, bs1750.tf.den)

>> sos = zp2sos(z,p,k)

Các phần tử của ma trận sos này sẽ được sử dụng để thực hiện bộ lọc IIR này lên kit

DSP.

1.2 Thiết kế bộ lọc bằng lệnh của MATLAB

Bên cạnh việc sử dụng công cụ SPTool để thiết kế bộ lọc như trên, MATLAB cũng có

một số lệnh có thể sử dụng để thiết kế bộ lọc. Các lệnh này có thể được sử dụng khi

thiết kế một số loại bộ lọc mà SPTool không có sẵn, ví dụ như các bộ lọc multiband.

Ví dụ 1: Thiết kế bộ lọc FIR multiband bằng các lệnh MATLAB

Trong ví dụ này, chúng ta sẽ thiết kế một bộ lọc FIR multiband gồm 63 hệ số. Tần số

lấy mẫu là 10 kHz. Chúng ta sử dụng hàm remez của MATLAB. Hàm remez sử dụng

giải thuật Parks – McClellan dựa trên giải thuật Remez và lý thuyết xấp xỉ Chebyshev.

Bộ lọc cần thiết kế có đáp ứng tần số như sau:

0 500 1000 1500 2000 2500 3000 3500 4000 4500 50000

0.2

0.4

0.6

0.8

1

1.2

Hình 7. Đáp ứng tần số của bộ lọc multiband FIR cần thiết kế

Bộ lọc mong muốn có 2 dải thông, được biểu diễn bởi 5 dải như sau:

Dải Tần số (Hz) Tần số chuẩn hóa f/FN Biên độ

1 0 – 500 0 – 0.1 0

Page 9: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

9

2 600 – 900 0.12 – 0.18 1

3 1000 – 1500 0.2 – 0.3 0

4 1600 – 1900 0.32 – 0.38 1

5 2000 – 5000 0.4 – 1 0

Trong đó FN là tần số Nyquist, bằng ½ tần số lấy mẫu.

Chúng ta viết một file .m để thiết kế bộ lọc này, lưu lại với tên multibandfir63.m

Nội dung của file này như sau:

%multibandfir63.m: Multiband FIR filter with 63 coefficients

f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1];

m = [0 0 1 1 0 0 1 1 0 0];

n = 63;

cof = remez(n-1,f,m);

% frequency response with 256 points

[h w] = freqz(cof,1,256);

% plot magnitude of the filter

plot(5000*f,m);

figure;

plot(w/pi,abs(h));

Trong đoạn chương trình trên, có một số lưu ý:

- Dòng lệnh cof = remez(n-1,f,m) trả về vector hệ số của bộ lọc FIR bậc n – 1, với

f và m xác định các dải tần số theo bảng ở trên.

- Lệnh freqz để tính đáp ứng tần số của bộ lọc

- Lệnh plot thứ nhất vẽ đáp ứng tần số mong muốn dựa trên f và m.

- Lệnh figure tạo ra một cửa sổ mới và lệnh plot thứ hai vẽ đáp ứng tần số của bộ

lọc đã thiết kế được lên cửa sổ mới này.

Ở đây, kết quả của quá trình thiết kế mà ta cần nhận được chính là các hệ số chứa trong

biến cof. Chúng được sử dụng khi thực hiện bộ lọc lên trên kit DSP.

Ví dụ 2: Thiết kế bộ lọc IIR multiband bằng các lệnh của MATLAB

Trong thí nghiệm này, chúng ta thiết kế một bộ lọc IIR multiband có đáp ứng mong

muốn như bộ lọc ở ví dụ 1. Tần số lấy mẫu cũng là 10 kHz.

Các bước thiết kế giống như trên với nội dung file multibandiir63.m dùng để thiết kế

như sau:

%multibandiir63.m: Multiband IIR filter with 63

coefficients

f = [0 0.1 0.12 0.18 0.2 0.3 0.32 0.38 0.4 1];

m = [0 0 1 1 0 0 1 1 0 0];

n = 63;

[num, den] = yulewalk(n-1,f,m);

% frequency response with 256 points

[h w] = freqz(num,den,256);

Page 10: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

10

% plot magnitude of the filter

plot(5000*f,m);

figure;

plot(w/pi,abs(h));

Trong đoạn chương trình trên, lưu ý:

- Lệnh remez được thay bằng lệnh yulewalk dùng để thiết kế bộ lọc IIR. Lệnh này

trả về các hệ số của tử số và mẫu số của hàm truyền bộ lọc, được chứa tương ứng

trong biến num và den.

- Lệnh freqz được sửa đổi để vẽ đáp ứng tần số của bộ lọc IIR đã thiết kế.

Các giá trị của num và den được sử dụng khi cần thực hiện bộ lọc này lên kit DSP.

Page 11: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

11

BÀI 2: SỬ DỤNG KIT XỬ LÝ SỐ C6713 DSK (DSP STARTER KIT)

1.3 Kit C6713 DSK

Kit DSK là một hệ thống DSP hoàn chỉnh. Board DSK bao gồm bộ xử lý số dấu chấm

động C6713 và bộ codec 32 bit stereo TLV320AIC23 (AIC23) để xuất nhập. Bộ codec

onboard AIC23 sử dụng kỹ thuật sigma – delta để biến đổi A/D và D/A. Nó được kết

nối với một đồng hồ hệ thống 12 – MHz. Tần số lấy mẫu có thể thay đổi từ 8 đến 96

KHz.

Board DSK bao gồm 16MB SDRAM và 256kB Flash memory. Bốn jack cắm trên boad

cho phép xuất nhập: MIC IN (microphone input), LINE IN (line input), LINE OUT

(line output) và HEADPHONE (headphone output). Trạng thái của 4 dip switch trên

DSK có thể đọc được từ chương trình. DSK hoạt động ở tần số 225 MHz. Trên board

DSK cũng bao gồm các ổn áp cung cấp 1.26V cho nhân C6713 và 3.3V cho bộ nhớ và

các ngoại vi.

Bộ xử lý TMS320C6713 dựa trên kiến trúc VLIW (very-long-instruction-word), phù

hợp cho các giải thuật nặng về tính toán số. Bộ nhớ chương trình nội được tổ chức để

mỗi chu kỳ có thể nạp 8 lệnh (instruction), mỗi instruction dài 32 bit.

Các bộ xử lý C67xx (ví dụ C6701, C6711 và C6713) thuộc về họ các bộ xử lý C6x dấu

chấm động, trong khi đó C62xx và C64xx thuộc về họ các bộ xử lý C6x dấu chấm tĩnh.

C6713 có thể xử lý cả dấu chấm động và dấu chấm tĩnh.

Hình 8. Sơ đồ khối của DSK

1.4 Code Composer Studio (CCS)

CCS là một môi trường phát triển tích hợp (IDE). CCS cung cấp các công cụ sinh mã,

như một bộ biên dịch C, một chương trình assembler và một chương trình linker. Nó có

khả năng đồ họa và hỗ trợ real-time debug. Nó cung cấp một công cụ phần mềm thuận

tiện cho việc xây dựng và sửa lỗi chương trình.

Trình dịch C sẽ dịch chương trình nguồn viết bằng C (tập tin có kiểu .c) để tạo thành

một tập tin nguồn assembly (kiểu .asm). Trình assembler sẽ tạo ra các tập tin đối tượng

ngôn ngữ máy (.obj) từ các tập tin .asm. Trình linker sẽ kết hợp các tập tin đối tượng và

các thư viện đối tượng để tạo ra một tập tin thực thi với kiểu .out. Tập tin thực thi này

có thể được nạp và chạy trực tiếp trên bộ xử lý C6713.

Page 12: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

12

Để tạo một project, người dùng có thể thêm vào các tập tin phù hợp. Các tùy chọn về

compiler/linker có thể xác định dễ dàng. Một số tính năng debug có sẵn, như đặt các

breakpoint và xem các biến; xem bộ nhớ, các thanh ghi và trộn C với assembly code;

các kết quả đồ họa; và theo dõi thời gian thực thi.

Chúng ta sẽ làm việc với một vài kiểu tập tin khác nhau, bao gồm:

1. file.pjt: để tạo và xây dựng một project có tên là “file”

2. file.c: chương trình nguồn viết bằng C

3. file.asm: chương trình nguồn bằng ngôn ngữ assembly, được tạo bởi người dùng

hoặc bởi bộ dịch C.

4. file.h: tập tin header

5. file.lib: tập tin thư viện

6. file.cmd: tập tin lệnh của linker, ánh xạ các section vào bộ nhớ

7. file.obj: tập tin đối tượng được tạo ra bởi assembler

8. file.out: tập tin thực thi được tạo ra bởi linker để nạp và chạy trên bộ xử lý C6713

1.5 Các tập tin hỗ trợ

Các tập tin hỗ trợ sau được chứa trong folder

C:\CCStudio_v3.1\myprojects\source\support (trừ các tập tin thư viện) được sử dụng

trong hầu hết các bài thí nghiệm.

1. C6713dskinit.c: chứa các hàm khởi động DSK, codec, các cổng nối tiếp và để

xuất nhập. Tập tin này không được bao gồm với CCS.

2. C6713dskinit.h: tập tin header chứa các prototype của các hàm.

3. C6713dsk.cmd: Tập tin lệnh linker. Tập tin này có thể được sửa đổi khi sử dụng

bộ nhớ ngoài thay cho bộ nhớ trong.

4. vectors_intr.asm: một tập tin vector bao gồm trong CCS đã được sửa đổi để quản

lý ngắt. Có 12 ngắt, từ INT4 đến INT15, và ngắt 11 được chọn trong tập tin này.

Chúng được dùng cho các chương trình có sử dụng ngắt.

5. vectors_poll.asm: tập tin vector cho các chương trình hỏi vòng (polling)

6. rts6700.lib, dsk6713bsl.lib, csl6713.lib: Tập tin thư viện hỗ trợ run – time, board

và chip. Các tập tin này được cung cấp với CCS và được chứa trong các folder

C6000\cgtools\lib, C6000\dsk6713\lib và C6000\csl\lib một cách tương ứng.

(Thư mục C6000 nằm trong thư mục cài đặt của CCS, mặc định là

C:\CCStudio_v3.1\)

1.6 Các ví dụ lập trình trên DSK

Sau đây là một số ví dụ lập trình để minh họa cho một số đặc tính của CCS và board

DSK. Mục tiêu chính là để làm quen với các công cụ phần mềm và phần cứng.

Ví dụ 1: Tạo tín hiệu hình sine

Ví dụ này tạo ra một tín hiệu hình sine bằng phương pháp tra bảng. Quan trọng hơn, nó

minh họa vài đặc tính của CCS trong hiệu chỉnh, xây dựng một project, sử dụng các

công cụ sinh mã và chạy một chương trình trên bộ xử lý C6713. Chương trình nguồn

tone.c thực hiện việc tạo sóng sine có nội dung như dưới đây.

#include "tonecfg.h"

/*

Page 13: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

13

* The 6713 DSK Board Support Library is divided into several

modules, each

* of which has its own include file. The file dsk6713.h must be

included

* in every program that uses the BSL. This example also includes

* dsk6713_aic23.h because it uses the AIC23 codec module.

*/

#include "dsk6713.h"

#include "dsk6713_aic23.h"

/* Length of sine wave table */

#define SINE_TABLE_SIZE 96

/* Codec configuration settings */

DSK6713_AIC23_Config config = {

0x0017, // 0 DSK6713_AIC23_LEFTINVOL Left line input channel

volume

0x0017, // 1 DSK6713_AIC23_RIGHTINVOL Right line input channel

volume

0x00d8, // 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone

volume

0x00d8, // 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone

volume

0x0011, // 4 DSK6713_AIC23_ANAPATH Analog audio path control

0x0000, // 5 DSK6713_AIC23_DIGPATH Digital audio path control

0x0000, // 6 DSK6713_AIC23_POWERDOWN Power down control

0x0043, // 7 DSK6713_AIC23_DIGIF Digital audio interface

format

0x0001, // 8 DSK6713_AIC23_SAMPLERATE Sample rate control

0x0001 // 9 DSK6713_AIC23_DIGACT Digital interface activation

};

/* Pre-generated sine wave data, 16-bit signed samples */

Int16 sinetable[SINE_TABLE_SIZE] = {

0x0000, 0x10b4, 0x2120, 0x30fb, 0x3fff, 0x4dea, 0x5a81, 0x658b,

0x6ed8, 0x763f, 0x7ba1, 0x7ee5, 0x7ffd, 0x7ee5, 0x7ba1, 0x76ef,

0x6ed8, 0x658b, 0x5a81, 0x4dea, 0x3fff, 0x30fb, 0x2120, 0x10b4,

0x0000, 0xef4c, 0xdee0, 0xcf06, 0xc002, 0xb216, 0xa57f, 0x9a75,

0x9128, 0x89c1, 0x845f, 0x811b, 0x8002, 0x811b, 0x845f, 0x89c1,

0x9128, 0x9a76, 0xa57f, 0xb216, 0xc002, 0xcf06, 0xdee0, 0xef4c,

0x0000, 0x10b4, 0x2120, 0x30fb, 0x3fff, 0x4dea, 0x5a81, 0x658b,

0x6ed8, 0x763f, 0x7ba1, 0x7ee5, 0x7ffd, 0x7ee5, 0x7ba1, 0x76ef,

0x6ed8, 0x658b, 0x5a81, 0x4dea, 0x3fff, 0x30fb, 0x2120, 0x10b4,

0x0000, 0xef4c, 0xdee0, 0xcf06, 0xc002, 0xb216, 0xa57f, 0x9a75,

0x9128, 0x89c1, 0x845f, 0x811b, 0x8002, 0x811b, 0x845f, 0x89c1,

0x9128, 0x9a76, 0xa57f, 0xb216, 0xc002, 0xcf06, 0xdee0, 0xef4c

};

/*

Page 14: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

14

* main() - Main code routine, initializes BSL and generates tone

*/

void main()

{

DSK6713_AIC23_CodecHandle hCodec;

Int16 msec, sample;

/* Initialize the board support library, must be called first */

DSK6713_init();

/* Start the codec */

hCodec = DSK6713_AIC23_openCodec(0, &config);

/* Generate a 1KHz sine wave for 5 seconds */

for (msec = 0; msec < 5000; msec++)

{

for (sample = 0; sample < SINE_TABLE_SIZE; sample++)

{

/* Send a sample to the left channel */

while (!DSK6713_AIC23_write(hCodec, sinetable[sample]));

/* Send a sample to the right channel */

while (!DSK6713_AIC23_write(hCodec, sinetable[sample]));

}

}

/* Close the codec */

DSK6713_AIC23_closeCodec(hCodec);

}

Tạo project

Phần này sẽ minh họa cách tạo một project mới, thêm các tập tin cần thiết để biên dịch

project sine_graph.

1. Trong CCS, chọn Project New. Trong hộp thoại tạo Project, nhập tên project

là sine_graph, chọn đường dẫn: C:\CCStudio_v3.1\Myprojects, Project Type là

Executable (.out), và Target là TMS320C67xx.

Hình 9. Hộp thoại Project Creation

Page 15: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

15

CCS sẽ tự tạo ra một thư mục tên là sine_graph trong thư mục

C:\CCStudio_v3.1\Myprojects.

2. Sau khi tạo project, cần thực hiện các bước config như sau:

Tạo Source file: vào mục File -> New -> Source file…

Gõ lại chương trình sine_graph.c như ở trên và lưu lại với tên sine_graph.c tại đường

dẫn: C:\CCStudio_v3.1\Myprojects\sine_graph

Bổ sung Source file vừa tạo vào project: Click phải vào Source, chọn Add File to Project…

Chọn đường đẫn đến file sine_graph.c vừa tạo.

Tương tự, ta bổ sung file dsk6713.gel tại đường dẫn: C:\CCStudio_v3.1\cc\gel vào

Gel file

Và file tone.cdb tại đường dẫn C:\CCStudio_v3.1\examples\dsk6713\bsl\tone vào

DSP/BIOS Config

Copy file tonecfg.h tại đường dẫn C:\CCStudio_v3.1\examples\dsk6713\bsl\tone vào

thư mục của project sine_graph

Chọn Project Scan All File Dependencies để CCS tự thêm vào các tập tin header.

Sau khi thực hiện các bước trên, cửa sổ Project View sẽ hiển thị các tập tin đã được

thêm vào Project.

Xác định các tùy chọn để biên dịch chương trình

Page 16: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

16

Ở bước này, các tùy chọn để CCS dịch chương trình nguồn thành tập tin thực thi sẽ

được thiết lập.

Option -> Customize -> Program/Project Load -> Check: Load Program After Build

Project -> Build Option -> Compiler -> Preprocessor -> Basic -> Target version:

C6710X (mv6710)

Project -> Build Option -> Linker -> Basic -> Output Module: Relocatable

Excutable (-ar)

Project -> Build Option -> Linker -> Basic -> Library Search Path (-i):

$(Install_dir)\c6000\dsk6713\lib

Project -> Build Option -> Linker -> Basic -> Include Libraries (-l): dsk6713bsl.lib

Project -> Build Option -> Compiler -> Preprocessor -> Include Search Path (i):

$(Install_dir)\c6000\dsk6713\include

Project -> Build Option -> Compiler -> Preprocessor -> Pre-Define Symbol (d):

_DEBUG;CHIP_6713

Dịch và chạy chương trình

Sau khi đã thiết lập các tùy chọn phù hợp cho Compiler và Linker, chúng ta hãy tiến

hành biên dịch chương trình và nạp lên trên kit để chạy.

Nhấn F7 để Rebuild All và load xuống Kit.

Sau đó nhấn F5 để chạy chương trình

Ví dụ 2: Tạo tín hiệu sine và vẽ với CCS

Ví dụ này cũng tạo ra một tín hiệu sine với 8 điểm như trong ví dụ 1 nhưng nó minh

họa khả năng vẽ dạng sóng trong miền thời gian và miền tần số của CCS. Chương trình

chính sine8_buf.c có nội dung như sau:

//sine8_buf Sine generation. Output buffer plotted within CCS

#include "dsk6713_aic23.h" //codec-DSK support file

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate

int loop = 0; //table index

short gain = 10; //gain factor

short sine_table[8]={0,707,1000,707,0,-707,-1000,-707};

short out_buffer[256]; //output buffer

const short BUFFERLENGTH = 256; //size of output buffer

int i = 0; //for buffer count

interrupt void c_int11() //interrupt service routine

{

output_sample(sine_table[loop]*gain); //output sine values

out_buffer[i] = sine_table[loop]*gain; //output to buffer

i++; //increment buffer count

if(i==BUFFERLENGTH) i=0; //if @ bottom reinit count

if (++loop > 7) loop = 0; //check for end of table

return; //return from interrupt

}

Page 17: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

17

void main()

{

comm_intr(); //init DSK, codec, McBSP

while(1); //infinite loop

}

Trong chương trình này, một vùng đệm out_buffer có kích thước 256 được sử dụng để

lưu lại các dữ liệu xuất ra.

Trong hàm main, comm_intr được gọi. Hàm này nằm trong c6713dskinit.c để hỗ trợ

chương trình có dùng ngắt. Phát biểu while(1) trong hàm main tạo một vòng lặp vô hạn

để chờ ngắt xảy ra. Khi có xung lấy mẫu, ngắt 11 xảy ra và trình phục vụ ngắt (ISR –

interrupt service routine) c_int11 được gọi. Địa chỉ của ISR này được xác định trong

tập tin vectors_intr.asm với một chỉ dẫn rẽ nhánh đến địa chỉ này, sử dụng vector ngắt

INT11.

Trong ISR này, hàm output_sample, chứa trong tập tin c6713dskinit.c, được gọi để xuất

ra dữ liệu đầu tiên trong sine_table. Chỉ số loop được tăng cho đến hết bảng rồi lặp lại

từ 0. Một bộ đệm ra được tạo để giữ 256 (xác định bởi BUFFERLENGTH) mẫu tín

hiệu sine xuất ra.

Xây dựng chương trình

Hãy tạo project sine8_buf.pjt và thêm các tập tin cần thiết như trong ví dụ 1. Lưu ý rằng

chương trình này sử dụng ngắt nên tập tin vectors_intr.asm được sử dụng thay cho tập

tin vectors_polls.asm. Tập tin sine8_buf.c được chứa trong thư mục

C:\CCStudio_v1.3\myprojects\source\project_2.

Xác lập các tùy chọn như trong ví dụ 1 và dịch chương trình. Nạp và chạy chương trình

trên kit và kiểm tra rằng có một sóng sine 1KHz được tạo ra.

Vẽ với CCS

Bộ đệm ra được cập nhật liên tục mỗi 256 điểm. Sau đây CCS sẽ được sử dụng để vẽ

dữ liệu ra hiện tại chứa trong bộ đệm out_buffer.

1. Chọn View Graph Time/Frequency. Thay đổi các tùy chọn trong cửa sổ

Graph Property Dialog như sau để vẽ trong miền thời gian. Địa chỉ bắt đầu của bộ

đệm chính là tên mảng out_buffer được nhập vào Start Address. Các tùy chọn

khác có thể để như mặc định.

Page 18: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

18

Hình 10. Các tùy chọn để vẽ trong miền thời gian

2. Để vẽ trong miền tần số, chọn các tùy chọn như trong hình sau. Chọn bậc của

FFT (FFT Order ) sao cho FFT Framesize = 2order

.

Hình 11. Các tùy chọn để vẽ trong miền tần số

Kết quả vẽ được thể hiện trên hình sau:

Hình 12. Kết quả vẽ bằng CCS cả trong miền tần số và trong miền thời gian

Page 19: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

19

Cửa sổ Watch window

Cửa sổ Watch Window cho phép thay đổi giá trị của một thông số hoặc để theo dõi một

biến. Trong khi chương trình đang chạy và DIP Switch 0 đang được nhấn. (Lưu ý dòng

chữ DSP RUNNING trên thanh Status của CCS).

1. Chọn View Quick Watch window. Thường cửa sổ này hiển thị ở phần bên

dưới của CCS. Nhập gain và nhấn “Add to Watch”. Giá trị gain bằng 10 (đã được

đặt trong chương trình) sẽ xuất hiện trong cửa sổ Watch.

2. Thay đổi gain từ 10 thành 30 trong cửa sổ Watch rồi nhấn Enter. Dạng sóng quan

sát sẽ thay đổi khi biến gain thay đổi giá trị.

Sử dụng tập tin gain.gel

Trong phần trên chúng ta đã đề cập đến tập tin gain.gel. Tập tin này tạo một giao diện

để cho phép thay đổi biến gain một cách tương tác khi chương trình đang chạy.

1. Trước hết, cần phải nạp tập tin này vào bằng cách chọn File Load GEL và mở

tập tin gain.gel. Nhấn đúp chuột lên tập tin này trong cửa sổ Project View để xem

nội dung của nó.

/*gain.gel Create slider and vary amplitude (gain) of

sinewave*/

menuitem "Sine Gain"

slider Gain(10,35,5,1,gain_parameter) /*incr by 5,up to

35*/

{

gain = gain_parameter; /*vary gain of sine*/

}

Nội dung của tập tin gain.gel như trên. Trong đó, hàm slider Gain được tạo ra để

hiển thị thanh trượt. Thanh trượt này bắt đầu từ giá trị 10 và kết thúc ở giá trị 35

và mỗi mức tăng là 5 đơn vị.

2. Chọn GEL Sinde Gain Gain, cửa sổ sau sẽ xuất hiện cho phép thay đổi giá

trị của biến gain.

Hình 13. Cửa sổ slider cho phép thay đổi biến gain

3. Nhấn nút mũi tên hướng lên để tăng gain từ 10 đến 15 và quan sát dạng sóng sine

tạo ra để thấy sự thay đổi.

Thay đổi tần số của tín hiệu sine tạo ra

Page 20: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

20

Tần số của tín hiệu sine tạo ra có thể thay đổi bằng một trong các cách sau.

1. Thay đổi tần số lấy mẫu. Trong tập tin nguồn ở trên, tần số lấy mẫu fs được gán

giá trị là DSK6713_AIC23_FREQ_8KHZ. Giá trị này là 1 hằng số nguyên đã

được định nghĩa sẵn. Bộ codec AIC hỗ trợ các tần số lấy mẫu 8, 16, 24, 32, 44.1,

48 và 96kHz. Ví dụ, để có tín hiệu sine ra có tần số là 2kHz, cần tăng tần số lấy

mẫu lên 16kHz bằng cách đặt fs=DSK6713_AIC23_FREQ_16KHZ.

2. Thay đổi số điểm ở trong bảng tra, ví dụ còn 4 điểm thay vì 8 điểm – ví dụ, {0,

1000, 0, -1000}. Khi đó cần thay đổi kích thước của mảng sine_table và giá trị

biến loop. Hãy chứng minh rằng tần số tạo ra là f = fs/(số điểm).

Hai thanh trượt có thể được sử dụng để vừa thay đổi gain, vừa thay đổi tần số. Các tần

số tín hiệu khác nhau có thể tạo ra bằng cách thay đổi biến loop trong chương trình (ví

dụ như nhảy cách một điểm lấy một điểm).

Lưu ý rằng với chương trình trên sóng sine chỉ được tạo ra khi DIP Switch 0 được

nhấn. Để sử dụng một DIP Switch khác, ví dụ DIP Switch 3, trong chương trình phải sử

dụng các hàm DSK6713_DIP_get(3), DSK6713_LED_on(3) và DSK6713_LED_off(3).

Page 21: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

21

BÀI 3: THỰC HIỆN CÁC BỘ LỌC FIR TRÊN KIT C6713 DSK

1. Mục đích thí nghiệm

1. Hiểu rõ các bước từ thiết kế đến hiện thực bộ lọc FIR lên trên một kit DSP.

2. Hệ thống lại các lý thuyết đã học.

2. Thiết bị thí nghiệm

STT Tên thiết bị Số lượng

01 Máy vi tính 01

02 Kit C6713 DSK 01

03 Máy phát song 01

04 Bộ dây nối tín hiệu 01

3. Giới thiệu

Lọc là một trong những hoạt động xử lý tín hiệu quan trọng. Một bộ lọc tương tự hoạt

động trên các tín hiệu liên tục và thường được thực hiện với các linh kiện như khuếch đại

thuật toán, các điện trở và các tụ điện. Một bộ lọc số hoạt động trên tín hiệu thời gian rời

rạc và có thể thực hiện với một bộ xử lý số tín hiệu như họ TMS320C6x. Quá trình lọc

bao gồm sử dụng một bộ biến đổi A/D để nhận tín hiệu vào, xử lý các mẫu vào rồi gửi

kết quả ra thông qua một bộ biến đổi D/A.

Các bộ lọc số có rất nhiều ưu điểm so với các bộ lọc tương tự. Các ưu điểm này bao gồm

độ tin cậy cao hơn, độ chính xác cao hơn và ít nhạy với nhiệt độ và tuổi đời. Các đặc tính

lọc như tần số trung tâm, băng thông và loại bộ lọc có thể thay đổi dễ dàng. Một số công

cụ có sẵn cho việc thiết kế và thực hiện các bộ lọc số một cách nhanh chóng trên kit

TMS320C6x.

4. Cơ sở lý thuyết

Bộ lọc FIR nhân quả bậc M có đáp ứng xung h = [h0, h1, …, hM] (chiều dài bằng M + 1)

Ngõ ra của bộ lọc được xác định theo công thức tích chập:

mm

mnhmxmnxmhny )()()()()(

trong đó x(n) là ngõ vào của bộ lọc.

Hàm truyền của bộ lọc được xác định từ biến đổi Z của h(n):

M

M

M

n

n zhzhhznhzH

...)()( 1

10

0

trong đó các hệ số của hàm truyền chính là đáp ứng xung h của bộ lọc.

Bộ lọc FIR có thể thiết kế bằng nhiều phương pháp, trong đó phương pháp đơn giản nhất

là phương pháp cửa sổ.

Bộ lọc có thể được thực hiện bằng hai phương pháp: Phương pháp xử lý khối và phương

pháp xử lý mẫu. Với phương pháp xử lý mẫu, bộ lọc có thể được thực hiện dạng trực tiếp

như sau:

Page 22: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

22

Hình 14. Thực hiện bộ lọc FIR dạng trực tiếp

Nếu đặt các biến trạng thái

v0(n) = x(n)

v1(n) = x(n – 1)

vM(n) = x(n – M)

Ta sẽ có giải thuật xử lý mẫu ứng với sơ đồ khối trên như sau:

Với mỗi mẫu vào x:

v0 = x

M

0k

kk vhy

vM = vM-1

v1 = v0

5. Chuẩn bị thí nghiệm

1. Cho một bộ lọc FIR có đáp ứng xung h = [1; -2; -3; -4]. Hãy xác định:

a. Bậc bộ lọc

b. Phương trình sai phân I/O của bộ lọc

c. Sơ đồ khối thực hiện dạng trực tiếp và giải thuật xử lý mẫu.

2. Trình bày tóm tắt các bước thiết kế một bộ lọc FIR bằng SPTool của MATLAB. Có

mấy phương pháp thiết kế bộ lọc FIR trong SPTool? Hãy liệt kê.

3. Thế nào là một bộ lọc multiband? Thử phát họa đáp ứng tần số của một bộ lọc

multiband? Có thể dùng MATLAB để thiết kế một bộ lọc FIR multiband hay không?

4. Tóm tắt các bước sẽ làm để thực hiện các phần thí nghiệm sau.

Page 23: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

23

6. Tiến hành thí nghiệm

6.1 Thực hiện bộ lọc FIR

Trước hết, hãy thực hiện theo từng bước ví dụ đơn giản sau. Sau đó, hãy tự thực hiện

các bộ lọc FIR khác theo yêu cầu.

Ví dụ : Thiết kế một bộ lọc FIR thông thấp bậc 88 với tần số cắt 2.5 kHz, tần số lấy

mẫu 8 kHz. Thực hiện nó trên kit C6713 DSK. Kiểm chứng bộ lọc đã thực hiện.

Trong ví dụ này có 3 phần chính cần phải thực hiện:

1. Thiết kế bộ lọc FIR: kết quả của phần này là có được đáp ứng xung h(n) của bộ

lọc.

2. Thực hiện bộ lọc lên trên kit C6713 DSK: Sử dụng đáp ứng xung thu được từ

phần thiết kế, viết chương trình thực hiện mạch lọc lên kit. Chương trình sẽ đọc

từng mẫu dữ liệu vào và tiến hành giải thuật xử lý mẫu để tính ngõ ra.

3. Kiểm tra bộ lọc đã thực hiện: Trong phần này, bộ lọc đã thực hiện trên kit sẽ

được kiểm tra xem có đáp ứng yêu cầu đặt ra hay không. Chúng ta sẽ sử dụng

một máy phát sóng để tạo tín hiệu ngõ vào và quan sát tín hiệu ngõ ra của bộ lọc

khi thay đổi tín hiệu ngõ vào.

Thiết kế bộ lọc

1. Sử dụng công cụ SPTool trong MATLAB để thiết kế bộ lọc trên với phương pháp

Least Squares FIR.

2. Lưu bộ lọc đã thiết kế với tên là lp2500 rồi xuất ra workspace của MATLAB.

Thực hiện bộ lọc

Bộ lọc này được thực hiện trên kit bằng chương trình sau (viết bằng ngôn ngữ C)

//Fir.c FIR filter. Include coefficient file with length N

#include "coefficients.h" //coefficient file

#include "dsk6713_aic23.h" //codec-dsk support file

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate

int yn = 0; //initialize filter's output

short dly[N]; //delay samples

interrupt void c_int11() //ISR

{

short i;

dly[0]=input_sample(); //input newest sample

yn = 0; //initialize filter's output

for (i = 0; i< N; i++)

yn += (h[i] * dly[i]); //y(n) += h(i)* x(n-i)

for (i = N-1; i > 0; i--) //starting @ end of buffer

Page 24: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

24

dly[i] = dly[i-1]; //update delays with data move

output_sample(yn >> 15); //scale output filter sample

return;

}

void main()

{

comm_intr(); //init DSK, codec, McBSP

while(1); //infinite loop

}

Trong chương trình này, N là chiều dài của đáp ứng xung của bộ lọc ( bằng M + 1 với

M là bậc của bộ lọc) và đáp ứng xung của bộ lọc là mảng h có kích thước N. Giá trị của

N và vector h được khai báo trong tập tin coefficients.h. Tập tin này được gộp vào nhờ

chỉ dẫn #include. Như vậy, khi muốn thay đổi bộ lọc, chỉ cần thay đổi nội dung của tập

tin coefficients.h.

Chương trình trên có sử dụng ngắt. Khi có có xung lấy mẫu (tần số chọn ở đây là

8KHz), trình phục vụ ngắt c_int11 được gọi, đọc mẫu vào và thực hiện giải thuật xử lý

mẫu để tính ngõ ra.

Do các hệ số của đáp ứng xung nhận được từ quá trình thiết kế là khá nhỏ, chúng ta sẽ

nhân nó với 215

. Mẫu ra sau khi xử lý được chia lại cho 215

bằng cách dịch phải 15 bit

(trong hàm output_sample(yn >> 15)). Việc nhân các hệ số với 215

cũng là do bộ xử lý

sẽ lượng tử hóa các hệ số với một số lượng bit hữu hạn và việc nhân lên sẽ giảm đi sai

số.

Tóm lại, các bước để thực hiện bộ lọc lên kit như sau:

1. Lấy các hệ số của hàm truyền của bộ lọc, nhân với hệ số tỉ lệ 215

>> cof = round(lp2500.tf.num*2^15)

2. Nếu cửa sổ workspace của MATLAB chưa hiển thị, hãy mở nó lên. Trong

workspace, nhấn đúp chuột vào tên biến cof để mở cửa sổ Array Editor.

3. Mở CCS (nhớ mở nguồn của DSK trước khi mở CCS).

4. Mở tập tin project (đã được tạo sẵn) FIR.pjt trong

C:\CCStudio_v3.1\myprojects\FIR.

5. Trong cửa sổ Project View, tab File View, mở rộng phần Include, mở tập tin

coeficients.h.

6. Đặt các hệ số của bộ lọc vừa thiết kế vào trong tập tin này. (Có thể copy và paste

từ cửa sổ Array Editor trên). Điểu chỉnh giá trị N cho đúng với chiều dài đáp ứng

xung. Lưu ý rằng các giá trị của đáp ứng xung cách nhau bằng một dấu phẩy (,).

Lưu tập tin sau khi sửa đổi.

7. Xác lập các tùy chọn phù hợp (xem phần hướng dẫn sử dụng trong tài liệu này)

rồi tiến hành biên dịch chương trình. Sau khi dịch thành công, hãy nạp chương

trình lên trên kit và chạy chương trình.

Đánh giá kết quả thực hiện

1. Hãy thử xem đáp ứng tần số của bộ lọc vừa thực hiện bằng cách sử dụng công cụ

vẽ trong miền tần số của CCS. Chọn View Graph Time/Frequency. Chọn

Page 25: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

25

Display Type là FFT Magnitude và Start Address là địa chỉ bắt đầu của vector

đáp ứng xung, tức là tên mảng h.

2. Mở nguồn của máy phát sóng. Tạo một tín hiệu hình sine từ máy phát sóng và

quan sát dạng sóng ngõ ra. Thay đổi tần số của tín hiệu vào và hãy xác định tần số

cắt 3-dB của bộ lọc.

Sau khi đã thực hiện ví dụ trên, hãy áp dụng những gì đã học để thực hiện các thí

nghiệm sau. Với mỗi bài thí nghiệm, hãy đưa đáp ứng tần số của bộ lọc vào trong bài

báo cáo.

(Hướng dẫn: nêu sao chép thư mục FIR đã có thành một thư mục với tên khác và thực

hiện trên thư mục mới này ứng với từng bộ lọc).

1. Thiết kế một bộ lọc FIR chắn dải bằng phương pháp Kaiser Window có các thông

số như sau:

a. Chiều dài đáp ứng xung N = 89 (Bậc bộ lọc: 88)

b. Tần số cắt: 2500 và 2900 Hz.

c. Giá trị của = 4

d. Tần số lấy mẫu: 8 kHz.

Thực hiện bộ lọc lên trên kit và kiểm tra kết quả.

2. Thiết kế bộ lọc FIR thông dải bằng phương pháp Kaiser Window với các thông

số như sau:

a. Chiều dài đáp ứng xung: 81

b. Tần số cắt: 1500 và 2000 Hz.

c. Giá trị của = 5

d. Tần số lấy mẫu: 8 kHz.

Thực hiện bộ lọc và kiểm tra kết quả.

3. Thực hiện và thiết kế bộ lọc thông cao sau bằng phương pháp Kaiser Window.

Sau đó, cho một tín hiệu xung vuông tần số 1 kHz vào và hiển thị tín hiệu ra. Giải

thích kết quả. Các thông số của bộ lọc như sau:

a. Chiều dài đáp ứng xung: 81

b. Tần số cắt: 2200 Hz.

c. Giá trị của = 4

d. Tần số lấy mẫu: 8 kHz.

6.2 Một bộ lọc FIR multiband

Hãy thiết kế và thực hiện lên kit C6713 DSK một bộ lọc FIR multiband với hai dải

thông có tần số trung tâm lần lượt là 2500 và 3500 Hz. Băng thông của mỗi dải thông là

500 Hz. Tần số lấy mẫu là 8 kHz.

1. Vẽ đáp ứng tần số của bộ lọc.

2. Tạo một sóng vuông với tần số 800 Hz ở đầu vào của bộ lọc. Hiển thị dạng sóng và

phổ của ngõ ra. Giải thích tại sao có dạng phổ này?

3. Thay đổi tần số của tín hiệu vào. Quan sát phổ ngõ ra. Giải thích sự thay đổi.

4. Vẽ phổ của tín hiệu ngõ ra khi tần số của tín hiệu vào là 0.5kHz, 1kHz và 1.5kHz.

Giải thích?

Page 26: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

26

BÀI 4: THỰC HIỆN CÁC BỘ LỌC IIR TRÊN KIT C6713 DSK

1. Mục đích thí nghiệm

1. Hiểu rõ các bước từ thiết kế đến hiện thực bộ lọc IIR lên trên một kit DSP.

2. Hệ thống lại các lý thuyết đã học.

2. Thiết bị thí nghiệm

STT Tên thiết bị Số lượng

01 Máy vi tính 01

02 Kit C6713 DSK 01

03 Máy phát song 01

04 Bộ dây nối tín hiệu 01

3. Giới thiệu

Lọc là một trong những hoạt động xử lý tín hiệu quan trọng. Một bộ lọc tương tự hoạt

động trên các tín hiệu liên tục và thường được thực hiện với các linh kiện như khuếch đại

thuật toán, các điện trở và các tụ điện. Một bộ lọc số hoạt động trên tín hiệu thời gian rời

rạc và có thể thực hiện với một bộ xử lý số tín hiệu như họ TMS320C6x. Quá trình lọc

bao gồm sử dụng một bộ biến đổi A/D để nhận tín hiệu vào, xử lý các mẫu vào rồi gửi

kết quả ra thông qua một bộ biến đổi D/A.

Các bộ lọc số có rất nhiều ưu điểm so với các bộ lọc tương tự. Các ưu điểm này bao gồm

độ tin cậy cao hơn, độ chính xác cao hơn và ít nhạy với nhiệt độ và tuổi đời. Các đặc tính

lọc như tần số trung tâm, băng thông và loại bộ lọc có thể thay đổi dễ dàng. Một số công

cụ có sẵn cho việc thiết kế và thực hiện các bộ lọc số một cách nhanh chóng trên kit

TMS320C6x.

4. Cơ sở lý thuyết

Hãy xem xét một phương trình I/O tổng quát có dạng:

)()2()1(

)()2()1()(

)()()(

21

210

0 1

Mnybnybnyb

Nnxanxanxanxa

jnybknxany

M

N

N

k

M

j

jk

Dạng phương trình đệ quy này biểu diễn một bộ lọc IIR. Ngõ ra y(n) ở thời điểm y(n)

không chỉ phụ thuộc vào ngõ vào hiện tại x(n) ở thời điểm n và các ngõ vào trong quá

khứ x(n – 1),

x(n – 2), …, x(n – N), mà còn phụ thuộc vào các ngõ ra trước đó y(n – 1), y(n – 2), …,

y(n – M).

Nếu chúng ta giả sử các điều kiện ban đầu đều bằng 0, biến đổi Z phương trình trên sẽ

cho:

)()()(

)()()()()(

2

2

1

1

2

2

1

10

zYzbzYzbzYzb

zXzazXzazXzazXazY

M

M

N

N

Page 27: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

27

Khi N = M, hàm truyền H(z) là

)(

)(

1)(

)()(

2

2

1

1

2

2

1

10

zD

zN

zbzbzb

zazazaa

zX

zYzH

N

N

N

N

trong đó N(z) và D(z) biểu diễn đa thức tử số và đa thức tử số của hàm truyền. Nhân và

chia cho zN, H(z) trở thành:

N

i i

i

N

NNN

N

NNN

pz

zzC

bzbzbz

azazazazH

12

2

1

1

2

2

1

10)(

Đây là một hàm truyền với N zero và N cực. Nếu tất cả các hệ số bj bằng 0, hàm truyền

này trở thành hàm truyền của một bộ lọc FIR. Để hệ thống ổn định, tất cả các cực phải

nằm trong vòng tròn đơn vị.

Các bộ lọc IIR có thể được thực hiện theo các cấu trúc sau:

1. Dạng trực tiếp 1

Hình 15. Thực hiện bộ lọc IIR dạng trực tiếp 1

Khi thực hiện ở dạng này, một bộ lọc bậc N cần dùng 2N khối làm trễ.

2. Dạng trực tiếp 2 (Dạng chính tắc)

Đây là một trong những cấu trúc thường được sử dụng. Nó chỉ cần một nửa số khối

trễ so với dạng trực tiếp 1.

Đặt )(

)()(

zD

zXzU trong đó D(z) là mẫu số của hàm truyền bộ lọc IIR.

Khi đó:

N

N zazazaazU

zUzNzXzD

zNzY

2

2

1

10)((

)()()()(

)()(

với N(z) là tử số của hàm truyền.

Và:

)1)(()()()( 2

2

1

1

N

N zbzbzbzUzDzUzX

Biến đổi Z ngược ta sẽ có:

Page 28: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

28

)()2()1()()(

)()2()1()()(

210

21

Nnuanuanuanuany

Nnubnubnubnxnu

N

N

Thực hiện dưới dạng sơ đồ khối:

Hình 16. Thực hiện bộ lọc IIR dạng trực tiếp 2

3. Dạng trực tiếp 2 chuyển vị

Dạng trực tiếp 2 chuyển vị là một biến thể của dạng trực tiếp 2 và cần cùng số khối

trễ. Các bước sau chuyển một bộ lọc từ dạng trực tiếp 2 sang dạng chuyển vị:

a. Đảo hướng tất cả các nhánh

b. Đổi đầu vào với đầu ra

c. Vẽ lại sơ đồ sao cho đầu vào ở bên trái và đầu ra ở bên phải

Hình 17. Thực hiện bộ lọc IIR dạng trực tiếp 2 chuyển vị

4. Dạng cascade các tầng bậc 2

Hàm truyền trên có thể được phân tích thành tích các hàm truyền bậc 1 hoặc bậc 2

như sau:

)()()()( 21 zHzHzCHzH r

Cấu trúc nối tiếp (cascade) này được vẽ như sau:

Page 29: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

29

Hình 18. Cấu trúc cascade của bộ lọc IIR

Hàm truyền toàn bộ có thể được biểu diễn bằng sự ghép cascade các hàm truyền. Đối

với mỗi phần, dạng trực tiếp 2 hoặc chuyển vị của nó có thể được sử dụng. Hàm

truyền H(z) dưới dạng cascade các hàm truyền bậc hai có thể viết như sau:

2/

12

2

1

1

2

2

1

10

1)(

N

i ii

iii

zbzb

zazaazH

Hình sau vẽ một bộ lọc IIR bậc 4 dưới dạng cascade của hai phần bậc 2.

Hình 19. Bộ lọc IIR bậc 4 với 2 phần bậc 2 dạng trực tiếp 2

5. Dạng song song

Hàm truyền bộ lọc IIR cũng có thể được biểu diễn như sau (bằng phương pháp khai

triển phân số từng phần):

)()()()( 21 zHzHzHCzH r

Cấu trúc song song này có thể vẽ như sau:

Hình 20. Cấu trúc song song của bộ lọc IIR

Page 30: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

30

5. Chuẩn bị thí nghiệm

1. Trình bày tóm tắt các bước thiết kế một bộ lọc IIR bằng SPTool của MATLAB. Có

mấy loại bộ lọc IIR trong SPTool? Hãy liệt kê.

2. Hãy phân biệt đặc điểm của đáp ứng tần số của các loại bộ lọc Butterwork,

Chebyshev 1, Chebyshev 2 và Elliptic.

3. Cho một hệ thống có hàm truyền như sau:

22 25.01

4

25.01

5)(

zzzH

a. Hãy vẽ cách thực hiện dạng trực tiếp (direct form) của hệ thống.

b. Hãy vẽ cách thực hiện dạng chính tắc (canonical form) của hệ thống.

c. Hãy vẽ cách thực hiện dạng ghép nối tiếp các tầng bậc hai (cascade form) của

hệ thống.

4. Tóm tắt các bước sẽ làm để thực hiện các phần thí nghiệm sau.

6. Tiến hành thí nghiệm

6.1 Thực hiện bộ lọc IIR dạng ghép cascade các tầng bậc 2

Trong thí nghiệm này, chúng ta sẽ thực hiện một bộ lọc IIR trên kit C6713 DSK, sử

dụng cấu trúc ghép cascade các phần bậc 2. Chúng ta sử dụng phương trình sau ứng với

mỗi tầng:

)()2()1()()(

)()2()1()()(

210

21

Nnuanuanuanuany

Nnubnubnubnxnu

N

N

Trước hết, hãy thực hiện theo từng bước ví dụ đơn giản sau. Sau đó, hãy tự thực hiện

các bộ lọc IIR khác theo yêu cầu.

Ví dụ : Thiết kế một bộ lọc IIR chắn dải bậc 10 bằng phương pháp Elliptic với tần số

trung tâm 1750 Hz, tần số lấy mẫu 8 kHz, tần số cắt 1700 và 1800 Hz, độ gợn dải chắn

và dải thông tương ứng là 60dB và 1dB. Thực hiện nó trên kit C6713 DSK dạng ghép

cascade các phần bậc 2. Kiểm chứng bộ lọc đã thực hiện.

Trong ví dụ này có 3 phần chính cần phải thực hiện:

1. Thiết kế bộ lọc IIR: kết quả của phần này là có được các hệ số của tử số và mẫu

số của hàm truyền bộ lọc. Các hệ số này sẽ được chuyển thành một ma trận trong

đó mỗi hàng biểu diễn cho một tầng bậc hai (second-order section).

2. Thực hiện bộ lọc lên trên kit C6713 DSK: Sử dụng kết quả thu được từ phần thiết

kế, viết chương trình thực hiện mạch lọc lên kit. Chương trình sẽ đọc từng mẫu

dữ liệu vào và tiến hành giải thuật xử lý mẫu để tính ngõ ra.

3. Kiểm tra bộ lọc đã thực hiện: Trong phần này, bộ lọc đã thực hiện trên kit sẽ

được kiểm tra xem có đáp ứng yêu cầu đặt ra hay không. Chúng ta sẽ sử dụng

một máy phát sóng để tạo tín hiệu ngõ vào và quan sát tín hiệu ngõ ra của bộ lọc

khi thay đổi tín hiệu ngõ vào.

Page 31: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

31

Thiết kế bộ lọc

1. Sử dụng công cụ SPTool trong MATLAB để thiết kế bộ lọc trên với phương pháp

Elliptic. Lưu ý: Đối với bộ lọc IIR chắn dải và thông dải, bậc được thể hiện

trên MATLAB bằng số phần bậc 2, tức là bằng một nửa bậc của bộ lọc thực.

2. Lưu bộ lọc đã thiết kế với tên là bs1750 rồi xuất ra workspace của MATLAB.

3. Từ các hệ số tử và mẫu ở trên, ta sẽ chuyển thành dạng các phần bậc hai bằng các

lệnh sau:

>> [z,p,k] = tf2zp(bs1750.tf.num, bs1750.tf.den)

>> sos = zp2sos(z,p,k)

Ma trận sos trong MATLAB như sau:

LLLLL aabbb

aabbb

aabbb

sos

21210

2212221202

2111211101

1

1

1

trong đó b0i, b1i, b2i là các hệ số tử số hàm truyền của phần bậc 2 thứ i và 1, a1i, a2i là

các hệ số mẫu số hàm truyền của phần bậc 2 thứ i.

Thực hiện bộ lọc

Bộ lọc này được thực hiện trên kit bằng chương trình sau (viết bằng ngôn ngữ C)

//IIR.c IIR filter using cascaded Direct Form II

//Coefficients a's and b's correspond to b's and a's from MATLAB

#include "DSK6713_AIC23.h" //codec-DSK support file

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate

#include "coefficients.h" //BS @ 1750 Hz coefficient file

short dly[stages][2] = {0}; //delay samples per stage

interrupt void c_int11() //ISR

{

short i, input;

int un, yn;

input = input_sample(); //input to 1st stage

for (i = 0; i < stages; i++) //repeat for each stage

{

un=input-((b[i][0]*dly[i][0])>>15)-

((b[i][1]*dly[i][1])>>15);

yn=((a[i][0]*un)>>15)+((a[i][1]*dly[i][0])>>15)+

((a[i][2]*dly[i][1])>>15);

dly[i][1] = dly[i][0]; //update delays

dly[i][0] = un; //update delays

input = yn; //intermed out->in to next stage

}

output_sample((short)yn); //output final result for time n

return; //return from ISR

}

Page 32: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

32

void main()

{

comm_intr(); //init DSK, codec, McBSP

while(1); //infinite loop

}

Trong chương trình này, stages là số tầng của bộ lọc (số phần bậc 2). Ma trận a và b

tương ứng chứa các hệ số của tử số và mẫu số của các phần bậc 2. Lưu ý: a và b trong

chương trình này ứng với b và a trong ma trận sos của MATLAB. Giá trị của

stages, ma trận a, ma trận b được khai báo trong tập tin coefficients.h. Tập tin này được

include vào nhờ chỉ dẫn #include. Như vậy, khi muốn thay đổi bộ lọc, chỉ cần thay đổi

nội dung của tập tin coefficients.h.

Nội dung của tập tin coefficients.h có dạng như sau:

//coefficients.cof coefficient file

#define stages 5 //number of 2nd-order stages

int a[stages][3]= { //numerator coefficients

{27940, -10910, 27940}, //a10, a11, a12 for 1st stage

{32768, -11841, 32768}, //a20, a21, a22 for 2nd stage

{32768, -13744, 32768}, //a30, a31, a32 for 3rd stage

{32768, -11338, 32768}, //a40, a41, a42 for 4th stage

{32768, -14239, 32768} };

int b[stages][2]= { //*denominator coefficients

{-11417, 25710}, //b11, b12 for 1st stage

{-9204, 31581}, //b21, b22 for 2nd stage

{-15860, 31605}, //b31, b32 for 3rd stage

{-10221, 32581}, //b41, b42 for 4th stage

{-15258, 32584} }; //b51, b52 for 5th stage

Tập tin này khai báo một bộ lọc có 5 tầng bậc 2. Giá trị của các phần tử của a và b thu

được từ việc thiết kế bộ lọc ở trên. Lưu ý: a và b trong chương trình này ứng với b

và a trong ma trận sos của MATLAB.

Chương trình trên được thực hiện có sử dụng ngắt. Khi có xung lấy mẫu (tần số ở đây

là 8 KHz), trình phục vụ ngắt c_int11( ) được gọi, đọc mẫu vào và thực hiện giải thuật

xử lý mẫu để tính ngõ ra. Phần lặp của đoạn mã trong chương trình được thực hiện

stages lần với mỗi giá trị của n. Đối với tầng đầu tiên, x(n) là mẫu mới nhận vào. Đối

với các tầng tiếp theo, x(n) là ngõ ra của tầng trước đó.

Các giá trị dly[i][0] và dly[i][1] tương ứng với các delay u(n – 1) và u(n – 2) ở tầng thứ

i.

Do các hệ số a và b nhận được từ quá trình thiết kế là khá nhỏ, chúng ta sẽ nhân nó với

215

. Mẫu ra sau khi xử lý được chia lại cho 215

bằng cách dịch phải 15 bit (trong hàm

output_sample(yn >> 15)). Việc nhân các hệ số với 215

cũng là do bộ xử lý sẽ lượng tử

hóa các hệ số với một số lượng bit hữu hạn và việc nhân lên sẽ giảm đi sai số.

Hãy làm theo các bước sau để hoàn thành ví dụ này:

1. Nếu CCS chưa chạy, hãy khởi động nó. Sau khi kết nối với kit, hãy mở project

IIR.pjt có sẵn trong thư mục C:\\CCStudio_v3.1\myprojects\IIR.

Page 33: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

33

2. Trong cửa sổ Project View, tab File View, hãy mở tập tin coefficients.h (trong

phần Include). Hãy cập nhật tập tin này với các giá trị thu được trong phần thiết

kế ở trên, sau khi nhân chúng với 215

>> sos = sos*2^15

3. Hãy dịch lại chương trình và nạp lên kit C6713 và chạy chương trình

Đánh giá kết quả thực hiện

1. Mở nguồn của máy phát sóng. Tạo một tín hiệu hình sine từ máy phát sóng và

quan sát dạng sóng ngõ ra. Thay đổi tần số của tín hiệu vào và hãy xác định tần số

cắt 3-dB của bộ lọc.

Sau khi đã thực hiện ví dụ trên, hãy áp dụng những gì đã học để thực hiện các thí

nghiệm sau. Với mỗi bài thí nghiệm, hãy đưa đáp ứng tần số của bộ lọc vào trong bài

báo cáo.

(Hướng dẫn: nêu sao chép thư mục IIR đã có thành một thư mục với tên khác và thực

hiện trên thư mục mới này ứng với từng bộ lọc).

1. Thiết kế một bộ lọc IIR thông thấp thuộc loại Chebyshev 2 có các thông số như

sau:

a. Bậc bộ lọc: 10

b. Cạnh dải dải chắn: 1.6 KHz.

c. Độ gợn dải chắn: 60 dB

d. Tần số lấy mẫu: 8 kHz.

Thực hiện bộ lọc lên trên kit và kiểm tra kết quả.

2. Thiết kế bộ lọc IIR thông dải thuộc loại Chebyshev 2 với các thông số như sau:

a. Bậc bộ lọc: 36 (Matlab hiển thị là 18)

b. Tần số cắt dải chắn: 1600 và 2400 Hz

c. Độ gợn dải chắn 100 dB.

d. Tần số lấy mẫu: 8 kHz.

Thực hiện bộ lọc và kiểm tra kết quả.

6.2 Tạo hai tone bằng cách sử dụng hai phương trình sai phân bậc 2

Trong thí nghiệm này, chúng ta sẽ tạo và cộng hai tone bằng phương pháp phương trình

sai phân. Tín hiệu ra cũng được lưu trong bộ nhớ và được vẽ bằng CCS. Phương trình

sai phân dùng để tạo một sóng hình sine là

)2()1()( nynAyny

trong đó:

Ty

Ty

TA

2sin2

sin1

cos2

với hai điều kiện ban đầu, y(-1) và y(-2), ω=2f và mskHzF

TS

125.08

11 là chu kỳ

lấy mẫu. Hệ số A của phương trình sai phân, cùng với hai điều kiện đầu, xác định tần

số được tạo ra.

a. Sử dụng biến đổi Z, hãy chứng minh rằng y(n) = sin(nωT)

Page 34: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

34

b. Tính A, y(-1) và y(-2) cần thiết để tạo ra một sóng sine có tần số 1.5kHz?

2kHz?

c. Hãy chạy chương trình Code Composer Studio (CCS) và mở project

two_tones.pjt trong thư mục C:\CCStudio_v3.1\myprojects\two_tones. Hãy mở

tập tin nguồn của chương trình two_tones.c. Nội dung của tập tin này như sau:

//two_tones.c Generates/adds two tones using difference

//equations

#include "DSK6713_AIC23.h" //codec-DSK support file

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate

short sinegen(void); //for generating tone

short output; //for output

short sinegen_buffer[256]; //buffer for output data

const short bufferlength = 256; //buffer size for plot with

CCS

short i = 0; //buffer count index

short y1[3] = {0,-15137,-11585};//y1(0),y1(-1),y1(-2) for

1.5kHz

const short A1 = 12540; //A1 = 2coswT scaled by 2^14

short y2[3] = {0,-16384,0}; //y2(0),y2(-1),y2(-2) for 2kHz

const short A2 = 0; //A2 = 2coswT scaled by 2^14

interrupt void c_int11() //ISR

{

output = sinegen(); //out from tone generation

function

sinegen_buffer[i] = output; //output into buffer

output_sample(output); //output result

i++; //increment buffer count

if (i == bufferlength)

i = 0; //if buffer count = size of

buffer

return; //return to main

}

short sinegen() //function to generate tone

{

y1[0] =((y1[1]*A1)>>14)-y1[2]; //y1(n)= A1*y1(n-1)-y1(n-2)

y1[2] = y1[1]; //update y1(n-2)

y1[1] = y1[0]; //update y1(n-1)

y2[0] =((y2[1]*A2)>>14)-y2[2]; //y2(n)= A2*y2(n-1)-y2(n-2)

y2[2] = y2[1]; //update y2(n-2)

y2[1] = y2[0]; //update y2(n-1)

return (y1[0] + y2[0]); //add the two tones

}

void main()

{

comm_intr(); //init DSK, codec, McBSP

while(1); //infinite loop

}

Mảng y1[3] chứa các giá trị của y1(0), y1(-1) và y1(-2) để tạo tone có tần số

1.5kHz, và mảng y2[3] chứa các giá trị của y2(0), y2(-1) và y2(-2) để tạo tone

có tần số 2kHz. Hàm sinegen() sử dụng phương trình sai phân bậc hai để tạo

mỗi tone, sau đó cộng chúng lại.

Page 35: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

35

d. Dịch và chạy chương trình trên kit. Kiểm chứng rằng tín hiệu ra là tổng của

hai tone có tần số 1.5kHz và 2kHz.

e. Các mẫu tín hiệu ra cũng được lưu trong một vùng nhớ đệm. Hãy sử dụng

CCS để vẽ phổ biên độ FFT của tín hiệu ra. Lưu ý địa chỉ bắt đầu của vùng

đệm này là sinegen_buffer.

f. Kỹ thuật này có thể được dùng để tạo tín hiệu DTMF (Dual – tone

multifrequency). Hãy thử tạo và cộng hai tone có tần số 697 và 1209 Hz. Tín

hiệu DTMF này được tạo ra khi nhấn phím số 3 trên điện thoại. Vẽ phổ của

nó.

6.3 Tạo tín hiệu sine bằng một phương trình sai phân

Một tín hiệu hình sine cũng có thể được tạo ra bằng một phương trình sai phân khác:

)1()2()1()( nCxnBynAyny với B = -1.

Khi có một xung ở n = 0, x(n – 1) = x(0) = 1.

Với n = 1:

CCxByAyy )0()1()0()1( với y(0) = 0 và y(-1) = 0.

Với n ≥ 2:

)2()1()( nynAyny

Hệ số )cos( TA và )sin( TC được tính với chu kỳ lấy mẫu T = 1/Fs và tần số

mong muốn ω.

a. Trong CCS, hãy mở project sinegenDE.pjt tại thư mục có đường dẫn

C:\CCStudio_v3.1\myprojects\sinegenDE

b. Hãy mở tập tin nguồn chính sinegenDE.c. Biên dịch chương trình và chạy.

Xác định tần số của tín hiệu ra.

c. Tính A và y[3] để tạo một tone có tần số 1kHz. Sau đó hãy hiệu chỉnh project

và dịch lại. Kiểm tra tín hiệu ra có phải là tone có tần số 1kHz không?

Page 36: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

36

BÀI 5: THỰC HIỆN CÁC HỆ THỐNG ỨNG DỤNG TRÊN KIT

C6713 DSK

1. Mục đích thí nghiệm

1. Làm quen với các thiết kế ứng dụng thực tế

2. Nghiên cứu, phân tích thiết kế để làm nền tảng cho các hệ thống lớn hơn.

2. Thiết bị thí nghiệm

STT Tên thiết bị Số lượng

01 Máy vi tính 01

02 Kit C6713 DSK 01

03 Bộ dây nối tín hiệu 01

3. Giới thiệu

Trong các bộ lọc FIR và IIR thông thường, các thông số xác định đặc tính của bộ lọc

được giả sử là đã biết. Chúng có thể thay đổi theo thời gian nhưng tính chất của sự thay

đổi này xem như đã biết. Trong nhiều vấn đề thực tế, các thông số này hầu hết là không

chắn chắn do thiếu các dữ liệu thử trước. Vài thông số có thể thay đổi theo thời gian

nhưng không thể dự đoán được cách thay đổi. Trong các trường hợp này, một bộ lọc có

thể tự thích nghi với sự thay đổi sẽ là thích hợp nhất. Các hệ số của bộ lọc thích nghi

được điều chỉnh để bù cho sự thay đổi của tín hiệu vào, tín hiệu ra hoặc thông số của hệ

thống. Một bộ lọc thích nghi rất hữu ích khi có sự không chắc chắn về đặc tính của tín

hiệu hoặc khi các đặc tính thay đổi.

Một bộ lọc rất đơn giản nhưng rất mạnh là bộ kết hợp thích nghi tuyến tính (linear

adaptive combiner), thực chất là một bô lọc FIR thích nghi. Tiêu chuẩn trung bình bình

phương cực tiểu LMS (Least Mean Squares) là một giải thuật tìm kiếm được sử dụng để

điều chỉnh các hệ số của bộ lọc.

4. Cơ sở lý thuyết

Hầu hết các dạng thích nghi có thể được mô tả bởi cấu trúc như sau:

Hình 21. Cấu trúc bộ lọc thích nghi cơ bản

Đây là một cấu trúc bộ lọc thích nghi cơ bản trong đó ngõ ra y của bộ lọc được so sánh

với một tín hiệu mong muốn d để tạo ra một tín hiệu sai số e, được hồi tiếp trở lại bộ lọc.

Tín hiệu sai số này là đầu vào của giải thuật thích nghi để thay đổi bộ lọc sao cho thỏa

mãn một tiêu chuẩn hoặc một quy luật xác định trước.

Các hệ số của bộ lọc thích nghi được điều chỉnh, hoặc được tối ưu, sử dụng giải thuật

LMS dựa trên tín hiệu sai số. Ở đây, chúng ta chỉ thảo luận giải thuật tìm kiếm LMS với

Page 37: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

37

một bộ lọc FIR mặc dù có vài phương pháp thực hiện lọc thích nghi. Ngõ ra của bộ lọc

thích nghi ở hình 26 là:

1

0

N

k

k knxnwny

với nwk biểu diễn N hệ số của bộ lọc ở thời điểm n.

Để đánh giá chất lượng của bộ lọc, chúng ta sử dụng một phép đo lường dựa trên tín hiệu

sai số,

nyndne

Sai số này là sự sai khác giữa tín hiệu mong muốn d(n) và ngõ ra y(n) của bộ lọc. Các hệ

số nwk được điều chỉnh sao cho một hàm sai số trung bình bình phướng được cực tiểu.

Hàm này là neE 2 với E[] biểu diễn giá trị kỳ vọng. Do có N hệ số (hay trọng số), cần

tính gradient của hàm sai số trung bình bình phương. Một sự ước lượng có thể được sử

dụng bằng cách dùng gradient của e2(n), cho kết quả:

1,...,1,0 ,21 Nkknxnenwnw kk

thể hiện giải thuật LMS.

4.1 Các cấu trúc thích nghi

Một số cấu trúc thích nghi được sử dụng trong các ứng dụng khác nhau của lọc thích

nghi.

a. Lọc nhiễu (noise cancellation)

Hình 22. Cấu trúc bộ lọc thích nghi dùng để lọc nhiễu

Hình trên vẽ lại cấu trúc thích nghi ở hình 26 được chỉnh sửa cho ứng dụng lọc

nhiễu. Tín hiệu mong muốn d bị ảnh hưởng bởi nhiễu cộng không tương quan

n. Ngõ vào của bộ lọc thích nghi là một nhiễu n’ tương quan với nhiễu n.

Nhiễu n’ có thể đến từ cùng nguồn nhiễu với n nhưng bị thay đổi bởi môi

trường. Ngõ ra y của bộ lọc thích nghi được điều chỉnh theo nhiễu n. Khi điều

này xảy ra, tín hiệu sai số sẽ tiến đến tín hiệu mong muốn d. Kết quả toàn cục

là tín hiệu sai số này chứ không phải ngõ ra y của bộ lọc thích nghi. Nếu d

không tương quan với n, chiến thuật là làm tối thiểu E(e2)

b. Nhận dạng hệ thống (system identification)

Hình sau vẽ một cấu trúc bộ lọc thích nghi có thể dùng để nhận dạng hoặc mô

hình hệ thống. Cùng một ngõ vào được đưa đến hệ thống cần nhận dạng song

song với một bộ lọc thích nghi. Tín hiệu sai số e là sự khác biệt giữa đáp ứng d

của hệ thống chưa biết và đáp ứng y của bộ lọc thích nghi. Tín hiệu sai số này

được hồi tiếp lại bộ lọc thích nghi và được dùng để cập nhật các hệ số của bộ

Page 38: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

38

lọc thích nghi cho đến khi y = d. Khi điều này xảy ra, quá trình nhận dạng kết

thúc và e tiến đến 0.

Hình 23. Cấu trúc bộ lọc thích nghi dùng để nhận dạng hệ thống

4.2 Bộ kết hợp thích nghi tuyến tính (Linear Adaptive Combiner)

Chúng ta sẽ xem xét một trong những cấu trúc thích nghi hữu ích nhất – bộ kết hợp

thích nghi tuyến tính. Hai trường hợp xảy ra khi sử dụng bộ kết hợp tuyến tính: (1)

nhiều ngõ vào và (2) một ngõ vào.

a. Nhiều ngõ vào

Hình 24. Bộ kết hợp tuyến tính nhiều ngõ vào

Hình trên mô tả trường hợp nhiều ngõ vào. Cấu hình bao gồm K tín hiệu vào

độc lập, mỗi ngõ vào được nhân với trọng số w(k) và được kết hợp để tạo tín

hiệu ra,

K

k

nkxnkwny0

,,

Ngõ vào có thể được biểu diễn như một vector (K+1) chiều,

TnKxnxnxnX ,,1,0

b. Một ngõ vào

Trong trường hợp 1 ngõ vào, cấu trúc trên trở thành một bộ lọc FIR (K+1) tap

với các hệ số điều chỉnh được. Mỗi ngõ vào được trì hoãn sẽ được nhân trọng

số và cộng lại để tạo ngõ ra,

K

k

knxnkwny0

,

Page 39: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

39

Hình 25. Bộ kết hợp tuyến tính thích nghi với một ngõ vào

Ngõ vào và các trọng số có thể được viết như là các vector,

T

T

nKwnwnwnW

KnxnxnxnX

,,1,0

1

4.3 Hàm mục tiêu

Trong phần trên chúng ta đã xem xét một cấu trúc của bộ lọc mà đặc tính có thể thay

đổi bằng cách điều chỉnh các trọng số. Tuy nhiên, chúng ta vẫn cần một sự đánh giá

chất lượng của bộ lọc. Hàm mục tiêu này sẽ dựa trên sai số

nyndne

Bình phương của hàm này là:

nynyndndne 222 2

chính là hàm bình phương sai số tức thời.

Bây giờ, hãy xem xét trường hợp bộ lọc chỉ có một trọng số. Ta có y(n) = w(0)x(n) và

bình phương sai số trở thành

002 2222 wnxwnxndndne

Là một hàm bậc 2 của w(0). Kỳ vọng của hàm sai số bình phương là:

002 2222 wnxEwnxndEndEneE

Nếu tín hiệu d và x là bất biến thống kê theo thời gian, các kỳ vọng của tích của d và x

là hằng số, và ta có thể viết lại:

002 22 CwBwAneE

Với A, B và C là các hằng số.

Đồ thị của hàm này theo w(0) như sau:

Page 40: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

40

Hình 26. Đường cong mục tiêu 1 trọng số

Chúng ta cần tìm giá trị của w(0) để tổi thiểu giá trị kỳ vọng của sai số trung bình bình

phương. Để tìm cực tiểu của neE 2 , đặt đạo hàm của neE 2 theo w(0) bằng 0, dẫn

đến kết quả là một điểm cực tiểu cố định:

w(0) = B/C

Trong thực tế, trọng số sẽ bắt đầu ở một giá trị ban đầu nào đó w(0,n) và được điều

chỉnh theo từng bước tiến về giá trị cực tiểu của hàm mục tiêu. Chiều dài và hướng của

bước là 2 thứ cần được xác định. Mỗi bước sẽ bao gồm việc thêm một lượng tăng nhỏ

vào w(0,n). Lưu ý rằng nếu giá trị hiện tại của w(0,n) là ở bên phải của điểm cực tiểu,

bước nhảy phải âm (nhưng đạo hàm của đường cong là dương); tương tự, nếu giá trị

hiện tại ở bên trái của cực tiểu, lượng tăng phải dương (nhưng đạo hàm là âm). Do đó

chúng ta có:

0

,01,02

dw

edEnwnw

Với β là một hằng số dương bất kỳ. Như vẽ trên hình sau, việc lặp lại công thức này sẽ

khiến w(0) di chuyển theo từng bước từ giá trị ban đầu cho đến khi đến điểm cực tiểu.

Hình 27. Tìm điểm cực tiểu theo một trọng số

Kết quả trên có thể được tổng quát cho các hệ thống có nhiều hơn một trọng số:

W(n+1) = W(n) - .grad{E[e2]}

Trong đó

TnKwnwnwnW ,,1,0

Page 41: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

41

T

Kw

P

w

P

w

PPgradeEgrad

)()1()0(}{]}[{ 2

Chúng ta có thể chứng minh rằng:

W(n+1) = W(n) + 2e(n)X(n)

Lưu ý rằng nếu e(n) tiến đến 0 thì W(n+1) = W(n) và trọng số vẫn không đổi.

5. Chuẩn bị thí nghiệm

1. Thế nào là một bộ lọc thích nghi ? Hãy kể một số ứng dụng của bộ lọc thích nghi và

vẽ cấu trúc bộ lọc thích nghi tương ứng với từng ứng dụng đó ?

2. Hãy trình bày giải thuật LMS ?

3. Tóm tắt các bước sẽ làm để thực hiện các phần thí nghiệm sau.

6. Tiến hành thí nghiệm

6.1 Bộ lọc thích nghi dùng để lọc nhiễu hình sine

Trong thí nghiệm này, một bộ lọc FIR thích nghi sẽ được thực hiện với cấu trúc trên

hình 27.

Chúng ta có một tín hiệu sine tần số 1500Hz bị ảnh hưởng bởi nhiễu cộng hình sine tần

số 312Hz. Chúng ta cần lọc nhiễu để thu tín hiệu mong muốn. Trong thí nghiệm này,

chúng ta sử dụng bộ lọc thích nghi cho mục đích đó. Một trong các ngõ vào của bộ lọc

thích nghi là tín hiệu có cộng nhiễu. Ngõ vào còn lại là tín hiệu tham khảo dạng cosine,

tần số 312Hz và tương quan với tín hiệu nhiễu hình sine ở trên.

Tín hiệu tham khảo này sẽ được lọc bởi bộ lọc FIR thích nghi 30 hệ số. Tín hiệu ra của

bộ lọc là ước lượng của tín hiệu nhiễu sine tần số 312Hz, sẽ được trừ khỏi tín hiệu có

lẫn nhiễu.

Hình 28. Sơ đồ thí nghiệm

Trong thí nghiệm này, tất cả các tín hiệu được tạo ra từ bảng. Bảng này được tạo bằng

MATLAB. Chương trình MATLAB sau được sử dụng để tạo các giá trị dữ liệu cho tín

hiệu sine(1500Hz), sine(1500Hz) + sine(312Hz) và cosine(312Hz).

%Adaptnoise.M Generates: dplusn.h (s312+s1500), refnoise.h

cos(312),and sin1500.h

for i=1:128

desired(i) = round(100*sin(2*pi*(i-1)*1500/8000)); %sin(1500)

addnoise(i) = round(100*sin(2*pi*(i-1)*312/8000)); %sin(312)

refnoise(i) = round(100*cos(2*pi*(i-1)*312/8000)); %cos(312)

Page 42: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

42

end

dplusn = addnoise + desired;

%sin(312)+sin(1500)

fid=fopen('dplusn.h','w');

%desired + noise

fprintf(fid,'short dplusn[128]={');

fprintf(fid,'%d, ' ,dplusn(1:127));

fprintf(fid,'%d' ,dplusn(128));

fprintf(fid,'};\n');

fclose(fid);

fid=fopen('refnoise.h','w');

%reference noise

fprintf(fid,'short refnoise[128]={');

fprintf(fid,'%d, ' ,refnoise(1:127));

fprintf(fid,'%d' ,refnoise(128));

fprintf(fid,'};\n');

fclose(fid);

fid=fopen('sin1500.h','w');

%desired sin(1500)

fprintf(fid,'short sin1500[128]={');

fprintf(fid,'%d, ' ,desired(1:127));

fprintf(fid,'%d' ,desired(128));

fprintf(fid,'};\n');

fclose(fid);

Chương trình này sẽ tạo 3 tập tin (trong thư mục làm việc hiện hành của MATLAB):

dplusn.h: chứa một bảng 128 – điểm để tạo tín hiệu sine tần số 1500Hz cộng với

nhiễu sine tần số 312Hz.

refnoise.h: chứa một bảng 128 – điểm để tạo tín hiệu cosine tham khảo có tần số

312Hz.

sin1500.h: chứa một bảng 128 – điểm để tạo tín hiệu sine mong muốn có tần số

1500Hz

Các tập tin này đã được tạo sẵn trong thư mục chứa project.

Sau đây, hãy tiến hành thí nghiệm theo các bước sau đây:

1. Mở Code Composer Studio. Trong CCS, hãy mở project AdaptNoise (trong thư

mục C:\CCStudio_v3.1\myprojects\AdaptNoise)

2. Mở tập tin nguồn chính adaptnoise.c và xem xét giải thuật LMS được hiện thực như

thế nào trong chương trình.

3. Hãy thiết lập các tùy chọn cần thiết và biên dịch chương trình. Sau khi quá trình

biên dịch thành công, hãy nạp chương trình lên kit DSP.

4. Quan sát ngõ ra của kit DSP (ngõ Line Out) với chương trình DSP Tool.

5. Trong CCS, hãy chạy chương trình. Chọn File Load GEL để nạp tập tin

out_type.gel. Sau đó chọn GEL Output signal Output. Một cửa sổ mới xuất

hiện với thanh trượt ở trên đó. Khi thanh trượt này ở vị trí số 1, ngõ ra là tín hiệu sai

lệch. Khi thanh trượt ở vị trí số 2, ngõ ra là tín hiệu sine mong muốn (tần số

Page 43: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

43

1500Hz) cộng với nhiễu (tần số 312Hz). Bây giờ, hãy quan sát dạng sóng ngõ ra với

thanh trượt lần lượt ở vị trí 1 và vị trí 2. Phác họa dạng sóng tương ứng.

Qua phần trên, các bạn đã thực hiện xong một bộ lọc FIR thích nghi để ứng dụng triệt

nhiễu. Hãy vận dụng kiến thức vừa học để làm bài tập nhỏ sau:

Bài tập

Chúng ta có một tín hiệu cosine tần số 2000 Hz bị xâm lấn bởi một nhiễu cũng hình

cosine với tần số 125 Hz. Giả sử để loại nhiễu, chúng ta sẽ dùng một bộ lọc thích nghi.

Hãy sử dụng tín hiệu sine có tần số 125 Hz (tương quan với nhiễu) để làm tín hiệu tham

khảo.

1. Hãy sửa chương trình MATLAB AdaptNoise.m để tạo các tín hiệu tương ứng.

2. Hãy mở CCS, biên dịch và chạy lại chương trình để kiểm chứng kết quả.

6.2 Sử dụng bộ lọc FIR thích nghi để nhận dạng một bộ lọc FIR cố định chưa biết

Trong thí nghiệm này, giả sử chúng ta có một hệ thống chưa biết cần được nhận dạng.

Chúng ta sử dụng phương pháp lọc thích nghi cho việc nhận dạng. Điều này có nghĩa là

chúng ta cần phải huấn luyện một bộ lọc thích nghi sao cho khi có cùng tín hiệu đầu

vào đi qua thì bộ lọc thích nghi này sẽ cho tín hiệu đầu ra giống như đầu ra của hệ

thống cần nhận dạng.

Trong thí nghiệm này, chúng ta sử dụng một bộ lọc FIR cố định như là hệ thống cần

nhận dạng. Chúng ta sẽ kiểm chứng rằng bộ lọc thích nghi có thể được huấn luyện để

mô hình cho hệ thống chưa biết này.

Hệ thống cần nhận dạng ở đây được chọn là một bộ lọc FIR thông dải có 55 hệ số, tần

số trung tâm là 2KHz. Các hệ số của bộ lọc này được chứa trong tập tin bp55.cof.

Một chuỗi nhiễu ngẫu nhiên được tạo ra trong chương trình và trở thành ngõ vào đồng

thời của bộ lọc chưa biết và bộ lọc FIR thích nghi. Tín hiệu này được xem như tín hiệu

huấn luyện. Quá trình thích nghi sẽ diễn ra cho đến khi tín hiệu sai số được cực tiểu

hóa. Tín hiệu sai số hồi tiếp này là sự khác biệt giữa ngõ ra của bộ lọc chưa biết và ngõ

ra của bộ lọc FIR thích nghi.

Bây giờ, hãy mở nguồn của kit và mở Code Composer Studio và thực hiện theo các

bước sau:

1. Mở project AdaptIDFIR (ở C:\CCStudio_v3.1\MyProjects\AdaptIDFIR)

2. Trong CCS, chọn File Load GEL và mở tập tin AdaptIDFIR.gel. Sau đó, trong

menu GEL, chọn OutputType Output-signal. Một hộp thoại có thanh trượt xuất

hiện. Khi thanh trượt ở vị trí 1, tín hiệu ra là đầu ra của bộ lọc thích nghi. Khi nó ở

vị trí 2, tín hiệu ra là ngõ ra của bộ lọc cố định chưa biết.

3. Hiển thị dạng sóng ra (bằng cách dùng DSP_Tool.exe). Hãy so sánh đầu ra của hệ

thống thích nghi với đầu ra của hệ thống chưa biết. Bộ lọc thích nghi có mô hình

hóa thành công bộ lọc FIR chưa biết hay không?

Bài tập

1. Hãy sửa chương trình chính (tập tin AdaptIDFIR.c) để include tập tin hệ số

bs55.cof, biểu diễn một bộ lọc FIR chắn dải 55 hệ số với tần số trung tâm 2 KHz.

Bộ lọc FIR chắn dải này được xem như hệ thống chưa biết cần nhận dạng. Hãy biên

dịch và kiểm tra kết quả.

Page 44: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

44

2. Hãy sử chương trình chính (tập tin AdaptIDFIR.c) để include tập tin hệ số lp55.cof,

biểu diễn một bộ lọc FIR thông thấp với 55 hệ số. Bộ lọc FIR này biểu diễn cho hệ

thống chưa biết cần nhận dạng. Hãy biên dịch và kiểm tra kết quả.

6.3 Sử dụng bộ lọc FIR thích nghi để nhận dạng hệ thống chưa biết, biết ban đầu bộ

lọc thích nghi được khởi tạo là một bộ lọc FIR thông dải.

Trong thí nghiệm trước, các giá trị ban đầu của các hệ số của bộ lọc FIR thích nghi

được khởi tạo bằng zero. Trong thí nghiệm này, ban đầu, các hệ số của bộ lọc FIR thích

nghi được khởi tạo bằng với các hệ số của một bộ lọc FIR thông dải có 55 hệ số, tần số

trung tâm là 3KHz, chứa trong tập tin bp3000.cof.

Bộ lọc cần nhận dạng ở đây cũng là một bộ lọc FIR thông dải 55 hệ số nhưng với tần số

trung tâm là 2KHz. Chúng ta sẽ thấy bộ lọc thích nghi sẽ thay đổi dần từ một bộ lọc

thông dải tần số trung tâm 3KHz thành một bộ lọc thông dải tần số trung tâm 2KHz.

Bây giờ, hãy mở nguồn của kit DSP. Sau đó chạy Code Composer Studio và thực hiện

theo các bước sau đây:

1. Mở project AdaptIDFIRW (trong C:\CCStudio_v3.1\MyProjects\AdaptIDFIRW).

2. Hãy biên dịch project và chạy chương trình trên kit DSP.

3. Trong CCS, chọn File Load GEL và mở tập tin AdaptIDFIR.gel. Sau đó, chọn

GELOutput Type Output-signal trên thanh menu. Một hộp thoại có thanh trượt

xuất hiện. Khi thanh trượt ở vị trí 1, tín hiệu ngõ ra là đầu ra của bộ lọc thích nghi.

Khi nó ở vị trí 2, tín hiệu ngõ ra là đầu ra của bộ lọc chưa biết.

4. Hãy quan sát dạng sóng đầu ra của bộ lọc thích nghi và bộ lọc FIR cần nhận dạng.

5. Nếu như xem tín hiệu nhiễu ngẫu nhiên ngõ vào gần như là nhiễu trắng thì ta có phổ

của tín hiệu ngõ ra sẽ có dạng của đáp ứng tần số của bộ lọc. Do đó, ta có thể quan

sát đáp ứng tần số của bộ lọc thích nghi thay đổi dần để thích nghi với bộ lọc chưa

biết bằng cách quan sát phổ biên độ của tín hiệu ngõ ra (của bộ lọc thích nghi). Hãy

thực hiện việc quan sát này trên DSP_Tool và lưu 5 hình để cho thấy quá trình thích

nghi của bộ lọc. Lưu ý: chọn File Reload program để chạy lại từ đầu quá trình

thích nghi của bộ lọc.

Bài tập

Hãy sửa chương trình chính (tập tin AdaptIDFIR.c) để include tập tin hệ số lp55.cof,

biểu diễn một bộ lọc FIR thông thấp có 55 hệ số. Bộ lọc FIR này được xem như hệ

thống cần nhận dạng. Hãy biên dịch chương trình và kiểm chứng kết quả đạt được. Hãy

lưu lại một vài hình vẽ đáp ứng tần số của bộ lọc thích nghi (trong quá trình thích nghi).

Page 45: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

45

BÀI 6: THỰC HIỆN MỘT SỐ MẠCH ĐIỀU CHẾ SỐ TRÊN

KIT C6713 DSK

1. Mục đích thí nghiệm

1. Khảo sát một số kỹ thuật điều chế số.

2. Thực hiện một số mạch điều chế số trên kit C6713.

2. Thiết bị thí nghiệm

STT Tên thiết bị Số lượng

01 Máy vi tính 01

02 Kit C6713 DSK 01

03 Máy phát song 01

04 Bộ dây nối tín hiệu 01

3. Giới thiệu

Điều chế là quá trình làm biến đổi một tín hiệu sóng mang nhằm sử dụng tín hiệu này để

mang thông tin cần truyền đi. Thông thường, một dạng sóng hình sine cao tần được sử

dụng làm sóng mang. Ba thông số của một sóng sine là biên độ, pha và tần số đều có thể

làm cho biến đổi theo tín hiệu thông tin để tạo ra tín hiệu điều chế.

Thiết bị để thực hiện điều chế được gọi là bộ điều chế (modulator) và thiết bị thực hiện

quá trình ngược lại gọi là bộ giải điều chế (demodulator). Thiết bị có thể thực hiện cả hai

quá trình gọi là modem.

Mục đích của điều chế số là để truyền một chuỗi bit trên một kênh truyền tương tự

bandpass, ví dụ như trên đường dây điện thoại (các bộ lọc giới hạn dải tần số từ 300

3400 Hz) hoặc trên một dải tần số radio. Trong khi đó, mục đích của điều chế tương tự là

truyền một tín hiệu tương tự tần số thấp, ví dụ như tín hiệu âm tần, trên một kênh truyền

tương tự bandpass.

Mục đích của các phương pháp điều chế số dải nền (baseband), còn gọi là mã hóa đường

truyền, là truyền một chuỗi bit trên một kênh truyền thông thấp (lowpass) thường là một

cặp dây đồng không bị lọc như là một bus nối tiếp hoặc là mạng LAN có dây.

Mục đích của các phương pháp điều chế xung là để truyền một tín hiệu tương tự băng hẹp

(narrowband) ví dụ như một cuộc gọi điện thoại trên một kênh truyền thông thấp băng

rộng (wideband lownpass channel) hoặc, trong một số trường hợp, như là một chuỗi bit

trên một hệ thống truyền thông số khác.

4. Cơ sở lý thuyết

4.1 Các kỹ thuật điều chế tương tự

Trong điều chế tương tự, quá trình điều chế được áp dụng liên tục theo tín hiệu thông

tin tương tự.

Các kỹ thuật điều chế tương tự thông dụng gồm:

Điều chế biên độ:

o Double - sideband modulation (DSB)

Page 46: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

46

AM modulation

Double – sideband suppressed-carrier (DSB – SC)

o Single – sideband modulation (SSB)

o Vestigial sideband modulation (VSB)

o Quadratude amplitude modulation (QAM)

Điều chế góc:

o Frequency modulation (FM)

o Phase modulation (PM)

4.2 Các kỹ thuật điều chế số

Trong điều chế số, một sóng mang tương tự được điều chế bởi một chuỗi bit của tín

hiệu thông tin. Sự thay đổi của tín hiệu sóng mang được chọn từ một số hữu hạn các ký

hiệu (symbol).

Trong PSK, một tập hợp hữu hạn các pha được sử dụng.

Trong FSK, một tập hợp hữu hạn các tần số được sử dụng.

Trong ASK, một tập hợp hữu hạn các biên độ được sử dụng.

Trong QAM, một tín hiệu cùng pha (tín hiệu I, ví dụ dạng sóng cosine) và một

tín hiệu vuông pha (tín hiệu Q, ví dụ dạng sóng sine) được điều biên với một số

lượng hữu hạn các mức biên độ (ASK). Tín hiệu thu được là kết hợp của PSK

và ASK.

Mỗi giá trị pha, biên độ hoặc tần số được gán một chuỗi bit nhị phân duy nhất.

Thông thường, mỗi pha, biên độ hoặc tần số mã hóa một số lượng bit bằng

nhau. Số bit này tạo thành một ký hiệu (symbol) được biểu diễn bởi một pha cụ

thể.

Nếu bộ ký hiệu (symbol) gồm M = 2N

symbol khác nhau, mỗi ký hiệu biểu diễn

một thông điệp gồm N bit. Nếu tốc độ ký hiệu (hay tốc độ baud) là fs symbols/s

(hoặc baud), tốc độ dữ liệu là Nfs bps.

Trong trường hợp PSK, ASK và QAM, bộ ký hiệu điều chế thường được biểu

diễn trên một giản đồ dạng chòm sao (constellation diagram), biểu diễn biên độ

của tín hiệu I trên trục X và biên độ của tín hiệu Q trên trục Y.

Các kỹ thuật điều chế số cơ bản nhất bao gồm:

Phase – shift keying (PSK)

Frequency – shift keying (FSK)

Amplitude – shift keying (ASK) và dạng thường gặp của nó là On – off keying

(OOK)

Quadratude Amplitude Modulation (QAM): một kết hợp của PSK và ASK.

Polar modulation: giống QAM, là kết hợp của PSK và ASK.

Continuous phase modulation (CPM)

o Minimum shift keying (MSK)

o Gaussian minimum – shift keying (GMSK)

Orthogonal frequency division multiplexing (OFDM) modulation

Wavelet modulation

Trellis coded modulation (TCM) hay còn gọi là trellis modulation

MSK và GMSK là các trường hợp đặc biệt của điều chế pha liên tục (CPM). OFDM

dựa trên ý tưởng của FDM nhưng sử dụng một dạng điều chế số. Chuỗi bit được chia

Page 47: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

47

thành nhiều chuỗi dữ liệu song song, mỗi chuỗi được truyền trên một sub-carrier sử

dụng các kỹ thuật điều chế số thông thường. Các sub-carrier được tổng hợp thành một

ký hiệu OFDM. OFDM được xem như một kỹ thuật điều chế do nó truyền một chuỗi

bit trên một kênh truyền sử dụng một chuỗi các ký hiệu OFDM. OFDM có thể được mở

rộng thành một phương pháp đa truy cập trong OFDMA, cho phép nhiều người dùng

chia sẻ cùng một kênh truyền vật lý bằng cách gán mỗi người dùng một sub-carrier

khác nhau.

4.3 Điều chế số dải nền (Digital baseband modulation)

Thuật ngữ điều chế số dải nền đồng nghĩa với mã hóa đường truyền (line coding), là tập

hợp các phương pháp để truyền một chuỗi bit trên một kênh truyền tương tự thông

thấp, sử dụng một số rời rạc các mức tín hiệu, bằng cách điều chế một chuỗi xung (một

sóng vuông). Các ví dụ thường gặp là unipolar, non-return-to-zero (NRZ), Manchester

và AMI (alternate mark inversion).

4.4 Các phương pháp điều chế xung

Các phương pháp điều chế xung nhằm truyền một tín hiệu tương tự băng hẹp trên một

kênh truyền thông thấp như một tín hiệu được lượng tử hai mức, bằng cách điều chế

một chuỗi xung. Một vài dạng điều chế xung cũng cho phép tín hiệu tương tự băng hẹp

được truyền như một tín hiệu số với một tốc độ bit cố định, có thể được truyền trên một

hệ thống thông tin số bên dưới, ví dụ như một vài line code. Chúng không phải là

cácdạng điều chế theo nghĩa thông thường do chúng không phải là các phương pháp mã

hóa kênh (channel coding) mà nên được xem như là mã hóa nguồn (source coding) và

trong một vài trường hợp được xem như các kỹ thuật biến đổi A/D.

Các phương pháp này bao gồm:

Pulse code modulation (PCM): điều chế xung mã

Pulse – width modulation (PWM): điều chế độ rộng xung

Pulse – amplitude modulation (PAM): điều chế biên độ xung

Pulse – position modulation (PPM): điều chế vị trí xung

Pulse – density modulation (PDM): điều chế mật độ xung

Sigma – delta modulation (DM)

Adaptive delta modulation (ADM)

Trải phổ trực tiếp (DSSS – direct-sequence spread spectrum) dựa trên điều chế PAM.

Trong bài thí nghiệm này, hai phương pháp điều chế sẽ được thực hiện là điều chế biên độ

xung (PAM) và điều chế pha (PSK).

4.5 Điều chế biên độ xung (PAM)

Điều chế biên độ xung (PAM) là một dạng điều chế tín hiệu trong đó thông tin được mã

hóa trong biên độ của một chuỗi xung. Ví dụ: một bộ điều chế 2 bit (PAM – 4) sẽ lấy 2

bit một và ánh xạ biên độ tín hiệu thành một trong bốn mức, ví dụ như -3V, -1V, 1V và

3V.

Giải điều chế được thực hiện bằng cách đọc mức biên độ của sóng mang tại mỗi chu kỳ

ký hiệu.

Hiện nay, PAM ít được sử dụng và hầu như được thay thế bởi PCM và PPM. Tất cả các

modem điện thoại nhanh hơn 300 bps sử dụng kỹ thuật QAM.

Page 48: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

48

Tuy nhiên, chuẩn giao tiếp Ethernet vẫn sử dụng PAM. Ví dụ, 100BASE-T2 Ethernet

(ở tốc độ 100Mb/s) sử dụng điều chế PAM 5 mức chạy ở tốc độ 25 megapulses/s trên 2

cặp dây dẫn. Một kỹ thuật đặc biệt được sử dụng để giảm nhiễu liên ký tự giữa các cặp

không dây. Sau đó, 1000BASE-T nâng lên sử dụng 4 cặp dây dẫn ở tốc độ 125

megapulses/s để đạt tốc độ dữ liệu 1000 Mb/s, vẫn sử dụng PAM 5 mức cho mỗi cặp

dây.

Dưới đây là sơ đồ khối của một hệ thống PAM đơn giản (bỏ qua bộ cân bằng thích nghi

và bộ phục hồi xung clock).

Hình 29. Hệ thống PAM

Chuỗi bit vào được xử lý thành các từ dài J bits. J bits này được ánh xạ thành một trong

2J mức. Ví dụ, khi J = 3 thì sẽ có 8 mức. Các mức này các đều nhau trên giản đồ

constellation và đối xứng quanh mức zero như trên hình sau:

Hình 30. Giản đồ constellation của PAM 8 mức

Tám điểm trên giản đồ này biểu diễn cho 8 mức với mỗi mức được biểu diễn bằng một

chuỗi 3 bits.

4.6 Điều chế dịch pha (PSK)

PSK là một phương pháp truyền nhận tín hiệu số trong đó pha của tín hiệu truyền đi

được thay đổi để mang thông tin. Một vài phương pháp có thể sử dụng để thực hiện

PSK, đơn giản nhất là PSK nhị phân (BPSK) chỉ sử dụng hai pha của tín hiệu: 0 và

180. Các dạng phức tạp hơn của PSK sử dụng 4 hoặc 8 pha, cho phép dữ liệu nhị phân

truyền ở tốc dộ nhanh hơn. Trong điều chế 4 pha, các pha sử dụng có thể là 0, +90, -

90 và 180; mỗi sự dịch pha có thể biểu diễn 2 bits/symbol. Trong điều chế 8 pha, các

góc pha có thể dùng là 0, +45, -45, +90, -90, +135, -135 và 180 và mỗi lần dịch

pha biểu diễn 8 bits/symbol.

Page 49: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

49

4.6.1 Điều chế pha nhị phân (BPSK)

Một kênh dữ liệu điều chế sóng mang. Một sự chuyển bit, từ 1 sang 0 hay từ 0 sang 1,

tạo ra một sự dịch pha 180 (đảo pha) của sóng mang. Do dó, sóng mang được điều

chế bởi dữ liệu.

Giải điều chế BPSK sử dụng các bước sau:

- Một bộ bình phương tạo ra một thành phần DC và một thành phần ở tần số 2fc

- Một bộ lọc thông dải để tách thành phần tần số 2fc

- Một bộ chia tần số, ngõ ra của nó được nhân với ngõ vào. Kết quả được lọc thông

thấp để thu được tín hiệu PCM.

4.6.2 Quadratude Phase Shift Keying (QPSK)

QPSK là một dạng điều chế trong đó pha được điều chế trong khi tần số và biên độ

được giữ cố định. Có 4 pha, mỗi pha cách nhau 90. Các pha này thường được gọi là

các trạng thái (state) và được biểu diễn bởi một cặp bit. Mỗi cặp bit được biểu diễn

bởi một dạng sóng cụ thể, gọi là một ký hiệu (symbol), sẽ được gửi qua kênh truyền

sau khi điều chế sóng mang. Bộ thu giải điều chế tín hiệu và nhìn ở ký hiệu khôi phục

được để xác định cặp bit nào đã được gửi đi. Điều này đòi hỏi một ký hiệu duy nhất

cho mỗi sự kết hợp của các bit dữ liệu trong một cặp. Do có tất cả 4 khả năng xảy ra

khi kết hợp các bit dữ liệu trong một cặp (00, 01, 10, 11), QPSK tạo ra 4 ký hiệu khác

nhau, mỗi ký hiệu cho mỗi cặp, bằng cách thay đổi một thành phần đồng pha (I) và

thành phần vuông pha (Q).

Hệ thống truyền QPSK sử dụng cả sóng sine và cosine làm sóng mang để truyền 2 tín

hiệu thông điệp, sI[n] và sQ[n], được gọi là tín hiệu in-phase và quadratude. Cả hai

tín hiệu này đều được khôi phục ở phía thu, cho pháp truyền dữ liệu với lượng thông

tin gấp đôi ở cùng tần số sóng mang.

5. Chuẩn bị thí nghiệm

1. Hãy vẽ hình minh họa quá trình điều chế PAM một tín hiệu hình sine và giải thích?

Hãy tìm một số ứng dụng của điều chế PAM.

2. Hãy vẽ giản đồ constellation ứng với điều chế PAM 16 mức, QAM, BPSK và QPSK

3. Phân biệt (ngắn gọn) các phương pháp điều chế xung: PAM, PCM, PPM, PWM

4. Tóm tắt các bước sẽ làm để thực hiện các phần thí nghiệm sau.

6. Tiến hành thí nghiệm

6.1 Thực hiện mạch điều chế PAM trên kit C6713 DSK

Trong thí nghiệm này, mạch điều chế PAM 4 mức, 8 mức và 16 mức sẽ được lần lượt

thực hiện trên kit DSP. Trong đó, mạch điều chế 4 mức đã được thực hiện sẵn trong

một project để giúp hiểu rõ về giải thuật thực hiện. Sau đó, sinh viên sẽ tự thực hiện

mạch điều chế PAM 8 mức và 16 mức.

Giải thuật điều chế

Mỗi mẫu vào để điều chế gồm 16 bits. Tùy vào loại điều chế PAM, một mặt nạ (mask)

thích hợp được sử dụng.

Hãy xem xét trường hợp PAM 16 mức (16-PAM). Trong trường hợp này, để biểu diễn

16 mức cần 4 bits, do đó mỗi ký hiệu sẽ có chiều dài 4 bits. Để đạt được tốc độ ký hiệu

Page 50: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

50

mong muốn, mẫu vào được chia làm các đoạn dài 4 bits. Như vậy, mỗi mẫu vào sẽ gồm

4 đoạn. Việc xử lý mẫu vào bao gồm việc áp dụng mặt nạ và dịch. Khối ký hiệu đầu

tiên nhận được bằng cách dùng mẫu vào AND với mặt nạ 0x000F để lấy 4 bit LSB

(0x000F là biểu diễn trong hệ thập lục phân của 00000000 00001111, khi AND một

mẫu với mặt nạ này, chỉ 4 bit cuối của mẫu được giữ lại, tạo thành 1 ký hiệu). Khối ký

hiệu thứ ha nhận được bằng cách dịch mẫu ban đầu sang phải 4 bit và áp dụng lại mặt

nạ. Các bước này được lặp lại cho đến khi hết chiều dài của mẫu vào và tạo ra 4 ký

hiệu.

Do mỗi ký hiệu có chiều dài 4 bit nên sẽ có tất cả 16 ký hiệu. 16 ký hiệu này được ánh

xạ thành 16 mức điện áp cách đều nhau dựa theo một bảng tra như sau:

Bảng 1. Bảng tra PAM 16 mức

Khối ký hiệu Mức điện áp (biểu diễn dạng số Hex)

0000 0x7FFF

0001 0x6EEE

0010 0x5DDD

0011 0x4CCC

0100 0x3BBB

0101 0x2AAA

0110 0x1999

0111 0x0888

1000 - 0x0889

1001 - 0x199A

1010 - 0x2AAB

1011 - 0x3BBC

1100 - 0x4CCD

1101 - 0x5DDE

1110 - 0x6EEF

1111 - 0x8000

Ví dụ, mẫu vào là 0xA52E (10100101 00101110). Khi đó, 1110 (sau khi lọc mặt nạ lấy

4 bit LSB) được ánh xạ thành mức -0x6EEF. Mỗi ký hiệu gồm 4 bit được ánh xạ lên 16

mức cách đều nhau từ -0x8000 đến 0x7FFF. Khoảng cách giữa các mức được chọn là

0x111 để có khoảng cách đều nhau.

Mức điện áp được chọn sau đó sẽ được truyền đi như một sóng vuông. Chu kỳ của sóng

vuông đạt được bằng cách xuất cùng một mức điện áp đó nhiều lần (ví dụ 12 lần) để có

thể đạt được 1 dạng sóng vuông tốt ở ngõ phát (sau khi qua bộ D/A).

Cùng một cách thực hiện của bộ phát được áp dụng cho PAM 4 mức (4-PAM) và 8

mức (8-PAM) với sự khác nhau về mặt nạ, dịch và bảng tra. Đối với 8-PAM, bit có

trọng số thấp nhất (LSB) của mẫu vào được loại bỏ để số bit còn lại (15) là một bội số

Page 51: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

51

của 3. Điều này gây tác động không đáng kể lên dạng sóng điều chế và dạng sóng khôi

phục lại.

Các bảng tra đối với bộ điều chế 4 – PAM và 8 – PAM lần lượt như sau:

Bảng 2. Bảng tra PAM 4 mức

Khối ký hiệu Mức điện áp (dạng Hex)

00 0x7FFF

01 0x2AAA

10 - 0x2AAB

11 - 0x8000

Bảng 3. Bảng tra PAM 8 mức

Khối ký hiệu Mức điện áp (dạng số Hex)

000 0x7FFF

001 0x5B6D

010 0x36DB

011 0x1249

100 - 0x1249

101 - 0x36DB

110 - 0x5B6D

111 - 0x7FFF

Chương trình thực hiện

Hãy thực hiện theo các bước sau:

1. Cấp nguồn điện cho kit và chạy chương trình Code Compose Studio trên máy

tính.

2. Mở project PAM4 ở folder C:\CCStudio_v3.1\MyProjects\PAM4\.

3. Trong cửa sổ File View, double click lên tập tin PAM4.c để mở nó ra. Đây là tập

tin chứa mã nguồn chính của chương trình. Nội dung của tập tin này như sau:

// PAM

#include "DSK6713_aic23.h"

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;

#include <math.h>

//Initialization:

int i_PAM;

int j_PAM;

int k;

int masked_value, output;

int data_4PAM[4] = {0x7FFF, 0x2AAA, -0x2AAB, -0x8000};

Page 52: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

52

int out_buffer[256];

int i=0;

interrupt void c_int11() //interrupt service routine

{

int sample_data;

if (i_PAM==96)

{

sample_data = input_sample(); //inputs data

i_PAM=0;

j_PAM=0;

}

masked_value = sample_data & 0x0003;

output = data_4PAM[masked_value];

output_sample(output);

out_buffer[i++] = output;

if (i==256)

i = 0;

j_PAM++; //repeated output counter

if (j_PAM==12)

{

j_PAM=0;

sample_data = sample_data >> 2;

}

i_PAM++;

return;

}

void main()

{

i_PAM=0;

comm_intr(); //init DSK, codec, McBSP

while(1); //infinite loop

}

Trong chương trình này, hàm main( ) đặt giá trị biến i_PAM = 0 và khởi động kit.

Sau đó sẽ thực hiện một vòng lặp vô tận với lệnh while (1).

Khi có tín hiệu xung lấy mẫu (tần số 8KHz), ngắt 11 xảy ra và trình phục vụ ngắt

c_int11( ) được gọi. Trong trình phục vụ ngắt này, dữ liệu vào được đọc vào biến

sample_data (bằng lệnh sample_data = input_sample( )). Mẫu dữ liệu này biểu

diễn ở dạng số nguyên 16 bit có dấu.

Do ở đây thực hiện điều chế PAM 4 mức, mà để biểu diễn được 4 mức thì cần 2

bit. Do đó, mẫu dữ liệu vào sẽ được chia ra làm 8 ký hiệu (symbol), mỗi ký hiệu 2

bit. Để thực hiện việc chia này, mẫu dữ liệu được AND với mặt nạ 00000000

00000011 (tức là 0x0003) để lấy 2 bit LSB của mẫu dữ liệu. 2 bit này được ánh xạ

thành 1 trong 4 mức điện áp bằng cách sử dụng bảng data_4PAM. Bảng này có 4

Page 53: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

53

giá trị ứng với 4 mức điện áp (0x7FFF, 0x2AAA, -0x2AAB, -0x8000) được khai

báo ở đầu chương trình. Mỗi symbol sẽ cho ra 1 mức điện áp. Để cho dạng sóng

xuất ra sau khi qua bộ A/D có dạng sóng vuông, mỗi mức sẽ được xuất ra 12 lần

trước khi chuyển sang mức ứng với symbol kế tiếp. Biến đếm j_PAM để đếm số

lần xuất ra cho đủ 12 lần. Như vậy, ứng với mỗi mẫu vào 16 bit, ta có 8 symbol.

Mỗi symbol sẽ xuất ra 12 lần, như vậy số lần xuất ra ứng với mỗi mẫu là 8 x 12 =

96 được thể hiện bởi biến đếm i_PAM.

Ví dụ: Mẫu vào có giá trị 0x001B (tức là 00000000 00011011). Mẫu này đầu tiên

được chứa vào biến sample_data.

- Đầu tiên: sample_data = 00000000 00011011

Sample_data AND 0x0003 = 00000000 00000011 (= 3).

data_4PAM(3) = - 0x8000 mức điện áp – 0x8000 được xuất ra 12 lần

- Tiếp theo: sample_data dịch phải 2 bit 00000000 00000110

Sample_data AND 0x0003 = 00000000 00000010 ( = 2)

data_4PAM(2) = - 0x2AAB mức điện áp -0x2AAB được xuất ra 12 lần

- Quá trình tiếp tục cho đến khi hết 16 bit của mẫu vào, tức là dịch 8 lần, mỗi

lần xuất 12 lần số lần xuất tổng cộng i_PAM = 8 x 12 = 96 lần. Sau đó sẽ

đọc vào mẫu kế tiếp và thực hiện điều chế.

Ở đây, một bộ đệm nội out_buffer có kích thước 256 mẫu được dùng để lưu lại

giá trị xuất ra nhằm phục vụ cho việc vẽ tín hiệu xuất ra bằng công cụ Plot trong

CCS (xem phần hướng dẫn vẽ đồ thị trên CCS).

4. Chọn Project Rebuild All để biên dịch chương trình.

5. Sau khi biên dịch thành công, nạp chương trình lên kit (File Load Program) và

chạy thử chương trình.

6. Mở máy phát sóng lên và quan sát dạng sóng xuất ra. Ở đây hãy quan sát theo 2

cách: (1) sử dụng Code Compose Studio để vẽ các giá trị của bộ đệm nội

out_buffer. (2) quan sát tín hiệu xuất ra ở ngõ ra Line Out của kit bằng

Oscilloscope.

7. Do ở đây sử dụng máy phát sóng, dạng sóng thay đổi liên tục nên kết quả ra khó

kiểm chứng. Hãy sửa câu lệnh sample_data = input_sample( ) thành

sample_data = 0x???? (một giá trị bất kỳ 16 bit dạng số hex) rồi biên dịch, nạp

và chạy lại chương trình.Vẽ lại dạng sóng xuất ra trong CCS. Lúc này, mẫu vào là

giá trị cố định do nhập vào và dạng sóng xuất ra sẽ dễ dàng kiểm chứng hơn.

Hãy thử một vài giá trị nhập vào và vẽ dạng sóng xuất ra.

Bài tập

Hãy chép toàn bộ Folder PAM4 sang một Folder mới và đặt tên tùy ý. Thực hiện các

bài tập sau trên folder mới để không làm ảnh hưởng đến phần đã làm.

1. Chỉnh sửa lại chương trình trên để thực hiện điều chế PAM 8 mức.

Gợi ý:

- Mỗi symbol gồm 3bits. Do mẫu vào có 16 bits, cần bỏ 1 bits LSB (bằng cách

dịch phải sample_data 1 bit) để còn lại 15 bits là bội số của 3 và mỗi mẫu sẽ

tạo ra 5 symbols.

- Mặt nạ để lấy 3 bit LSB là 00000000 00000111 (0x0007)

- Sử dụng bảng tra ứng với 8-PAM để khai báo các mức áp ra tương ứng

2. Tương tự, hãy thực hiện mạch điều chế PAM 16 mức trên kit

Page 54: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

54

Trong phần báo cáo, chỉ cần để phần mã nguồn ứng với giải thuật điều chế. Giải thích

và vẽ một vài dạng sóng điều chế thu được để kiểm chứng.

6.2 Thực hiện mạch điều chế PSK trên kit C6713

Trong bài thí nghiệm này, hai bộ điều chế PSK sẽ được thực hiện là PSK nhị phân và

QPSK.

Giải thuật điều chế

Mỗi mẫu vào được thu và lưu vào trong một vị trí nhớ, chứa 16 bits. Tùy theo kiểu điều

chế PSK (2 pha hay 4 pha), một mặt nạ thích hợp được sử dụng. Đối với BPSK, mỗi

giá trị mẫu vào được chia ra làm 16 thành phần, mỗi thành phần 1 bit; đối với QPSK,

mẫu vào được chia thành 8 dibits (mỗi dibit gồm 2 bits). Việc này đạt được bằng cách

áp mặt nạ tương ứng 0x0001 và 0x0003 lên mẫu vào. Sau đó, mẫu sẽ được dịch phải 1

bit ( BPSK) hoặc 2 bit (QPSK) và lặp lại cho đến khi hết chiều dài mẫu vào.

Sau khi cắt mẫu vào thành các đoạn như trên, các giá trị sẽ được gán cho các dạng sóng

hình sine với pha tương ứng. Trong BPSK, chỉ có 2 pha là 0 và 180 ứng với bit 0 và

bit 1. Tuy nhiên, với QPSK, chúng ta cần 4 pha (0, 90, 180 và 270) ứng với 00, 01,

11 và 10. Việc ánh xạ được thực hiện theo mã Gray (Gray code) nhằm làm cực tiểu lỗi

do nhiễu trong quá trình truyền bằng cách cực đại khoảng cách giữa các ký hiệu trên

giản dồ constellation.

Mỗi mẫu vào được biểu diễn bằng 16 bits. Mỗi mẫu sẽ gồm 16 đoạn (với BPSK) và 8

đoạn (với QPSK). Do mỗi ký hiệu được truyền bởi một hình sine tạo theo phương pháp

số bằng 4 điểm, cứ mỗi 64 mẫu ra (với BPSK) hoặc 32 mẫu ra (với QPSK), một mẫu

vào được lấy vào.

Chương trình thực hiện

Hãy thực hiện theo các bước sau:

1. Cấp nguồn điện cho kit và chạy chương trình Code Compose Studio trên máy

tính.

2. Mở project BPSK ở folder C:\CCStudio_v3.1\MyProjects\BPSK\.

3. Trong cửa số File View, double click chuột lên tập tin BPSK.c để mở ra. Đây là

tập tin chứa mã nguồn chương trình. Nội dung chương trình này như sau:

//BPSK

#include "DSK6713_aic23.h"

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;

#include <math.h>

//Initialization:

int i_BPSK;

int j_BPSK;

int k;

int masked_value, output;

int out_buffer[256];

int i=0;

//Data table for BPSK

int data_BPSK[2][4]={0, 1000, 0, -1000, //0 degree

Page 55: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

55

0, -1000, 0, 1000}; //180 degree

interrupt void c_int11() //interrupt service routine

{

int sample_data;

if (i_BPSK==64) //determines when to get new input

{

sample_data = input_sample(); //inputs data

i_BPSK=0;

j_BPSK=0;

}

masked_value = sample_data & 0x0001;

output = data_BPSK[masked_value][j_BPSK];

output_sample(output*10);

out_buffer[i++] = output*10;

if (i==256)

i = 0;

j_BPSK++; //repeated output counter

if (j_BPSK==4)

{

j_BPSK=0;

sample_data = sample_data >> 1;

}

i_BPSK++;

return;

}

void main()

{

i_BPSK=64;

j_BPSK=0;

comm_intr();

while(1); //infinite loop

}

Hàm main( ) sẽ đặt 2 biến đếm i_BPSK = 64 và j_BPSK = 0, khởi động kit và bộ

codec rồi chạy một vòng lặp vô tận. Khi có xung lấy mẫu, ngắt 11 được kích hoạt và

trình phục vụ ngắt c_int11( ) được gọi.

Trình phục vụ ngắt sẽ đọc một mẫu dữ liệu ở ngõ vào. Mẫu này được biểu diễn bằng

16 bit. Khi điều chế BPSK, mỗi symbol chỉ gồm 1 bit (để phân biệt 2 pha 0 và 180

chỉ cần 1 bit), do đó, mẫu vào sẽ được chia ra làm 16 symbol bằng cách sử dụng mặt

nạ 0x0001 để lấy bit LSB. Tùy bit này là 0 hay 1 mà xuất ra dạng sóng sine có pha

tương ứng.

Ví dụ: Mẫu vào là 0x0003 được AND với mặt nạ 0x0001 cho ra bit 1. Do đó, dạng

sóng sine xuất ra có pha 180. Ở đây, sóng sine được tạo ra bằng 4 điểm, mỗi lần

muốn xuất sóng sine, chương trình sẽ xuất ra 4 giá trị thể hiện 1 chu kỳ của sóng sine.

Page 56: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

56

Trong chương trình trên, các giá trị được khai báo trong biến data_BPSK[2][4]. Đây

là 1 mảng 2 chiều kích thước 2x4 thể hiện 2 dạng sóng sine: pha 0 là {0, 1000, 0, -

1000} và pha 180 là {0, -1000, 0, 1000}. Giá trị này thể hiện biên độ của sóng sine

trong 1 chu kỳ, tại thời điểm 0, T/4, T/2 và 3T/4 (T là chu kỳ).

Sau khi xuất ra đủ 4 điểm, mẫu vào được dịch sang phải 1 bit và lấy mặt nạ bit LSB.

Lặp lại như vậy cho đến hết chiều dài của mẫu.

Như vậy, mỗi mẫu vào 16 bit có 16 symbol, mỗi symbol sẽ tạo ra 1 chu kỳ sóng sine

gồm 4 điểm, do đó với mỗi mẫu vào, chương trình xuất ra 4 x 16 = 64 mẫu ra và biến

đếm i_BPSK giúp xác định khi nào được phép lấy mẫu vào kế tiếp.

4. Biên dịch chương trình. Nếu thành công, nạp chương trình đã biên dịch lên kit để

chạy thử.

5. Mở máy phát sóng lên và quan sát dạng sóng xuất ra. Ở đây hãy quan sát theo 2

cách: (1) sử dụng Code Compose Studio để vẽ các giá trị của bộ đệm nội

out_buffer. (2) quan sát tín hiệu xuất ra ở ngõ ra Line Out của kit bằng

Oscilloscope.

6. Do ở đây sử dụng máy phát sóng, dạng sóng thay đổi liên tục nên kết quả ra khó

kiểm chứng. Hãy sửa câu lệnh sample_data = input_sample( ) thành

sample_data = 0x???? (một giá trị bất kỳ 16 bit dạng số hex) rồi biên dịch, nạp

và chạy lại chương trình.Vẽ lại dạng sóng xuất ra trong CCS. Lúc này, mẫu vào là

giá trị cố định do nhập vào và dạng sóng xuất ra sẽ dễ dàng kiểm chứng hơn.

7. Hãy thử một vài giá trị nhập vào và vẽ dạng sóng xuất ra.

Bài tập

Hãy chép toàn bộ folder BPSK sang một folder mới và đặt tên là QPSK. Chỉnh sửa lại

chương trình để thực hiện điều chế QPSK. Sau đó biên dịch và chạy trên kit để kiểm

chứng kết quả thực hiện.

Gợi ý :

- Điều chế QPSK cần 4 pha: 0, 90, 180 và 270 nên cần khai báo 1 mảng 4 x 4:

4 sóng sine lệch pha nhau 90, mỗi sóng sine có 4 điểm. Đặt tên mảng là

data_QPSK[4][4] thay cho data_BPSK và sửa lại tên biến cho phù hợp.

- Mỗi symbol gồm 2 bit, do đó cần sử dụng mặt nạ thích hợp để lấy 2 bit LSB và

mỗi lần dịch 2 bit.

- Thay đổi biến đếm cho thích hợp vì mỗi mẫu vào chỉ gồm 8 symbols.

Trong phần báo cáo, trình bày phần mã nguồn ứng với giải thuật điều chế (phần tự

thực hiện). Giải thích những gì đã làm và vẽ một vài dạng sóng điều chế thu được để

kiểm chứng.

Page 57: Tai Lieu TN DSP TonDucThang

Tài liệu thí nghiệm Xử lý số tín hiệu

57

Tài liệu tham khảo

[1] Rulph Chassaing , Digital Signal Processing and Applications with the C6713 and 6746

DSK, John Wiley & Sons, Inc. 2005.

[2] Lê Tiến Thường, Xử lý số tín hiệu & Wavelet, Nhà xuất bản Đại học Quốc Gia TP. HCM,

2004.

[3] J. Proakis, D. Manolakis, Introduction to Digital Signal Processing, MacMillan Publisher,

1989.

[4] The Wikipedia ( http://en.wikipedia.org/wiki/ )