2014-10-07 2 views
1

다른 거리에서 느슨한 점을 계산할 때 대수 모델의 손실과 편차를 계산하는 Matlab의 무선 통신 알고리즘을 수행하고 있습니다.matlab에서 긴 숫자를 나타 내기

모두 잘 작동이 내 함수 (항상 같은) 기준 D0 = 거리 브레 =이 어디에서 (행렬의 첫번째 열이 거리를 어디에서 250X2 갖는 .mat 파일이며 나는 다른 값을했다)과 두 번째 열은 값을 Lfs2을 가지고 = 거리가 D0

Lfs2 = -20*log10((4*pi*d0)/((299792458)/(freq*10^6))); 

난 그냥 알고리즘을 만들어 모든 것을 내 250X2 매트릭스 있지만, 단지 테스트를위한 잘 작동 곳은 손실됩니다 목적 나는 4246x2 행렬로 블루투스 신호 모델을 만들었지 만이 값으로 알고리즘을 수행하면 내 n (손실 된 요소)이 올바르게 계산되지만 m y를 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))); 

것은이 매트랩 series..but의 합에 대한 symsum이 내가 할 수없는 것을 알고 is..I입니다 너무 큰 때문입니다

답변

0

한 조언 정말 고마워요 .. .. symsum를 사용하여이 알고리즘을 정의하는 방법을보고 내가 내 변수에 맞게 해당 번호를 나타낼 수있는 방법을 모른다 (그에게 하지입니다 확실하게 실패하지 않을 고속 계산이 필요할 때 따라야 함)는 로그의 "풀기"입니다. 로그의 특성으로 인해, 당신은 쉽게 표현할 수 있습니다 :

로그 (/ B)   =   로그 () − 로그 경우에 ()

abdouble 범위에 맞지만, a/b 범위에 들어 가지 않습니다. 이는 추측입니다 (medidadistancia에 대한 주문량에 대한 힌트를 d0에 대해 제공하지 않았으므로).

% constants below may be calculated just once 
Lfs2 = -20*(log10(4*pi*d0) - log10(299792458) + 6 + log10(freq)) 

나 :

그래서, 같은 코드를 작성하려고 size(medida,1) 때때로 0이 아닌 경우, (계산 방법 힌트가 없습니다 확인 또한

w = w + (1/size(medida,1))*(      ... 
    medida(i)         ... 
    - Lfs2           ... 
    - 10*perdida*(log10(distancia(i)) - log10(d0)) ... 
)^2; 

, 제외하고 그 첫 번째입니다 일부 매트릭스의 열).

+0

다른 점은 어떻습니까? 당신은 항상'size (medida, 1)'가 0보다 큰가요? 그저 조건부 중단 점을 추가하여 이것이 문제가되는지 확인하십시오. –

+0

조언 해 주셔서 감사합니다. Lfs2를 더 빨리 계산할 수 있습니다. 그러나 Lfs2는 한 번 계산할 필요가있는 요소이기 때문에 이것은 단지 업그레이드입니다. 너무 지루하지 않기 위해 전체 코드를 게시하지는 않았지만 당신이 옳습니다. 첫 번째 열에는 거리가 있고 두 번째 열에는 신호의 전력 값이있는 행렬 (2426x2)이 있습니다. 어쩌면 뭔가 더 잘못된 것 같아요. 그게 정말 짜증나는 이유는 당신이 짧은 매트릭스 (250x2)와 내 알고리즘을 사용할 때 내 알고리즘은 매우 정확합니다 (그렇게 빠르지는 않습니다 ..).하지만 지금은 문제가되지 않습니다) 당신의 대답에 대해 감사합니다 – neteot

+0

부서에서 "무한"의 두 가지 잠재적 인 출처가 있습니다 : 1/size (medida, 1)가'1/0'이거나' distancia (i)/d0'. 자, **이 모든 가능한 원인을 제거했는지 ** 확인 했습니까? 예를 들어,'x = distancia/d0'를 계산하고 변수'x'를 검사하면 거기에 무한대가 있습니까? –

관련 문제