1. NS2环境下,在不同的实验配置下进行网络仿真。testdata*.tcl为一系列配置文件。由于是通过脚本文件进行批处理,所以如果运行单个配置文件有新文件(跟踪文件、日志文件等)生成,最好不要使用默认文件名,而应该在配置文件中为新产生的文件定义能够相互区别的文件名。
for i in testdata*.tcl
do
ns $i
done
生成一批跟踪文件testdata*.tr。
2. Cygwin环境下,从跟踪文件中提取包过程。
for i in testdata*.tr
do
gawk -f extractor.awk $i > $i.sample
done
生成一批包序列文件testdata*.tr.sample。其中extractor.awk文件内容如下:
BEGIN {
time_start = 0;
time_interval = 0.01;
i = 1;
temp = 0;
time_thresh = 0.01;
}
{
action = $1;
time_now = $2;
node_start = $3;
node_end = $4;
if(time_now > time_thresh)
{
N[i] = temp;
temp = 0;
i++;
time_thresh = i*time_interval;
}
if(node_start == 2 && node_end == 4 && action == "+" && time_now <= time_thresh)
temp++;
}
END {
if(temp>0)
{
N[i] = temp;
temp = 0;
i++;
}
for(j=1;j<i;j++)
printf("%f/n",N[j]);
}
3. Matlab环境下,对包过程进行采样。每一个包序列文件采样2组,采样长度为1000(10s)。
tagdata = dir('*.sample');
len = length(tagdata);
for i=1:len
SampleMatrix = load(tagdata(i).name);
MatrixSampled(:,2*i-1) = SampleMatrix(2501:3500);
MatrixSampled(:,2*i) = SampleMatrix(3501:4500);
end
4. Matlab环境下,根据采样数据计算SVM特征值,并且加上类标。
SVMatrix = SVMdata(MatrixSampled,no,class);
注意:在计算CUSUM统计值时会出现“初始异常”现象,以前是通过将初始段全部取0来校正,但在采样长度较小的情况下异常CUSUM统计值的个数占了大部分,被校正为0后可用的正常CUSUM值所剩无几,无法满足计算特征值的要求。改进的校正方法是,在采样得到的数据前加一段平稳数据(确保“初始异常”现象能在该平稳数据段结束),对整个数据段进行CUSUM处理后取后半部分(所取得数据段长度等于采样长度)。上述命令行中的参数no即为校正数据段。SVMdata函数定义如下:
function SVMatrix = SVMdata(MatrixSampled,no,class)
Lnum = size(MatrixSampled,1); %行数
Cnum = size(MatrixSampled,2); %列数
if nargin == 1, %无需校正
fixed = MatrixSampled;
elseif nargin<4,
Nolen = length(no); %校正序列的元素个数
for i=1:Cnum %校正过程
for j=1:(Lnum+Nolen)
if j<=Nolen
fixed(j,i) = no(j);
else
fixed(j,i) = MatrixSampled(j-Nolen,i);
end
end
end
else
error('the number of arguments is wrong!');
end
for i=1:Cnum
SVMatrix(i,1) = class;
SVMatrix(i,2) = mean(MatrixSampled(:,i)); %采样窗口内到达包个数的平均值
Cfixed = cusum(fixed(:,i));
Clen = length(Cfixed);
Cfix = Cfixed((Clen-Lnum+1):Clen); %校正后的CUSUM统计量
SVMatrix(i,3) = mean(Cfix);
[f,psdpercent] = PowerSD(Cfix,100,1024);
temp = 0;
j = 1;
while f(j)<=10
temp = temp+psdpercent(j);
j = j+1;
end
SVMatrix(i,4) = temp; %低频带(0-10Hz)功率所占的比例
temp1 = 0;
temp2 = 0;
for j=1:length(f)
if psdpercent(j)>temp1
temp1 = psdpercent(j);
temp2 = j;
end
end
SVMatrix(i,5) = f(temp2); %最高的功率比例所对应的频率值
SVMatrix(i,6) = temp1; %最高的功率比例
end
end