You are on page 1of 51

[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH


TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN-ĐIỆN TỬ
--oOo--

om
BÁO CÁO THÍ NGHIỆM
.c
XỬ LÍ SỐ TÍN HIỆU ng
co
an

Nhóm: A08
th

Cù Xuân Đức 41000722


Nguyễn Khánh Hòa 41001160
g
on
du
u
cu

TP HỒ CHÍ MINH - 4/2013

[Type text] Page 1


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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


C6713 DSK
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ả
1. Thực hiện bộ lọc trên matlab:

om
.c
ng
co
an
th
g
on
du
u
cu

Sau đó dùng lệnh h=round(bs2700.tf.num*2^15) để lấy thông số nhập vào file coefficient.h của ccs.

2. Thực hiện bộ lọc :

 Mở c6713dsk:

 Kết nối CCS với KIT: Debug  Connect

[Type text] Page 2


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
 Mở tập tin project có tên FIR.pjt trong
ng
C:\Program Files\CCStudio_v3.1\myproject\FIR.
co
an
th
g
on
du

 Mở tập tin coeficients.h trong phần include mở rộng thuộc project view.
u
cu

 Nhập số liệu :
N=89, copy ma trận cof từ Array Editor ở MatLab và thay khoảng trắng
bằng dấu “,” (Bằng lệnh “Ctr + H”)

[Type text] Page 3


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

 Thiết lập các thông số trong ProjectBuild Options


 Trong thẻ Compiler

om
.c
ng
co
an
th
g
on
du
u
cu

 Trong thẻ Linker

[Type text] Page 4


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
Lúc này trong thư mục C:\Program Files\CCStudio_v3.1\MyProjects\FIR\Debug
Sẽ xuất hiện tập tin FIR.out , đây là tập tin ta dung để nạp lên KIT.
an
th

 Biên dịch: Project  Rebuild All


g
on

Sau khi CCS chạy xong :


du
u
cu

Vào File  Load Program dẫn tới file FIR.out

 Chạy chương trình Debug  Run :

[Type text] Page 5


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

 Quan sát đáp ứng của bộ lọc Graph  Time/Frequency

om
.c
ng
co
an
th
g
on
du
u
cu

Thiết lập thông số trong Graph Property Dialog như sau:

[Type text] Page 6


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
Đáp ứng như sau:
ng
co
an
th
g
on
du
u
cu

[Type text] Page 7


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

3. Kiểm tra bộ lọc vừa thiêt kế:

Kết quả khi mô phỏng trên kit:

om
.c
ng
co
an
th
g
on
du

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
u

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


cu

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ả.

Thực hiện bộ lọc trên matlab

[Type text] Page 8


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
an
th

Sau đó dùng lệnh h=round(bp1750.tf.num*2^15) để lấy thông số nhập vào file coefficient.h của ccs.
g

Đáp ứng quan sát sau khi đã nạp các giá trị cof trên CCS:
on
du
u
cu

Kết quả khi mô phỏng trên kit:

[Type text] Page 9


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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

.c
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: ng
a. Chiều dài đáp ứng xung: 81
co
b. Tần số cắt: 2200 Hz.
an

c. Giá trị của β = 4


th

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


Thực hiện bộ lọc trên matlab
g
on
du
u
cu

[Type text] Page 10


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
an
th

Sau đó dùng lệnh h=round(hp2200.tf.num*2^15) để lấy thông số nhập vào file coefficient.h của ccs.
g
on

Đáp thu được ứng trên CCS:


du
u
cu

Kết quả khi mô phỏng trên kit:

[Type text] Page 11


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
an

6.2 Một bộ lọc FIR multiband


th

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
g

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à
on

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


du

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à
u

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

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?
Thực hiện bằng matlab:

[Type text] Page 12


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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

om
.c
ng
co
an
th
g
on
du
u
cu

[Type text] Page 13


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
an
th
g
on

 Đáp ứng thu được trên CCS :


du
u
cu

[Type text] Page 14


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

2.Tạo một sóng vuông tần số 800Hz ở đầu vào bộ lọc.Hiển thị dạng song và giải thích phổ ngõ ra

om
.c
Phổ ngõ ra :
ng
(2k+1)*800Hz. Khi cho qua bộ lọc Multiband ở trên (dựa theo đáp ứng của CCS) thì chỉ cho qua tần số 2400Hz. ….
co
nhưng do hài cơ bản là 800Hz có biên độ lớn nên tuy bị suy hao nhưng ta vẫn quan sát được.• P h ổ : Giải thích dạng phổ
: Ta thấy có 2 vạch phổ là 800Hz. 2400Hz Sóng vuông 800Hz khi phân tích Fourier ta thu được các hài có tần số
800Hz.5Khz : 17 . 4000Hz. 2400Hz. các tần số còn lại bị suy hao.
an

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

Sóng vuông tần số 2.5Khz->cho thành phần hài cơ bản qua nhiều nhất.Vạch phổ là hài cơ bản ở 2.5KHz
g
on
du
u
cu

[Type text] Page 15


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Sóng vuông tần số 3.5Khz->hài cơ bản qua nhiều nhất

om
.c
ng
co
4.Phổ tín hiệu ngõ ra khi tần số tín hiệu vào là 0.5KHz,1KHz,1.5KHz, 0.5KHz
an
th
g
on
du
u
cu

(2k+1)*500Hz. Khi cho qua bộ lọc Multiband ở trên (dựa theo đáp ứng của CCS) thì chỉ cho qua tần số 2500Hz và
3500Hz. …. nhưng do hài cơ bản là 500Hz có biên độ lớn nên tuy bị suy hao nhưng ta vẫn quan sát được.• P h ổ : Giải
thích dạng phổ : Ta thấy có 3 vạch phổ là 500Hz. 2500Hz,3500Hz

1KHz

[Type text] Page 16


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
(2k+1)*1000Hz. Khi cho qua bộ lọc Multiband ở trên (dựa theo đáp ứng của CCS) thì tần số 3000Hz bị suy hao ….
nhưng do hài cơ bản là 1000Hz có biên độ lớn nên tuy bị suy hao nhưng ta vẫn quan sát được.• P h ổ : Giải thích dạng phổ
co
: Ta thấy có 2 vạch phổ là 100Hz,3000Hz

1.5KHz
an
th
g
on
du
u
cu

[Type text] Page 17


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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


C6713 DSK

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

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.

om
Thực hiện bộ lọc bằng matlab

.c
ng
co
an
th
g
on
du
u
cu

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ả

[Type text] Page 18


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Thực hiện bộ lọc bằng matlab

om
.c
ng
co
- Từ cửa sổ Command Window, ta thực hiện các lệnh sau để xuất ra ma trận sos
(Second Order Section), dùng để nạp lên KIT.
an

>> [z,p,k]=tf2zp(bp2000.tf.num,bp2000.tf.den);
th

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


>> sos = sos*2^15
g
on

sos =
1.602 3.0947 1.602 32768 3274.7 12928
du

32768 -63298 32768 32768 -3274.7 12928


32768 -51261 32768 32768 -8790.8 15119
u

32768 51261 32768 32768 8790.8 15119


cu

32768 39945 32768 32768 12349 18265


32768 -39945 32768 32768 -12349 18265
32768 32302 32768 32768 14310 21411
32768 -32302 32768 32768 -14310 21411
32768 -27364 32768 32768 -15280 24186
32768 27364 32768 32768 15280 24186
32768 -24164 32768 32768 -15730 26536
32768 24164 32768 32768 15730 26537
32768 22117 32768 32768 15963 28537
32768 -22117 32768 32768 -15963 28537
32768 -20895 32768 32768 -16162 30299
32768 20895 32768 32768 16162 30299
32768 20322 32768 32768 16437 31947
32768 -20322 32768 32768 -16437 31947

[Type text] Page 19


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Việc nhân sos với 2^15 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ố. Lệnh format short g,sos để các phần tử trong ma trận
sos hiện thị số không có dấu chấm động 5 digits.

a. Thực hiện bộ lọc lên KIT C713 DSK:


- Mở CCS lên, Connect với KIT, rồi Open Project có tên IIR.pjt có sẵn trong thư mục
C:\\CCStudio_v3.1\myprojects\IIR.
- Trong cửa sổ Project View, tab File View, mở tập tin coefficients.h(trong Includes).
- Nhập các thông số cho bộ lọc như sau :

om
.c
ng
co
an
th

- T
h
g

ực hiện biên dich chương trình : Project  ReBuild All


on

- Load file *.out : File  Load Program dẫn tới file IIR.out trong thư mục dubug.
- Chạy chương trình : Debug  Run
du

b. Kiểm tra bộ lọc đã thực hiện :


u

- Thay đổi tần số ngỏ vào để tìm tần số cắt, ta quan sát tín hiệu trên DSP_Tools.exe,
cu

quan sát tới khi biên độ cực đại giảm xuống √ lần, thu được f_cắt = 1.55 Khz.
- Kiểm tra bộ lọc với các tần số vào điều chỉnh từ dao động ký :

[Type text] Page 20


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

0.5 Khz

om
.c
ng
co
an
th
g
on
du

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:
u

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


cu

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ả.

Thực hiện bộ lọc bằng matlab

[Type text] Page 21


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
an
th

- Từ cửa sổ Command Window, ta thực hiện các lệnh sau để xuất ra ma trận sos
(Second Order Section), dùng để nạp lên KIT.
g
on

>> [z,p,k]=tf2zp(bp2000.tf.num,bp2000.tf.den);
>> sos = zp2sos(z,p,k);
du

>> sos = sos*2^15


u

sos =
cu

1.602 3.0947 1.602 32768 3274.7 12928


32768 -63298 32768 32768 -3274.7 12928
32768 -51261 32768 32768 -8790.8 15119
32768 51261 32768 32768 8790.8 15119
32768 39945 32768 32768 12349 18265
32768 -39945 32768 32768 -12349 18265
32768 32302 32768 32768 14310 21411
32768 -32302 32768 32768 -14310 21411
32768 -27364 32768 32768 -15280 24186
32768 27364 32768 32768 15280 24186
32768 -24164 32768 32768 -15730 26536
32768 24164 32768 32768 15730 26537
32768 22117 32768 32768 15963 28537
32768 -22117 32768 32768 -15963 28537
32768 -20895 32768 32768 -16162 30299
32768 20895 32768 32768 16162 30299

[Type text] Page 22


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

32768 20322 32768 32768 16437 31947


32768 -20322 32768 32768 -16437 31947

Việc nhân sos với 2^15 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ố.

c. Thực hiện bộ lọc lên KIT C713 DSK:


- Nhập các thông số cho bộ lọc như sau :
//coefficients.cof IIR bandpass coefficient file, centered at 2000 Hz
#define stages 18 //number of 2nd-order stages
int a[stages][3]={ //numerator coefficients
{1.602,3.0947, 1.602}, //a10, a11, a12 for 1st stage
{32768,-63298, 32768}, //a20, a21, a22 for 2nd stage
{32768,-51261, 32768}, //a30, a31, a32 for 3rd stage
{32768, 51261, 32768}, //a40, a41, a42 for 4th stage
{32768, 39945, 32768} ,

om
{32768,-39945, 32768},
{32768, 32302, 32768},

.c
{32768,-32302, 32768},
{32768,-27364, 32768},
{32768, 27364, 32768},
{32768,-24164, 32768},
{32768, 24164, 32768},
ng
co
{32768, 22117, 32768},
{32768,-22117, 32768},
an

{32768,-20895, 32768},
{32768, 20895, 32768},
th

{32768, 20322, 32768},


{32768,-20322, 32768} };
g

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


on

{3274.7,12928}, //b11, b12 for 1st stage


{-3274.7,12928}, //b21, b22 for 2nd stage
du

{-8790.8,15119}, //b31, b32 for 3rd stage


{8790.8, 15119}, //b41, b42 for 4th stage
{12349, 18265},
u

{-12349, 18265},
cu

{14310, 21411},
{-14310, 21411},
{-15280, 24186},
{15280, 24186},
{-15730, 26536},
{15730, 26537},
{15963, 28537},
{-15963, 28537},
{-16162, 30299},
{16162, 30299},
{16437, 31947},
{-16437, 31947}

}; //b51, b52 for 5th stage

