1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y5mXlJ1w
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
用Matlab仿真一个蜂窝模型,用户在打电话时产生切换的过程。建立蜂窝越区切换,假设有16个蜂窝,实现两个小区之间的硬切换,每个小区假设能容纳30个用户,第31个用户就会产生切换,到另一个小区. 或是根据用户移动产生的切换。
切换的目的有两种可能,一种是实现漫游,另一种是提高服务质量,即降低掉话率,降低拥塞率。移动设备与对端通信点之间的通信会因切换有一定的时延, 这可能造成数据丢失问题,或是通信连接中断,影响我们的正常通话。研究切换的目的就是减少切换过程的时延和丢包率,这样我们才能更好的通话。切换是数字蜂窝通信的一个特点,它保证用户从一个小区到移动到另一个小区通话的可靠性。在任何移动网中,切换是相当重要的,这是因为在蜂窝系统中,最大限度地使用频谱利用率。
切换的最主要功能就是保证用户通信的连续性,当用户发生越区的时候,将用户当前的通信链路转移到其它小区。切换技术直接影响着整个蜂窝网络的性能好坏,其影响着整个网络的响应速度,通话质量等指标。此外,蜂窝系统拥有一个重要的优势,由于其拥有较宽的的带宽,所以由多径效应引起的信号衰落比较小,因此可以对信号进行解调,使其大幅度提高链路容量。考虑到上述这些影响,切换技术在现代通信系统中有着越来越重要的作用。因此,研究蜂窝系统的切换技术具有十分重要的意义。
无中继的蜂窝网的小区功耗主要来自于基站(BS)的功耗,这里假设单位覆盖区域都是正六边形,每个小区内有一个基站(BS)和若干个移动站(MS),且每个基站(BS)的最大覆盖区域是有限的。
4.部分源码
clc;
clear;
close all;
warning off;
rng('default')
%切换条件
CutOff= 30;
%仿真时间
TIMES = 100
%定义小区半径为2km
r = 2;
dx = 3; %定义在x轴上的平移间隔
dy = 2*sqrt(3); %定义在y轴上的平移间隔
%在整个空间区域产生随机的用户
N = 500;
Xuser =-13*rand(1,N)+4;
Yuser =-15*rand(1,N)+3;
axis([-12,6,-13,5]);
%根据某个用户的切换情况
Uidx = 471;%注意这个变量需要凑一下,使得用户刚好在16个区域之一中
%用户硬切换情况
TRAN1 = zeros(1,TIMES);
TRAN2 = zeros(1,TIMES);
User_Cell2 = zeros(1,TIMES);%保存指定用户标号变化
for jj = 1:TIMES
jj
figure(1);
ind = 0;
Xc = [];
Yc = [];
for yk=[-15:dy:15];
f = inline(['sqrt(3)*x/3+',num2str(yk)]);
for xk=[-13:dx:8];
x = xk;
y = f(x);
if -13<x<13&-13<y&13
ind = ind + 1;
a = pi/3*[1:7];
%绘制正六边形的六条边
if ind == 39 | ind == 31 | ind == 23 | ind == 15 |...
ind == 32 | ind == 24 | ind == 16 | ind == 8 |...
ind == 33 | ind == 25 | ind == 17 | ind == 9 |...
ind == 26 | ind == 18 | ind == 10 | ind == 4
plot([x+i*y]+r*exp(i*a),'r','linewidth',1);hold on
%中心点用“*”代表基站
plot(x,y,'rs','markersize',6);hold on
Xc = [Xc,x];
Yc = [Yc,y];
else
plot([x+i*y]+r*exp(i*a),'b','linewidth',1);hold on
%中心点用“*”代表基站
plot(x,y,'bs','markersize',6);hold on
end
end
end
end
title('16X16蜂窝小区模型(单位:km)');
axis square;
hold on
%用户随机运动
Tmps = randperm(N);
for j = 1:N
if Tmps(j) <= 0.7*N
Xuser(j) = Xuser(j) + randn/5;
Yuser(j) = Yuser(j) + randn/5;
else
Xuser(j) = Xuser(j) + rand/5;
Yuser(j) = Yuser(j) + rand/5;
end
if j == Uidx
Xuser(j) = Xuser(j) + rand/8;
Yuser(j) = Yuser(j) + randn/20;
end
end
for j = 1:N
if j == Uidx
plot(Xuser(j),Yuser(j),'bo','markersize',6); hold on
plot(Xuser(j),Yuser(j),'r*','markersize',6);
else
plot(Xuser(j),Yuser(j),'k.');
end
hold on
end
axis([-12,6,-13,5]);
hold off
%统计每个小区内的用户的数目
User_Cell = func_cellNum(Xuser,Yuser,Xc,Yc,N,r);
User_Cell2(jj) = User_Cell(Uidx);
%分析切换情况
%第一种情况,用户跨区域了,需要切换,对比前后时刻的区域标号是否相同
if jj == 1
TRAN1(jj) = 0;%表示不切换
else
if User_Cell2(jj) == User_Cell2(jj-1)
TRAN1(jj) = 0;
else
TRAN1(jj) = 1;%1表示跨小区切换
end
end
%第二种情况,区域用户超过30,则进行临近切换
NUM = length(find(User_Cell == User_Cell(Uidx)));
NUM
if NUM <= CutOff
if jj == 1
TRAN2(jj) = 0;%0表示不切换
else
TRAN2(jj) = 0;%0表示不切换
end
else
if jj == 1
TRAN2(jj) = 0;%0表示不切换
else
TRAN2(jj) = 1;%2表示用户过多的切换
end
end
figure(2);
plot(TRAN1,'b','linewidth',2);
hold on
plot(TRAN2+2,'r','linewidth',2);
hold on
legend('跨小区切换','用户大于30切换');
axis([0,TIMES,-2,6]);
end
01-125m