II- Thực hiện mạch điều chế PSK trên kit C6713 DSK
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" #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, -1000, 0, 1000};
//0 degree //180 degree interrupt void c_int11()
{
int sample_data; if (i_BPSK==64)
{
sample_data = i put sample() i_BPSK=0;
j_BPSK=0; }
masked val e = sample data & 0x0001; //masks input sample as 1-bit segments output = data_BPSK[masked_value][j_BPSK];//gets corresponding level from table outp t sample(output*10);
out b ffer[i++] = output*10; if (i==256) i = 0; j_BPSK++; if (j_BPSK==4) { j_BPSK=0; sample_data = sample_data >> 1;
[Type text] Page 46 CuuDuongThanCong.com https://fb.com/tailieudientucntt
}
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 0o 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 0o 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 độ 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.
+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
& 2’).
- Tương tự đối với PAM, sửa 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 chương
trình. Kiểm chứng kết quả thu được trên Plot của CCS.
sample_data = 0x0F0F = 0b0000 1111 0000 1111
đảo pha đảo pha đảo pha
sample_data = 0x5555 = 0b0101 0101 0101 0101
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:
sample_data = 0x9999 = 0b1001 1001 1001 1001