【实验要求】
建立相应的单斜率和多斜率对数路径接收功率模型,具体要求如下:
1、使用Matlab画出接收功率与距离关系的散点图;
2、使用Matlab画出平均接收功率与距离的关系曲线;
3、使用Matlab用单斜率和双斜率模型拟合平均接收功率和对数距离的散点图;
4.给出单斜率和双斜率对数距离路径损耗模型的参数拟合结果;
5、使用Matlab画出拟合的单/双斜率曲线,并与平均接收功率散点进行对比,以评价拟合效果(使用非对数距离)。
【实验原理及内容】
传统的无线信道模型不能用于低功率无线信道建模,而针对特定环境的体验模型是最准确的。
单斜率对数路径损耗模型
??? (0)(0):参考接收功率;
??:路径损失指数;
??:对数正态阴影弱;
双斜率对数距离路径损耗模型
??? ():接收功率;
??b1/2:参考接收功率;
??1/ ??二、路径损失指数;
???1 /2:对数正态阴影弱化;
db:突变点;
线性拟合单斜率模型参数:
根据最小二乘法标准,残差平方和Q(Pb最小:
分别取关于Pb0和??的偏导数,并令其等于零,然后求解方程组可得:
线性拟合双斜模型参数:
根据最小二乘法准则,要求残差平方和Q(Pb1, Pb2, ??_1, ??_2)最小:
b是突变点序号。
对Q(Pb1, Pb2, ??_1, ??_2)分别取关于Pb1、Pb2、 ??_1和??_2偏导数,使其等于零,然后求解方程组:
【实验步骤】
- 使用matlab xlsread读取Excel数据;
- 使用matlab画出接收功率与距离关系的散点图;
3、使用Matlab画出平均接收功率与距离的关系曲线;
4、使用Matlab画出平均接收功率与对数距离的散点图;
5.拟合单斜率和双斜率模型;
7、使用Matlab绘制拟合单/双斜率曲线,并与平均接收功率散点进行比较,以评估拟合效果(使用非对数距离)。
【实验结果】
图1 接收功率与距离关系的散点图
图2 平均接收功率与距离之间的关系曲线
图3 平均接收功率与对数距离的散点图(对数)
图4 单斜率和双斜率模型进行拟合
表 单斜率和双斜率对数距离路径损耗模型的参数拟合结果
Pb0 |
-63.7038 |
n |
1.5871 |
Pb1 |
-61.5734 |
Pb2 |
-70.1688 |
n1 |
1.9605 |
n2 |
1.1595 |
dp |
61 |
图5 拟合的单/双斜率曲线
从图5中能明显的看出双斜率曲线比单斜率曲线更契合与实际测量值,与之前的预想是一致的。对于特定的无线传感环境,针对特定环境的经验模型往往最为准确。
【Matlab程序代码】
geshu = xlsread('C:\Users\hp\Desktop\shiyan1\测试数据\RSSI.xlsx','Sheet1','A1'); juli = xlsread('C:\Users\hp\Desktop\shiyan1\测试数据\RSSI.xlsx','Sheet1','B1:DL1'); Qiangdu = xlsread('C:\Users\hp\Desktop\shiyan1\测试数据\RSSI.xlsx','Sheet1','B2:DL501'); figure(1) for X=1:500 scatter(juli,Qiangdu(X,:)','k','.'); axis ( [0 100 -95 -40] ); title('测量数据散点图'); xlabel('收发节点间距(m)'); ylabel('接收信号功率(dBm)'); hold on; end average=zeros(1,115); for i=1:115 un=0; nan=find(isnan(Qiangdu(:,i))); Qiangdu(nan,i)=zeros(size(nan)); for j=1:500 if Qiangdu(j,i)~=0 un=un+1; average(1,i)=average(1,i)+Qiangdu(j,i); end end average(1,i)=average(1,i)/un; end figure(2) plot(juli,average,'k'); axis ( [0 100 -100 -40] ); title('平均接收功率与距离的关系曲线'); xlabel('距离(m)'); ylabel('接收信号功率(dBm)'); hold on; %测量数据与拟合结果 juli1=10*log10(juli); figure(3) plot(juli1,average,'.'); title('平均接收功率与距离的关系点图'); xlabel('距离(m)'); ylabel('接收信号功率(dBm)'); hold on; n0=(sum(juli1)*sum(average)/geshu-sum(average.*juli1))/(sum(juli1.^2)-((sum(juli1))^2)/geshu); Pb0=(sum(average)+n0*sum(juli1))/geshu; Pra0=Pb0-n0*juli1; figure(4) %plot(juli1,average,'.',juli1,Pra0,'-r');
Q=zeros(1,115); for b=1:1:113 n1=-(sum(average(1:b).*juli1(1:b))-sum(juli1(1:b))*sum(average(1:b))/b)/(sum(juli1(1:b).^2)-((sum(juli1(1:b)))^2)/b); n2=-(sum(average(b+1:geshu).*juli1(b+1:geshu))-sum(juli1(b+1:geshu))*sum(average(b+1:geshu))/(geshu-b))/(sum(juli1(b+1:geshu).^2)-((sum(juli1(b+1:geshu)))^2)/(geshu-b)); Pb1=(sum(average(1:b))+n1*sum(juli1(1:b)))/b; Pb2=(sum(average(b+1:geshu))+n2*sum(juli1(b+1:geshu)))/(geshu-b); Q(b)=sum((average(1:b)-Pb1+n1*juli1(1:b)).^2)+sum((average(b+1:geshu)-Pb2+n2*juli1(b+1:geshu)).^2); end b=5; BB=Q(5); for B=1:113 if BB>Q(B) BB=Q(B); b=B; end end
n1=-(sum(average(1:b).*juli1(1:b))-sum(juli1(1:b))*sum(average(1:b))/b)/(sum(juli1(1:b).^2)-((sum(juli1(1:b)))^2)/b); n2=-(sum(average(b+1:geshu).*juli1(b+1:geshu))-sum(juli1(b+1:geshu))*sum(average(b+1:geshu))/(geshu-b))/(sum(juli1(b+1:geshu).^2)-((sum(juli1(b+1:geshu)))^2)/(geshu-b)); Pb1=(sum(average(1:b))+n1*sum(juli1(1:b)))/b; Pb2=(sum(average(b+1:geshu))+n2*sum(juli1(b+1:geshu)))/(geshu-b);Pra=zeros(1,115); for m=1:1:115 if m<=b Pra(m)=Pb1-n1*juli1(m); else Pra(m)=Pb2-n2*juli1(m); end end plot(juli1,average,'.',juli1,Pra,'-r',juli1,Pra0,'.-k'); title('测量数据与拟合结果(对数)'); xlabel('对数距离(10lgd)'); ylabel('接收信号功率(dBm)'); legend('average','Pra','Pra0'); hold on; figure(5) plot(juli,average,'r*',juli,Pra,'-r',juli,Pra0,'.-k'); title('测量数据与拟合结果(非对数)'); xlabel('距离(m)'); ylabel('接收信号功率(dBm)'); legend('average','Pra','Pra0'); hold on; |