我在Matlab中进行无线通信算法,计算在不同距离计算丢失时的对数模型的丢失和偏差。
一切正常,这是我的功能: d0 =参考距离(总是相同) nombre =这是一个.mat文件,其中有一个矩阵250x2,其中第一列有距离(从我获取不同的值),第二列有值 Lfs2 =这是距离为d0
的丢失Lfs2 = -20*log10((4*pi*d0)/((299792458)/(freq*10^6)));
我刚刚制作了算法,一切都适用于我的250x2矩阵,但仅仅是为了测试目的,我制作了一个带有4246x2矩阵的蓝牙信号模型,但是当我用这个值做我的算法时,我的n(丢失因子)是正确的计算,但我的desv因素不是..这是因为数字太大而不是INF
function [ n , desv ] = perd_desv(d0, Lfs2, nombre)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
% Comprobamos que Pld0 es una perdida y no una atenuación
if Lfs2>0
Lfs2 = -Lfs2;
end
Lfs2;
%Nombre = 'Practica28.mat';
load(nombre);
medida = Pl(:,2);
distancia = Pl(:,1);
% Calculo la n %
syms n;
p = 0;
for i=1:size(medida,1)
p = p + (medida(i)-(-Lfs2)-10*n*log10(distancia(i)/d0))^2;
end
perdida = double(solve(diff(p)));
n = sprintf('%.2f',perdida);
% Calculo de la desv
w = 0;
for i=1:size(medida,1)
w = w + (1/size(medida,1))*(medida(i)-(Lfs2)-10*perdida*log10(distancia(i)/d0))^2;
end
w = 0;
for i=1:size(medida,1)
w = w + (1/size(medida,1))*(medida(i)-(-Lfs2)-10*perdida*log10(distancia(i)/d0))^2;
end
desv = sprintf('%.2f',double(sqrt(w)));
事情是..我知道在Matlab中有symsum的系列之和..但是我看不出如何使用symsum来定义这个算法..而且我不知道如何将这个数字表示为适合我的变量..
非常感谢
答案 0 :(得分:0)
一个建议(当你需要高速计算肯定不会失败时,不)就是“展开”你的对数。由于对数的属性,您可以轻松地表达:
日志(一 / B'/ I>)=日志(一的) - 日志(的 B'/ I>)
对于 a 和 b 适合double
范围,但 a / b 没有。这是猜测(因为您没有提供关于medida
和distancia
相对于d0
的数量级的提示。
所以,尝试编写如下代码:
% constants below may be calculated just once
Lfs2 = -20*(log10(4*pi*d0) - log10(299792458) + 6 + log10(freq))
或:
w = w + (1/size(medida,1))*( ...
medida(i) ...
- Lfs2 ...
- 10*perdida*(log10(distancia(i)) - log10(d0)) ...
)^2;
另外,验证size(medida,1)
有时是否为零(没有提示如何计算,除了这是某个矩阵的第一列)。