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

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

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

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

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

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

در این حالت شما دیگران نگران  اندازه اعداد برای تبدیل آنها با یکدیگر نخواهید بود مثلا در متلب شما نمی توانید اعدادی بزرگتر از 53 را به شکل باینری دربیاورید، ولی با استفاده از این دو تابع و تولباکس vpi آن را در ادامه قرار می دم  می توانید از این محدودیت خارج بشید.

کد تابع   biNum=dec2binVeryLong(decNum)

function biNum=dec2binVeryLong(decNum)


basN=vpi(2);
outNum=decNum/basN;
biNum=rem(decNum,basN);

while(true)
      if outNum==1 ||  outNum==0
            break;
      end
      biNum(end+1)=rem(outNum,basN);
      outNum=floor(outNum/basN);
      
end
biNum(end+1)=outNum;
biNum=biNum(end:-1:1);
biNum=vpi2bin(biNum)';
end
% [biNum,decNumBack]=dec2binVeryLong(10^301)


 

نمونه کد فراخوانی

 
dNum=['657666666666666666666657688886774564556398567567890656708946809546547809546485945687934583939'...
      '83453897345876874765464567896546896456458979879456489564574997645646548994597797974564894534']

biNum=dec2binVeryLong(vpi(dNum))

نمونه خروجی

dNum =
65766666666666666666665768888677456455639856756789065670894680954654780954648594568793458393983453897345876874765464567896546896456458979879456489564574997645646548994597797974564894534
biNum =
11110111101001001111010101100101110011011000111010110010001101011100101111000011101001110100000110001010101101100001001010000100100100010100110011011111000101010000001111110110010100100111001111111101010001000010111111011110001010001111011001110110100100111110010001110010010101101010110110100111101001101100000101111110111110011100110011101000001010010011001111001100101000100101100010101110100101100000101011011010101100011110110000010111111000010000100001001001001010000111000010001110110001000110000101001010101100011101001100111100000100111110010101010101110011010000111100011111000000001010110111011101000110
>> 

 

کد تابع  decNum=bin2decVeryLong(biNum)

function decNum=bin2decVeryLong(biNum)

biVect=biNum(:)';
binSiz=max(size(biVect));
baseN=vpi(2);

binare= power(baseN,[0:binSiz-1]);
binare=binare(end:-1:1);

