在matlab中表示长数字

时间:2014-10-07 12:25:56

标签: algorithm matlab variables numbers

我在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来定义这个算法..而且我不知道如何将这个数字表示为适合我的变量..

非常感谢

1 个答案:

答案 0 :(得分:0)

一个建议(当你需要高速计算肯定不会失败时,)就是“展开”你的对数。由于对数的属性,您可以轻松地表达:

日志( / B'/ I>)=日志(的) - 日志(的 B'/ I>)

对于 a b 适合double范围,但 a / b 没有。这是猜测(因为您没有提供关于medidadistancia相对于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)有时是否为零(没有提示如何计算,除了这是某个矩阵的第一列)。