[Type text] Page 23


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

- Chạy chương trình : Debug  Run

d. Kiểm tra bộ lọc đã thực hiện :

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

.c
Tín hiệu ra là tổng của 2 tone có tần số 1.5KHz và 2 KHz

ng
co
an
th
g
on
du
u
cu

Cộng 2 tone có tần số 697 và 1209 Hz

Y1[3]=[0,-8528,-14563]

[Type text] Page 24


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Y2[3]=[0, -13323,-15508]

A1=27979

A2=19072

om
.c
ng
co
an
th
g
on
du

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

Mở sinegenDE.c lên và chạy,tần số tín hiệu ra là 2KHz


u
cu

[Type text] Page 25


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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

.c
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?

A=2*cos(wt)=2*cos(2*pi*1000/8000)*2^14=23170 ng
co
Y(1)=sin(wt)=sin(2*pi*1000/8000)*2^14=11585

Y(2)=A*y(1)-y(0)=16384
an
th
g
on
du
u
cu

[Type text] Page 26


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

BÀI 3 : THỰC HIỆN CÁC BỘ LỌC THÍCH NGHI TRÊN KIT C6713
DSK
I – Bộ lọc thích nghi dùng để lọc nhiễu hình sine:
1. Cơ sở lý thuyết:
- Cấu trúc bộ lọc thích nghi cho khử nhiễu :
2