selct=(biVect=='1');
decNum=sum(binare(selct'));

end

 

کد فراخوانی این تابع

biNum=['1111011110100100111101010110010111001101100011101011001000110101110010111100001110100111010000011'...
      '00010101011011000010010100001001001000101001100110111110001010100000011111101100101001001110011111111010100010000101111110111'...
      '1000101000111101100111011010010011111001000111001001010110101011011010011110100110110000010111111011111001110011001110100000'...
      '101001001100111100110010100010010110001010111010010110000010101101101010110001111011000001011111100001000010000100100100101000011100001000'...
      '1110110001000110000101001010101100011101001100111100000100111110010101010101110011010000111100011111000000001010110111011101000110']

 dNum=bin2decVeryLong((biNum))

 

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

biNum =
11110111101001001111010101100101110011011000111010110010001101011100101111000011101001110100000110001010101101100001001010000100100100010100110011011111000101010000001111110110010100100111001111111101010001000010111111011110001010001111011001110110100100111110010001110010010101101010110110100111101001101100000101111110111110011100110011101000001010010011001111001100101000100101100010101110100101100000101011011010101100011110110000010111111000010000100001001001001010000111000010001110110001000110000101001010101100011101001100111100000100111110010101010101110011010000111100011111000000001010110111011101000110
dNum =
    65766666666666666666665768888677456455639856756789065670894680954654
780954648594568793458393983453897345876874765464567896546896456458979879
456489564574997645646548994597797974564894534                    

 

در ضمن شما برای کار با اعداد بزرگ  در حوزه پردازش های مرتبط با اعداد بزرگ  می توانید از تولباکس  vpi  استفاده کنید .

همچنین کد این توابع در سایت https://www.mathworks.com/ در حسابم ذر این  آدرس بارگذاری شده

 

 

 

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

?When the network should be out of government,s control

we are in control, Whether we like it or not, of course they are right, because people don't understand each other, they learn every things as some genius people want as, then  when each children is birthed, soh will be a Soldier In the service of some geniuses, then soh will hurt  or kille  others, who disagree with soher,s bos.
in our world some poeple is muslim, some Christian some Jewish and so on.
what is difference bitween them why some identify some others as enemy??
this is a question that all we are know, We think we are right or we know more and others should Follow us, but we fear others in while.
govrenments as Agent of Beliefs, should control other Beliefs, using With all availble facilities and tools.
Otherwise, something as bad as a terrorist attack may occur.
If all people are equally trained and there is a reasonable and provable reason behind each traine, such as a math Equation, then there is no reason for people to confront and no reason to control and no reason to have a leader or a bos , because all people  are adults.
if we want to make the world like this, we shold train every think we learn, and have enough efferts to transfer knowledge to others and make it out of governments control, after that, we can release internet and networks from the governments's control.
i want to make  it....if u too, hit like
  

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

مباحث به شکل کاملا  به زبان ساده توضیح داده می شوند، تا بعد ریاضی آن قابل درک باشد.

یک سیگنال از چند بخش ساده تشکیل شده است:

1- بعد زمان(t) 

2- بعد دامنه(A یا اندازه تابع در یک نقطه)

3- بعد مربوط به فرکانس(f)

 معمولا برای ساخت یک  سیگنال از تابع کسینوس یا سینوس استفاده می‌کنند، که ورودی آن‌ها شامل فرکانس، زمان و ثابت مقیاس ( 2pi=6.24) می باشد. این مقادیر ورودی هر تابعی هستند و اگر ثوابت  یا متغیر دیگری به آن‌ها داده شود، بین این سه بخش تقسیم بندی می‌شود.

به عنوان مثال:

y=cos(2*pi*t*f);

در کد متلب بالا، سیگنال حاوی یک فرکانس مشخص می‌باشد یعنی فقط حاوی یک فرکانس است، مثلا 2000( به معنی تعداد  2000  تکرار یا دور در یک ثانیه می باشد.) چرا که اگر ورودی این تابع را به 2*pi*t تقسیم کنیم، یک مقدار عدد بدست می‌آید.

اگر t به شکل زیر باشد و فرکانس برابر 2000 باشد:

t=[ 0.01  0.11  0.21    0.31    0.41    0.51   0.61   0.71  0.81    0.91]  

در آنصورت داریم:

2*pi*t*f=[0.0126    0.1382    0.2639    0.3896    0.5152    0.6409    0.7665    0.8922
    1.0179   1.1435]*10000

حالا اگر این بردار را بر  بردار 2*pi*t تقسیم کنیم، خواهیم داشت:

f=[2000  2000  2000 2000 2000 2000 2000 2000 2000 2000]

نمودار سیگنال با فرکانس ثابت: سمت چپ با فرکانس 1 و سمت راست با فرکانس 2:

اما اگر ورودی تابعی مثل  تابع زیر را به همان مقدار 2*pi*t تقسیم کنیم، درآنصورت تعداد فرکانس را خواهیم داشت.  و اگر مقدار x=1/t باشد:

y=cos(x);

در آنصورت مجموعه ای از فرکانس‌ها را  از طریق عملیات زیر خواهیم داشت:

f=x./(2*pi*t*2000);

f=[1591.5  13.2    3.6   1.7   0.9   0.6  0.4   0.3  0.2  0.2]

نمودار سیگنال، با فرکانس  متغیر بالا به شکل زیر خواهد بود. اما اشکالی که این وسط وجود دارد، این است که تابع  cos(1/t) دوره ای نیست( چون مشتق تابع  در بی نهایت برابر صفر می شه -cos(1/t) /x2  پس دوره ای نیست) و اگر تبدیل فوریه  گرفته شود هیچ فرکانسی آشکار‌سازی نمی‌شه، لذا  فرکانس معنی خود را از دست می ده، ولی همچنان از این تکنیک می توانید برای تشخیص دوره نوسان تابع در حین نزدیک شدن به صفر استفاده کنید مثلا    t 1/1591.5=.62853  ثانیه.

ولی اگر بخواهید  یک سیگنال با فرکانس های متفاوت را به شکل توام داشته باشید، کافی دو سیگنال را باهم جمع کنید به عنوان مثال
با استفاده از کد زیر می‌توانید سیگنال زیر را با دو فرکانس  20 و 2 با سیکل 2(تکرار دو بار) را بسازید که در شکل زیر قابل نمایش است.

البته در اینجا y2 به عنوان سیگنال داده استفاده شده که  بعدا در این مورد  بحث خواهد شد.

%% AM wave DSB with carrier
clc;
clear;
close all;

fs1=2000; %Very high sampling rate 500 kHz
f1=20; %Frequency of sinusoid
f2=2; %Frequency of sinusoid

nCyl=2; %generate five cycles of sinusoid
t1=0:1/fs1:nCyl*1/min(f1,f2); %time index
x1=cos(2*pi*t1*f1);
y1=sin(2*pi*t1*f1);
y2=sin(2*pi*t1*f2) ;

figure;plot(x1+y2.*x1,'r' );

 

 


و اگر از این سیگنال تبدیل فوریه(fft(x بگیرین دو فرکانس های 2 و 20 را در  آن می توانید مشاهده کنید.

 

 

حالا کاربرد، این فرکانس‌ها در چی هست؟؟
خوب هدف از ایجاد و ساخت انواع سیگنال، ارسال داده است، مثلا مودم خانگی از فرکانس 2.4 گیگا هرتز(هر اندازه فرکانس زیاد شود نرخ ارسال داده زیاد می شود) استفاده می کنه، و تعدادی فرکانس در کنار هم یک پهنای باند را تشکیل می دهند، که می شه چند کاربر را با آن ساپورت کرد، مثلا شما وقتی یک مودم خانگی دارین،  و چهار نفر ازش استفاده می‌کنند، هر شخصی می تونه از یک یا  چند فرکانس برای تبادل اطلاعات با مودم(و اینترنت) استفاده کنه، اما باید در یک پهنای باند فرکانس های طوری انتخاب شوند که باهم هم پوشانی نداشته باشند... مثلا علی از فرکانس 2.41، فرزاد از فرکانس 2.44  و.. به این حالت، انتخاب فرکانس به شکل متعامد یا عمود می‌گویند.

حالا چطور باید داده را منتشر کنیم، مثلا علی می خواد یک فایل به قلی! کنه، خوب اول فایل به شکل صفرو یک درمیاریم( چطور؟؟: خوب هر فایل یا متنی یا عدد، در هر دو حالت برای هر حرف یا عدد یک کد عددی مثل کد اسکی یا کد UTF8 اختصاص پیدا می کند، بعد این اعداد می تونند به کد باینری تبدیل شوند، وقتی تبدیل شدند، پشت سر هم به صف می شوند!)
حالا مثلا یک کد باینری به شکل زیر داریم،: علی چطور باید اون به قلی ارسال کنه؟!

راه حل ساده این که شما با یک گوشی هوشمند و سرویس ایمیل یا شبکه اجتماعی تلگرام و.. و با فشار دادن یک دکمه این کار انجام بدینwink
اما  این وسط چطور این مسئله رخ می ده؟:

خوب کد  باینری زیر را داریم:

[1,1,1,0,0,0,0,1,0,1,1,0,1]

به جای هر عدد باینری یک سیمبول می زاریم( سیمبول دیگه چیه؟!!: خوب همون سیگنالی که بالا ساختیم یک سیمبول، مثلا سیمبول 1 اگر سیگنال شکل چپ تصویر اول باشد، سیمبول متناظر با صفر چیه پس؟؟ اینجا بحث مدلاسیون پیش میاد!!)

مدلاسیون چیه؟: مدلاسیون یعنی به جای کدهای باینری، سیمبول ها را جاگذاری کنیم( بعدا در مورد تکنیک های مدلاسیون صحیت خواهیم کرد) حالا می‌خواهیم مدلاسیون برای کد بالا  انجام بدیم:

  به جای 1 می تونیم از سیمبول کسینوس و به جای صفر از سیمبول سینوس( یا سیمبول کسینوس با کمی شیفت فاری( یعنی سیگنال کمی به راست یا چپ حول داده شود) استفاده می‌کنیم: پس کد بالا به شکل زیر در خواهد آمد:

خوب الان این سیگنال داریم، چطور باید منتشر بشه؟؟

خوب راستش اینگه به شکل فیزیکی چطور منتشر بشه، یک مبحث بسیار ساده است، ولی نیازی نیست، وارد این حوزه بشیم، پس کافی که این به عهده کامپیوتر و گوشی خودتون بزارین، تا این سیگنال یا صف سیگنال در هوا یا هر رسانه دیگه منتشر بکنه.

 

در نهایت کد مرتبط با توضیحات بالا:

clc;
clear;
close all;

fs=200; %Very high sampling rate 500 kHz
f=2; %Frequency of sinusoid
nCyl=2; %generate five cycles of sinusoid
t=0:1/fs:nCyl*1/f; %time index
x=cos(2*pi*t*f);
y=sin(2*pi*t*f);




figure;plot(t,x,'r' );hold on;plot([t*0+.5,t*0+.5],[x*0+min(x),x*0+max(x)],'--g' );hold on;
title('Continuous sinusoidal signal');
xlabel('Time(s)');
ylabel('Amplitude');




x=.001:0.001:1;
revX=1./(t);
comX=2*pi*t;
F=revX./comX;

figure;plot(t,cos(revX))
% % x,revX

sig=[cos(2*pi*t*f),cos(2*pi*t*f),cos(2*pi*t*f),sin(2*pi*t*f),sin(2*pi*t*f),sin(2*pi*t*f),sin(2*pi*t*f),cos(2*pi*t*f),sin(2*pi*t*f),cos(2*pi*t*f),cos(2*pi*t*f),sin(2*pi*t*f),cos(2*pi*t*f)]
figure;plot(sig)

xlim( [-1 ,length(sig)+1])
ylim([min(sig)-1 ,max(sig)+1])

disp('');



تمام.

 

 

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

 قبلا تابع پیدا کردن کوتاهترین مسیر در دو بعد را تشریح کردم، این  بار برای حالت یک بعدی ان شرط بزرگتر بودن یا کوچکتر بودن مقصد را اضافه کردم. در کد زیر فیلد آخر برای تعیین شرط می باشد، اگر 1 باشد یعنی نزدیکترین مقصد را که بزگتر از نود مبداء هست، را انتخاب کن، اگر صفر بود یعنی کتر...

[uniqueDestInd, gridDist1,selctedInd,selctedVal]=getNearstDest1DByCondition(destPos, sourcPos,isplot,isFig,Condition)

کد این تابع:(the matlab code of this function)

i explained this function already but i added a condition, So that,  source can get nearest with only if only  it be Smaller or larger than the  source..

%%%%%%%%%%%%%%%%%%%%%%%%%%-----------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


%%caaling script
% find nearst dest point(source vector) from source point
%   sourcPos.x=randi([-100,100],1,100);
%   destPos.x=randi([-100,100],1,30);
%   [unDestInd, gridDist,selctedDest,selctedDict]=getNearstDest1D(destPos, sourcPos,1,1,1);
% 
%  
%   sourcPos.y=randi([-100,100],1,100);
%   destPos.y=randi([-100,100],1,30);
%   [unDestInd, gridDist,selctedDest,selctedDict]=getNearstDest1D(destPos, sourcPos,1,1,0);
%  gridDist=gridDist.*(destPos.x' >sourcPos.x);
% if Condition==1  % only select destination larger than source  else % only select destination lower  than source


function  [uniqueDestInd, gridDist1,selctedInd,selctedVal]=getNearstDest1DByCondition(destPos, sourcPos,isplot,isFig,Condition)
gridDist=pdist1D(sourcPos,destPos  );%distance between all nodes with grid center points
gridDist1=gridDist;
if nargin==5
if Condition ==1 % only select destination larger than source
gridDist=gridDist.*(sourcPos.x' <destPos.x  ); 
[v,Ind]=max(destPos.x);
gridDist(gridDist==0)=max(gridDist(:))+10;
[selctedVal,selctedInd]=min(gridDist,[],2);% here we used an simple algorithm to determine each node in network is belong to which cell in grid network
selctedInd(Ind)=Ind;
selctedVal(Ind)=v ;    
else% only select destination lower  than source
 gridDist=gridDist.*(sourcPos.x' >destPos.x  ); 
[v,Ind]=min(destPos.x);
gridDist(gridDist==0)=max(gridDist(:))+10;
[selctedVal,selctedInd]=min(gridDist,[],2);% here we used an simple algorithm to determine each node in network is belong to which cell in grid network
selctedInd(Ind)=Ind;
selctedVal(Ind)=v ;     
end
else
      
end

uniqueDestInd=  unique(selctedInd);% 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.x*0+.5,'ro') ;hold on
        r= rand(1,length(sourcPos.x))  ;
        plot([sourcPos.x;destPos.x(selctedInd')] ,[sourcPos.x*0+r;sourcPos.x*0+r  ],'k-');hold on;
        
        if Condition
              
              plot([ destPos.x(selctedInd')] ,[ sourcPos.x*0+r  ],'>');hold on;
        else
              plot([ destPos.x(selctedInd')] ,[ sourcPos.x*0+r  ],'<');hold on;
              
        end

    else
    end
end
end

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


try
      xTs=s.x' * ones(1,length(d.x) );
      
      xTd=ones(1,length(s.x) )' * d.x  ;
      
      gridDist=sqrt((xTs - xTd ).^2 );
catch
      
      yTs=s.y' * ones(1,length(d.y) );
      
      yTd=ones(1,length(s.y) )' * d.y  ;
      
      gridDist=sqrt((yTs - yTd ).^2 );
end

end



 

خروجی این تابع( An output example of this function)

 

 

 

 

 

 

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