MATLAB的无线传感器网络(WSN)算法仿真

一、仿真系统架构

1. 网络模型参数
matlab 复制代码
% 基础参数设置(参考)
xm = 100; ym = 100;    % 区域尺寸(m)
n = 100;               % 节点数量
p = 0.1;               % 簇头比例
Eo = 0.5;              % 初始能量(J)
ETX = 50e-9;           % 发射能耗(J/bit)
ERX = 50e-9;           % 接收能耗(J/bit)
Efs = 10e-12;          % 自由空间路径损耗
Emp = 0.0013e-12;      % 多径衰落路径损耗
EDA = 5e-9;            % 数据聚合能耗
rmax = 5000;           % 最大轮次
2. 节点部署
matlab 复制代码
% 节点位置初始化(异构能量分布)
nodes = struct('x',[],'y',[],'E',[],'type',[]);
for i = 1:n
    nodes(i).x = rand()*xm;
    nodes(i).y = rand()*ym;
    nodes(i).E = Eo*(1 + 0.1*rand());  % 异构能量
    nodes(i).type = 'N';
end
nodes(n+1).x = xm/2; nodes(n+1).y = ym/2;  % 汇聚节点

二、核心算法实现

1. LEACH协议仿真

(1) 簇头选举

matlab 复制代码
function [countCH, energy] = leach_protocol(nodes, r, p)
    countCH = 0; energy = 0;
    cluster = 1; n = length(nodes)-1;
    for i = 1:n
        if nodes(i).E > 0
            temp_rand = rand();
            T = p / (1 - p*mod(r, round(1/p)));  % 阈值计算
            if temp_rand <= T
                countCH = countCH + 1;
                nodes(i).type = 'C';
                nodes(i).G = round(1/p) - 1;
                
                % 能量消耗计算
                d = sqrt((nodes(i).x - nodes(n+1).x)^2 + (nodes(i).y - nodes(n+1).y)^2);
                if d > sqrt(Efs/Emp)
                    energy_cost = (ETX + EDA)*4000 + Emp*d^4;
                else
                    energy_cost = (ETX + EDA)*4000 + Efs*d^2;
                end
                nodes(i).E = nodes(i).E - energy_cost;
            end
        end
    end
end

(2) 数据传输与能量更新

matlab 复制代码
% 簇成员加入与数据传输
for i = 1:n
    if nodes(i).type == 'N' && nodes(i).E > 0
        min_dist = inf;
        for c = 1:countCH
            d = sqrt((nodes(i).x - nodes(c).x)^2 + (nodes(i).y - nodes(c).y)^2);
            if d < min_dist
                min_dist = d;
                cluster = c;
            end
        end
        % 传输能耗计算
        if min_dist > sqrt(Efs/Emp)
            nodes(i).E = nodes(i).E - (ETX + Emp)*4000;
        else
            nodes(i).E = nodes(i).E - (ETX + Efs)*4000;
        end
    end
end

2. 改进算法实现

(1) LEACH-C(能量感知簇头选举)

matlab 复制代码
function p = leach_c_election(nodes, r)
    avg_energy = mean([nodes.E]);
    p = 0.1 * (nodes.E / avg_energy);
    p(p > 0.2) = 0.2;  % 概率上限限制
end

(2) 虚拟力覆盖优化

matlab 复制代码
% 虚拟力驱动节点移动(参考)
function nodes = virtual_force_optimization(nodes, step)
    for i = 1:length(nodes)-1
        if nodes(i).E > 0
            F_rep = 0; F_att = 0;
            for j = 1:length(nodes)-1
                if i ~= j
                    d = sqrt((nodes(i).x - nodes(j).x)^2 + (nodes(i).y - nodes(j).y)^2);
                    if d < 30  % 斥力半径
                        F_rep = F_rep + (d-30)*exp(-d/10);
                    elseif d > 50  % 引力半径
                        F_att = F_att + (50-d)*exp(-(50-d)/20);
                    end
                end
            end
            nodes(i).x = nodes(i).x + step*(F_rep + F_att)/1000;
            nodes(i).y = nodes(i).y + step*(F_rep + F_att)/1000;
        end
    end
end

三、性能评估模块

1. 能量消耗监控
matlab 复制代码
STATISTICS = struct('DEAD',[],'ALIVE',[],'ENERGY_CONSUMED',[]);
for r = 1:rmax
    [countCH, energy] = leach_protocol(nodes, r, p);
    dead = sum([nodes.E] <= 0);
    STATISTICS.DEAD(r) = dead;
    STATISTICS.ALIVE(r) = n - dead;
    STATISTICS.ENERGY_CONSUMED(r) = sum([nodes.E]);
end
2. 可视化展示
matlab 复制代码
% 网络拓扑与存活状态
figure;
plot(nodes(1:n).x, nodes(1:n).y, 'bo'); hold on;
plot(nodes(n+1).x, nodes(n+1).y, 'rx', 'MarkerSize', 10);
title('WSN网络拓扑结构');
xlabel('X坐标(m)'); ylabel('Y坐标(m)');
legend('普通节点', '汇聚节点');

% 存活曲线
figure;
plot(1:rmax, STATISTICS.DEAD, 'r', 1:rmax, STATISTICS.ALIVE, 'g');
title('节点存活状态变化');
xlabel('轮次'); ylabel('节点数量');
legend('死亡节点', '存活节点');

参考代码 MATLAB仿真无线传感器网络算法 www.youwenfan.com/contentcsi/64397.html

四、扩展应用场景

  1. 动态拓扑调整:结合节点移动模型模拟移动自组织网络(MANET)
  2. 多跳路由优化:实现基于能量感知的多跳转发策略
  3. 环境监测仿真:集成温度/湿度传感器数据采集模块
相关推荐
胖咕噜的稞达鸭6 小时前
缝合怪deque如何综合list和vector实现及仿函数模板如何优化priority_queue实现
数据结构·c++·算法·链表·list
tt5555555555556 小时前
C++ 经典数组算法题解析与实现教程
开发语言·c++·算法
美团技术团队6 小时前
可验证过程奖励在提升大模型推理效率中的探索与实践
人工智能·算法
小邓儿◑.◑7 小时前
贪心算法 | 每周8题(二)
c++·算法·贪心算法
用户901951824247 小时前
【征文计划】基于 CXR-M SDK 打造 “AR 眼镜 + 手机” 户外步徒协同导航系统
算法
爱吃汽的小橘7 小时前
异步串口通信和逻辑分析仪
运维·服务器·网络·单片机·嵌入式硬件·fpga开发
rengang667 小时前
08-决策树:探讨基于树结构的分类和回归方法及其优缺点
人工智能·算法·决策树·机器学习·分类·回归
闻缺陷则喜何志丹8 小时前
【剪枝 贪心 回溯】B4093 [CSP-X2021 山东] 发送快递|普及+
c++·算法·剪枝·贪心·洛谷
猫头虎8 小时前
HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
嵌入式硬件·算法·prompt·aigc·embedding·gpu算力·ai-native