Tín hiệu mong muốn d, đã bị sửa đổi bởi nhiễu cộng n, không tương quan. Nhiễu n’ có thể

om
đến từ vài nguồn giống như n nhưng đã bị thay đổi bởi điều kiện môi trường. Ngỏ ra y được
thích ứng với nhiễu n, khi điều này xảy ra, tín hiệu sai số e tiến đến gần tín hiệu mong muốn
d, toàn bộ ngỏ ra là tín hiệu sai số e này.

.c
- Hai kiểu lọc chủ yếu chung nhất được dùng cho khử nhiễu là các bộ lọc FIR và các bộ lọc
IIR.
Đối với các bộ lọc FIR: ng
+ Có độ ổn định cao. Nó cũng tốt cho việc loại bỏ các tần số nào đó. Đây là ưu
co
điểm để nó được chọn trước cho các ứng dụng để thiết kế các loại khác nhau của
các hệ thống tuyến tính bất biến theo thời gian.
an

+ Bất lợi chính của kiểu lọc này là đáp ứng xung bị giới hạn trong thời gian bằng
các số nhịp hệ số tác động trong bộ lọc.
th

Đối với các bộ lọc IIR:


+ Ưu điểm chính của các bộ lọc IIR là chọn lựa rất tốt cho lọc các đỉnh tần số hẹp,
g

