Ở chế độ này, thành phần lưu giá trị góc quay (thành phầnz) được khởi tạo bằng giá trị góc cần quay. Hướng quay tại mỗi lần lặp được quyết định sao cho giảm dần sự sai khác giữa góc quay được và góc cần quay. Cụ thể, điều kiện cho hệ phương trình CORDIC ở chế độ quay có dạng:
si = (
+1 zi ≥0
−1 zi <0 (3.22)
Thông số đầu vào của phép quay:
x0 =xin y0 =yin z0 =θ (3.23)
Thông số đầu ra của phép quay: xn= K1(xincosz0−yinsinz0) yn = K1(yincosz0+xinsinz0) zn= 0 (3.24) 3.3.2 Chế độ Vectoring
Khối CORDIC ở chế độ vector thực hiện quay vector đầu vào cho đến khi vector này trùng với trục x. Hướng quay tại mỗi lần lặp được lựa chọn sao cho thành phần
y tiến dần về 0. Điều kiện cho hệ phương trình CORDIC ở chế độ này có dạng:
si = (
+1 yi <0
−1 yi ≥0 (3.25)
Thông số đầu vào của phép quay:
x0 =xin y0 =yin z0 =zin (3.26)
Thông số đầu ra của phép quay:
xn = K1p x2in+yin2 ) yn= 0 zn=zin+ tan−1(yin xin) (3.27)
3.4 Thuật toán CORDIC cải tiến
Khối CORDIC được dùng để thực hiện phép quay Givens Rotation trên phần cứng. Với bài toán Givens Rotation, hai hàng (hoặc hai cột) của ma trận đầu vào được quay đi một góc θ. Với ma trận đầu vào có mỗi hàng (hoặc cột) chứa N phần tử thì một phép quay Givens Rotation áp dụng cho ma trận cần sử dụng N khối CORDIC. Ngoài ra, việc xác định góc quay θ được thực hiện thông qua cặp phần tử
(xk, yk), trong đó yk cần được triệt tiêu về 0. Như vậy, phép quay Givens Rotation được thực hiện trên phần cứng sử dụng khối CORDIC gồm hai bước:
• Bước 1: sử dụng một khối CORDIC ở chế độ Vectoring cho cặp phần tử(xk, yk)
với mong muốn yk được đưa về 0, từ đó xác định góc cần quay θ,
• Bước 2: sử dụng N −1 khối CORDIC ở chế độ Rotation cho các cặp phần tử còn lại, với góc quay đầu vào là θ vừa xác định.
CORDIC (ROTATION) CORDIC (VECTORING) CORDIC (ROTATION) CORDIC (ROTATION) · · · · · · CORDIC (VECTORING) Z X in [N-1:0] Y in [N-1:0] X out [N-1:0] Y out [N-1:0]
Hình 3.15: Phép quay Givens sử dụng các khối CORDIC
Theo sơ đồ trên Hình 3.15, cặp phần tử (xk, yk) trước tiên được xử lý bởi khối CORDIC - Vectoring. Tại đây, cặp (xk, yk) được quay đi một góc θ để triệt tiêu yk
về 0. Góc cần quay θ được gán cho phần tử z và trở thành đầu vào cho các khối CORDIC - Rotation. Các khối CORDIC - Rotation này có nhiệm vụ quay các cặp phần tử còn lại theo tín hiệu đầu vào z. Kết thúc quá trình tính toán, tất cả N cặp phần tử của vector đầu vào được quay đi một gócθ xác định bởi cặp phần tử(xk, yk)
ban đầu. Với cách thức thực hiện như trên, thời gian thực hiện mỗi phép quay Givens Rotation bằng hai lần thời gian thực hiện một phép toán CORDIC. Cụ thể, trong khoảng thời gian khối CORDIC - Vectoring xác định góc quay θ và quay cặp phần tử(xk, yk), các khối CORDIC - Rotation không hoạt động vì phải đợi giá trị z (chính là góc quay θ) để thực thi các phép toán. Như vậy, trong trường hợp này, năng lực phần cứng không được tận dụng triệt để, đồng thời phải có thêm các khối tính toán, xử lý cho góc quay θ.
Để gia tăng tốc độ thực hiện phép quay Givens Rotation trên phần cứng, một giải pháp được đưa ra là thực hiện quay đồng thời tất cả các cặp phần tử của vector đầu vào. Cụ thể, tại mỗi vòng lặp của thuật toán CORDIC - Vectoring, cặp phần tử (xk, yk) được quay đi một góc nhỏ nào đó dựa vào dấu của yk và chỉ số vòng lặp
i. Các tín hiệu điều khiển này đồng thời cũng được đưa vào các khối CORDIC còn lại để quay các cặp phần tử khác của vector đầu vào một góc tương tự như với cặp
(xk, yk). Kết thúc quá trình tính toán, tất cả các cặp phần tử của vector đầu vào đều được quay đi một gócθ mà không cần sử dụng đến khối tính toán góc như giải thuật ban đầu. Với giải pháp này, thời gian thực hiện mỗi phép quay Givens Rotation sẽ bằng thời gian thực hiện một phép toán CORDIC, tức tốc độ thực hiện phép quay đã được cải thiện gấp đôi. Đổi lại, ta cần thêm một khối CORDIC - Rotation nữa để thực hiện quay đồng thời toàn bộ N cặp phần tử của vector đầu vào so với kiến trúc ban đầu. Tuy nhiên, với bài toán phân tích ma trận SVD áp dụng trong máy thu TR-UWB, tốc độ thực thi là yếu tố cần được ưu tiên nhất với mong muốn đáp ứng yêu cầu xử lý ở thời gian thực. Do đó, cải tiến này là hoàn toàn phù hợp với mục tiêu đặt ra.
Hình 3.16: Sai số của phép quay CORDIC phụ thuộc vào định dạng dữ liệu và sốvòng lặp vòng lặp
Do thuật toán CORDIC được triển khai trên phần cứng, tác giả tiến hành đánh giá sự ảnh hưởng của các yếu tố định dạng dữ liệu đầu vào và số vòng lặp cần thực thi lên độ chính xác và tốc độ thực thi của thuật toán. Hình 3.16 cho thấy mối liên hệ giữa hai yếu tố này và độ chính xác của khối CORDIC trên phần cứng. Cụ thể,
m x n k # Operations per Second NSV D0 /NSV D Non-pipeline (NSV D) Pipeline (NSV D0 ) 4 x 3 10 265.957 312.499 1.174.999 20 143.678 156.249 1.087.499 8 x 4 10 147.058 208.332 1.416.664 20 86.206 104.166 1.208.331 16 x 8 10 49.407 89.284 1.807.127 20 31.806 44.642 1.403.559 32 x 16 10 16.005 25.986 1.623.662 20 11.563 20.832 1.801.597 64 x 32 10 4.798 6.296 1.312.277 20 3.875 6.296 1.624.524 Bảng 3.2: Số phép toán SVD/s
tác giả tiến hành mô phỏng thuật toán CORDIC với năm định dạng khác nhau cho dữ liệu đầu vào: số dấu phẩy động độ chính xác đơn (single) và kép (double), số dấu phẩy tĩnh dạng 8 bit, 8.8 bit (8 bit trước và 8 bit sau dấu phẩy) và 8.16 bit. Trong năm định dạng dữ liệu trên, dạng single và double của MATLAB khó triển khai trên phần cứng và được dùng trong mô phỏng với mục đích là tham chiếu cho các định dạng khác. Kết quả mô phỏng cho thấy định dạng dấu phẩy tĩnh với 16 bit sau dấu phẩy và 12 bit trước dấu phẩy (4 bit được thêm vào để ngăn hiện tượng tràn ở kết quả đầu ra sau mỗi vòng lặp) là thích hợp nhất để triển khai trên phần cứng. Ngoài ra, kết quả mô phỏng cho thấy khi số lượng vòng lặp lớn hơn 16, độ chính xác của khối CORDIC gần như không được cải thiện. Nguyên nhân là do giới hạn về độ phân giải của dải giá trị có thể biểu diễn được (phụ thuộc vào định dạng dữ liệu được sử dụng) không cho phép thể hiện những cải thiện về độ chính xác khi số vòng lặp vượt qua ngưỡng 16 này. Vì vậy, khi triển khai trên phần cứng, số vòng lặp tối ưu được lựa chọn là 16, tức cần 4 bit cho bộ đếm. Khi đó, mỗi phép quay Givens được thực hiện bởi khối CORDIC trong 16 xung clock.
Sơ đồ ghép nối các khối CORDIC cải tiến để thực hiện phép quay Givens Rotation được thể hiện trên Hình 3.17, theo đó, tất cả N khối CORDIC đều thực thi phép toán cùng lúc (pipeline) dựa trên tín hiệu điều khiển từ khối điều khiển (CTRL) và khối
MUX. Khối CTRL có nhiệm vụ đưa ra tín hiệu điều khiển cho mỗi bộ CORDIC và chỉ số itrong mỗi vòng lặp. Khối MUXlựa chọn một trong các tín hiệu MSB để điều khiển các khối cộng/trừ (bên trong mỗi khối CORDIC) dựa theo chỉ số đầu vào (index). Chỉ số này chỉ thị cặp phần tử (xk, yk) cần thực thi phép toán CORDIC - Vectoring, chính là cặp phần tử giữ vai trò xác định chiều quay trong mỗi vòng lặp. Với thiết kế mới này, số lượng phép toán cần để thực hiện phép quay Givens Rotation trên phần cứng được giảm đi từ30−80%so với kiến trúc ban đầu (non-pipeline) tùy vào kích thước của ma trận (Bảng 3.2) nhờ tận dụng triệt để năng lực tính toán của các khối CORDIC, đồng thời tiết kiệm tài nguyên phần cứng cần sử dụng do loại bỏ được khối tính toán và xử lý góc quay θ.
CORDIC
MUX
CTRL
CORDIC CORDIC CORDIC
X in [N-1:0] Y in [N-1:0] · · · X out [N-1:0] Y out [N-1:0] · · · MSB MSB index i/MUX ctrl ADD/SUB ctrl
Hình 3.17: Phép quay Givens sử dụng các khối CORDIC cải tiến
3.5 Kết luận chương 3
Trong chương này, tác giả đã trình bày một thuật toán máy thu mới không cần sử dụng tín hiệu dẫn đường cho máy thu TR-UWB dựa trên kĩ thuật phân tích ma trận (SVD). Đồng thời, một phương án triển khai phép phân tích SVD trên phần cứng đã được trình bày chi tiết bằng cách áp dụng thuật toán CORDIC. Các khối CORDIC tự thiết kế sử dụng những thành phần cơ bản và đơn giản nhất của FPGA như các bộ cộng, bộ dịch bit nhằm nâng cao tốc độ hoạt động và giảm độ phức tạp của máy thu. Việc áp dụng một số cải tiến cho khối CORDIC giúp nâng cao gấp đôi tốc độ xử lý, đồng thời cũng chứng minh sự khả thi khi triển khai trên phần cứng của kiến
trúc máy thu TR-UWB sử dụng thuật toán được đề xuất. Các kết quả này đã được thể hiện trong các bài báo “An Improved Blind Algorithm for Transmit-Reference UWB Receivers”, Tạp chí Khoa học và Công nghệ các trường đại học kĩ thuật số 101 năm 2014 và “Implementation of Singular Value Decomposition in Hardware", Tạp chí Khoa học và Công nghệ các trường đại học kĩ thuật số 103 năm 2014.
Chương 4
Thuật toán đồng bộ cho máy thu UWB IEEE 802.15.4a
Các chương trước đã đưa ra những phương án nhằm giải quyết Vấn đề 1 được trình bày ở chương 1 của luận án. Trong phần tiếp theo, tác giả sẽ tập trung giải quyết vấn đề còn lại: phát triển thuật toán đồng bộ tín hiệu cho máy thu UWB IEEE 802.15.4a, tiến tới việc thiết kế và chế tạo bộ xử lý băng gốc (Baseband DSP) cho máy thu trên phần cứng. Như đã đề cập ở chương 1, cho đến thời điểm hiện tại vẫn chưa có một thuật toán đồng bộ tín hiệu hoàn chỉnh cho máy thu UWB IEEE 802.15.4a. Trong chương này, tác giả sẽ đề xuất một thuật toán đồng bộ tín hiệu mới nhằm giải quyết vấn đề trên. Cụ thể, thuật toán đồng bộ dành cho máy thu không đồng bộ UWB IEEE 802.15.4a được trình bày sau đây có thể hoạt động mà không cần quan tâm việc vị trí máy thu bắt đầu nhận được tín hiệu có thuộc phần SYNC hay không. Quan trọng hơn, thuật toán mới đưa ra một cách xác định giá trị ngưỡng mà không cần sử dụng những thông tin về mức tạp âm, do đó giảm được độ phức tạp tính toán của máy thu nhờ loại bỏ khối đo đạc công suất tạp âm. Không những vậy, với cách tính toán giá trị ngưỡng mới này, máy thu chỉ cần sử dụng bộ ADC tốc độ thấp (cỡ 100MHz) thay vì phải triển khai một bộ ADC với tốc độ lấy mẫu cỡ GHz như trong [14]. Vì vậy, chi phí triển khai máy thu sẽ giảm đi đáng kể. Tuy nhiên, so với thuật toán của [14], thuật toán được phát triển trong chương này có sai số đồng bộ lớn hơn khá nhiều. Cụ thể, sai số đồng bộ mắc phải có thể lên tới một chu kì lấy mẫu (với bộ ADC tốc độ cỡ 100MHz). Tuy nhiên, đối với các ứng dụng truyền tải dữ liệu tốc độ thấp, sai lệch này không ảnh hưởng nhiều đến quá trình giải mã dữ liệu ở máy thu. Vì vậy, thuật toán mới thích hợp để phát triển các ứng dụng tốc độ dữ liệu thấp với tiêu chí tiết kiệm năng lượng và giá thành triển khai thấp như mạng sensor, điều khiển giao thông, giám sát sức khỏe,... Phần cuối của chương dành cho việc triển khai một máy thu UWB IEEE 802.15.4a trên phần cứng HDL/FPGA với trọng tâm là hai khối: đồng bộ tín hiệu sử dụng thuật toán được đề xuất và giải mã dữ liệu.
4.1 Cấu trúc khung tín hiệu IEEE 802.15.4a
Tháng 8-2007, chuẩn IEEE 802.15.4a chính thức được ra mắt, quy định cấu trúc lớp vật lý tiêu chuẩn cho các thiết bị UWB hoạt động trong mạng WPAN tốc độ thấp, trong đó định nghĩa cấu trúc của một khung tín hiệu UWB và những yêu cầu về dạng xung được phép sử dụng. Theo [31], tín hiệu UWB IEEE 802.15.4a được phát đi dưới dạng các khung tín hiệu, mỗi khung được cấu tạo gồm ba phần:
• Tiêu đề đồng bộ (Synchronization HeadeR - SHR): gồm hai đoạn mào đầu đồng bộ (SYNChronization preamble - SYNC) và giới hạn khung (Start of Frame Delimiter - SFD), được phát đi đầu tiên và có chức năng hỗ trợ cho máy thu thực hiện các thao tác đồng bộ, định thời, khôi phục tần số và ước lượng kênh.
• Tiêu đề lớp vật lý (Physical-layer HeadeR - PHR): được gắn ngay sau phần SHR và truyền tải những thông tin cần thiết giúp máy thu giải mã thành công tín hiệu được phát đi như độ rộng phần mào đầu, tốc độ truyền tải dữ liệu, kích thước phần tải tin (chứa dữ liệu) và các bit sửa sai.
• Phần dữ liệu (PHY Service Data Unit - PSDU): được truyền đi sau cùng và mang dữ liệu mong muốn.
4.1.1 Tiêu đề đồng bộ
Theo [31], SHR có cấu trúc gồm hai đoạn khác nhau (Hình 4.1) với chức năng riêng biệt: mào đầu đồng bộ (SYNC) thực hiện chức năng đồng bộ, giám sát và ước lượng kênh, và khối giới hạn khung (SFD) có nhiệm vụ chỉ thị điểm kết thúc phần tiêu đề đồng bộ.
Đoạn SYNC có thể chứa 16, 64, 1024 hoặc 4096 kí tự mào đầu Si với mỗi kí tự được tạo ra bằng cách trải chuỗi cân bằng hoàn hảo{ck}bởi hàmδL(n)có kích thước L kí tự, trong đó,
• {ck} với ck ∈ {−1,0,+1} là một chuỗi kí tự tam phân có đặc tính tự tương quan hoàn hảo và được dùng để định danh cho mỗi mạng PAN hoạt động ở một kênh vật lý UWB với băng tần cho phép,
Hình 4.1: Cấu trúc phần SHR• δL(n) gồm một kí tự ’1’ và L−1kí tự ’0’ như sau • δL(n) gồm một kí tự ’1’ và L−1kí tự ’0’ như sau δL(n) = ( 1 n= 0 0 n= 1,2, . . . , L−1 (4.1)
Phép trải chuỗi cân bằng hoàn hảo {ck} với hàm δL(n) được mô hình hóa bởi phương trình toán học:
Si ={ck} ⊗δL(n) (4.2)
trong đó, toán tử ⊗ chỉ thị cho tích Kronecker. Phương trình 4.2 tương đương với việc mỗi kí tự mào đầu Si được hình thành bằng cách chèn L−1 kí tự ’0’ vào giữa
mỗi kí tự của chuỗi {ck} như Hình 4.1.
4.1.2 Khối giới hạn khung
Khối giới hạn khung (SFD) được hình thành tương tự như đoạn SYC. Tuy nhiên, khối SFD không gồm các kí tự mào đầu giống hệt nhau như đoạn SYNC mà được tạo ra bằng cách trải chuỗi mã gồm 8 kí tự [0 +1 0 −1 +1 0 0 −1] (dành cho các ứng dụng truyền tải dữ liệu ở tốc độ mặc định và trung bình) hoặc 64kí tự [0 +1 0
−1 +1 0 0 −1 0 +1 0 −1 +1 0 0 −1 0 +1 0 −1 +1 0 0 −1 0 +1 0 −1 +1 0 0 −1 0
+1 0 −1 +1 0 0 −1 0 +1 0 −1 +1 0 0 −1 0 +1 0 −1 +1 0 0 −1 0 +1 0 −1 +1 0
0 −1](với các ứng dụng truyền tải dữ liệu tốc độ thấp) bởi kí tự mào đầu Si (phép trải tương đương với toán tử Kronecker như ở đoạn SYNC) [31]. Hình 4.1 minh họa cấu trúc của phần SHR với hai đoạn SYNC và SFD (trong trường hợp 8 kí tự).
4.1.3 Phần tiêu đề lớp vật lý và tải dữ liệu
Theo [31], phần PHR/PSDU được điều chế sử dụng phương pháp BPM-BPSK (Burst Position Modulation - Binary Phase-Shift Keying), trong đó, mỗi kí tự dữ liệu có khả năng truyền tải hai bit thông tin: một bit được dùng để xác định vị trí của burst trong kí tự dữ liệu và bit còn lại dùng để điều chế pha (sự phân cực) của chính burst này. Hình 4.2 thể hiện cấu trúc của một kí tự dữ liệu thuộc phần PHR/PSDU.
Hình 4.2: Cấu trúc của một kí tự dữ liệu IEEE 802.15.4a
Mỗi kí tự dữ liệu được chia làm hai nửa BPM có độ rộng bằng nhau TBP M =
Tdsym/2 với Tdsym là chiều dài của một kí tự dữ liệu. Nếu burst dữ liệu nằm ở nửa BPM thứ nhất, bit đầu tiên được truyền đi là bit ’0’; ngược lại, nếu burst nằm ở nửa
BPM thứ hai, bit đầu tiên là bit ’1’. Ngoài ra, pha của chính burst này (−1hoặc +1)