0.完整源码获得方式
方式1:微信或者QQ联系博主
方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码
1.软件版本
matlab2013b
2.本算法理论知识
由于无线传感器网络的特殊性,所以要尽量的延长标签节点的寿命,降低功耗,同时要求标签接受机的复杂度要小。
要求在原有的单步捕获算法和两步捕获算法基础上,进行改进创新,新的算法在标签接收机复杂度较小的条件下,最终达到进一步降低标签节点反馈次数和捕获时长,使标签节点功耗降低的目的。
通过论文的分析可知,论文中的基础算法为单步捕获算法,其改进之处在于单步捕获算法基础之上的双步捕获算法,从而解决了捕获时长和精度的问题。
这里,我的改进出发点是分析单步的缺陷,双步的缺陷,从节点损耗,捕获时间长度以及捕获精度三个方面考虑算法的改进。
算法创新方案:
通过论文中的分析可知,单步捕获算法和双步捕获算法的优缺点如下:
单步捕获 | 双步捕获 | ||
优点 | 缺点 | 优点 | 缺点 |
算法简单 | 只适用于低精度同步 | 满足高精度捕获需求 | 一定程度上增加了节点功耗(Pd概率值较小的情况) |
一次完成同步 | 高精度同步时延大 | 高精度同步时延较小 | |
节点功耗较低 |
通过分析可知,由于双步捕获算法,需要增加反馈次数,会在一定程度上增加节点的功耗,因此,考虑节点损耗因素,需要设计一种算法,在满足低时延,高精度的前提下,不增加节点损耗的算法,就是我们这个算法的主要目标。
考虑低时延,高精度这两个因素,本算法还是考虑引入两步捕获算法;
考虑低功耗因素,本算法主要从如下几个方面考虑:
由于,信息传输和计算会消耗大量的能量,无线传感器网络中的节点都是由电池供电,能源有限,让节点长时间持续时间同步过程以达到极高精确度的时钟同步将导致极大的损耗,
节点持续进行时钟同步对能量有限的无线传感器网络来说是一种巨大的浪费。
因此,在实际中,需要对节点的同步精度进行规划,此外,为了降低每个节点的反馈次数,可以考虑多节点协作的反馈方式。
本算法的基本结构框图如下所示:
对于原算法,主机和目标节点的反馈是基于1对1的方式,即对于任何一个节点,需要进行同步,那么需要通过主机和节点之间进行反馈运算:
每个1对1的主机节点网络的运输满足如下的结构(来自论文资料)
即,每个节点需要做相位估计和反馈操作。为了进一步降低每个节点损耗,需要降低每个节点的运算量,那么我们采取如下的网络结构进行。
即节点将相位估计的结果,以最小的功率发送到相邻节点,再由相邻节点发送给主机,这样,对于节点1,其在同一时间段内,只需要使用相位估计和短距离发送的功率,从而大大降低了单个节点的使用寿命。
更进一步可以采用如下的方式:
采用这种方式,可以大大降低发送功率,但是采用这种方式,需要在主机端设计多对一的接收机制,需要引入波速成形等技术。
通过上述的思想,可以降低单个节点损耗,从而延长了单个节点的使用寿命。
而采用多个相邻节点组合的方式,更进一步降低了发送节点的功耗,在接收端只要通过接收n个节点的信息来提取目标节点1的相位估计值。
3.核心代码
clc;
clear;
close all;
warning off;
%锯齿波环路结构搭建
KK = 20; %窄脉冲分段精度
T = KK; %捕获积分宽度,单位:信号周期数
Tao = T/KK; % 窄脉冲宽度设置为T/KK
Ts = -49:50;
Kd = 1/max(Ts); %假设环路增益为1
Theta1= -12; %设置主机的相位值(主机相位依次由最小值->最大值)
Theta2= -11; %设置标签节点的相位值
%定义主机发送的窄脉冲函数
gt = func_gt(Theta1,Ts,Tao);%窄脉冲函数
figure;
stem(Ts,gt);title('主机发送的窄脉冲');
xlabel('主机发送的相位值');
ylabel('窄脉冲');
%定义标签节点的锯齿波信号
S = func_S(Theta2,Ts,Kd);
figure;
plot(Ts,S,'LineWidth',4);title('锯齿波');
xlabel('标签节点的相位值');
ylabel('锯齿波');
%捕获过程的基本原理的仿真
%主机端发送相位为theta1的窄带脉冲
gt;
%标签节点产生相位为theta2的窄带脉冲
S;
%窄带脉冲和标签节点做相关运算
% R = xcorr(gt,S,'biased');
R = zeros(1,length(Ts));
for i = 1 : length(Ts)
R(i) = gt(i)*S(i);
end
Vcor = R/Tao;
figure;
stem(Ts,Vcor);title('计算得到相关值');
diff_theta = Vcor/Kd;
diff_theta = diff_theta(diff_theta~=0)
diff_theta = diff_theta - max(Ts)
if diff_theta == Theta1 - Theta2
disp('捕获成功');
else
disp('正在捕获过程中');
end
4.操作步骤与仿真结论
分别运行main01~main05
这个部分的代码主要设计了相位可调的窄脉冲和相位可调的锯齿波,以及在理想环境下的捕获仿真,仿真的结果如下所示:
主机端发送的窄脉冲:
本地节点的锯齿波:
窄脉冲和锯齿波的相关结果:
系统最后的仿真结果:
实际在参数预先设置的时候相位差为-1,这说明捕获成果。
其中,代码中
这个是参数可调窄脉冲,三个参数分别为相位值,积分长度,窄脉冲宽度。
这个是参数可调锯齿波,三个参数分别为相位值,积分长度,环路增益(锯齿波斜率)。
这个部分,主要将该模块用于实际环境,加入噪声进行仿真,并分析捕获误差。
主机通过无线发送到节点的时候,往往会受到噪声的干扰,因此,本地接收到的窄脉冲为:
上面两图是不同噪声下,标签节点接收到的窄脉冲信号。
然后进行相关,我们可以得到如下的结果:
此信号为误差曲线,即在不同的噪声下捕获到的相位和实际的相位的误差。从仿真结果可知,当SNR为6的时候,误差接近0.
通过设置门限进行反馈判决,门限的大小根据具体的精度要求进行。
捕获阶段可将门限设置大点,而根据阶段可将门限设置小点。。。
仿真结果如下所示:
这个依然是窄脉冲和锯齿波。
捕获误差。
相位捕获过程。
跟踪误差,只要在设定的门限内,就进入跟踪状态。
这个部分和论文中的相似,代码和你提供的相似,主要是考虑锯齿波的反馈延迟进行设计的,具体的理论,这里就不多做介绍了,主要参考最早的参考论文。
反馈次数为:
这个是理论和实际的反馈次数及捕获时长的仿真对比图。
这个部分是采用本文的算法和论文中所说的一步两步算法的性能对比仿真。
由此可知,本文的算法具有明显的优势。
5.参考文献
[1]庄祎梦. 无线传感器网络时间同步算法研究与实现[D]. 上海交通大学.
A12-04