chúng có cả các điểm cực và các điểm 0 ở trong hàm truyền của nó. Vì vậy đáp
on

ứng xung của nó là vô hạn, nó không phụ thuộc nhiều vào các thông số bộ lọc cho
sự thực hiện kéo dài đáp ứng xung.
du

+ Bất lợi chính của các kiểu lọc này là tính không ổn định của chúng trong ứng
dụng. Vì chúng có các điểm cực ở trong hàm truyền của chúng.
2. Thực hiện bộ lọc FIR thích nghi triệt nhiễu
u

Ví dụ:
cu

 Tín hiệu mong muốn d: sine tần số 1500Hz.


 Nhiễu xâm lấn n : sine tần số 312Hz.
 Tương quan với nhiễu n’ : cosine tần số 312Hz.

Mở file Adaptnoise.m (trong C:\Program Files\CCStudio_v3.1\MyProjects\Adaptnoise bằng


MATLAB)
- Quan sát trên DSP_Tool tương ứng với vị trí thanh trượt (1&2)

[Type text] Page 27


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Tín hiệu mong muốn + nhiễu:

om
.c
ng
co
an

Yêu cầu:
th

 Tín hiệu mong muốn d: cosine tần số 2000Hz.


g

 Nhiễu xâm lấn n : cosine tần số 125Hz.


on

 Tương quan với nhiễu n’ : sine tần số 125Hz.


du

- Tạo các giá trị dữ liệu cho tín hiệu:


cosine(2000Hz), cosine(125Hz) + cosine(312Hz) và sine(312Hz).
u

Mở file Adaptnoise.m (trong C:\Program Files\CCStudio_v3.1\MyProjects\Adaptnoise bằng


cu

MATLAB)
- Mở CCS, connect với KIT và mở project Adaptnoise.pjt.
- Biên dịch và chạy chương trình.
- Mở file out_type.gel (File  Load GEL). Sau đó chọn GELOutputType Output-
signal.
- Quan sát trên DSP_Tool tương ứng với vị trí thanh trượt (1&2)

1 : Tín hiệu sai lệch (e). 2 : Tín hiệu mong muốn + nhiễu (d+n).

[Type text] Page 28


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Tín hiệu mong muốn + nhiễu:

om
.c
ng
co
an
th

Tín hiệu sai lệch:


g
on
du
u
cu

[Type text] Page 29


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Nhận xét: Ở vị trí 2 tín hiệu 2Khz lẫn nhiễu 125Hz nhấp nhô, sau khi cho qua bộ lọc thích
nghi khử nhiễu, quan sát ở vị trí 1 thì nhiễu 125Hz không còn nữa. Kết quả thực hiện đúng
với yêu cầu.

II – Bộ lọc thích nghi dùng để nhận dạng một bộ lọc chưa biết:
1. Cơ sở lý thuyết:
Cấu trúc thích nghi được dùng cho ứng dụng nhận dạng hay mô hình mẫu:

om
Cùng một tín hiệu vào, được đưa đến hai hệ thống song song là hệ thống chưa xác định và bộ

.c
lọc thích nghi. Tín hiệu sai số e là sự khác nhau giữa đáp ứng của hệ thống chưa biết d và đáp
ứng của bộ lọc thích nghi y. Tín hiệu sai số này được phản hồi về bộ lọc thích nghi và được
ng
dùng để cập nhật các hệ số cho bộ lọc cho đến khi toàn bộ ngỏ ra y = d. Khi điều này xảy ra,
hoạt động xử lý thích nghi được kết thúc, và e tiến gần đến 0. Trong sự kết hợp này, bộ lọc
co
thích nghi làm mẫu cho hệ thống chưa xác định.
an

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:
a. Hệ thống chưa biết là bộ lọc FIR chắn dải 55 hệ số(tần số trung tâm 2Khz)
th

- Mở CCS, connect với KIT và mở project AdapIDFIR.pjt.


Sửa tập tin AdapIDFIR.c (trong nhánh Source) và tập tin bs55.cof
g

-
on

- Biên dịch và chạy chương trình.


- Mở file AdaptIDFIR.gel (File  Load GEL). Sau đó chọn GELOutputType Output-
du

signal .
- Quan sát trên DSP_Tool tương ứng với vị trí thanh trượt (1&2)
u

1 : Tín hiệu đầu ra bộ lọc thích nghi. 2 : Tín hiệu ngõ ra bộ lọc chưa biết.
cu

