J'ai quelques valeurs de routeurs wifi pour un étage. Maintenant, j'essaie d'interpoler ces valeurs en utilisant la loi du carré inverse pour prédire certaines valeurs à certains points connus et je veux comparer avec les valeurs obtenues et la valeur réelle. J'utilise Matlab, comment je peux écrire la fonction.?comment prédire des valeurs en utilisant la loi de l'inverse carré en utilisant matlab
Répondre
Si vous avez un seul routeur et que le signal tombe à un taux de c/||r||^2
, où c est une constante et r est un vecteur dans l'espace 2D ou 3D représentant la distance au routeur, vous pouvez créer une ligne simple fonction de calculer que ...
f = @(r) c ./ norm(r)^2
Si vous avez le x, y, z composantes de la distance, la fonction ressemble
f = @(x,y,z) c ./ (x.^2 + y.^2 + z.^2)
Si vous avez une 2D ou 3D matrice de valeurs, puis utilisez
f = @(r) c ./ sum(r.^2); % if r = 2xn or 3xn
f = @(r) c ./ sum(r.^2,2); % if r = nx2 or nx3
Enfin, si vous avez seulement la position r du r0 objet et la position du routeur, vous pouvez ensuite utiliser une des options suivantes
% If router position is fixed for all test points...
f = @(x,y,z) c ./ ((x-x0).^2 + (y-y0).^2 + (z-z0).^2)
% If you want to test multiple router positions...
f = @(x,y,z,x0,y0,z0) c ./ ((x-x0).^2 + (y-y0).^2 + (z-z0).^2)
J'ai plusieurs routeurs avec un autre point de référence connu. et ensuite vouloir calculer les valeurs à prédire. –
Eh bien, ce qui précède est un modèle pour le faire. Je ne sais pas exactement quelle formule vous essayez d'utiliser. –
J'essaie de mettre F = puissance/r^2 –
Si vous avez seulement besoin d'interpoler, ce qui signifie que tous vos points de recherche se trouvent dans la coque convexe de vos points échantillonnés, je suggère d'utiliser scatteredInterpolant
https://www.mathworks.com/help/matlab/ref/scatteredinterpolant-class.html. Son utilisation et sa visualisation est très facile.
%%Create 10 random points as example
x=rand(10,1)*100;
y=rand(10,1)*100;
strenght=rand(10,1)*100;
%% Use these data to create an interpolant function
foo=scatteredInterpolant(x,y,strenght,'natural','none');
A ce stade, la fonction foo
interpole une valeur dans la zone interpolable comme foo(x,y)
foo(50,50)
%% ans = 24.6063
Il est possible de visualiser cette fonction en traçant est comme une surface
[email protected](a,b) foo(a,b) %% Auxiliar function
ezsurf(foos,[0 100 0 100]) %% Plot the function
hold on
scatter3(x,y,strenght,'ro','filled') %% Add original points to see how it was calculated
merci pour votre aide. je veux demander une chose: pourquoi nous utilisons la fonction auxiliaire, pourquoi c'est important ici. –
Pour faciliter le traçage, 'ezsurf' ne peut pas gérer les fonctions de type' scatteredInterpolant'.Mais il n'est pas nécessaire d'interroger les points, en utilisant 'foo' directement est assez –
merci, c'était aide complète –
Ainsi vous avez une matrice de voiture tesian coordonnées? Est-ce 2D? 3D? –
Je considère x, y pour la gamme de 1 à 100 –