II- Thực hiện mạch điều chế PSK trên kit C6713 DSK
2. Điều chế QPSK
- Thực hiện hoàn toàn tương tự điều chế BPSK.
- Điều chế QPSK cần 4 pha: 0o, 90o, 180o, 270o nên cần khai báo 1 mảng 4x4: 4 sóng sine lệch pha nhau 90 o
, 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.
Do đó sửa lại tập tin BPSK.c như sau :
#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;
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 -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
}
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++; if (j_BPSK==4) { j_BPSK=0; sample_data = sample_data >> 2; } i_BPSK++; return; } void main() { i_BPSK=32; j_BPSK=0; comm_intr(); while(1); }
- 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ị h, 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 = 0x00E4 = 0x00 00 00 00 11 10 01 00
sample_data = 0xE4FF = 0x11 10 01 00 11 11 11 11
270o 180o 90o 0o 270o
sample_data = 0x1BE4 = 0b00 01 10 11 11 10 01 00
0o 90o 180o 270o 270o 180o 90o 0o
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ế.