Đầu ra của bộ lọc cố định chưa biết:

[Type text] Page 30


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
Đầu ra của bộ lọc thích nghi, quá trình đáp ứng của bộ lọc:
an
th
g
on
du
u
cu

[Type text] Page 31


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Nhận xét: Bộ lọc thích nghi có phổ tần số giống của bộ lọc chưa biết chắn dải với
tần số trung tâm 2Khz, và biên độ qua bộ lọc thích nghi bị suy giảm một phần. Bộ lọc
thích nghi đã mô hình hóa thành công bộ lọc FIR chưa biết.

b. Hệ thống chưa biết là bộ lọc FIR thông thấp 55 hệ số


- Halt chương trình lại.
- Sửa tập tin AdapIDFIR.c (trong nhánh Source
- Biên dịch và chạy lại chương trình.
- Mở file AdaptIDFIR.gel (File  Load GEL). Sau đó chọn GELOutputType Output-
signal .
- Quan sát trên DSP_Tool tương ứng với vị trí thanh trượt (1&2)
Đầu ra của bộ lọc thích nghi, quá trình đáp ứng của bộ lọc:

om
.c
ng
co
an
th
g
on
du
u
cu

[Type text] Page 32


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Đầu ra của bộ lọc cố định chưa biết:

om
.c
ng
co
an
th

Nhận xét: Bộ lọc thích nghi có phổ tần số giống của bộ lọc chưa biết thông thấp với tần số
g

cắt 2Khz, và biên độ qua bộ lọc thích nghi bị suy giảm một phần. Bộ lọc thích nghi đã mô
on

hình hóa thành công bộ lọc FIR chưa biết.


du

3. Sử dụng bộ lọc FIR thích nghi để nhận dạng một 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:
u

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
cu

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 3Khz chứa trong tập tin
bp3000.cof.
a) Bộ lọc cần nhận dạng ở đây là một bộ lọc FIR thông dải 55 ( bp55.cof) hệ số 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.

- Mở CCS, connect với KIT và mở project AdapIDFIRW.pjt.


- Sửa tập tin AdapIDFIRW.c (trong nhánh Source) .
- Biên dịch và chạy chương trình.
- Mở file AdaptIDFIR.gel (File  Load GEL). Sau đó chọn GELOutputType Output-
signal .
- Quan sát trên DSP_Tool để thấy quá trình thích nghi của bộ lọc:

[Type text] Page 33


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Bộ lọc cần nhận dạng: (vị trí 2)

om
.c
ng
co
an
th
g
on
du
u
cu

Nhận xét: Từ một bộ lọc thông dải tần số trung tâm 3Khz, sau 1 thời gian, bộ lọc
dần chuyển thành bộ lọc thông dải tần số trung tâm 2Khz.

b) Bộ lọc cần nhận dạng ở đây là một bộ lọc FIR thông thấp 55 ( lp55.cof) hệ số với tần số cắt
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 thấp tần số cắt 2KHz.

- Mở CCS, connect với KIT và mở project AdapIDFIRW.pjt.


- Sửa tập tin AdapIDFIRW.c (trong nhánh Source) .

[Type text] Page 34


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

- Biên dịch và chạy chương trình.


- Mở file AdaptIDFIR.gel (File  Load GEL). Sau đó chọn GELOutputType Output-
signal .
- Quan sát trên DSP_Tool để thấy quá trình thích nghi của bộ lọc:
Bộ lọc cần nhận dạng: (vị trí 2)

om
.c
ng
co
an
th
g
on
du
u
cu

[Type text] Page 35


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Sau đây là 4 hình quan sát sự thích nghi dần dần của bộ lọc (vị trí 1):

om
.c
ng
co
an
th
g
on
du
u
cu

[Type text] Page 36


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

BÀI 4: THỰC HIỆN MỘT SỐ MẠCH ĐIỀU CHẾ


TRÊN KIT C6713 DSK

I- Thực hiện điều chế PAM trên kit C6713 DSK


 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. Các mẫu nhập vào sẽ được AND với mặt nạ và dịch với số
lần thích hợp đến hết chiều dài chuỗi. Tương ứng với mỗi ký hiệu (symbol) trên 1 mẫu
nhập vào và loại điều chế ta có mức điện áp khác nhau, để dạng sóng xuất sau khi ra
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
symbol kế tiếp. Sau đây chúng ta sẽ đi vào cụ thể từng loại điều chế.

om
1. Điều chế PAM 4 mức

.c
- Cấp nguồn điện cho kit và chạy chương trình CCS trên máy tính.
- Mở Project PAM.pjt ở folder C:\Program Files\CCStudio_v3.1\MyProjects\PAM4
 Giải thích code: ng
+ Trong chương trình này hàm main() đặt giá trị biến i_PAM = 0 và khởi động kit. Sau đó
co
sẽ thực hiện một vòng lặp vô hạ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
an

