项目作者: RobinLiew

项目描述 :
Recognizing the feature of the wireless channel fingerprint based on two algorithms(an application of pattern recognition).针对无线信道“指纹”特征建模,包括“指纹”特征参数的建立、匹配识别、连续特征参数的“区域划分”等问题,用无线信道参数的提取算法、BP神经元网络算法和我们建立的微元试探法对模型进行分析求解
高级语言: Matlab
项目地址: git://github.com/RobinLiew/wireless-communication.git
创建时间: 2017-09-23T09:31:10Z
项目社区:https://github.com/RobinLiew/wireless-communication

开源协议:

下载


wireless-communication

Recognizing the feature of the wireless channel fingerprint based on two algorithms(an application of pattern recognition)

we modeling the feature of the wireless channel “fingerprint”, which including the issues like the establishment of the characteristic parameters of “ fingerprint “, matching and recognition and “dividing the region” of continuous characteristic parameters. The model solved by the extraction algorithm about wireless channel parameters, BP neural network algorithm and the infinitesimal heuristics proposed by us

针对无线信道“指纹”特征建模,包括“指纹”特征参数的建立、匹配识别、连续特征参数的“区域划分”等问题,用无线信道参数的提取算法、BP神经元网络算法和我们建立的微元试探法对模型进行分析求解

核心代码

  1. function Bpmodeldistinguish( X,Y )
  2. %*****************************************************
  3. %利用matalb实现基于BP神经网络模式识别实现代码
  4. %*****************************************************
  5. % X是三个场景的平均特征向量所组成的矩阵(就是fea_average
  6. % Y是待匹配的特征向量(就是b1b2
  7. %**************************************************************************
  8. %**************** 先对XY进行标准化处理 *******************
  9. %**************************************************************************
  10. X=[1e9*X(1,:);1e3*X(2,:);X(3,:)/100];
  11. X=X';
  12. X0=ones(3,16);
  13. X0(:,[1:3])=X;
  14. X=X0;
  15. Y=[1e9*Y(1);1e3*Y(2);Y(3)/100];
  16. Y=Y';
  17. Y0=ones(1,16);
  18. Y0(1:3)=Y;
  19. Y=Y0;
  20. %**************************************************************************
  21. %*******************主函数main*********************************************
  22. %*************************START********************************************
  23. %**************************************************************************
  24. Y1=[1 0 0]; %输出模式
  25. Y2=[0 1 0];
  26. Y3=[0 0 1];
  27. Yo=[Y1;Y2;Y3]; %输出的三种模式
  28. n=16; %输入层神经元个数
  29. p=8; %中间层神经元个数
  30. q=3; %输出神经元个数
  31. k=3 ;%训练模式个数
  32. a1=0.2; b1=0.2; %学习系数,
  33. %rou=0.5;%动量系数,
  34. emax=0.01; cntmax=100;%最大误差,训练次数
  35. [w,v,theta,r,t,mse]=bptrain(n,p,q,X,Yo,k,emax,cntmax,a1,b1);%调用函数bptrain训练网络
  36. c=bptest(p,q,n,w,v,theta,r,Y);
  37. c(c>0.5)=1;
  38. c(c<0.2)=0;
  39. disp('测试数据的识别结果:')
  40. c
  41. if (min(c==Y1)==1)
  42. fprintf('该数据和场景1匹配\n');
  43. elseif (min(c==Y2)==1)
  44. fprintf('该数据和场景2匹配\n');
  45. else
  46. fprintf('该数据和场景3匹配\n');
  47. end
  48. %**************************************************************************
  49. %**************************END*********************************************
  50. %**************************************************************************
  51. function [w,v,theta,r,t,mse]=bptrain(n,p,q,X,Yo,k,emax,cntmax,a1,b1)
  52. %n表示输入神经元个数,p表示中间层神经元个数,q表示输出神经元个数,
  53. %X表示输入训练模式,Yo表示标准输出,k表示训练模式的个数
  54. %emax表示最大误差,cntmax表示最大训练次数,a1b1表示学习系数,rou表示动量系数
  55. %wtheta表示训练结束后输入层与中间层连接权系数和阈值,
  56. %vr表示训练结束后中间层与输出层连接权和阈值
  57. %t表示训练时间
  58. tic
  59. w=rands(n,p);%输入层与隐含层连接权
  60. v=rands(p,q); %隐含层与输出层连接权
  61. theta=rands(1,p);%中间层的阈值
  62. r=rands(1,q);%输出层的阈值
  63. cnt=1;
  64. mse=zeros(1,cntmax);%全局误差为零
  65. er=0;
  66. while ((er>emax)|(cnt<=cntmax))
  67. E=zeros(1,q);
  68. %循环识别模式
  69. for cp=1:k
  70. X0=X(cp,:);
  71. Y0=Yo(cp,:);
  72. %计算中间层的输入Y(j)
  73. Y=X0*w;
  74. %计算中间层的输出b
  75. Y=Y-theta; %中间层阈值
  76. for j=1:p
  77. b(j)=1/(1+exp(-Y(j)));%中间层输出f(sj)
  78. end
  79. %计算输出层输出c
  80. Y=b*v;
  81. Y=Y-r; % 输出层阈值
  82. for t=1:q
  83. c(t)=1/(1+exp(-Y(t))); %输出层输出
  84. end
  85. %计算输出层校正误差d
  86. for t=1:q
  87. d(t)=(Y0(t)-c(t))*c(t)*(1-c(t));
  88. end
  89. %计算中间层校正误差e
  90. xy=d*v';
  91. for t=1:p
  92. e(t)=xy(t)*b(t)*(1-b(t));
  93. end
  94. %计算下一次的中间层和输出层之间新的连接权v(i,j),阈值t2(j)
  95. for t=1:q
  96. for j=1:p
  97. v(j,t)=v(j,t)+a1*d(t)*b(j);
  98. end
  99. r(t)=r(t)+a1*d(t);
  100. end
  101. %计算下一次的输入层和中间层之间新的连接权w(i,j),阈值t1(j)
  102. for j=1:p
  103. for i=1:n
  104. w(i,j)=w(i,j)+b1*e(j)*X0(i);
  105. end
  106. theta(j)=theta(j)+b1*e(j);
  107. end
  108. for t=1:q
  109. E(cp)=(Y0(t)-c(t))*(Y0(t)-c(t))+E(cp);%求当前学习模式的全局误差
  110. end
  111. E(cp)=E(cp)*0.5;
  112. %输入下一模式
  113. end
  114. er=sum(E);%计算全局误差
  115. mse(cnt)=er;
  116. cnt=cnt+1;%更新学习次数
  117. end
  118. t=toc;
  119. function c=bptest(p,q,n,w,v,theta,r,X)
  120. %p,q,n表示输入层、中间层和输出层神经元个数
  121. %w,v表示训练好的神经网络输入层到中间层、中间层到输出层权值。
  122. %X为输入测试的模式
  123. %c表示模式X送入神经网络的识别结果。
  124. %计算中间层的输入Y(j)
  125. Y=X*w;
  126. %计算中间层的输出b
  127. Y=Y-theta; %中间层阈值
  128. for j=1:p
  129. b(j)=1/(1+exp(-Y(j)));%中间层输出f(sj)
  130. end
  131. %计算输出层输出c
  132. Y=b*v;
  133. Y=Y-r; % 输出层阈值
  134. thr1=0.01;thr2=0.5;
  135. for t=1:q
  136. c(t)=1/(1+exp(-Y(t))); %输出层输出
  137. end