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

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

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

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

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

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

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

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

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

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)

 

 

 

 

 

 

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