sample_data (bằng lệnh sample_data = input_sample(), ô chú thích số 3). Mẫu dữ liệu
này biểu diễn ở dạng số nguyên 16 bits có dấu.
th

+ 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 vào sẽ được chia làm 8 ký hiệu (symbol), mỗi ký hiệu 2 bit. Để thực hiện việc chia
g

này, mẫu dữ liệu được AND với mặt nạ 0x0003 (ô chú thích số 4 )để lấy 2 bit LSB cảu
on

mẫu dữ liệu. 2 bit này được ánh xạ thành 1 trong 4 mức điện áp theo bảng sau:
Bảng tra 4 mức:
du

Khối ký hiệu Mức điện áp (dạng hex) Mức điện áp (dạng thập phân)
u

00 0x7FFF 32767
cu

01 0x2AAA 10922
10 -0x2AAB 10923
11 -0x8000 32768

4 giá trị này được khai báo ở đầu chương trình (ô chú thích số 1). Mỗi symbol sẽ cho ra 1
mức điện áp. Mỗi mức đượ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ẫu vào 16
bit, ta có 8 symbol. Mỗi symbol xuất 12 lần nên số lần xuất ra ứng với mỗi mẫu là 8x12 =
96 được thể hiện bởi biến đếm i_PAM (ô chú thích số 2).
- Biên dịch và nạp chương trình lên kit.
- Kiểm tra kết quả trên Plot của CCS.

Việc sử dụng máy phát sóng rất khó để kiểm chứng kết quả nên ta sẽ gán cho
sample_data một giá trị cụ thể 16 bit (dạng số HEX, ô chú thích số 3).

[Type text] Page 37


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

Lưu ý: thông số lựa chọn cho việc thể hiện dạng sóng như sau:

om
.c
ng
co
an
th
g
on
du
u
cu

sample_data = 0x00E4 = 0b00 00 00 00 11 10 01 00

[Type text] Page 38


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

sample_data = 0x001B = 0b00 00 00 00 00 01 10 11

om
.c
ng
co
sample_data = 0x1BE4 = 0b00 01 10 11 11 10 01 00
an
th
g
on
du
u
cu

Nhận xét : Kết quả thu được đúng với lý thuyết, tương ứng với biên độ lớn nhất là 00, âm
nhất là 11.

[Type text] Page 39


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

2. Điều chế PAM 8 mức


- Thực hiện lại tương tự như PAM 4 mức.
- Mở Project PAM.pjt ở folder C:\Program Files\CCStudio_v3.1\MyProjects\PAM4
- Sự khác biệt so với PAM 4 mức là mặt nạ, số bit dịch và bảng tra. Đối với PAM 8,
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à bội
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. Do đó số lần xuất ra ứng với mỗi mẫu là (15/3)x12 = 60.
Bảng tra 8 mức:
Khối ký hiệu Mức điện áp (dạng số Hex) Mức điện áp (dạng thập phân)
000 0x7FFF 32767
001 0x5B6D 23405
010 0x36DB 14043
011 0x 1249 4681
100 -0x1249 -4681

om
101 -0x36DB -14043
110 -0x5B6D -23405

.c
111 -0x7FFF -32767

Sửa lại tập tin PAM4.c như sau:


#include "DSK6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
ng
co
#include <math.h>
//Initialization:
int i_PAM;
an

int j_PAM;
int k;
int masked_value, output;
th

int data_4PAM[8] = {0x7FFF, 0x5B6D, 0x36DB, 0x1249, -0x1249, -0x36DB, -0x5B6D, -


g

0x7FFF};
on

int out_buffer[256];
int i=0;
du

interrupt void c_int11() //interrupt service routine


{
int sample_data;
u
cu

if (i_PAM==60) //( 5 shifts x 12 repeated outputs = 60 samples)


{
sample_data = input_sample(); //inputs data

sample_data = sample_data >>1;

i_PAM=0;
j_PAM=0;
}

masked_value = sample_data & 0x0007;

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) //checks if repetition is over

[Type text] Page 40


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

{
j_PAM=0;
sample_data = sample_data >> 3;
}
i_PAM++;

return;
}

void main()
{
i_PAM=0;

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


while(1); //infinite loop
}

- Biên dịch & nạp chương trình lên kit & kiểm tra kết quả tương tự PAM 4

sample_data = 0x8D10 = 0b100 011 010 001 000 0

om
.c
ng
co
an
th
g
on
du
u
cu

[Type text] Page 41


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

sample_data = 0x72EF = 0b011 100 101 110 111 1

om
.c
ng
co
sample_data = 0x3546 = 0b001 101 010 100 011 0
an
th
g
on
du
u
cu

Nhận xét: Kết quả thu được phù hợp với lý thuyết.

3. Điều chế PAM 16 mức


- Thực hiện lại tương tự như PAM 4 mức.

[Type text] Page 42


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

