2014-10-07 17 views
1

我正在做一個Matlab無線通信算法,計算丟失量和計算不同距離處的疏鬆度時的對數模型偏差。在matlab中表示長數

一切正常,這是我的函數: D0 =距離的參考值(始終相同) 農佈雷=這是具有矩陣在第一列有距離250X2一個.MAT文件(從那裏我把不同的值),第二列的值有 Lfs2 =這是失去了在那裏的距離是D0

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

我剛纔提出的算法和一切工作正常,我250X2矩陣,而只是爲了測試目的我用4246x2矩陣製作了一個藍牙信號模型,但是當我用這個值做我的算法時,我的n(丟失因子)正確計算,但是m Ÿ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))); 

事情is..I知道,在Matlab有symsum爲series..but的總和我不能瞭解如何使用symsum定義這個算法..我不知道我怎麼能代表數量,以適應​​我的變化..

謝謝你這麼多

回答

0

一個建議(即到當你需要高速計算時肯定不會失敗)是爲了「放鬆」你的對數。由於對數的性質,你可以輕鬆地表達:

日誌(一個/ b)  =  日誌(一個)−日誌( b

的情況下,當 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)不是零有時(有沒有提示是如何計算的,除此之外,是第一一些矩陣的列)。

+0

其他要點如何?你是否總是擁有大於零的尺寸(medida,1)?只需添加一個條件斷點,看看這是否是問題。 – 2014-10-07 15:03:31

+0

感謝您的建議,使用該屬性我可以更快地計算Lfs2 ..但這只是一次升級,因爲Lfs2是您需要計算一次的因素。我沒有發佈整個代碼,因爲不那麼無聊......但你是對的。我有一個矩陣(2426x2),第一列有距離,第二列有信號的功率值。我想也許更多的東西是錯的。它真的很煩人的是,當你使用我的算法與一個較短的矩陣(250x2)我的算法是非常準確的(不那麼快..但現在這不是問題)謝謝你的回答 – neteot 2014-10-07 15:05:01

+0

在你的代碼中,有兩個來自分區的「無窮大」的潛在來源:'1/size(medida,1)'是'1/0'或' DISTANCIA(I)/ d0'。現在,**你確定**是否消除了所有這些可能的原因?例如,如果你計算'x = distancia/d0'並檢查變量'x',那麼你有無窮無盡嗎? – 2014-10-07 15:27:06