Thực hiện mạch điều chế PSK trên kit C

Một phần của tài liệu Tai_lieu_TN_DSP_TonDucThang (Trang 54 - 57)

BÀI 6: THỰC HIỆN MỘT SỐ MẠCH ĐIỀU CHẾ SỐ TRÊN KIT C6713 DSK

6.2 Thực hiện mạch điều chế PSK trên kit C

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.

Gii 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 thc hin

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" #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

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.

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.

U

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 phn báo cáo, trình bày phn mã ngun ng vi gii thuật điều chế (phn t

thc hin). Gii thích nhng gì đã làm và v mt vài dạng sóng điều chếthu được để

57

Một phần của tài liệu Tai_lieu_TN_DSP_TonDucThang (Trang 54 - 57)

Tải bản đầy đủ (PDF)

(57 trang)