m车载自组织网络(Vehicular Ad-hoc Network,VANET)通信系统的matlab仿真

77 阅读4分钟

1.算法仿真效果

matlab2022a仿真结果如下:

1.png

2.png

3.png

4.png

5.png  

2.算法涉及理论知识概要

         这里根据那个fluid dynamic model 和stochastic model模型,这里使用一种如下的车辆移动模型,能够反映出车辆移动的随机性和连续性。

 

        首先,考虑到第三步骤的实际的问题的仿真,因此,我们在这里,就必须考虑符合实际VANET的车辆移动模型。

 

        第一:要反映出真实的城市道路情况,比如车道,十字路口,速度限制。

 

        第二:正确反映车的运动规律。

 

        针对第一种情况,我们需要考虑节点运动模型,对于第二种情况,我们需要考虑车辆的随机运动情况(类似于论文的stochastic model模型)

 

      对于任意时刻t,某两个车辆的速度分别为:和,为了保证整个行驶过程是安全的,车与车之间必须保持一个安全的距离,设这个安全距离为。那么相对于前一个车辆来讲,后一个车辆的安全速度为:

 

1624e38cf29ba552b1efbf5448fc14af_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png  

 

 

        从宏观角度考虑,那么就是整个车道网络中,车流的移动情况,这里我们使用如下的数学原理:

 

         宏观移动模型,将道路拓扑视为任意方向的街道并任意连接而组成的网络图。两个拐角之间的街道定义为块。将一个块上的一组车辆视为一个单元,该单元的车辆共享一组参数:速度 v,车流密度 k 和车流体积 q = kv。

 

        将车流视为典型的流体后,车辆的速度和车辆密度的关系为:

 

278fd11c6fc693070568ebe449f699c8_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

 

        针对不同的road segment。

 

725886228faa09345f6f28d9efe479e4_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

        对于每个road的segment,我们使用随机模型,将直线路线上的车流进行分流,即满足一定概率的车流左右转弯,而同时,由于一定概率的车流会从垂直的线路行驶入直线线路上。这个过程我们使用随机过程分析,假设每个车流得到每个路口的时候,会以0.5的概率继续向前行驶,以0.25的概率左右转弯。然后车辆对这三个方向的判断,满足泊松分布。

 

 

 

 

 

3.MATLAB核心程序 `%分析Kjam和流量的关系;

q1   = zeros(1,length(Kjam));

q2   = zeros(1,length(Kjam));

q3   = zeros(1,length(Kjam));

for i = 1:length(Kjam)

    n     = 1;

    V0    = c*Kjam(i)^((n+1)/2)/(n+1)/(n+1);

    q1(i) = V0k(1-(k/Kjam(i))^((n+1)/2));

    n     =-0.5;

    V0    = c*Kjam(i)^((n+1)/2)/(n+1)/(n+1);

    q2(i) = V0k(1-(k/Kjam(i))^((n+1)/2));

    n     =-1;

    q3(i) = cklog(Kjam(i)/k);

end

figure;

plot(Kjam,q1,'b-s',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.0,0.9,0.0]);

hold on;

plot(Kjam,q2,'r-o',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.9,0.0,0.0]);

hold on;

plot(Kjam,q3,'k-^',...

    'LineWidth',1,...

    'MarkerSize',6,...

    'MarkerEdgeColor','k',...

    'MarkerFaceColor',[0.0,0.0,0.9]);

hold off;

grid on

xlabel('Kjam');

ylabel('Q');

legend('Greenshield','Drew','Greenberg');

 

 

 

%%

%步骤二

T    = [0:1:7500];%全部为绿灯的情况

V1   = zeros(1,length(T));

V2   = zeros(1,length(T));

Vsafe= zeros(1,length(T));

Videa= zeros(1,length(T));

dsafe= zeros(1,length(T));%车辆之间的安全距离

Dxd  = zeros(1,length(T));

 

V01  = 50000/3600;%前一辆车子的初始速度

V02  = 50000/3600;%前一辆车子的初始速度

a1   = 0;%前一个车子加速度

a2   = 0.01;%后一个车子加速度

Vmax = 80000/3600;%公里最大限速

d1   = 0;

d2   = 0;

............................................................................

figure;

subplot(211);

plot(T,V1,'g','linewidth',4);

hold on

plot(T,V2,'r--');

hold on

xlabel('Times(s)');

ylabel('V');

legend('real V of car1','real V of car2');

 

 

subplot(212);

plot(T,Dxd,'g','linewidth',2);

xlabel('Times(s)');

ylabel('the distance between 2 cars');

 

%出现红灯,减速

T    = [0:0.01:60];%全部为绿灯的情况

V1   = zeros(1,length(T));

V2   = zeros(1,length(T));

Vsafe= zeros(1,length(T));

Videa= zeros(1,length(T));

dsafe= zeros(1,length(T));%车辆之间的安全距离

Dxd  = zeros(1,length(T));

 

V01  = 50000/3600;%前一辆车子的初始速度

V02  = 50000/3600;%前一辆车子的初始速度

a1   = -0.5;%前一个车子加速度

a2   = -0.47;%后一个车子加速度

Vmax = 80000/3600;%公里最大限速

d1   = 0;

d2   = 0;

..............................................................................

figure;

subplot(211);

plot(T,V1,'b','linewidth',2);

hold on

plot(T,V2,'r--');

hold on

xlabel('Times(s)');

ylabel('V');

legend('real V of car1','real V of car2');

subplot(212);

plot(T,Dxd,'b','linewidth',2);

xlabel('Times(s)');

ylabel('the distance between 2 cars');`