N2 handover intra-AMF 2Gnb 1ue

This commit is contained in:
agtuser
2025-09-11 06:16:32 +00:00
parent 10ca9395e5
commit 388389428d
38 changed files with 4031 additions and 13 deletions

View File

@@ -0,0 +1,63 @@
#include <iostream>
#include <cstdlib>
#include <ctime>
// 直接包含头文件中的算法
#include "src/gnb/rrc/measurement_logic.hpp"
int main() {
std::srand(std::time(nullptr));
std::cout << "=== RRC测量报告逻辑测试 ===" << std::endl;
// 测试用例1模拟测量数据生成
std::cout << "\n1. 测量数据生成测试:" << std::endl;
for (int ueId = 1; ueId <= 3; ueId++) {
auto measurement = nr::gnb::measurement::HandoverDecisionEngine::generateSimulatedMeasurement(ueId);
std::cout << "UE " << ueId << " 测量结果:" << std::endl;
std::cout << " 服务小区 PCI=" << measurement.serving.pci
<< " RSRP=" << measurement.serving.rsrp << " dBm" << std::endl;
std::cout << " 邻居小区 PCI=" << measurement.neighbors[0].pci
<< " RSRP=" << measurement.neighbors[0].rsrp << " dBm" << std::endl;
}
// 测试用例2切换判决测试
std::cout << "\n2. 切换判决测试:" << std::endl;
// 创建需要切换的场景
nr::gnb::measurement::UeMeasurementData testMeasurement;
testMeasurement.ueId = 100;
testMeasurement.serving.pci = 1;
testMeasurement.serving.rsrp = -110; // 弱信号
testMeasurement.neighbors.resize(1);
testMeasurement.neighbors[0].pci = 2;
testMeasurement.neighbors[0].rsrp = -95; // 强信号差值15dB > 8dB阈值
int targetGnbId;
bool shouldHandover = nr::gnb::measurement::HandoverDecisionEngine::shouldTriggerHandover(testMeasurement, targetGnbId);
std::cout << "测试场景服务小区RSRP=-110dBm邻居小区RSRP=-95dBm" << std::endl;
std::cout << "RSRP差值" << (testMeasurement.neighbors[0].rsrp - testMeasurement.serving.rsrp) << " dB" << std::endl;
std::cout << "切换决定:" << (shouldHandover ? "" : "") << std::endl;
if (shouldHandover) {
std::cout << "目标gNB ID" << targetGnbId << std::endl;
}
// 测试用例3不需要切换的场景
testMeasurement.neighbors[0].rsrp = -108; // 差值只有2dB < 8dB阈值
shouldHandover = nr::gnb::measurement::HandoverDecisionEngine::shouldTriggerHandover(testMeasurement, targetGnbId);
std::cout << "\n测试场景服务小区RSRP=-110dBm邻居小区RSRP=-108dBm" << std::endl;
std::cout << "RSRP差值" << (testMeasurement.neighbors[0].rsrp - testMeasurement.serving.rsrp) << " dB" << std::endl;
std::cout << "切换决定:" << (shouldHandover ? "" : "") << std::endl;
// 测试用例4PCI到gNB ID映射
std::cout << "\n3. PCI到gNB ID映射测试" << std::endl;
for (int pci = 1; pci <= 5; pci++) {
int gnbId = nr::gnb::measurement::HandoverDecisionEngine::mapPciToGnbId(pci);
std::cout << "PCI " << pci << " -> gNB ID " << gnbId << std::endl;
}
std::cout << "\n=== 测试完成 ===" << std::endl;
return 0;
}