- Mở Project PAM.pjt ở folder C:\Program Files\CCStudio_v3.1\MyProjects\PAM4


- Điều chế PAM 16 mức, để biểu diễn cần 4 bit. Do đó mỗi mẫu ta có 4 symbol(16/4),
số lần xuất ra ứng với mỗi mẫu là 4x12 = 48. Mặt nạ là 0x000F để lấy 4 bit LSB của
mẫu dữ liệu.
Bảng tra 16 mức:

Khối ký hiệu Mức điện áp (dạng số Hex) Mức điện áp (dạng thập phân)
0000 0x7FFF 32767
0001 0x6EEE 28398
0010 0x 5DDD 24029
0011 0x4CCC 19660
0100 0x3BBB 15291
0101 0x2AAA 10922
0110 0x1999 6553

om
0111 0x0888 2184
1000 -0x0889 -2185
1001 -0x199A -6554

.c
1010 -0x2AAB -10923
1011 -0x3BBC -15292
1100
1101
-0x4CCD
-0x5DDE
ng -19661
-24030
co
1110 -0x6EEF -28399
1111 -0x8000 -32768
an

Sửa lại tập tin PAM4.c như sau:


th

#include "DSK6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
g
on

#include <math.h>
//Initialization:
int i_PAM;
du

int j_PAM;
int k;
int masked_value, output;
u

int data_4PAM[16] = {0x7FFF, 0x6EEE, 0x5DDD, 0x4CCC, 0x3BBB, 0x2AAA, 0x1999, 0x0888, -
cu

0x0889, -0x199A, -0x2AAB, -0x3BBC, -0x4CCD, -0x5DDE, -0x6EEF, -0x8000};

int out_buffer[256];
int i=0;

interrupt void c_int11() //interrupt service routine


{
int sample_data;
if (i_PAM==48) // (4 shifts x 12 repeated outputs)
{
sample_data = input_sample();
i_PAM=0;
j_PAM=0;
}
masked_value = sample_data & 0x000f; //masks input sample as 4-bit segments
output = data_4PAM[masked_value];
output_sample(output);
out_buffer[i++] = output;
if (i==256)
i = 0;

[Type text] Page 43


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

j_PAM++; //repeated output counter


if (j_PAM==12) //checks if repetition is over
{
j_PAM=0;
sample_data = sample_data >> 4; //shifts input to mask next segment
}
i_PAM++;

return;
}

void main()
{

i_PAM=0;
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}

om
- Biên dịch & nạp chương trình lên kit & kiểm tra kết quả tương tự PAM 4

.c
sample_data = 0x3210 = 0b0011 0010 0001 0000

ng
co
an
th
g
on
du
u
cu

[Type text] Page 44


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

sample_data = 0xFEDC = 0b1111 1110 1101 1100

om
.c
ng
sample_data = 0x9687 = 0b1001 0110 1000 0111
co
an
th
g
on
du
u
cu

Nhận xét: Kết quả thu được phù hợp với lý thuyết.

II- Thực hiện mạch điều chế PSK trên kit C6713 DSK
 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 hay 4 pha), một mặt nạ thích hợp được sử dụng. Đối với BPSK, mỗi

[Type text] Page 45


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

giá trị vào được chia ra làm 16 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 bit). 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 hết chiều dài mẫu vào.
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 1 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.
1. Điều chế BPSK
- Cấp nguồn điện cho kit và chạy chương trình CCS trên máy tính.
- Mở Project BPSK.pjt ở folder C:\Program Files\CCStudio_v3.1\MyProjects\BPSK
- Trong cửa sổ File View, mở tập tin BPSK.c, nội dung tập tin này như sau:
//BPSK
#include "DSK6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;

om
#include <math.h>
//Initialization:
int i_BPSK;

.c
int j_BPSK;
int k;
int masked_value, output;
int out_buffer[256];
int i=0; 1
ng
co
//Data table for BPSK
int data_BPSK[2][4]={0, 1000, 0, -1000, //0 degree
0, -1000, 0, 1000}; //180 degree
an

interrupt void c_int11() //interrupt service routine


{
th

int sample_data; 2
if (i_BPSK==64) //determines when to get new input
g

{
on

sample_data = input_sample(); //inputs data


i_BPSK=0;
j_BPSK=0;
du

} 3 4
masked_value = sample_data & 0x0001; //masks input sample as 1-bit segments
u

output = data_BPSK[masked_value][j_BPSK];//gets corresponding level from table


output_sample(output*10);
cu

out_buffer[i++] = output*10;
if (i==256)
i = 0;
j_BPSK++; //repeated output counter

if (j_BPSK==4) //checks if 1-bit segment was output

{ 5
j_BPSK=0;
sample_data = sample_data >> 1;
}
i_BPSK++;
return;
}

void main()
{ 2’’
i_BPSK=64; ’’
j_BPSK=0;

[Type text] Page 46


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

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


while(1); //infinite loop
}

 Giải thích code:


