基於matla的RSSI測距定位技術性能仿真

RSSI原理

RSSI(Received Signal Strength Indicator)是接收信號的強度指示,它的實現是在反向通道基帶接收濾波器之後進行的。

RSSI是射頻信號理論術語,主要應用於發射機和接收機之間的距離測量。該方法是依據接收信號能量強度確定距離,對通信信道參數要求較高。其測距理論是:依據無線電波或聲波在介質中傳輸,信號功率是隨傳播距離衰減的原理。根據信標節點已知信號的發射功率和節點接收的信號功率,通過信號與距離之間的衰減模型,就可以計算出節點間的距離。由於信號傳播的過程中,受到距離和障礙物的影響。信號的功率強度隨之衰減,間接影響精度。所以要求得到良好的精度,短距離纔會體現這一點。
由於信號發射設備和接收設備簡單、成本低、低功耗,比較適合無線傳感器網絡定位機制。針對室內和室外環境,現階段流行的估計位置技術中,對提高估計位置的準確性方面,也有很多方法。例如由三個非共線錨定器組成,通過非共線信標節點進行位置估計的最小二乘法,以及使用三個以上的信標節點多點定位技術。對於測距方法的進行對比如圖所示:
在這裏插入圖片描述
由圖可以看出:RSSI的定位技術作爲基於Wi-Fi活動的RFID標籤,相比於TOA、TDOA、AOA、GPS具有成本低、容易實現等優勢。如果室內定位精度要求不高,基於RSSI的定位技術完全可以滿足。而且,現階段對於作爲節點的傳感器,都能夠完成發射測試信號功率的任務。主要進行實驗時,節點發送數據包,也獲取RSSI的測量值。該定位技術既無需額外硬件,又能完成複雜信息的分析處理,減小通信消費,節約成本,比較適用於無線傳感器網絡的定位系統。

仿真要求

要求一:RSSI的測量值由對數路徑損耗模型產生,爲減小波動造成的誤差,其值可由多次測量取平均值來得到。
要求二:對數路徑損耗模型中的參考距離路徑損耗和路徑損耗因子可通過參考點相互之間的測量值估計。
要求三:完成理想情況下(參考距離路徑損耗和路徑損耗因子已知)與實際情況下的RMSE曲線對比圖,橫座標爲噪聲方差,縱座標爲RMSE。

仿真代碼

1.TOALLOP.m

function theta=TOALLOP(A,p,j)
 % A is the coordinate of BSs 
 %A是BBS的座標
% p is the range measurement 
%P是範圍測量
% j is the index of reference BS 
%J是參考BS的索引
[m,~]=size(A);  %size得到A的行列數賦值給[m,~],~表示佔位,就是隻要行m的值!
k=sum(A.^2,2);%矩陣A每個元素分別平方,得到新矩陣,在行求和,最爲矩陣K
k1=k([1:j-1,j+1:m],:); %取出J行
A1=A([1:j-1,j+1:m],:); %取出J行
A2=A1-ones(m-1,1)*A(j,:); %得到D,就是j行與其餘行對應值相減
p1=p([1:j-1,j+1:m],:); %取出J行
p2=p(j).^2*ones(m-1,1)-p1.^2-(k(j)*ones(m-1,1)-k1); %得到b,(Rn*Rn-R1*R1-Kn+K1)其中Kn爲對應第n個x^2+y^2
theta=1/2*inv(A2'*A2)*A2'*p2; %利用最小二乘解,得
theta=theta';%轉換爲(x,y)形式

2.Parameter_est.m

function [pd0_est,n_est]=parameter_est(A,sigma) 
% A is the coordinate of BSs 
% sigma is the standard deviation of RSSI measurement 
[m,~]=size(A); 
pd0=0;
n=3; 
d=zeros(m,m); 
tt=5; 
% the number of RSSI measurement for each BS 
sigma1=10^(sigma/10); 
h1=[];
G1=[]; 
for i=1:m 
    for j=1:m 
        if i~=j 
           d(i,j)=norm(A(i,:)-A(j,:));
           for k=1:tt 
               prd(k)=pd0-10*n*log10(d(i,j))-sigma1*randn; 
           end 
           RSSI=mean(prd);
           d_distance=-10*log10(d(i,j)); 
           h1=[h1;RSSI];
           G1=[G1;d_distance]; 
        end
     end
end
h=h1;
[m1,~]=size(h); 
G=[ones(m1,1),G1];
x=inv(G'*G)*G'*h; 
pd0_est=x(1,1);
n_est=x(2,1);
end

3.RSSImain.m

% %% the simulation of RSSI localization algorithm 
clear all; 
clc; 
BS1=[0,0];
BS2=[500,0];
BS3=[500,500];
BS4=[0,500]; 
MS=[100,100]; 
std_var=[0,2,4,6]; 
A=[BS1;BS2;BS3;BS4]; 
number=300; 
pd0=0;
n=3; 
tt=5; 
% the number of RSSI measurement for each BS
for j=1:length(std_var)
    error1=0;
    error2=0; 
    std_var1=std_var(j); 
    for i=1:number 
        r1=A-ones(4,1)*MS; 
        r2=(sum(r1.^2,2)).^(1/2); 
        for k=1:tt 
            rssi(:,k)=pd0-10*n*log10(r2)-10^(std_var1/10)*randn(4,1); 
        end 
        RSSI1=mean(rssi,2);
        % ideal situation 
        r1=10.^((RSSI1-pd0)/(-10*n)); 
        % real situation 
        [p_est,n_est]=parameter_est(A,std_var1); 
        r2=10.^((RSSI1-p_est)/(-10*n_est)); 
        theta1=TOALLOP(A,r1,1); 
        theta2=TOALLOP(A,r2,1); 
        error1=error1+norm(MS-theta1)^2; 
        error2=error2+norm(MS-theta2)^2; 
    end 
    RMSE1(j)=(error1/number)^(1/2); 
    RMSE2(j)=(error2/number)^(1/2); 
end
% plot 
plot(std_var,RMSE1,'-O',std_var,RMSE2,'-s') 
xlabel('The standard deviation of RSS measurement (db)'); 
ylabel('RMSE'); 
legend('Ideal','Real');

仿真結果

在這裏插入圖片描述
寢室熄燈咯,睡覺睡覺!!!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章