Với việc được áp dụng hàng loạt các thuật toán xử lý mới trên kênh PDSCH như thuật toán về xử lý CRC, thuật toán xử lý các khối truyền tải và khối mã hóa… đã mang lại những ưu điểm nhất định như:
• Việc xử lý các khối dữ liệu truyền tải đã dễ dàng hơn, các khối dữ liệu không còn được truyền một cách đồng thời nữa mà đã được tách riêng kèm theo đó là các mã sửa sai với thuật toán mới cũng đáp ứng được nhu cầu về kiểm soát lỗi cũng như lỗi khối. Với các phương pháp nói trên thì rõ ràng tỷ lệ lỗi khối đã được cải thiện đáng kể so với hệ thống cũ như 4G và LTE-advanced
• Với việc sử dụng mã kiểm tra chẵn lẻ mật độ thấp (LDPC) đã góp phần không nhỏ cho việc kiểm tra sự đúng sai của dữ liệu truyền đi và dữ liệu nhận về. Thuật toán sử dụng LDPC hoàn toàn vượt trội về khả năng kiểm tra bit cũng như kiểm soát lỗi so với hệ thống turbo code trên hệ thống 4G. Nhờ vậy không những đảm bảo được tính toàn vẹn của dữ liệu mà còn cải thiện về mặt tốc độ xử lý.
46
• Ở phía phát với việc sử dụng Polar code tỷ số tín hiệu trên nhiễu sẽ thấp hơn so với các công nghệ mã hóa khác, ngoài ra còn cải thiện được hiệu quả truyền tải từ 10% - 30%.
• Việc sử dụng các mức điều chế cao hơn cũng giúp cải thiện lưu lượng truyền tải trên kênh
2.3.2 Nhược điểm
Song song với các ưu điểm kể trên thì cũng vẫn còn đó các nhược điểm tồn tại và cần cải thiện hơn :
• Khi chạy 5G SISO hệ thống làm việc rất hiệu quả nhưng khi lên 5G MIMO các dòng lưu lượng chảy vào kênh sẽ là vô cùng lớn dẫn đến tình trạng bắt đầu có sự sai lệch dữ liệu giữa các lớp với nhau, do các thuật toán chưa được tối ưu tốt
• Khi số lớp trên các hệ thống 5G MIMO ngày càng lớn có thể là 4,6,8… cùng với đó là sử dụng điều chế ở mức cao như 256QAM 1024QAM dẫn đến sự quá tải đặc biệt là ở các lớp mã hóa kênh sử dụng thuật toán Polar code và LDPC. Làm cho hệ thống có thể chạy sai lệch.
• Với việc 5G có rất nhiều khoảng cách sóng mang con khác như 15Khz, 30Khz … đi kèm với đó là việc xuất hiện của phần băng thông (Banwidth Part) thì các thuật toán trên kênh PDSCH vẫn còn chưa đáp ứng được việc có nhiều khoảng cách sóng mang con trên các phần băng thông khác nhau.
2.4 Kết luận chương
Học viên nhận thấy việc ứng dụng các thuật toán mới, các phương pháp xử lý bit mới trên kênh PDSCH sẽ làm cải thiện rất nhiều thông lượng của hệ thống 5G. Khi sử dụng các mã sửa sai CRC với thuật toán mới của LDPC kèm với đó là khả năng phân mảnh và ghép lại các khối truyền tải cũng đang giúp cho việc xử lý tín hiệu trên kênh trở nên dễ dàng hơn. Nhưng đi cùng với đó là những tồn tại đang được chờ để giải quyết như việc 5G đang tiến tới MIMO và Massive MIMO đòi hỏi việc xử lý bit trên kênh PDSCH ngày càng phải nhanh hơn và chính xác hơn.
47
Hiện tại hệ thống mạng 5G ở Việt Nam đang sử dụng chạy trên nền tảng Intel Xeon x86, đáp ứng rất tốt xử lý và xử lý dữ liệu tốt ở lớp vật lý. Tuy vậy tương lai để đáp ứng dung lượng mạng lớn, tốc độ xử lý cao thì phần mềm của nó không đáp ứng được yêu cầu. Vì vậy bài toán đặt ra là phải xây dựng các giải pháp khác để đáp ứng nhu cầu của tương lai. Việc tiến tới 5G MIMO cũng sẽ là trở ngại rất lớn cho việc xử lý dữ liệu trên các kênh vật lý như PDSCH. Do vậy trong chương 3 học viên sẽ nghiên cứu và đưa ra giải pháp để giải quyết bài toán đó.
48
CHƯƠNG 3: ĐÁNH GIÁ QUÁ TRÌNH XỬ LÝ TÍN HIỆU TRÊN KÊNH PDSCH TRONG 5G MIMO
3.1 Đặt vấn đề 3.1.1 Vấn đề tồn tại 3.1.1 Vấn đề tồn tại
Hiện nay, phần xử lý lớp vật lý đã được phát triển và triển khai trên nền tảng x86 32 bit của rất nhiều công ty nghiên cứu và phát triển các sản phẩm trạm phát song 5G. Thực tế cho thấy, chúng hoàn thành tốt nhiệm vụ ở hệ thống SISO. Các chương trình xử lý bit của các tên tuổi lớn như Intel, Huawei, Erricson chạy trên nền tảng Intel Xeon, hoàn thành toàn bộ chuỗi xử lý bit ở lớp vật lý chỉ mất dưới 400us (không tính IFFT/FFT).
Tuy nhiên, với hệ thống MIMO khả năng tính toán của các con chip cũng như phần mềm đã không đảm bảo chỉ tiêu kỹ thuật đề ra. Khi tăng số lượng lớp (layer) thì thời gian xử lý cũng tăng theo tỷ lệ thuận, dưới đây là một bảng benchmark được thực hiện khi tiến hành xử lý bit trên kênh PDSCH trong các hệ thống 5G MIMO khác nhau như 5G 2X2, 5G 4X4,5G 8X8 .
Với thời gian hạn chế dưới 500 us cho xử lý bit ở lớp vật lý (bao gồm cả truyền dẫn và xử lý), việc chuyển dời và đánh giá lại các tham số trên kênh để tăng tốc xử lý là một điều bắt buộc.
Theo như kết quả benchmark thực tế đã học viên được thực hiện trên code FlexRan của nhà phát triển Intel, phần mã hóa LDPC chiếm tới hơn 50% thời gian xử lý toàn kênh.
Bảng 3.1 Thời gian xử lý dữ liệu trên lớp vật lý với các cấu hình khác nhau #RB MCS idx Qm #layer Latency (us)
273 27 64QAM 1 198
273 27 64QAM 2 407
272 19 64QAM 4 774
49
Hình 3.1 : Benchmark phần xử lý lớp vật lý với cấu hình MIMO4x4, MCS27, 64QAM, 13 Symbols
Với những con số thực tế ở trên, học viên đưa ra giải pháp là thực hiện giảm tải phần mã hóa LDPC trên kênh PDSCH tại lớp vật lý.
Hình 3.2: Giải pháp giảm tải trên khối LDPC
Các giải pháp của việc thực hiện giảm tải phần xử lý bit là:
Thứ nhất, nếu chỉ thực hiện giảm tải mã hóa LDPC – lượng dữ liệu tại đầu ra sẽ rất lớn (lên tới x3 lượng dữ liệu đầu vào) gây áp lực lên giao tiếp giữa FPGA và CPU. Vì vậy, giải pháp đưa ra là giảm tải luôn bước RateMatching để giảm tốc độ dữ liệu đầu ra ( xấp xỉ bẳng tốc độ dữ liệu đầu vào).
Thứ hai, kết quả benchmark cho thấy, để đảm bảo chỉ tiêu kỹ thuật của hệ thống MIMO phải dùng song song nhiều luồng xử lý LDPC cùng lúc. Do đó, để đơn giản hóa việc điều khiển luồng và phân bổ dữ liệu tới các luồng LDPC thì bước phân mảnh cũng nên được giảm tải. Từ đó lớp vật lý và lớp FPGA sẽ chịu toàn bộ trách nhiệm lập lịch, phân bổ luồng dữ liệu. Tương ứng với bước ghép nối dữ liệu cũng nên triển khai như vậy để đơn giản hóa việc giao tiếp và để thống nhất điều khiển. Khi triển khai phân mảnh trên khối xử lý FPGA tức là đã bao gồm phần tính toán CRC cho codeblock. Việc tính toán CRC cho khối truyền tải cũng có kiến trúc tương
CRC Attachment segmentationCode block Code block CRC attachment LDPC Encoder Rate matching
Scrambling Modulation Layer mapping Precoding
PDSCH Resource
mapping IFFT FAPI parser Generate PDSCH DMRS & PT-RS
FEC FPGA CPU Low L1 FPGA Mã hoá LDPC Xáo trộn Điều chế Tham chiếu lớp Tiến mã
50
tự - khối lượng công việc tăng lên không nhiều. Do đó, tác vụ tính toán CRC cho khối truyền tải cũng được quyết định triển khai luôn trên FPGA.
Với việc triển khai giảm tải các bước của phần xử lý lớp vật lý ngoài việc tăng tốc xử lý, còn giúp giảm tốc độ dữ liệu truyền dẫn giữa CPU và phần mềm xử lý.
3.1.2 Thiết kế khối xử lý LDPC dựa trên nền tảng FPGA
Học viên sử dụng các IP Core ( Intelecture Property Core – Lõi sở hữu trí tuệ bán dẫn ) của nhà cung cấp Xilinx để đưa ra thiết kế các khối xử lý cho LDPC
3.1.2.1 Khối LDPC Front-end
Hình 3.3 : Khối LDPC Front-end
Trong đó core params bao gồm:
• NBG : base graph ( base graph 1 hoặc base graph 2)
• Kd : Chiều dài bit của một codeblock đã bao gồm CRC chưa bao gồm filler bit
• K : Chiều dài bit của một codeblock đã chèn thêm filler bit
• Zj , Zset được lấy từ bảng 2.1
Forward params bao gồm các thông số cần thiết cho hoạt động của các IP Core phía sau:
• N : chiều dài bit đầu ra LDPC
• Ncb : kích thước của circular buffer
51
• Kd : vị trí filler bit
• K0 : vị trí bắt đầu của chuỗi bit đầu ra Rate Matching
• Qm : Giá trị điều chế (2, 4, 6, 8) Chức năng và nhiệm vụ
• Đồng bộ tham số cho từng data set
• Tạo bus control để truyền tham số điều khiển cho core LDPC
• Chèn Filler-bit cho chuỗi bit đầu vào LDPC
Hình 3.4: Kiến trúc tổng quan khối LDPC Front-end
Tương ứng với 3 chức năng của khối LDPC FE, phần kiến trúc tổng quan bao gồm 4 khối như trên hình 3.4. Khối “Params calculation” thực hiện tính toán các tham số cần cho hoạt động của khối “LDPC Control Generation” và khối “Filler Attachment” từ các tham số đầu vào. Đồng thời chuyển tiếp các tham số cần cho hoạt động của các IP core đằng sau. Khối “Filler Attachment” thực hiện chèn filler bit vào chuỗi dữ liệu để cung cấp cho LDPC encoder. Khối “LDPC Control Generation” thực hiện tạo tín hiệu điều khiển và các tham số cần thiết cho IP Core LDPC. Khối Sync thực hiện đồng bộ chuỗi control và chuỗi data đảm bảo đường control luôn được cung cấp trước.
Các tham số đầu ra của IP Core sẽ được đồng bộ với data set tương ứng. Khối LDPC BackEnd sẽ nhận được bộ tham số tương ứng với dữ liệu được mã hóa, dựa trên cơ chế đồng bộ giữa khối front-end va back-end.
72 [outPdschBitTmp,~] = vt_5gPDCHBitLevelProcess(TB_sequence, pdschCfg{1,i}, pdcchCfg{1,i}); outPdschBit = [outPdschBit;outPdschBitTmp.']; [outPdschSymbol] = pdsch_symbol_process(outPdschBit,sysConfig{i},pdschCfg{i},pdcchCfg{i},pdsc hDmrsCfg{i}, ssbCfg{i},csiConfig,slotIdx);
slotGridUser = slotGridUser + outPdschSymbol(slotIdx+1).Grid; end slotGrid = slotGridUser;%outPdschSymbol(slotIdx+1).Grid; pdschDataFrame = [pdschDataFrame;slotGrid]; else slotGrid = zeros(14,1272,NTxAnts); pdschDataFrame = [pdschDataFrame;slotGrid]; end end pdschDataFrameAnt = []; pdschDataFrameZeroPading = [zeros(14*20,frame_params.first_subcarrier,NTxAnts),pdschDataFrame,zeros(14 *20,frame_params.first_subcarrier,NTxAnts)]; %insert zero padding
for(antIdx = 1:NTxAnts) zeroPadingAntIdx = pdschDataFrameZeroPading(:,:,antIdx).'; pdschDataFrameAnt(:,:,antIdx) = zeroPadingAntIdx; end [frame_params,pbch_params] = pbchBlockGenerate(frame_params, pbch_params); %% SSB for(antIdx = 1:NTxAnts) frame_params.txdataF(:,:,antIdx) = frame_params.txdataF(:,:,antIdx) + pdschDataFrameAnt(:,:,antIdx); end %% Resource grid figure; p(frameIdx+1) = pcolor(abs(frame_params.txdataF(:,:,1))); set(p(frameIdx+1), 'EdgeColor', 'none');
%% OFDM Modulation for(antIdx = 1:NTxAnts)
73 frame_params.txdataF(:,:,antIdx) = [frame_params.txdataF(frame_params.NFFT/2+1:end,:,antIdx);frame_params.txd ataF(1:frame_params.NFFT/2,:,antIdx)]; idx = 0; for i=1:size(frame_params.txdataF,2) tmp = ifft(frame_params.txdataF(:,i,antIdx),frame_params.NFFT)*32768; if mod(i,7*2^mu) == 1
frame_params.txdata(antIdx,(idx + frame_params.nb_prefix_samples0 + 1) :(idx + frame_params.nb_prefix_samples0 + frame_params.NFFT)) = tmp;
frame_params.txdata(antIdx,(idx + 1): (idx + frame_params.nb_prefix_samples0)) = tmp((frame_params.NFFT - frame_params.nb_prefix_samples0 + 1):end); idx = idx + frame_params.nb_prefix_samples0 + frame_params.NFFT; else
frame_params.txdata(antIdx,(idx + frame_params.nb_prefix_samples +1) :(idx + frame_params.nb_prefix_samples + frame_params.NFFT)) = tmp;
frame_params.txdata(antIdx,(idx + 1): (idx + frame_params.nb_prefix_samples)) = tmp((frame_params.NFFT - frame_params.nb_prefix_samples + 1):end);
idx = idx + frame_params.nb_prefix_samples + frame_params.NFFT; end
end
x_fp(:,:,antIdx) = [round(real(frame_params.txdata(antIdx,:)))', round(imag(frame_params.txdata(antIdx,:)))'];
end
fid1 = fopen ('tx_data.csv', 'w'); for(antIdx = 1:NTxAnts) %NTxAnts
% x_fp1(:,:,antIdx) = [round(real(antData(antIdx,:)))', round(imag(antData(antIdx,:)))']; strAnt = sprintf('Y%d_%d,',antIdx,NTxAnts); fprintf(fid1,'%s\n',strAnt); for i = 1:size(x_fp,1) fprintf(fid1,'%d,%d\n',x_fp(i,1,antIdx),x_fp(i,2,antIdx)); end for i = 1:size(x_fp,1) fprintf(fid1,'%d,%d\n',x_fp(i,1,antIdx),x_fp(i,2,antIdx)); end end fclose(fid1); x_fp_n_frames = [x_fp_n_frames;x_fp]; end time_finish1 = toc(time_start);