+ 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 o và 180o
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 (ô chú thích số 4). Tùy bit này là 0 hay 1 mà xuất ra dạng
sóng sine có pha tương ứng.
+ Trong chương trình trên, các giá trị được khai báo trong biến data_BPSK[2][4].
Đây la 1 mảng 2 chiều kích thước 2x4 thể hiện 2 dạng sóng sine: pha 0 o là {0, 1000, 0,
-1000} và pha 180o là {0, -1000, 0, 1000} (ô chú thích số1). Giá trị này thể hiện biên

om
độ của sóng sine trong 1 chu kỳ, tại thời điểm 0,T/4, T/2,3T/4 (T là chu kỳ).
+ Sau khi xuất ra đủ 4 điểm, mẫu được dịch phải 1 bit (ô chú thích số 5) và lấy mặt nạ
bit LSB. Lặp lại cho đến hết chiều dài mẫu.

.c
+ 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 4x16 = 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 (ô chú thích số 2 &
ng
2’).
- Tương tự đối với PAM, sửa lệnh sample_data = input_sample() thành sample_data
co
= 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 chương
trình. Kiểm chứng kết quả thu được trên Plot của CCS.
an
th

Lưu ý: thông số lựa chọn cho việc thể hiện dạng sóng như sau:
g
on
du
u
cu

[Type text] Page 47


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

sample_data = 0x0F0F = 0b0000 1111 0000 1111


đảo pha đảo pha đảo pha

om
.c
ng
sample_data = 0x5555 = 0b0101 0101 0101 0101
co
0 & 1 hoán đổi liên tục nên pha sẽ đảo liên tục từ phải sang trái như hình sau:
an
th
g
on
du
u
cu

sample_data = 0x9999 = 0b1001 1001 1001 1001


Lý giải kết quả tương tự, ta có hình sau:

[Type text] Page 48


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

om
.c
ng
co
2. Điều chế QPSK
an

- Thực hiện hoàn toàn tương tự điều chế BPSK.


- Điều chế QPSK cần 4 pha: 0 o, 90o, 180o, 270o nên cần khai báo 1 mảng 4x4: 4 sóng
th

sine lệch pha nhau 90o, mỗi sóng có 4 điểm. Số mẫu ra cho QPSK là 4x8 = 32. Mặt nạ
thích hợp để lấy 2 bit (biểu diễn 4 trạng thái) 0x0003, mỗi lần dịch 2 bit.
g

Do đó sửa lại tập tin BPSK.c như sau :


on

#include "DSK6713_aic23.h"
du

Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;

#include <math.h>
u

//Initialization:
int i_BPSK;
cu

int j_BPSK;
int k;
int masked_value, output;
int out_buffer[256];
int i=0;

int data_QPSK[4][4]={0, 1000, 0, -1000, //0 degree


1000, 0, -1000, 0, //90 degree
0, -1000, 0, 1000, //180 degree
-1000, 0, 1000, 0}; //270 degree

interrupt void c_int11() //interrupt service routine


{
int sample_data;

if (i_BPSK==32) //determines when to get new input


{
sample_data = input_sample(); //inputs data
i_BPSK=0;
j_BPSK=0;

[Type text] Page 49


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

masked_value = sample_data & 0x0003;


output = data_QPSK[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) //checks if 1-bit segment was output


{
j_BPSK=0;
sample_data = sample_data >> 2;
}
i_BPSK++;
return;
}

void main()
{

om
i_BPSK=32;
j_BPSK=0;

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

.c
while(1); //infinite loop
}

-
ng
Sửa lệnh sample_data = input_sample() thành sample_data = 0x???? (một giá trị
co
bất kỳ 16 bit dạng số hex) rồi biên dịch, nạp và chạy chương trình. Kiểm chứng kết
quả thu được trên Plot của CCS.
an

sample_data = 0x00E4 = 0x00 00 00 00 11 10 01 00


th

0o 270o 180o 90o 0o


g
on
du
u
cu

[Type text] Page 50


CuuDuongThanCong.com https://fb.com/tailieudientucntt
[BÁO CÁO THÍ NGHIỆM XỬ LÍ SỐ TÍN HIỆU] March 21, 2013

sample_data = 0xE4FF = 0x11 10 01 00 11 11 11 11


270o 180o 90o 0o 270o

om
.c
ng
co
sample_data = 0x1BE4 = 0b00 01 10 11 11 10 01 00
0o 90o 180o 270o 270o 180o 90o 0o
an
th
g
on
du
u
cu

Nhận xét: Kết quả thu được chưa đáp ứng được thực hiện theo mã Gray để giảm cực tiểu lỗi do
nhiễu trong quá trình truyền. Khi đó pha 270o ứng với 10 và 180o ứng với 11. Cần điều chỉnh
lại code điều chế.

[Type text] Page 51


CuuDuongThanCong.com https://fb.com/tailieudientucntt

You might also like