hey gyus, i have this program and i need to make it run if somone can help me please !

조회 수: 1 (최근 30일)
%% fonction calcul rss avec trilatération
function [estErr, sPos, ePos, estELoc] = mm_rss( ROI, gridSize, N_s, P_T, P_E, sigma, alpha_actual ... , alpha_assumed, recSens ... , dispON ... , useTime, assignS, assignE) %% TRILATERATION % % %% Cette fonction sert à concevoir l'algorithme de trilateration afin de localiser l'émetteur. % Si les positions de l'émetteur(emitter) et du récepteur (sensor) ne sont pas donnés en % assignE et assignS, ils sont aléatoirement placé dans la région d'interet % (ROI: Region of interest). ce placement aléatoire permet de s'assurer que % l'émetteur et le récepteur ne sont pas placé aux mêmes coordonnées.
% ROI - Region d'interet % gridSize - longeur de la grille. % N_s - Nombre de sensors (récepteurs) % P_T - Puissance transmise de l'émetteur (pratique) % P_E - Puissance transmise de l'émetteur réelle % sigma - effet du shadowing en dB % alpha_actual - Actual value of the Path Loss Exponent % alpha_assumed - Assumed value of the Path Loss Exponent % recSens - sensibilité du récepteur % dispON - Flag for displaying simulation information (Set 1 to display) % useTime - Flag for timing parts of simulation (Set 1 to time) % assignS - position prédéfinie du récepteur (0 à randomly assign) % assignE - position prédéfinie de l'émetteur (0 à randomly assign)
if useTime ccsTime = tic(); end
%% Positionnement de l'émetteur et du récepteur et création de la matrice des distances: % En utilisant le système de coordonnées vectoriels, nous plaçons le % récepteur et l'émetteur dans l'architecture, puis nous créons la matrice % des distances. % dans ce cas, l'émetteur et le récepteur sont placés aléatoirement. Ils % sont sélectionnés de telle sorte à ne pas être placé dans le même % endroit. % Le nombre de récepteur est défini avec N_s. %
if assignS sPos = assignS;
if (dispON>0)
for i=1:N_s
disp(['Sensor '... % Affichage des coordonnés selectionnées
, num2str(i), ' is located at (', num2str(sPos(1,i))...
,',', num2str(sPos(2,i)), ').']);
end
end
else
% positions du récepteur dans le plan (x,y)
sPos = zeros(2,N_s);
for i=1:N_s
isDistinct = 0;
while ~isDistinct
sPos(:,i) = [rand()*ROI;rand()*ROI];
isDistinct = 1;
for j=1:i-1
if (abs(sPos(1,i)-sPos(1,j))<gridSize ...
&& abs(sPos(2,i)-sPos(2,j))<gridSize)
isDistinct = 0;
end
end
end
if (dispON>0)
disp(['Sensor '...
, num2str(i), ' is located at (', num2str(sPos(1,i))...
,',', num2str(sPos(2,i)), ').']);
end
end
end
if assignE
ePos = assignE;
if (dispON>0)
disp(['Emitter is placed at ('...
, num2str(ePos(1,1)) ,',', num2str(ePos(2,1)), ').']);
end
else
% position emetteur sur le plan (x,y)
ePos = zeros(2,1);
isDistinct = 0;
while ~isDistinct
ePos(:,1) = [rand()*ROI;rand()*ROI];
isDistinct = 1;
for i=1:N_s
if (abs(sPos(1,i)-ePos(1,1))<gridSize ...
&& abs(sPos(2,i)-ePos(2,1))<gridSize)
isDistinct = 0;
end
end
end
if (dispON>0)
disp(['Emitter is placed at ('... % affichage des coordonnés selectionnés
, num2str(ePos(1,1)) ,',', num2str(ePos(2,1)), ').']);
end
end
if useTime disp(['Placing sensors and emitter took '... , num2str(toc(ccsTime)), ' seconds']); crssTime = tic(); end
%% Creer valeurs RSS
% Tx Rx Distance d = sqrt((sPos(1,:)-ePos(1,:)).^2 + (sPos(2,:)-ePos(2,:)).^2);
% signal reçu en Watt m = P_T * d.^(-alpha_actual); r = m; for i=1:N_s r(i) = 10^(log10(m(i)) + normrnd(0,sigma)/10); % si la puissance du signal reçu est inférieur à la sensibilité du % récepteur, nous assumons que nous n'avons pas reçu le signal.
if(r(i)<recSens)
r(i) = recSens;
if(dispON)
disp([num2str(i), 'th Sensor is ignored.'])
end
end
end
if useTime disp(['Creating RSS took ' num2str(toc(crssTime)) ' seconds']); ctTime = tic(); end
%% Emitter Location Estimation % les distances sont estimé à partir de chaque récepteur. % l'intersection des cercles est faite à partir du centre du récepteur. en % utilisant les moindres carrés
estDist = (r./P_E).^(-1/alpha_assumed); [ex,ey]=circleIntersect(sPos(1,:),sPos(2,:),estDist);
if dispON>0 if length(ex)>1 disp([num2str(length(ex)), ' possible solutions are found']); end end if dispON>0 for i=1:length(ex) disp(['Emitter found at (', num2str(ex(i))... , ',', num2str(ey(i)), ').']); end end ex = ex(1); ey = ey(1);
% Attribuer les positions estimés de l'émetteurs estELoc = [ex;ey];
%calcul de l'erreur estErr = sqrt((ePos(1,:)-ex).^2 + (ePos(2,:)-ey).^2); if dispON>0 disp(['Estimation error is ', num2str(estErr) , ' meters.']); end
if(dispON) plotSELocations(ROI, gridSize, sPos, ePos, estELoc, estDist); end
if useTime disp(['Calculating theta took ' num2str(toc(ctTime)) ' seconds']); disp(['Total elapsed time is ' num2str(toc(ccsTime)) ' seconds']); end
end
function [] = plotSELocations(ROI, gridSize, sPos, ePos, estELoc, estDist) %% plot positions Tx et Rx % inputs: % - ROI % - gridSize % - sPos % - ePos
figure();
% création de l'architecture hold on;
% position réelles des Rx scatter(sPos(1,:),sPos(2,:), 70, 'c'... , 'MarkerFaceColor', [1 0 0] ... , 'MarkerEdgeColor', [1 0 0]);
% positionner les Tx c(1,:)= [round(rand), round(rand), round(rand)]; while isequal(c(1,:),[1 1 1]) c(1,:)= [round(rand), round(rand), round(rand)]; end
scatter(ePos(1,1),ePos(2,1), 70, 's' ... , 'MarkerFaceColor', [0 0 0]... , 'MarkerEdgeColor', [0 0 0]);
% position estimés des émetteurs scatter(estELoc(1,1), estELoc(2,1), 70, 'd'... , 'MarkerFaceColor', [0 0 0]... , 'MarkerEdgeColor', [0 0 0]);
t = linspace(0,2*pi)'; for i = 1:length(sPos(1,:)) plot(sPos(1,i) + estDist(i)*cos(t),sPos(2,i) + estDist(i)*sin(t),'-') end
hold off;
title('Sensor and Emitter placements for FGS_{SE}'); xlabel('x'); ylabel('y'); legend('Sensors', 'Emitter', 'Estimated Emitter');
end
function [x0,y0] = circleIntersect(X,Y,R) %% CIRCLEINTERSECT
if nargin~= 3 error('You must supply X, Y, R as separate vectors') end
X = X(:); Y = Y(:); R = R(:);
n = length(X); if (n ~= length(Y)) (n ~= length®) error('X, Y, R must all have the same number of elements') end
if n < 3 error('Must have at least 3 circles to find the overall intersection') end
A = zeros((n-2)*(n-1),2); rhs = zeros((n-2)*(n-1),1);
k = 1:(n-1); for i = 1:n j = setdiff(1:n,i);
A(k,:) = 2*[X(i) - X(j),Y(i) - Y(j)];
% A^2 - B^2 = (A-B)*(A+B)
Xsq = (X(i) - X(j)).*(X(i) + X(j));
Ysq = (Y(i) - Y(j)).*(Y(i) + Y(j));
Rsq = (R(j) - R(i)).*(R(j) + R(i));
rhs(k) = Rsq + Xsq + Ysq;
if i < n
k = k + (n-1);
end
end
xy0 = A\rhs; x0 = xy0(1); y0 = xy0(2);
end

답변 (0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!