MATLAB 处理分析 NS2 Trace文件(新Trace格式)

MATLAB 处理分析 NS2 Trace文件(新Trace格式)

NS2 Trace文件格式

关于格式的介绍可以参考链接: link.
格式基本是统一的,形式如下:
r -t 0.001383000 -Hs 93 -Hd -2 -Ni 93 -Nx 29.15 -Ny 510.05 -Nz 0.00 -Ne -1.000000 -Nl MAC -Nw — -Ma 0 -Md ffffffff -Ms 4 -Mt 800 -Is 4.255 -Id -1.255 -It AODV -Il 48 -If 0 -Ii 0 -Iv 30 -P aodv -Pt 0x2 -Ph 1 -Pb 1 -Pd 18 -Pds 0 -Ps 4 -Pss 4 -Pc REQUEST
————————————————
当然tcl生成的trace文件不都是这样统一的,会有一些关于节点位置的记录,如:
M 1.00000 0 (10.05, 498.30, 0.00), (10.05, 494.07), 4.24
————————————————
这样在处理时没法按统一格式来提取数据,所以需要跳过这些首字符为M的数据。

MATLAB 读取处理分析

读取首字符不是M的数据,用新文件保存,代码如下:

fidin=fopen('test.txt');            % 打开test.txt文件 仅测试用   可以换成data.txt 文件较大         

fidout=fopen('mkmatlab.txt','w');       % 创建MKMATLAB.txt文件  用于写入不包含首字符为M的内容

tline = fgetl(fidin);                   % 读取一行数据

while ischar(tline)                     % 该行为字符
    
    tline = fgetl(fidin);               % 读取一行数据,这里不知道为什么,注释掉后不能运行,因为之前读取过一行,这里又读取一行,会少一行数据读取,没太大影响
    
    if char(tline(1))~='M'              % 首字符不为M
        
    fprintf(fidout,'%s\n',tline);       % 写入到新的txt文件
    
    continue                            % 不是M跳过本次循环 即不写入关于M的部分
    
    end  
end

fclose(fidin);                      % 读取后关闭

MK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来

提取到格式统一的数据后,可以使用textread提取(textread的用法详情参考 link),非常方便,代码如下:

filename = '.\MKMATLAB.txt';
[event, t, Hs, Hd, Ni, Nx, Ny, Nz, Ne, NI, Nw, Ma, Md, Ms, Mt, ls, ld, lt, ll, lf, li, lv, P, Pt, Ph, Pb, Pd, Pds, Ps, Pss, Pc ]...
   =textread(filename , '%s %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s %*s %s');
   

读取到需要的数据之后,就可以非常方便的对Trace文件进行分析了,可以对丢包记录进行统计。

% Ni 节点id  event  d表示一次丢包记录  统计每个节点的丢包记录
% 从Ni中判断出节点id
id = unique(Ni);
id_drop_counts = zeros(length(id),1);  %分配空间
for i = 1:length(id)
    counts = 0 ;  % 计数器记录节点丢包的记录
    for j = 1:length(event)
        if event{j}=='d'& id(i)==Ni(j)
            counts = counts + 1;
        end
    end
    id_drop_counts(i,:)=counts;%保存记录丢包记录数
end

% 画图
figure
set(gca,'XLim',[0 max(id)]);%X轴的数据显示范围
set(gca,'XTick',[0:1:max(id)]);%设置要显示坐标刻度
plot(id,id_drop_counts,'*');
xlabel('节点id');
ylabel('恶意记录数');

% 恶意节点id 及恶意记录数
% max_drop_counts 最大恶意记录数
max_drop_counts = max(id_drop_counts);
i = find(id_drop_counts==max_drop_counts);
malicious_id = id(i);
disp(['可能的恶意节点:',num2str(malicious_id),'恶意记录数:',num2str(max_drop_counts)]);

每个节点的丢包记录图:  丢包记录图
接下来大家可以对自己感兴趣的数据进行统计分析。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值