1.一种基于深度学习的无源感知室内定位方法,其特征在于包括以下步骤:①数据采集:
Step1:准备一台电脑,将商用无线网卡intel 5300插入电脑主机的无线网卡扩展槽中,在电脑主机中安装ubuntul2.04系统和Linux 802.11n CSI Tool工具,将该电脑放置在监控室中;
Step2:将待定位的室内沿横向和纵向分成L个区域,其中横向方向沿其最大长度方向横向均分为L1份,纵向方向沿其最大长度方向均分为L2份,由此得到L个区域,L=L1×L2,L1和L2分别为大于4且小于6的整数,选取每个区域的中心处作为该区域的位置,如果该区域为非中心对称区域,则将该区域的横向边线和纵向边线的中垂线的交点作为其中心,将第l个区域的位置记为Sl,l=1,2,...,L;选取室内任意一个点作为原点,将横向方向作为x轴方向,纵向方向作为y轴方向构建室内区域的二维坐标系,通过测量,得到第l个区域Sl的中心点Ll的坐标,将其记为(xl,yl),在待定位的室内的某一位置处设置一台不设置密码且与网络连通的路由器;
Step3:打开电脑主机中的ubuntul2.04系统,电脑主机上设置的商用无线网卡intel
5300与路由器通过无线网络连通,一名测试人员依次站在位置S1~SL处,另一名测试人员在电脑主机处依次获取位置S1~SL处的测试数据,具体过程为:一名测试人员站在位置Sl处时,另一名测试人员通过电脑主机每秒50次的速度ping路由器,收集位置Sl处的N个信号数据包作为位置Sl的测试数据,将位置Sl的测试数据保存为后缀名为.dat的文件,并将该文件命名为csil,N为大于800且小于1000的整数;
②数据处理:在电脑主机的ubuntu12.04系统中安装matlab,使用matlab软件打开Linux 802.11n CSI Tool工具中自带的matlab文件夹,对步骤①中采集的位置S1~SL处的测试数据分别进行处理,得到位置S1~SL处的幅值矩阵,具体过程为:采用matlab文件夹中的read_bf_file函数读取csil.dat文件,获取位置Sl处的N个信号数据包,然后采用get_scaled_csi函数分别打开位置Sl处的N个信号数据包,得到位置Sl处的N个CSI数据矩阵,位置Sl处的每一个CSI数据矩阵分别包含30行3列的CSI数据,CSI数据为复数形式,采用abs函数分别求出位置Sl处的N个CSI数据矩阵对应的CSI幅值矩阵,得到位置Sl处的N个CSI幅值矩阵,位置Sl处的每一个CSI幅值矩阵分别包含30行3列的CSI幅值数据;
③构建深度神经网络模型:所述的神经网络模型包括按照从上到下依次排布的可见层、第一隐藏层、第二隐藏层、第三隐藏层和第四隐藏层,所述的可见层具有K0个神经单元,K0=N*30*3*12,*表示乘运算符号;所述的第一隐藏层具有K1个神经单元,300<K1<500,所述的第二隐藏具有K2个神经单元,200<K2<K1;所述的第三隐藏层具有K3个神经单元,
100<K3<K2;所述的第四隐藏层具有K4个神经单元,50<K4<K3;位于同一层的所有神经单元互不连接,位于相邻两层的所有神经单元全连接,每个所述的神经单元具有两种状态:激活状态和关闭状态,处于激活状态的神经单元的状态值为1,处于关闭状态的神经单元的状态值为0;所述的可见层和所述的第一隐藏层组成第一受限玻尔兹曼机,所述的第一隐藏层和所述的第二隐藏层组成第二受限玻尔兹曼机,所述的第二隐藏层和所述的第三隐藏层组成第三受限玻尔兹曼机,所述的第三隐藏层和所述的第四隐藏层组成第四受限玻尔兹曼机;
④提取位置Sl处的指纹,具体过程为:
步骤C1:对所述的第一受限玻尔兹曼机进行训练:C1‑1.构建存放可见层的状态量的矩阵,将该矩阵记为v;构建存放第一隐藏层的状态量的矩阵,将该矩阵记为ha;构建存放可见层的偏置量的矩阵,将该矩阵记为a;构建存放第一隐藏层的偏置量的矩阵,将该矩阵记为b;构建存放第一隐藏层和可见层之间的连接权重
1 T
的权值矩阵,将该权值矩阵记为w ;其中,v=(v1,v2,v3,...,vK0) ,vk0表示可见层中第k0个T
神经单元的状态量,上标T表示矩阵的转置,k0=1,2…,K0;ha=(ha1,ha2,ha3,...,haK1) ,T
hak1表示第一隐藏层中第k1个神经单元的状态量,k1=1,2,…,K1;a=(a1,a2,a3,...,aK0) ,ak0表示可见层中第k0个神经单元的偏置量,采用随机函数对ak0进行初始化,使ak0为0~0.1T
之间的随机数值;b=(b1,b2,b3,...,bK1) ,bk1表示第一隐藏层中第k1个神经单元的偏置量,采用随机函数对bk1进行初始化,使bk1为0~0.1之间的随机数值;
表示第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重,采用随机函数对 进行初始化,使 为0~0.1之间的随机数值;
C1‑2.对CSI幅值矩阵中各个CSI赋值数据的顺序进行定义:将CSI幅值矩阵中位于第1列第1行的CSI幅值数据至第30行的CSI幅值数据作为该矩阵的第1个CSI幅值数据至第30个CSI幅值数据,第2列第1行CSI幅值数据至第30行CSI幅值数据作为该矩阵的第31个CSI幅值数据至第60个CSI幅值数据,第3列第1行CSI幅值数据至第30行CSI幅值数据作为该矩阵的第61个CSI幅值数据至90个CSI幅值数据;确定位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据对应的12位二进制数,具体过程为:判定位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据是整数还是小数,如果位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据是整数,则将其转换为二进制数并在得到的二进制数的右边补4个0得到新二进制数,然后判定得到的新二进数的位数是否等于12,如果等于12,则将该新二进制数作为位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据对应的12位二进制数;如果大于12,则从右向左选取
12位作为位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据对应的12位二进制数;如果小于12,则在新二进制数的左边补0至位数为12位后作为位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据对应的12位二进制数;如果位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据是小数,则将其整数部分和小数部分分别转换为二进制数,如果整数部分转换得到的二进制数位数小于8,则在其高位补0使其变为8位二进制数;如果整数部分转换得到的二进制数位数大于8,则从右往左保留8位,其他位删除得到8位二进制数;如果整数部分转换得到的二进制数位数等于8,则保持不变;如果小数部分转换得到的二进制数位数等于4,则保持不变;如果小数部分转换得到的二进制数位数小于4,则在其低位补0使变为4位二进制数;如果小数部分转换得到的二进制数位数大于4,则从左往右保留4位其他位删除,得到
4位二进制数,然后将整数部分处理后得到的8位二进制数作为高8位,小数部分处理后得到的4位二进制数作为低4位拼接为12位二进制数,将拼接得到的12位二进制数作为位置Sl处的第N′个CSI幅值矩阵的第q个CSI幅值数据对应的12位二进制数;N′=1,2,…,N;q=1,
2,…,90;将第q个CSI幅值数据对应的12位二进制数从左向右数起第p位的值赋值给v12*3*30*(N′‑1)+(q‑1)*12+p,p=1,2,…,12,由此完成对v1,v2,v3,...,vK0的初始赋值;
C1‑3.构建存放第一隐藏层中第k1个神经单元的状态量的第一次训练值的第一训练矩阵ha′,ha′=(ha′1,ha′2,…,ha′K1)T,ha′k1表示第一隐藏层中第k1个神经单元的状态量的第一次训练值;构建存放第一隐藏层中第k1个神经单元的第一次激活概率的矩阵pa,pa=T
(pa1,pa2,pa3,...,paK1) ,pak1表示第一隐藏层中第k1个神经单元的第一次激活概率;确定第一隐藏层中第k1个神经单元的第一次状态训练值的第一训练矩阵ha′以及第一隐藏层中第k1个神经单元的第一次激活概率的矩阵pa,具体过程为:C1‑3‑1.将第一隐藏层中第k1个神经单元的激活概率记为Pr(k1),采用公式(1)计算得到Pr(k1):
其中,exp表示指数函数,∑为累加符号,bk1为第一隐藏层中第k1个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重的当前值,vk0为可见层中第k0个神经单元的状态量的当前值;
C1‑3‑2.将Pr(k1)的当前值赋值给Pak1,采用随机函数生成一个0~1之间的随机数,将Pr(k1)的当前值与该随机数进行对比,如果Pr(k1)的当前值大于该随机数,则将1赋值给ha′k1,如果Pr(k1)的当前值不大于该随机数,则将0赋值给ha′k1;
C1‑4.构建存放可见层中第k0个神经单元的状态量的训练值的第二训练矩阵v′,v′=T
(v′1,v′2,…,v′K0) ,v′k0为可见层中第k0个神经单元的状态量的训练值;确定可见层中第k0个神经单元的状态量的训练值v′k0,具体过程为:C1‑4‑1.将可见层中第k0个神经单元的激活概率记为Pr(k0),采用公式(2)计算得到Pr(k0):
其中,ak0为可见层中第k0个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重的当前值,ha′k1为第一隐藏层中第k1个神经单元的状态量的第一次训练值;
C1‑4‑2.采用随机函数生成一个0~1之间的随机数,将Pr(k0)的当前值与该随机数进行对比,如果Pr(k0)的当前值大于该随机数,则将1赋值给v′k0,如果Pr(k1)的当前值不大于该随机数,则将0赋值给v′k0;
C1‑5.构建存放第一隐藏层中第k1个神经单元的状态量的第二次训练值的第三训练矩阵ha′′,ha″=(ha″1,ha″2,…,ha″k1)T,ha″k1表示第一隐藏层中第k1个神经单元的状态量的第二次训练值;构建存放第一隐藏层中第k1个神经单元的第二次激活概率的矩阵pa′,pa′T
=(pa′1,pa′2,…,pa′K1) ,pa′k1表示第一隐藏层中第k1个神经单元的第二次激活概率;确定第一隐藏层中第k1个神经单元的状态量的第二次训练值的第三训练矩阵ha′′以及第一隐藏层中第k1个神经单元的第二次激活概率的矩阵pa′,具体过程为:C1‑5‑1.采用公式(3)对第一隐藏层中第k1个神经单元的激活概率Pr(k1),采用公式进行更新:
其中,bk1为第一隐藏层中第k1个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重的当前值,v′k0为可见层中第k0个神经单元的状态量的训练值;
C1‑5‑2.将Pr(k1)的当前值赋值给pa′k1,采用随机函数生成一个0~1之间的随机数,将Pr(k1)的当前值与该随机数进行对比,如果Pr(k1)的当前值大于该随机数,则将1赋值给ha″k1,并同时将1赋值给hak1;如果Pr(k1)的当前值不大于该随机数,则将0赋值给ha″k1,并同时将0赋值给hak1;
C1‑6.将 的当前值加0.01*(pak1*vk0‑pa′k1*v′k0)的和赋值给 对 的值进1
行更新,得到更新后的权值矩阵w ;将ak0的当前值加0.01*(vk0‑v′k0)的和赋值给ak0,对ak0的值进行更新,得到更新后的可见层的偏置量a;将bk1的当前值加0.01*(pak1‑pa′k1)的和赋值给bk1,对bk1的值进行更新,得到更新后的第一隐藏层的偏置量b,其中,pak1、vk0、pa′k1和v′k0的值均为其当前值;
步骤C2:对所述的第二受限玻尔兹曼机进行训练:C2‑1.构建存放第二隐藏层的状态量的矩阵,将该矩阵记为hb;构建存放第二隐藏层的偏置量的矩阵,将该矩阵记为c;构建存放第一隐藏层和可见层之间的连接权值的权值矩
2 T
阵,将该权值矩阵记为w ;hb=(hb1,hb2,hb3,...,hbK2) ,hbk2表示第二隐藏层中第k2个神经T
单元的状态值,k2=1,2,…,K2;c=(c1,c2,c3,..,cK2) ,ck2表示第二隐藏层中第k2个神经单元的偏置量;
表示第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重,分别采用随机函数对ck2和 的值进行初始化,使ck2和分别为0~0.1的随机数值;
C2‑2.构建存放第二隐藏层中第k2个神经单元的状态量的第一次训练值的第四训练矩T
阵hb′,hb′=(hb′1,hb′2,…,hb′K2) ,hb′k2表示第二隐藏层中第k2个神经单元的状态量的第一次训练值;构建存放第二隐藏层中第k2个神经单元的第一次激活概率的矩阵pb,pb=T
(pb1,pb2,pb3,...,pbK2) ,pbk2表示第二隐藏层中第k2个神经单元的第一次激活概率;确定第二隐藏层中第k2个神经单元的状态量的第一次训练值的第四训练矩阵hb′以及第二隐藏层中第k2个神经单元的第一次激活概率的矩阵pb,具体过程为:C2‑2‑1.将第二隐藏层中第k2个神经单元的激活概率记为Pr(k2),采用公式(4)计算得到Pr(k2):
其中,ck2为第二隐藏层中第k2个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,hak1为第一隐藏层中第k1个神经单元的状态量的当前值;
C2‑2‑2.将Pr(k2)的当前值赋值给pbk2,采用随机函数生成一个0~1之间的随机数,将Pr(k2)的当前值与该随机数进行对比,如果Pr(k2)的当前值大于该随机数,则将1赋值给hb′k2;如果Pr(k2)的当前值不大于该随机数,则将0赋值给hb′k2;完成对第四训练矩阵hb′的赋值;
C2‑3.构建存放第一隐藏层中第k1个神经单元的状态量的第三次训练值的第五训练矩阵ha″′,ha″′=(ha″′1,ha″′2,…,ha″′K1)T,ha″′k1表示第一隐藏层中第k1个神经单元的状态量的第三次训练值;确定存放第一隐藏层中第k1个神经单元的状态量的第三次训练值的第五训练矩阵ha″′,具体过程为:
C2‑3‑1.采用公式(5)对第一隐藏层中第k1个神经单元的激活概率Pr(k1),进行更新:其中,bk1为第一隐藏层中第k1个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,hb′k2为第二隐藏层中第k2个神经单元的状态量的第一次训练值;
C2‑3‑2.采用随机函数生成一个0~1之间的随机数,将Pr(k1)的当前值该随机数进行对比,如果Pr(k1)的当前值大于该随机数,则将1赋值给ha″′k1;如果Pr(k1)的当前值不大于该随机数,则将0赋值给ha″′k1;
C2‑4.构建存放第二隐藏层中第k2个神经单元的状态量的第二次训练值的第六训练矩阵hb′′,hb″=(hb″1,hb″2,…,hb″K2)T,hb″k2表示第二隐藏层中第k2个神经单元的状态量的第二次训练值;构建存放第二隐藏层中第k2个神经单元的第二次激活概率的矩阵pb′,pb′T
=(pb′1,pb′2,…,pb′K2) ,pb′k2表示第二隐藏层中第k2个神经单元的第二次激活概率,确定存放第二隐藏层中第k2个神经单元的状态量的第二次训练值的第六训练矩阵hb″以及第二隐藏层中第k2个神经单元的第二次激活概率的矩阵pb′,具体过程为:C2‑4‑1.采用公式(6)对第二隐藏层中第k2个神经单元的激活概率Pr(k2),采用公式进行更新:
其中,ck2为第二隐藏层中第k2个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,ha″′k1为第一隐藏层中第k1个神经单元的状态量的第三次训练值;
C2‑4‑2.将Pr(k2)的当前值赋值给pb′k2,采用随机函数生成一个0~1之间的随机数,将Pr(k2)与当前值与该随机数进行对比,如果Pr(k2)的当前值大于该随机数,则将1分别赋值给hb″k2与hbk2,如果Pr(k2)的当前值不大于该随机数,则将0分别赋值给hb″k2与hbk2;
C2‑5.将 的当前值加0.01*(pbk2*hak1‑pb′k2*ha″′k1)的和赋值给 对 进行2
更新,得到更新后的权值矩阵w ,将bk1的当前值加0.01*(hak1‑ha″′k1)的和赋值给bk1,对bk1进行更新,得到更新后的第一隐藏层的偏置量b,将ck2的当前值加0.01*(pbk2‑pb′k2)的和赋值给ck2,对ck2进行更新,得到更新后的第二隐藏层的偏置量c;其中pbk2、hak1、pb′k2和ha″′k1的值分别为其当前值;
步骤C3:对所述的第三受限玻尔兹曼机进行训练:C3‑1.构建存放第三隐藏层的状态量的矩阵,将该矩阵记为hc;构建存放第三隐藏层的偏置量的矩阵,将该矩阵记为d;构建存放第二隐藏层和第三隐藏层之间的连接权重的权值
3 T
矩阵,将该权值矩阵记为w ;hc=(hc1,hc2,hc3,...,hcK3) ,hck3表示第三隐藏层中第k3个神T
经单元的状态值,k3=1,2,…,K3;d=(d1,d2,d3,...,dK3) ,dk3表示第三隐藏层中第k3个神经单元的偏置量; 表示第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重,分别采用随机函数对dk3和 进行初始化,使dk3和 分别为0~0.1的随机数值;
C3‑2.构建存放第三隐藏层中第k3个神经单元的状态量的第一次训练值的第七训练矩T
阵hc′,hc′=(hc′1,hc′2,…,hc′K3) ,hc′k3表示第三隐藏层中第k3个神经单元的状态量的第一次训练值;构建存放第三隐藏层中第k3个神经单元的第一次激活概率的矩阵pc,pc=T
(pc1,pc2,pc3,...,pcK3) ,Pck3表示第三隐藏层中第k3个神经单元的第一次激活概率;确定存放第三隐藏层中第k3个神经单元的状态量的第一次训练值的第七训练矩阵hc′以及存放第三隐藏层中第k3个神经单元的第一次激活概率的矩阵pc,具体过程为:C3‑2‑1.将第三隐藏层中第k3个神经单元的激活概率记为Pr(k3),采用公式(7)计算得到Pr(k3):
其中,dk3为第三隐藏层中第k3个神经单元的偏置量的当前值, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,hbk2为第二隐藏层中第k2个神经单元的状态值的当前值;
C3‑2‑2.将Pr(k3)的当前值赋值给pck3,得到更新后的矩阵pc,采用随机函数生成一个0~1之间的随机数,将Pr(k3)的当前值与该随机数进行对比,如果Pr(k3)的当前值大于该随机数,则将1赋值给hc′k3;如果Pr(k3)的当前值不大于该随机数,则将0赋值给hc′k3;
C3‑3.构建存放第二隐藏层中第k2个神经单元的状态量的第三次训练值的第八训练矩T
阵hb″′,hb″′=(hb〞′1,hb〞′2,…,hb″′k2) ,hb″′k2表示第二隐藏层中第k2个神经单元的状态量的第三次训练值,确定存放第二隐藏层中第k2个神经单元的状态量的第三次训练值的第八训练矩阵hb″′,具体过程为:
C3‑3‑1.,采用公式(8)对第二隐藏层中第k2个神经单元的激活概率Pr(k2)进行更新:其中,ck2为第二隐藏层中第k2个神经单元的偏置量的当前值, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,hc′k3为第三隐藏层中第k3个神经单元的状态量的第一次训练值;
C3‑3‑2.采用随机函数生成一个0~1之间的随机数,将Pr(k2)的当前值与该随机数进行对比,如果Pr(k2)的当前值大于该随机数,则将1赋值给hb″′k2;如果Pr(k2)的当前值不大于该随机数,则将0赋值给hb″′k2;
C3‑4.构建存放第三隐藏层中第k3个神经单元的状态量的第二次训练值的第九训练矩T
阵hc″,hc″=(hc″1,hc″2,…,hc″K3) ,hc″k3表示第三隐藏层中第k3个神经单元的状态量的第二次训练值;构建存放第三隐藏层中第k3个神经单元的第二次激活概率的矩阵pc′,pc′T
=(pc′1,pc′2,…,pc′K3) ,pc′k3表示第三隐藏层中第k3个神经单元的第二次激活概率;确定存放第三隐藏层中第k3个神经单元的状态量的第二次训练值的第九训练矩阵hc′′以及第三隐藏层中第k3个神经单元的第二次激活概率的矩阵pc′,具体过程为:C3‑4‑1.将第三隐藏层中第k3个神经单元的激活概率记为Pr(k3),采用公式(9)计算得到Pr(k3):
其中,dk3为第三隐藏层中第k3个神经单元的偏置量的当前值, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,hb″′k2为第二隐藏层中第k2个神经单元的状态量的第三次训练值;
C3‑4‑2.将Pr(k3)的当前值赋值给pc′k3,采用随机函数生成一个0~1之间的随机数,将Pr(k3)的当前值与该随机数进行对比,如果Pr(k3)的当前值大于该随机数,则将1分别赋值给hc″k3与hck3;如果Pr(k3)的当前值不大于该随机数,则将0分别赋值给hc″k3与hck3;
C3‑5.将 的当前值加0.01*(pck3*hbk2‑pc′k3*hb″′k2)的和赋值给 对 进行3
更新,得到更新后的权值矩阵w ;将ck2的当前值加0.01*(hbk2‑hb″′k2)的和赋值给ck2,对ck2进行更新,得到更新后的第二隐藏层的偏置量c;将dk3的当前值加0.01*(pck3‑pc′k3)的和赋值给dk3,对dk3进行更新,得到更新后的第三隐藏层的偏置量d,其中,pck3、hbk2、pc′k3和hb″′k2的值分别为其当前值;
步骤C4:对所述的第四受限玻尔兹曼机进行训练:C4‑1.构建存储第四隐藏层的状态量的矩阵,将该矩阵记为hd;构建存储第四隐藏层的偏置量的矩阵,将该矩阵记为e;构建存放第三隐藏层和第四隐藏层之间的连接权重的权值
4 T
矩阵,将该权值矩阵记为w ;hd=(hd1,hd2,hd3,...,hdK4) ,hdk4表示第四隐藏层中第k4个神T
经单元的状态值,k4=1,2,...,K4;e=(e1,e2,e3,...,eK4) ,ek4表示第四隐藏层第k4个神经单元的偏置量, 表示第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重,采用随机函数对ek4和 分别进行初始化,使其分别为0~0.1的随机数值;
C4‑2.构建存放第四隐藏层中第k4个神经单元的状态量的第一次训练值的第十训练矩T
阵hd′,hd′=(hd′1,hd′2,…,hd′k4) ,hd′k4表示第四隐藏层中第k4个神经单元的状态量的第一次训练值;构建存放第四隐藏层中第k4个神经单元的第一次激活概率的矩阵pd,pd=T
(pd1,pd2,pd3,...,pdK4) ,pdk4表示第四隐藏层中第k4个神经单元的第一次激活概率;确定存放第四隐藏层中第k4个神经单元的状态量的第一次训练值的第十训练矩阵hd′以及存放第四隐藏层中第k4个神经单元的第一次激活概率的矩阵pd的,具体过程为:C4‑2‑1.将第四隐藏层中第k4个神经单元的激活概率记为Pr(k4),采用公式(10)计算得到Pr(k4):
其中,ek4为第四隐藏层第k4个神经单元的偏置量的当前值, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,hck3为第三隐藏层中第k3个神经单元的状态量的当前值;
C4‑2‑2.将Pr(k4)的当前值赋值给pdk4,采用随机函数生成一个0~1之间的随机数,将Pr(k4)的当前值与该随机数进行对比,如果Pr(k4)大于该随机数,则将1赋值给hd′k4,如果Pr(k4)的当前值不大于该随机数,则将0赋值给hd′k4;
C4‑3.构建存放第三隐藏层中第k3个神经单元的状态量的第三次训练值的第十一训练T
矩阵hc″′,hc″′=(hc″′1,hc″′2,…,hc″′k3) ,hc″′k3表示第三隐藏层中第k3个神经单元的状态量的第三次训练值,确定存放第三隐藏层中第k3个神经单元的状态量的第三次训练值的第十一训练矩阵hc″′,具体过程为:C4‑3‑1.采用公式(11)对第三隐藏层中第k3个神经单元的激活概率Pr(k3)进行更新:其中,dk3为第三隐藏层中第k3个神经单元的偏置量的当前值, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,hd′k4为第四隐藏层中第k4个神经单元的状态量的第一次训练值;
C4‑3‑2.采用随机函数生成一个0~1之间的随机数,将Pr(k3)的当前值与该随机数进行对比,如果Pr(k3)的当前值大于该随机数,则将1赋值给hc″′k3,如果Pr(k3)的当前值不大于该随机数,则将0赋值给hc″′k3;
C4‑4.构建存放第四隐藏层中第k4个神经单元的状态量的第二次训练值的第十二训练T
矩阵hd′′,hd″=(hd″1,hd″2,…,hd″K4) ,hd″k4表示第四隐藏层中第k4个神经单元的状态量的第二次训练值;构建存放第四隐藏层中第k4个神经单元的第二次激活概率的矩阵pd′,T
pd′=(pd′1,pd′2,…,pd′K4) ,pd′k4表示第四隐藏层中第k4个神经单元的第二次激活概率;
确定存放第四隐藏层中第k4个神经单元的状态量的第二次训练值的第十二训练矩阵hd′′以及第四隐藏层中第k4个神经单元的第二次激活概率的矩阵pd′,具体过程为:C4‑4‑1.采用公式(12)对第四隐藏层中第k4个神经单元的激活概率Pr(k4)进行更新:其中,ek4为第四隐藏层第k4个神经单元的偏置量的当前值, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,hc″′k3为第三隐藏层中第k3个神经单元的状态量的第三次训练值;
C4‑4‑2.将Pr(k4)的当前值赋值给pd′k4,采用随机函数生成一个0~1之间的随机数,将Pr(k4)的当前值与该随机数进行对比,如果Pr(k4)的当前值大于该随机数,则将1分别赋值给hd″k4与hck4,如果Pr(k4)的当前值不大于该随机数,则将0分别赋值给hd″k4与hck4;
C4‑5.将 的当前值加0.01*(pdk4*hck3‑pd′k4*hc″′k3)的和赋值给 对 进行4
更新,得到更新后的权值矩阵w ;将dk3的当前值加0.01*(hck3‑hc″′k3)的和赋值给dk3,对dk3进行更新,得到更新后的第三隐藏层的偏置量d;将e43的当前值加0.01*(pdk4‑pd′k4)的和赋值给ek4,对ek4进行更新,得到更新后的第四隐藏层的偏置量e;其中pdk4、hck3、pd′k4和hc″′k3的值分别为其当前值;
步骤C5:设置迭代变量Y,对迭代变量Y进行初始化,使其初始值为1;
步骤C6:对可见层、第一隐藏层、第二隐藏层、第三隐藏层和第四隐藏层中的各神经单元的激活概率进行第Y次迭代更新,具体过程为:C6‑1.采用公式(13)更新第一隐藏层中第k1个神经单元的激活概率Pr(k1):其中,bk1为第一隐藏层中第k1个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重的当前值,vk0为可见层中第k0个神经单元的状态量的当前值;
C6‑2.采用随机函数生成一个0~1之间的随机数,将Pr(k1)的当前值与该随机数进行对比,如果Pr(k1)的当前值大于该随机数,则将1赋值给hak1,对hak1进行更新;如果Pr(k1)的当前值不大于该随机数,则将0赋值给hak1,对hak1进行更新;
C6‑3.采用公式(14)更新第二隐藏层中第k2个神经单元的激活概率Pr(k2):其中,ck2为第二隐藏层中第k2个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,hak1为第一隐藏层中第k1个神经单元的状态量的当前值;
C6‑4.采用随机函数生成一个0~1之间的随机数,将Pr(k2)的当前值与该随机数进行对比,如果Pr(k2)的当前值大于该随机数,则将1赋值给hbk2,对hbk2进行更新;如果Pr(k2)的当前值不大于该随机数,则将0赋值给hbk2,对hbk2进行更新;
C6‑5.采用公式(15)更新第三隐藏层中第k3个神经单元的激活概率Pr(k3):其中,dk3为第三隐藏层中第k3个神经单元的偏置量的当前值, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,hbk2为第二隐藏层中第k2个神经单元的状态量的当前值;
C6‑6.采用随机函数生成一个0~1之间的随机数,将Pr(k3)的当前值与该随机数进行对比,如果Pr(k3)的当前值大于该随机数,则将1赋值给hck3,对hck3进行更新;如果Pr(k3)的当前值不大于该随机数,则将0赋值给hck3,对hck3进行更新;
C6‑7.采用公式(16)更新第四隐藏层中第k4个神经单元的激活概率Pr(k4):其中,ek4为第四隐藏层中第k4个神经单元的偏置量的当前值, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,hck3为第三隐藏层中第k3个神经单元的状态量的当前值;
C6‑8.采用随机函数生成一个0~1之间的随机数,将Pr(k4)的当前值与该随机数进行对比,如果Pr(k4)的当前值大于该随机数,则将1赋值给hdk4,对hdk4进行更新;如果Pr(k4)的当前值不大于该随机数,则将0赋值给hdk4,对hdk4进行更新;
C6‑9.采用公式(17)再次更新第三隐藏层中第k3个神经单元的激活概率Pr(k3):其中,dk3为第三隐藏层中第k3个神经单元的偏置量的当前值, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,hdk4是第四隐藏层中第k4个神经单元的状态量的当前值;
C6‑10.采用随机函数生成一个0~1之间的随机数,将Pr(k3)的当前值与该随机数进行对比,如果Pr(k3)的当前值大于该随机数,则将1赋值给hck3,对hck3进行更新;如果Pr(k3)的当前值不大于该随机数,则将0赋值给hck3,对hck3进行更新;
C6‑11.采用公式(18)再次更新第二隐藏层中第k2个神经单元的激活概率Pr(k2):其中,ck2为第二隐藏层中第k2个神经单元的偏置量的当前值, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,hck3为第三隐藏层中第k3个神经单元的状态量的当前值;
C6‑12.采用随机函数生成一个0~1之间的随机数,将Pr(k2)的当前值与该随机数进行对比,如果Pr(k2)的当前值大于该随机数,则将1赋值给hbk2,对hbk2进行更新;如果Pr(k2)的当前值不大于该随机数,则将0赋值给hbk2,对hbk2进行更新;
C6‑13.采用公式(19)再次更新第一隐藏层中第k1个神经单元的激活概率Pr(k1):其中,bk1为第一隐藏层中第k1个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,hbk2为第二隐藏层中第k2个神经单元的状态量的当前值;
C6‑14.采用随机函数生成一个0~1之间的随机数,将Pr(k1)的当前值与该随机数进行对比,如果Pr(k1)的当前值大于该随机数,则将1赋值给hak1,对hak1进行更新;如果Pr(k1)的当前值不大于该随机数,则将0赋值给hak1,对hak1进行更新;
C6‑15.采用公式(20)更新可见层中第k0个神经单元的激活概率Pr(k0):其中,ak0为可见层中第k0个神经单元的偏置量的当前值, 为第一隐藏层中第k1个神经单元和可见层中第k0个神经单元之间的连接权重的当前值,hak1为第一隐藏层中第k1个神经单元的状态量的当前值;
C6‑16:采用随机函数生成一个0~1之间的随机数,将Pr(k0)的当前值与该随机数进行对比,如果Pr(k0)的当前值大于该随机数,则将1赋值给v′k0,对v′k0进行更新;如果Pr(k0)的当前值不大于该随机数,则将0赋值给v′k0,对v′k0进行更新;
步骤C7:创建N个用于存放重构CSI幅值数据的重构幅值矩阵,每个重构幅值矩阵能存放30行3列的重构CSI幅值数据,且每个重构幅值矩阵重存放的30行3列的重构CSI幅值数据的排序定义与CS幅值矩阵相同,将v′t~v′11+t按照v′tv′t+1v′t+2v′t+3v′t+4…v′t+9v′t+10v′t+11的排序组合为12位二进制数,t=12n+1,n=0,1,2,…,K0/12‑1,将该12位二进制数从左往右第1位至第8位二进制数作为重构CSI幅值数据整数部分计算得到的对应的十进制数,第9至第12位作为重构CSI幅值数据小数部分计算得到的对应的十进制数,将整数部分对应的十进制数作为整数,小数部分对应的十进制数作为小数部分组合作为该12位二进制数对应的十进制数,将该十进制数作为第N″个重构幅值矩阵的第(((t‑1)/12)+1)‑90*(N″‑1))个重构CSI幅值数据存放到第N″个重构幅值矩阵中, INT为取整函数,得到N个分别存放有30行3列的重构CSI幅值数据的重构幅值矩阵;
步骤C8:计算第N″个重构幅值矩阵与第N″个CSI幅值矩阵之间的欧氏距离,并将第1个重构幅值矩阵与第1个CSI幅值矩阵之间的欧氏距离至第N个重构幅值矩阵与第N个CSI幅值矩阵之间的欧氏距离累加,将得到的和作为输出误差,将该输出误差记为φ;
步骤C9:对可见层、第一隐藏层、第二隐藏层、第三隐藏层和第四隐藏层的偏置量以及
1 2 3 4
w,w,w和w分别进行更新,具体过程为:C9‑1.构建存放可见层中第k0个神经单元的残差项的矩阵δa,δa=(δa1,δa2,…,δaK0),δak0为可见层中第k0个神经单元的残差项;采用公式(21)计算得到可见层中第k0个神经单元的残差项δak0:
δak0=‑(v′k0‑vk0)*v′k0*(1‑v′k0) (21)其中,v′k0为可见层中第k0个神经单元的状态量的训练值的当前值,vk0为可见层中第k0个神经单元的状态量的当前值;
C9‑2.构建存放第一隐藏层中第k1个神经单元的残差项的矩阵δb,δb=(δb1,δb2,…,δbK1),δbk1为第一隐藏层中第k1个神经单元的残差项;采用公式(22)计算得到第一隐藏层中第k1个神经单元的残差项δbk1:
其中, 为可见层和第一隐藏层中第k1个神经单元之间的连接权重的当前值,δak0为可见层中第k0个神经单元的残差项的当前值,hak1为第一隐藏层中第k1个神经单元的状态量的当前值;
C9‑3.构建存放第二隐藏层中第k2个神经单元的残差项的矩阵δc,δc=(δc1,δc2,…,δcK2),δck2为第二隐藏层中第k2个神经单元的残差项;采用公式(23)计算得到第二隐藏层中第k2个神经单元的残差项δck2:
其中, 为第一隐藏层中第k1个神经单元和第二隐藏层中第k2个神经单元之间的连接权重的当前值,δbk1为第一隐藏层中第k1个神经单元的残差项的当前值,hbk2为第二隐藏层中第k2个神经单元的状态量的当前值;
C9‑4.构建存放第三隐藏层中第k3个神经单元的残差项的矩阵δd,δd=(δd1,δd2,…,δdK3),δdk3为第三隐藏层中第k3个神经单元的残差项;采用公式(24)计算得到第三隐藏层中第k3个神经单元的残差项δdk3:
其中, 为第二隐藏层中第k2个神经单元和第三隐藏层中第k3个神经单元之间的连接权重的当前值,δck2为第二隐藏层中第k2个神经单元的残差项的当前值,hck3为第三隐藏层中第k3个神经单元的状态量的当前值;
C9‑5.构建存放第四隐藏层中第k4个神经单元的残差项的矩阵δe,δe=(δe1,δe2,…,δeK4),δek4为第四隐藏层中第k4个神经单元的残差项,采用公式(25)计算得到第四隐藏层中第k4个神经单元的残差项δek4:
其中, 为第三隐藏层中第k3个神经单元和第四隐藏层中第k4个神经单元之间的连接权重的当前值,δdk3为第三隐藏层中第k3个神经单元的残差项的当前值,hdk4为第四隐藏层中第k4个神经单元的状态量的当前值;
C9‑6.将 的当前值加上0.5*δdk3hdk4赋值绐 对 进行更新;将 的当前值加上0.5*δck2hck3赋值给 对 进行更新;将 的当前值加上0.5*δbk1hbk2赋值给 对 进行更新,将 的当前值加上0.5*δak1hak1赋值绐 对 进行更新;将ek4的当前值加上0.5*δek4赋值给ek4;对ek4进行更新;将dk3的当前值加上0.5*δdk3赋值给dk3;对dk3进行更新;将ck2的当前值加上0.5*δck2赋值给ck2,对ck2进行更新;将bk1的当前值加上0.5*δbk1赋值给bk1,对bk1进行更新;将ak0的当前值加上0.5*δak0赋值给ak0,对ak0进行更新,其中δdk3、hdk4、δck2、hck3、δbk1、hbk2、δak1、hak1和δek4的值分别为其当前值;
步骤C10:判定输出误差φ是否小于5以及Y是否等于10000,如果两个条件中至少一个
1 2 3 4
条件成立,则将w、w、w、w、a、b、c、d和e的当前值作为Sl的指纹,如果两个条件都不成立,则采用Y的当前值加1后的值去更新Y的值,返回步骤C6~步骤C9进行下一次迭代,直至两个条件中至少一个条件成立后得到Sl的指纹;
⑤对室内人员进行定位,具体过程为:
⑤‑1通过监控室中的电脑实时获取待定位室内人员当前位置的N个信号数据包,并将获取的室内人员当前位置的N个信号数据包作为待测数据保存为名称为CSI.dat的文件;
⑤‑2按照步骤②相同的方法,根据当前位置的N个信号数据包得到当前位置的N个CSI幅值矩阵,并计算得到当前位置的N个CSI幅值矩阵的均值mean、方差σ和标准差std;
⑤‑3设定一个变异系数,将其记为λ,采用公式(26)计算得到变异系数λ:⑤‑4确定当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据对应的12位二进制数,具体过程为:判定当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据是整数还是小数,如果当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据是整数,则将其转换为二进制数并在得到的二进制数的右边补4个0得到新二进制数,然后判定得到的新二进数的位数是否等于12,如果等于12,则将该新二进制数作为当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据对应的12位二进制数,如果大于12,则从右向左选取12位作为当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据对应的12位二进制数,如果小于12,则在新二进制数的左边补0至位数为12位后作为当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据对应的12位二进制数;如果当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据是小数,则将其整数部分和小数部分分别转换为二进制数,如果整数部分转换得到的二进制数位数小于8,则在其高位补0使其变为8位二进制数,如果整数部分转换得到的二进制数位数大于8,则从右往左保留8位二进制数其他位删除得到8位二进制数,如果整数部分转换得到的二进制数位数等于8,则保持不变,如果小数部分转换得到的二进制数位数等于4,则保持不变,如果小数部分转换得到的二进制数位数小于4,则在其低位补0使其变为4位二进制数,如果小数部分转换得到的二进制数位数大于4,则从左往右保留4位其他删除得到4位二进制数,将整数部分处理后得到的8位二进制数作为高8位,小数部分处理后得到的4位二进制数作为低4位拼接为12位二进制数,将拼接得到的12位二进制数作为当前位置的N个CSI幅值矩阵中第N″′个CSI幅值矩阵的第m个CSI幅值数据对应的12位二进制数;N″′=1,2,…,N;m=1,2,…,90;将第m个幅值数据的十二位二进制数值按照从左到右数起第x位的值赋值给v12*3*30*(N″′‑1)+(m‑1)*12+x,对v1,v2,v3,...,vK0进行更新,x=1,2,…,12;
⑤‑5将在位置Sl的得到v的概率记为Pr(vl),确定Pr(vl)的具体过程为:
1 2 3 4
⑤‑5‑1.将Sl的指纹w、w、w、w 、a、b、c、d和e分别作为其当前值,按照步骤C6、步骤C7以1
及步骤C8的方法重新计算得到输出误差,将此时计算得到的输出误差记为φ;
⑤‑5‑2.采用公式(27)计算得到Pr(vl):⑤‑6将室内位置概率记为 假设室内位置概率均匀分布,令Pr(Lol)=1/L,将室内待定位人员位于位置Sl的概率记为Pr(Sl),采用公式(28)计算得到Pr(Sl):⑤‑7将室内待定位人员当前所处的位置的坐标记为(xl′,yl′),采用公式(29)和(30)计算(xl′,yl′):
⑤‑8计算得到的(xl′,yl′)即为室内待定位人员的定位坐标。