شبیه سازی مش بلوتوث سیل آسا در شبکه WSN با MATLAB
این مقاله آموزشی شبکه نشان می دهد که چگونه تکنیک سیل آسا (Flooding) مدیریت شده شما را قادر می سازد تا بتوانید با استفاده از جعبه ابزار Bluetooth در نرم افزار MATLAB ارتباطات را در یک شبکه مش بلوتوث (Bluetooth Mesh) بر پایه شبکه حسگر بی سیم (WSN) برقرار کنید. شما با استفاده از این مثال می توانید:
- یک شبکه مش بلوتوث ایجاد و پیکربندی کنید.
- بصری سازی و تجزیه و تحلیل اینکه چگونه تکنیک Flooding مدیریت شده ارتباط بین گره های مبدا و مقصد را حتی پس از غیرفعال سازی برخی گره های رله میانی امکان پذیر می کند.
- جریان پیام ها از مبدا به گره های مقصد را مصور سازی کنید.
- معیار های عملکرد مانند نسبت تحویل بسته شبکه (PDR) ، تأخیر انتها به انتها ، توان عملیاتی و سایر معیارهای مربوط به گره را تجزیه و تحلیل کنید.
همچنین این مثال به شما نشان می دهد که چگونه شبیه سازی های مونت کارلو (Monte Carlo) را در شبکه مش بلوتوث انجام دهید تا گره های رله بحرانی بین منبع و مقصد را شناسایی کنید.
پشته مش بلوتوث
مشخصات هسته بلوتوث شامل یک نسخه انرژی کارا برای شبکه های شخصی بی سیم است که به آن بلوتوث کم انرژی (LE) یا بلوتوث هوشمند گفته می شود. بلوتوث LE به استاندارد دستگاه هایی با انرژی پایین اضافه شده که مقادیر داده کمی تولید می کنند، مانند هشدار های اعلان که در برنامه هایی مانند اتوماسیون خانگی، مراقبت های بهداشتی، تناسب اندام و اینترنت اشیا (IoT) استفاده می شوند. برای اطلاعات بیشتر در رابطه با این موضوع، مقاله آموزشی پشته پروتکل بلوتوث LE را ببینید. نمایه مش بلوتوث، الزامات اساسی برای پیاده سازی راه حل شبکه مش برای بلوتوث LE را تعریف می کند. شبکه مش بلوتوث، شبکه های دستگاهی در مقیاس بزرگ را در برنامه هایی مانند روشنایی هوشمند، اتوماسیون صنعتی، شبکه حسگر و ردیابی دارایی را قادر می سازد. شکل زیر پشته مش بلوتوث (Bluetooth mesh stack) را نشان می دهد.
سناریو های شبکه مش بلوتوث سیل آسا
این مثال از حامل تبلیغ (Advertising bearer) برای نشان دادن Flooding مدیریت شده استفاده می کند. همچنین این مثال شما را قادر می سازد تا دو سناریو شبکه مش بلوتوث را ایجاد و پیکربندی کنید. هر سناریو یک شبکه مش شامل چند گره است. هر سناریو گره های مش را به عنوان گره، گره رله، گره مبدا و گره مقصد طبقه بندی می کند.
- Node : هر دستگاهی که در شبکه مش داریم نود شناخته می شود
- گره رله: گرهی که از قابلیت رله پشتیبانی می کنه و فعال شده است
- گره منبع: گره ای است که بسته ها را منشا ارسال می کند
- گره مقصد: گرهی که بسته های گره مبدأ را دریافت می کند
اولین سناریوی شبکه مش دارای 21 گره مش شامل گره های رله، گره مبدا و گره مقصد است. سناریوی دوم ویژگی رله برخی گره ها را غیرفعال کرده و یک گره را از شبکه مش حذف می کند. برای هر دو سناریو، می توانید جریان پیام را در شبکه تجسم کرده و این آمار را بازیابی کنید.
- PDR شبکه: نسبت تعداد بسته های دریافتی در تمام گره های مقصد به تعداد بسته های ارسال شده توسط تمام گره های مبدا در شبکه مش.
- تأخیر بسته انتها به انتها را در چند ثانیه اعمال کنید
- توان عملیاتی لایه پیوند (LL) در کیلوبیت بر ثانیه
- زمان صرف شده در حالت گوش دادن، وضعیت انتقال، حالت بیکار و حالت خواب در ثانیه
- آمار بسته در لایه کاربردی، لایه شبکه، لایه انتقال، لایه پیوند و لایه فیزیکی
پیکربندی پارامترهای شبیه سازی
تعداد گره ها (numNodes) را به همراه موقعیت آنها و زمان شبیه سازی برای هر دو سناریو مشخص کنید. seed را برای مولد اعداد تصادفی روی 1 تنظیم کنید. مقدار seed الگوی تولید اعداد تصادفی را کنترل می کند. برای نتایج شبیه سازی با دقت بالا، مقدار seed را برای هر اجرا تغییر دهید و نتایج را در چندین شبیه سازی میانگین بگیرید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | % Set random number generator as "twister" rng(1,"twister"); % Specify the simulation time for both scenarios in seconds simulationTime = 0.3; % To highlight message transmission in the mesh network visualization, set % this flag to True. highlightTransmissions = true; % Number of nodes in the mesh network numNodes = 21; |
موقعیت گره ها را از فایل MAT دریافت کنید. موقعیت گره های مش بلوتوث را به عنوان یک آرایه numNodes-by-2 مشخص کنید، قسمت numNodes مربوط به تعداد گره های شبکه است. هر ردیف مختصات دکارتی یک گره را مشخص می کند که از اولین گره شروع می شود.
1 | load("bleMeshNetworkNodePositions.mat"); |
شبیه سازی شبکه مش – سناریو اول
اولین سناریوی شبکه مش از 21 گره مش تشکیل شده است. برخی از گره ها را به عنوان گره های رله و جفت گره مبدا-مقصد تنظیم کنید.
1 2 | relayNodes = [3 6 7 8 9 12 13 14 15 17]; sourceDestinationPairs = [1 10]; |
گره های مش بلوتوث ایجاد کنید. از bluetoothMeshProfileConfig برای ایجاد آبجکت و پیکربندی پروفایل مش استفاده کنید. برای ایجاد یک گره مش بلوتوث، از آبجکت bluetoothLENode استفاده کنید. نقش را به عنوان پخش کننده-ناظر (broadcaster-observer) مشخص کنید و نمایه مش را به MeshConfig اختصاص دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | % Initialize array to store Bluetooth mesh nodes nodesScenarioOne = cell(1,numNodes); clear wirelessNode; % Clear context of wirelessNode % Create Bluetooth mesh network for scenario one for nodeIndex = 1:numNodes % Create and configure Bluetooth mesh profile by specifying the element % address (unique to each node in the network). Set network message % repetitions to 2, and network transmit interval as a random value in % the range [10, 30] milliseconds. meshCfg = bluetoothMeshProfileConfig(ElementAddress=dec2hex(nodeIndex,4),... NetworkTransmissions=2,NetworkTransmitInterval=randi([1 3])*10e-3); % For the configured relayNodes, enable Relay feature. Set relay % message repetitions to 3, and relay retransmit interval as a random % value in the range [10, 30] milliseconds. if any(nodeIndex==relayNodes) meshCfg.Relay = true; meshCfg.RelayRetransmissions = 3; meshCfg.RelayRetransmitInterval = randi([1 3])*10e-3; end % Create and configure Bluetooth mesh node by assigning the mesh profile. % Set receiver range, advertising interval (seconds) and scan interval (seconds). meshNode = bluetoothLENode("broadcaster-observer",MeshConfig=meshCfg,... Position=[bleMeshNetworkNodePositions(nodeIndex,:) 0],Name="Node"+num2str(nodeIndex),... ReceiverRange=25,AdvertisingInterval=20e-3,ScanInterval=30e-3); % Store mesh nodes nodesScenarioOne{nodeIndex} = meshNode; end |
در این بخش ترافیک برنامه را به گره های منبع اضافه کنید. یک آبجکت networkTrafficOnOff برای ایجاد الگوی ترافیک برنامه On-Off ایجاد کنید. الگوی ترافیک برنامه On-Off را با تعیین نرخ داده برنامه، اندازه بسته، مدت زمان حالت روشن و خاموش پیکربندی کنید. ارتباط مش را بین جفت های منبع و مقصد مشخص شده در شبکه مش شبیه سازی کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | for srcIdx = 1:numel(sourceDestinationPairs)/2 % Create network traffic object using networkTrafficOnOff. Set data rate % and packet size. Set on and off times based on the simulation time. traffic = networkTrafficOnOff(DataRate=1,PacketSize=15,GeneratePacket=true,... OnTime=simulationTime*0.3,OffTime=simulationTime*0.7); % You can control the maximum number of hops that the source node uses to % relay message by setting the time-to-live (TTL) value. ttl = 10; % Attach application traffic to source addTrafficSource(nodesScenarioOne{sourceDestinationPairs(srcIdx,1)},traffic, ... % Traffic object SourceAddress=nodesScenarioOne{sourceDestinationPairs(srcIdx,1)}.MeshConfig.ElementAddress,... % Source element address DestinationAddress=nodesScenarioOne{sourceDestinationPairs(srcIdx,2)}.MeshConfig.ElementAddress,... % Destination element address TTL=ttl); end |
در این بخش شبکه مش را تجسم یا بصری سازی کنید. سناریوی شبکه مش را با استفاده از آبجکت HelperBLEMeshVisualizeNetwork تجسم کنید.
1 | edit('helperBLEMeshVisualizeNetwork') |
آبجکت کمکی را به پارامتر NetworkPlot در آبجکت کمکی helperBLEMeshEventCallback اختصاص دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | edit('helperBLEMeshEventCallback') % Object to visualize mesh network plotScenarioOne = helperBLEMeshVisualizeNetwork(NumberOfNodes=numNodes,... NodePositionType="UserInput",Positions=bleMeshNetworkNodePositions,... VicinityRange=25,SimulationTime=simulationTime,... SourceDestinationPairs=sourceDestinationPairs,... Title="Scenario 1: Bluetooth Mesh Flooding"); % Object to handle visualization callbacks visualizeScenarioOne = helperBLEMeshEventCallback(NetworkPlot=plotScenarioOne,... HighlightTransmissions=highlightTransmissions,Nodes=nodesScenarioOne); init(visualizeScenarioOne); |
مسیر و جریان پیام بین منبع و گره های مقصد را با اضافه کردن listeners در نظر بگیرید. برای اطلاعات بیشتر، مقاله آموزشی eventlisteners را ببینید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | for nodeIndex = 1:numNodes % Add listener at each node for visualizing the message flow in the network if highlightTransmissions addlistener(nodesScenarioOne{nodeIndex},"PacketTransmissionStarted",... @(src,evt) visualizeScenarioOne.visualizeTransmissions(src,evt)); end % Add listener at each node for storing the message receptions in the network addlistener(nodesScenarioOne{nodeIndex},"PacketReceptionEnded", ... @(src,evt) visualizeScenarioOne.storeRx(src,evt)); end % Add listener at destination nodes for visualizing the path between % source and destination for dstIdx = 1:numel(sourceDestinationPairs)/2 addlistener(nodesScenarioOne{sourceDestinationPairs(dstIdx,2)},"MeshAppDataReceived",... @(src,evt) visualizeScenarioOne.showPath(src,evt)); end |
مقدار دهی اولیه شبکه بی سیم و اجرای شبیه سازی:
1 | networkSimulator = helperWirelessNetwork(nodesScenarioOne); |
تمام گره های شبکه را برای زمان شبیه سازی مشخص شده اجرا کنید.
1 | run(networkSimulator,simulationTime); |
پیشرفت شبیه سازی را در پایان شبیه سازی به روز رسانی کنید.
1 | updateProgressBar(visualizeScenarioOne.NetworkPlot,simulationTime); |
شبیه سازی شبکه مش – سناریو دوم
سناریوی شبکه مش دوم از 21 گره مش تشکیل شده است. در این سناریو، قابلیت رله در Node7، Node12 غیرفعال شده و Node15 از شبکه حذف می شود.
1 2 | relayNodes = [3 6 8 9 13 14 17]; failedNode = 15; |
با استفاده از آبجکت helperBLEMeshSimulateScenarioTwo شبکه مش را برای سناریوی دو ایجاد، پیکربندی و شبیه سازی کنید.
1 2 3 4 | edit('helperBLEMeshSimulateScenarioTwo') [nodesScenarioTwo,visualizeScenarioTwo] = helperBLEMeshSimulateScenarioTwo(bleMeshNetworkNodePositions,... simulationTime,highlightTransmissions,sourceDestinationPairs,ttl,relayNodes,failedNode); |
نتایج شبیه سازی
جدول آمار هر دو سناریو را با استفاده از تابع helperBLEMeshStatistics مشاهده کنید.
1 2 3 4 | edit('helperBLEMeshStatistics') statisticsScenarioOne = helperBLEMeshStatistics(nodesScenarioOne); statisticsScenarioTwo = helperBLEMeshStatistics(nodesScenarioTwo); |
PDR و مسیر را برای هر دو سناریو محاسبه کنید.
1 | [pdrScenarioOne,pathScenarioOne] = meshResults(visualizeScenarioOne,statisticsScenarioOne) |
1 | [pdrScenarioTwo,pathScenarioTwo] = meshResults(visualizeScenarioTwo,statisticsScenarioTwo) |
نتایج به دست آمده نشان می دهد که مسیری بین گره های مبدا و مقصد وجود دارد، حتی اگر گره ها به طور تصادفی در شبکه از کار بیفتند.
کاوش بیشتر
برای به دست آوردن میانگین نتایج عددی در شبیه سازی های چندگانه، مثال ارائه شده در مرجع [4] روش مونت کارلو را پیاده سازی می کند. برای پیاده سازی شبیه سازی مونت کارلو، از تابع helperBLEMeshMonteCarloSimulations استفاده کنید. هر اجرای شبیه سازی این مراحل را انجام می دهد.
1 | edit('helperBLEMeshMonteCarloSimulations') |
- از یک seed جدید برای تولید یک عدد تصادفی استفاده کنید
- به طور تصادفی گره های رله را تا زمانی که مسیری بین گره های مبدا و مقصد وجود داشته باشد غیر فعال کنید
- PDR را ذخیره کنید
شبیه سازی های مونت کارلو (Monte Carlo) گره های رله حیاتی مورد نیاز برای اطمینان از تحویل پیام از مبدا به مقصد را در خروجی نشان می دهد. مثال شبیه سازی مونت کارلو، با استفاده از این پارامترهای پیکربندی انجام می شود.
1 2 3 4 5 6 7 8 9 10 11 | % Relay nodes relayNodes = [3 6 7 8 9 12 13 14 15 17]; % Source and destination pair sourceDestinationPairs = [1 10]; % TTL value for messages originated from the source ttl = 10; |
برای مشاهده نتایج شبیه سازی، فایل MAT bleMeshMonteCarloResults را ببینید.
1 2 3 | load("bleMeshMonteCarloResults.mat"); disp("Further exploration: Nodes [" + num2str(criticalRelaysInfo{1:5,1}') + ... "] are the top 5 critical relays for having communication between Node1 and Node10."); |
کاوش بیشتر: گره های [9 6 7 8 14] 5 رله اصلی برای برقراری ارتباط بین Node1 و Node10 هستند.
1 | openExample('bluetooth/BLEMeshNetworkFloodingExample') |
منبع: mathworks
هیچ نظری ثبت نشده است