目录
1、D2D通信技术简介
D2D即Device-to-Device,也称之为终端直通。D2D通信技术是指两个对等的用户节点之间直接进行通信的一种通信方式。在由D2D通信用户组成的分散式网路中,每个用户节点都能发送和接收信号,并具有自动路由(转发消息)的功能。网路的参与者共用它们所拥有的一部分硬体资源,包括信息处理、存储以及网路连接能力等。这些共用资源向网路提供服务和资源,能被其它用户直接访问而不需要经过中间实体。在D2D通信网路中,用户节点同时扮演伺服器和客户端的角色,用户能够意识到彼此的存在,自组织地构成一个虚拟或者实际的群体。
2、D2D通信技术设计原理
按照蜂窝网络中基站参与设备通信的程度不同,D2D通信分成3种方式:蜂窝网络控制下的D2D通信、蜂窝网络辅助控制下的D2D通信、不受蜂窝网络控制的D2D通信。
本文讨论的是不受蜂窝网络控制的D2D通信的设计:
这种方式适用于没有蜂窝网络覆盖或者蜂窝网络瘫痪的情况。这时,D2D通信的设备发现、会话建立及资源分配都由D2D设备自行完成,完全不需要基站的参与。这种方式D2D设备的复杂度最高。为了能和基站取得联系,D2D设备需要具备自动转发消息的功能,可以充当中继节点的角色。没有蜂窝网信号的D2D设备,可以通过中间D2D设备的消息转发,和远方的基站取得联系,从而通过多跳的方式接入蜂窝网。
3、D2D通信技术的优点
1.提高频谱利用率
用户通过D2D 进行通信连接,避开了使用蜂窝无线通信,因此不使用频带资源,提高资源利用率。
2.改善用户体验
相邻用户进行资源共享,提高用户体验。
3.拓展应用
D2D 的引入使得网络的稳定性增强,并具有一定灵活性,传统网络可借助D2D 进行业务拓展。
4、设计要求
1.构建随机移动的节点自组织网络,节点间可实现D2D通信。并把随机移动的节点画出来
2.设定一对源一目的节点, 可利用网络中剩余节点的中继实现通信。
3.探索转发功率对网络丢包率的影响。
5、Matlab仿真
numNodes = 20; % 节点数量
maxDistance = 100; % 最大通信距离
sourceNode = 1; % 源节点
destinationNode = 2; % 目的节点
relayNodes = 3:numNodes; % 中继节点
thresholdPower = 5; % 门限功率
noisePower = 0.05; % 噪声功率
transmitPower = 20; % 初始转发功率
packetLossRate = zeros(1, numNodes); %用于储存每个节点的丢包率
receive_num=zeros(1,150);
nodePositions = maxDistance * rand(2, numNodes); % 生成节点位置
distances = pdist2(nodePositions', nodePositions'); % 计算节点之间的距离
% 初始化节点位置
scatter(nodePositions(1, :), nodePositions(2, :), 'filled');
% 构建随机移动的节点自组织网络
adjacencyMatrix = pdist2(nodePositions', nodePositions') <= maxDistance;
% 模拟节点移动和数据传输过程
for iteration = 1:150
nodePositions = nodePositions + randn(2, numNodes);
scatter(nodePositions(1, :), nodePositions(2, :), 'filled');
xlim([0, maxDistance]);
ylim([0, maxDistance]);
drawnow;
pause(0.1);
% 数据传输过程
for i = relayNodes
% 节点无法直接与目的节点通信,尝试通过其他中继节点中继
possibleRelays = find(adjacencyMatrix(i, :));
selectedRelay = possibleRelays(randi(length(possibleRelays)));% 随机选择一个中继节点
channelGain = 1 / distances(i, selectedRelay);
receivedPower = transmitPower * channelGain; % 计算接收信号功率
%receivedPower = receivedPower + sqrt(noisePower) * randn(); % 添加高斯白噪声
if receivedPower >thresholdPower
packetLossRate(i) = 0;
end
if receivedPower < thresholdPower
packetLossRate(i) = 1;
end
end
P = packetLossRate;
for i = 3 : numNodes
P = P + packetLossRate.^i;
end
P(P ~= 0) = 1;
receive_num(iteration)=P(1,numNodes);
end
lose_rate = 1-sum(receive_num)./150
disp("节点丢包率:");
disp(lose_rate);
有什么问题可以私信我!