Dưới đây là nguyên mẫu của các hàm xử lý và các dữ liệu sử dụng:
Hình 2.10 Các hàm xử lý trong khối phát OFDM
Các hàm xử lý trong phần này bao gồm:
- Hàm chuyển đổi dòng bít vào thành dòng bít giả ngẫu nhiên - Hàm điều chế QAM 16
- Hàm tính biến đổi FFT thuận và ngược
Vị trí của các hàm này trong hệ thống xử lý như trong hình 2.10. Để cho tiện, các hàm xử lý này sẽ được mô tả dần chức năng xử lý trong quá trình kiểm thử. .
Hàm Data2Symbol
Hàm này thực hiện tách dữ liệu đầu vào thành các chuỗi 4 bit phục vụ ánh xạ QAM. Với mỗi byte của mảng vào lần lượt lấy 4 bit thấp và 4 bit cao của byte đó đưa vào 2 phần tử liên tiếp trong mảng đầu ra QamSymbolIn bằng cách thực hiện phép toán AND mỗi byte này với 15 (giá trị nhị phân 00001111) và 240 (giá trị nhị phân 11110000) kết hợp với phép dịch bit.
Hàm Data2Symbol
for (k=0; k<NumDataTrans;k++) {
// phan tu dung trc chua 4 bit thap
*(QamSymbolIn+2*k) = *(DataTrans+k)&15;
// phan tu dung sau chua 4 bit cao Temp = *(DataTrans+k)& 240;
// -> hai phan tu lien tiep chua 1 data }
Hình 2.11 Hàm Data2Symbol
Có thể nói, 4 bit thấp của mỗi byte của mảng vào được chuyển thành phần thực tương ứng của ký tự, còn 4 bit cao chuyển thành phần ảo.
Như vậy sau khi chuyển đổi dòng bit thành các ký tự thì giá trị của ký tự nằm trong khoảng từ 0 đến 15 (Do các phép toán là 4 bit). Các giá trị này được coi là chỉ số và được
ánh xạ trực tiếp sang các mẫu tín hiệu QAM. Như vậy bảng QAM được sử dụng trong hàm tiếp theo sẽ có độ dài 16 phần tử. Chú ý nhận được 2 chỉ số, một cho phần thực và một cho phần ảo.
Trong quá trình ánh xạ, có sự xen kẽ về tần số: các chỉ số thực sẽ được ánh xạ đến đoạn đầu của mảng ra (tần số thấp), còn chỉ số ảo lại được ánh xạ đến phần sau (tần số cao). Ghép xen là một kỹ thuật trong truyền thông để chống lại các lỗi cụm.
Hàm QamTrans
Mảng vào là một mảng chỉ số phức mà phần thực và phần ảo của chỉ số nằm trong khoảng 0 đến 15 (ở đây vì ta sử dụng 16-QAM). Các chỉ số này sẽ được ánh xạ thành mẫu QAM tương ứng, chỉ số thực ánh xạ sang mẫu QAM ở nửa trái của mảng ra chỉ số ảo ánh xạ sang các mẫu QAM ở nửa phải. Đây chính là một kỹ thuật xen kẽ được sử dụng trong truyền thông. Giả sử mảng vào có n phần tử (chỉ số phức), thì nó chiếm 2n vị trí trong mảng ra. Bảng giá trị QAM CCHAR QamTable[16] = { { 3, 3}, { 3, 1}, { 3,-3}, { 3,-1}, {-3, 3}, {-3, 1}, {-3,-3}, {-3,-1}, { 1, 3}, { 1, 1}, { 1,-3}, { 1,-1}, {-1, 3}, {-1, 1}, {-1,-3}, {-1,-1} }; Hình 2.12 Bảng giá trị QAM
Giải thuật tính FFT thuận và ngượ
Giải thuật tính FFT hay IFFT thực ra là như nhau chỉ khác nhau ở việc sử dụng bảng lượng giác dành cho phép biến đổi thuận hay là ngược. Trong giải thuật này, mảng vào có độ dài FFT = 16, sau khi thực hiện đảo chỉ số sẽ đưa vào biến đổi nhanh FFT sử dụng thuật toán cánh bướm.
Với bộ dữ liệu vào
CFLOAT inp_buf[] ={{0.0, 0.0},{1.0, 3.0},{3.0,3.0},{-3.0,-1.0} ,{3.0,3.0},{-3.0,1.0},{1.0,-3.0},{0.0,0.0}
,{0.0,0.0},{-1.0,-1.0},{-1.0,-1.0},{3.0,1.0} ,{-3.0,-1.0},{1.0,1.0},{1.0,3.0},{0.0,0.0}};
Kết quả sau khi thực hiện
Inp_buf=[(0.12, 0.50), (0.10, 0.64), (-0.03, -0.03), (0.04, -0.07) ,(-0.50, -0.12), (-0.95, -0.10), (0.03, -0.03), (0.29, -0.82) ,(0.37, 0.00), (-0.07, 1.34), (-0.21, -0.21), (0.27, -1.20) ,(0.00, 0.12), (-0.07, -0.38), (0.21, -0.21), (0.38, 0.60)]
Để kiểm tra tính chính xác của giải thuật không thể nhẩm tính kết quả bằng tay vì phép tính IFFT khá cồng kềnh. Thay vào đó luận văn sử dụng hàm có sẵn đáng tin cậy như của Matlab để kiểm tra. Thực hiện dòng lệnh sau để kiểm tra:
>> X=[0+0i 1+3i 3+3i -3-i 3+3i -3+i 1-3i 0 0 -1-i -1-i 3+i -3-i 1+i 1+3i 0]; >> Y=ifft(X)
Kết quả nhận được là phù hợp chứng tỏ tính đúng đắn của giải thuật FFT đã cài đặt.