شبیه‌سازی شبکه‌های بی سیم و کامپیوتری
شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا
  • شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا

مشخصات بلاگ
شبیه‌سازی شبکه‌های بی سیم و کامپیوتری

امکان سفارش، شبیه سازی مقاله و پایان نامه وجود دارد،
مطالب، با ذکر منبع قابل انتشار در سایت ها و وبلاگ ها و.. می باشد.
جهت دریافت مشاوره رایگان تماس بگیرید:

شماره تماس: 09147082079-0098
آیدی تلگرامی:https://t.me/MuosSA_NbO
جی میل :mo30no@gmail.com

تمامی کدهای این وبلاگ در حال حاضر به زبان متلب می باشد

«آنچه می‌دانیم ناچیز و آنچه نمی‌دانیم عظیم و وسیع است»
$$پیر سیمون لاپلاس$$

۱۸ مطلب در آذر ۱۳۹۸ ثبت شده است

دوشنبه, ۴ آذر ۱۳۹۸، ۰۴:۳۴ ب.ظ

تابع کوتاهترین مسیر، getNearstDest2D

این تابع دارای چهار ورودی و چهار خروجی هست، ورودی اول  ایدی نودهای مقصد(مثلا سرخوشه) ورودی دوم ایدی نودهای مبدا(مثلا نودهای عادی که قرار از بین سرخوشه های یکی را انتخاب کنند، ورودی سوم فلق isplot( ایا مسیر بین مبدا و مقصدها رسم شود) ، ورودی چهارمisfigur ( ایا فرم جدیدی باز شود یا نه؟) خروجی اول unDestInd( مجموعه نودهای مقصد منتخب یونیک)، خروجی دوم gridDist( ماتریس فاصله بین نودهای مبدا و مقصد،  خروجی سوم selctedDest( بردار ایدی  مجموعه نودهای مقصد منتخب  غیر یونیک  ) خروجی چهارم selctedDict( کمترین فواصل انتخاب شده بین نودهای مبداء و مقصد).

%%caaling script
% find nearst dest point(source vector) from source point
%   sourcPos.x=randi([-100,100],1,100);
%   sourcPos.y=randi([-100,100],1,100);
 
% 
%   destPos.x=randi([-100,100],1,30);
%   destPos.y=randi([-100,100],1,30);
 
%   [unDestInd, gridDist,selctedDest,selctedDict]=getNearstDest2D(destPos, sourcPos,1,1);


%%


function  [unDestInd, gridDist,selctedDest,selctedDict]=getNearstDest2D(destPos, sourcPos,isplot,isFig)
gridDist=pdist2D(sourcPos,destPos  );%distance between all nodes with grid center points
[selctedDict,selctedDest]=min(gridDist,[],2);% here we used an simple algorithm to determine each node in network is belong to which cell in grid network
unDestInd=  unique(selctedDest);% if we unique the number of centers that are selected  by normal nodes, based on minimum distance, in reality we get the number coverage area
if nargin >=3
    if isplot==1
        if isFig
            figure;
        end
            plot( sourcPos.x, sourcPos.y,'ro') ;hold on
            plot( destPos.x ,destPos.y,'gd') ;hold on
            plot([sourcPos.x;destPos.x(selctedDest')] ,[sourcPos.y;destPos.y(selctedDest')],'k-');hold on;
    else
    end
end
end

 
% gridDist=pdist2D(sourcPos  );%distance between all nodes with destnation nodes
% gridDist=pdist2D(sourcPos,destPos  );%distance between all nodes within a vector
function gridDist=pdist2D(s, d   )

if nargin==1
    xTs=s.x' * ones(1,length(s.x) );
    yTs=s.y' * ones(1,length(s.y) );
 
    xTd=ones(1,length(s.x) )' * s.x  ;
    yTd=ones(1,length(s.y) )' * s.x  ;
 
    gridDist=sqrt((xTs - xTd ).^2 +(yTs - yTd ).^2 );
    
else
    
    
    xTs=s.x' * ones(1,length(d.x) );
    yTs=s.y' * ones(1,length(d.y) );

    xTd=ones(1,length(s.x) )' * d.x  ;
    yTd=ones(1,length(s.y) )' * d.y  ;

    gridDist=sqrt((xTs - xTd ).^2 +(yTs - yTd ).^2 );

end
end





نمونه خروجی این تابع

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ آذر ۹۸ ، ۱۶:۳۴
موسی حسن زاده
يكشنبه, ۳ آذر ۱۳۹۸، ۱۱:۴۳ ب.ظ

شبیه‌سازی تایر خودرو در متلب

تو شبیه‌سازی شبکه‌های بی‌سیم ساخت اشیای سه بعدی و توزیع سه بعدی اهمیت زیادی داره، در فضای سه بعدی امکان شبیه‌سازی عملی و واقعی‌تر سیگنال و افت مسیر و چند مسیری و...  فراهم می‌شه،  در زیر کد ایجاد یک تایر به شکل سه بعدی در متلب آورده شده ، با کپی و پیست این کد در داخل یک اسکریپت متلب می‌توانید خروجی  زیر را مشادهده کنید...

 

%% clear commands
function xx
delete(allchild(0));close all;
clear;
clc;

%% path commands
file=matlab.desktop.editor.getActive;
try 
fileDetail=dir(file.Filename);
folderName=fileDetail.folder;
catch
   index=strfind( file.Filename,'\');
   folderName=file.Filename(1:index(end)-1);
end
paths=genpath(folderName);
addpath(paths);
cd(folderName);

 
side=10;
t=linspace(0,2*pi ,side+1);
t(6)=NaN;
side1=50;
t1=linspace(0, 2*pi ,side1+1);

  
 

 
% ph=0;
% x=r' *cos(t+ph);
% z=(0:side)' * ones(1,side+1);
% y=r' *sin(t+ph) ;


ph=0;
x= cos(t+ph) /5 ;
y=  0*(0:side)';  
z= sin(t+ph) /5  ;



% plot3(x,y,z);hold on

 
% path=(t1+ph).^2;path=path/max(path)

 path.x=[0,1,1,1,2,2,2,1,1,0];
 path.y=0:length(path.x)-1;
 
 path.x=  cos (t1+ph)*5 ;  
path.y= sin(t1+ph) *5  ;

 
    [path.x,path.y]=divider(path.x,path.y,2);
    [t1,t1]=divider(t1,t1,2);

%       plot(path.x ,path.y  , 'r');hold on
% xlabel( 'X'); ylabel( 'Y'); zlabel( 'Z')
 
     matrixObj.x= cos(t )  ;
    matrixObj.y=  0*(0:side)';
    matrixObj.z= sin(t  )   ;
    
for in=1:length(path.x)-1
    
    
    
    [ x, y, z]=rotateParameter(matrixObj,[0,0,1],rad2deg(t1(in)));
    
%      path.x=  cos (t + ph(in)) ;  
%      path.y=sin (t+ ph(in) )  ;
% 
     
%        plot3(x+path.x(in),y+path.y(in),z,'b-');hold on
       surf([x+path.x(in);x+path.x(in+1) ],[y+path.y(in);y+path.y(in+1) ],[z;z],'facecolor','k');hold on; alpha(0.2)
%       plot3(x ,y ,z,'b');hold on

    
   axis('equal') 
end

end

function [ newx, newy, newz]=rotateParameter(matrixObj,azel,alpha)

u = azel(:)/norm(azel);
alph = alpha*pi/180;
cosa = cos(alph);
sina = sin(alph);
vera = 1 - cosa;
x = u(1);
y = u(2);
z = u(3);
rot = [cosa+x^2*vera x*y*vera-z*sina x*z*vera+y*sina; ...
    x*y*vera+z*sina cosa+y^2*vera y*z*vera-x*sina; ...
    x*z*vera-y*sina y*z*vera+x*sina cosa+z^2*vera]';

x = matrixObj.x;
y = matrixObj.y;
z = matrixObj.z;

[m,n] = size(z);
if numel(x) < m*n
    [x,y] = meshgrid(x,y);
end

[m,n] = size(x);
newxyz = [x(:) , y(:) , z(:) ];
newxyz = newxyz*rot;
newx =   reshape(newxyz(:,1),m,n);
newy =  reshape(newxyz(:,2),m,n);
newz =  reshape(newxyz(:,3),m,n);

end




 

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۸ ، ۲۳:۴۳
موسی حسن زاده
يكشنبه, ۳ آذر ۱۳۹۸، ۱۲:۴۴ ب.ظ

تابع مقسم خط divider

یکی از پرکاربردی ترین توابعی که تا حالا توسعه دادم تابع divider هستش، کار این تابع اضافه کردن تعداد معینی نقاط دو بعدی و سه بعدی روی خطوط دو بعدی و سه بعدی هستش، این تابع در دو مد کار می کند، حالت منصفانه که در آن بسته به طول هر خط روی خم، تعداد نقاط را روی آن اضافه می‌کنه، حالت غیر منصفانه که در آن روی تمام خطوط یک خم بدون توجه به طول آن به یک اندازه نقاط جدید اضافه می‌کنه

 

 

نمونه اجرای زیر حالت غیر منصافنه و منصفانه فراخوانی این تابع را نشان می‌دهد:

 

کد این تابع برای حالت دو بعدی

%%%%%%%%%%%%%%%%%%%%%%%%%%-----------software details-----------%%%%%%%%%%%%%%%%%%%%%%

%devloped in Iran(ardebil)                                       %
%Copyright (C) 2017(1396) by moussa hasanzadeh as the head devloper %%
%All rights reserved.                                             % 
%programed in mathlab 2016                                 
%gmail:mo30no@gmail.com
%phone 09147082079


%%%%%%%%%%%%%%%%%----------published by http://wcnet.blog.ir/------------%%%%%%%%%%%%%%


 



%version 1.1
%isFair=1 adding points is based on distance isFair=0 adding of points based on edges
function   [X,Y]=divider(X,Y,n,isFair)



try
    if isFair==1
    else
        isFair=0 ;
    end
catch
    
isFair=0;
end
switch isFair
    case 0
T1=0;
T2=0;

for i=1:length(X)-1
    temp1=0;
    temp1=linspace(X(i),X(i+1),n+2)  ;
    
    T1=[T1,temp1(1:end-1)];
end
T1=[T1,temp1(end)];
X=T1(2:end);


for i=1:length(Y)-1
    temp2=0;
    temp2=linspace(Y(i),Y(i+1),n+2)  ;
    
    T2=[T2,temp2(1:end-1)];
end
T2=[T2,temp2(end)];
Y=T2(2:end);
    case 1

dists= sqrt( (X(2:end)-X(1:end-1)).^2 + (Y(2:end)-Y(1:end-1)).^2) ;


n1=round((dists./min(dists))*n);
T1=0;
T2=0;

for i=1:length(X)-1
  
    temp1=0;
    temp1=linspace(X(i),X(i+1),n1(i)+2)  ;
    
    T1=[T1,temp1(1:end-1)];
end
T1=[T1,temp1(end)];
X=T1(2:end);


for i=1:length(Y)-1
    temp2=0;
    temp2=linspace(Y(i),Y(i+1),n1(i)+2)  ;
    
    T2=[T2,temp2(1:end-1)];
end
T2=[T2,temp2(end)];
Y=T2(2:end);
end


end


%%%%%%%%%%%%%%%%%%%%%%%%%%-----------software details-----------%%%%%%%%%%%%%%%%%%%%%%

%devloped in Iran(ardebil)                                       %
%Copyright (C) 2017(1396) by moussa hasanzadeh as the head devloper %%
%All rights reserved.                                             % 
%programed in mathlab 2016                                 
%gmail:mo30no@gmail.com
%phone 09147082079

% here  u can make net objects, setting them and connect them togather, send message and capture them ,... the last version of this library will release at the end of 1397(2018)
% the last version will be a combnation of real and virtual environment for Analysiing of network as a good ,...
 
%%%%%%%%%%%%%%%%%----------published by http://wcnet.blog.ir/------------%%%%%%%%%%%%%%

 

اسکریپت فراخوانی این تابع، برای تنظیم مد منصفانه و غیر منصفانه به جای isFair  به ترتییب مقدار 1 و 0 قرار دهید. مقدار n هم تعداد را مشخص می کنه

 

  net=[];
  net.width=100;
  net.length=100;
  net.side=7;
  net.nodNum=200;
  ph=pi/net.side;
  
  t=linspace(0,2,net.side+1);
  
  x=sin(pi*t+ph); x=(((x-min(x))/(max(x)-min(x)))-0.5)* net.length;
  y=-cos(pi*t+ph);y=(((y-min(y))/(max(y)-min(y)))-0.5)*net.width;

  
figure;plot(x,y,'-*');
[X,Y]=divider(x,y,5,1);
figure;plot(X,Y,'-*');






  net=[];
  net.width=100;
  net.length=100;
  net.side=7;
  net.nodNum=200;
  ph=pi/net.side;
  
  t=linspace(0,2,net.side+1);
  
  x=[1,3,1.2,6,4]
    y=[4,0,12.2,3,1]

  
figure;plot(x,y,'-*');
[X,Y]=divider(x,y,5,1);
figure;plot(X,Y,'-*');
axis('equal')

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۸ ، ۱۲:۴۴
موسی حسن زاده
يكشنبه, ۳ آذر ۱۳۹۸، ۱۱:۰۳ ق.ظ

نحوه ساخت یک محیط شبکه و توزیع نودها در آن

در کد زیر شما با اعمال تنظیمات می‌تونید تعداد نود(nodNum)، چند ضعلی بودن محیط شبکه (side)، رنگ بندی('r*') ، طول عرض محیط شبکه یا ناحیه شبکه(width و..)  جهت گیری محیط شبکه(ph) را تغییر دهید، با این وجود اگر net.side را به 3، 5 و... تغییر بدهید، تعدادی از نودها در خارج از شبکه قرار می‌گیرند، برای حل این مشکل از تابع دیوایدر و یک الگوریتم ابتکاری می تونید استفاده کنید که در پست‌های بعدی در مورد ان شرح خواهم داد...

 

 

%% clear commands
delete(allchild(0));close all;
clear;
clc;

%% path commands
file=matlab.desktop.editor.getActive;
try 
fileDetail=dir(file.Filename);
folderName=fileDetail.folder;
catch
   index=strfind( file.Filename,'\');
   folderName=file.Filename(1:index(end)-1);
end
paths=genpath(folderName);
addpath(paths);
cd(folderName);


%% net building and initialization
  net=[];
  net.width=100;
  net.length=100;
  net.side=4;
  net.nodNum=200;
  ph=pi/net.side;
  
  t=linspace(0,2,net.side+1);
  
  x=sin(pi*t+ph); x=(((x-min(x))/(max(x)-min(x)))-0.5)* net.length;
  y=-cos(pi*t+ph);y=(((y-min(y))/(max(y)-min(y)))-0.5)*net.width;

  plot(x,y,'-');hold on;
  
  for NInd=1:net.nodNum
      x=(rand-0.5)*net.length;
      y=(rand-0.5)*net.width;
      energy=0.5;
      plot( x,y,'r*');hold on;
      
  end





 

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ آذر ۹۸ ، ۱۱:۰۳
موسی حسن زاده