国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Part.I Introdction

本篇博文的目的是:對RTKLIBLAMBDA固定整周模糊度的算法實現(xiàn)做一個盡量詳盡的總結(jié)。由于筆者水平有限,不當之處還望不吝賜教。

Chap.I 預(yù)備知識

LAMBDA 全稱 Least-square AMBiguity Decorrelation Adjustment,最小二乘降相關(guān)平差。主要分為以下兩步:(1)為降低模糊度參數(shù)之間相關(guān)性而進行的多維整數(shù)變換;(2)在轉(zhuǎn)換后的空間內(nèi)進行模糊度搜索,然后再將結(jié)果轉(zhuǎn)換回模糊度空間中,進而求得模糊度整數(shù)解。詳細的原理可以參看[2],本文主要介紹 RTKLIB 中有關(guān) LAMBDA 搜索的實現(xiàn),并附以一個示例進行驗證。

Chap.II 內(nèi)容概覽

下面的講的內(nèi)容,后來看的時候覺得比較多,就整理了一下,做了個圖,比較直觀,如下。

【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)
若有錯誤之處,煩請告知,原圖位于 GREAT.drawio/draft

Part.II 代碼詳解

RTKLIB 中的 LAMBDA 實現(xiàn)是在lambda.c文件中的,里面主要的函數(shù)有

  • lambda:外部交互接口,相當于主控制函數(shù)
  • LD:LTDL 分解,注意是上三角分解
  • gauss:整數(shù)高斯變換
  • perm:permutation 置換排列,難道是轉(zhuǎn)置?沒看懂
  • reduction:求出降相關(guān)矩陣 Z
  • search:MLAMBDA (修正的 LAMBDA)搜索
  • matmul:降相關(guān),得到的 Z 和浮點模糊度 a ^ \hat a a^ 和方差-協(xié)方差矩陣 Q a ^ Q_{\hat a} Qa^? 相乘得到變換后的浮點模糊度 z ^ \hat z z^ 及其方差-協(xié)方差矩陣 Q z ^ Q_{\hat z} Qz^?
  • solve:變換回去,得到所需要的候選模糊度

下面是幾個主要的函數(shù)傳參

Chap.I lambda

extern int lambda(int n, int m, const double *a, const double *Q, double *F,double *s)
  • n: @param[in] 待固定的模糊度個數(shù)
  • m: @param[in] 待搜索的候選模糊度向量個數(shù)
  • a: @param[in] 實數(shù)模糊度向量n*1
  • Q: @param[in] 方差-協(xié)方差矩陣n*n
  • F: @param[out] 候選模糊度組m*n
  • s: @param[out] 整數(shù)模糊度向量與實數(shù)模糊向量的距離(二次方殘差)m*1

RTKLIB 中的 lambda 函數(shù)內(nèi)容如下:

extern int lambda(int n, int m, const double *a, const double *Q, double *F,
                  double *s)
{
    int info;
    double *L,*D,*Z,*z,*E;
    
    if (n<=0||m<=0) return -1;
    L=zeros(n,n); D=mat(n,1); Z=eye(n); z=mat(n,1); E=mat(n,m);
    
    /* LD factorization */
    if (!(info=LD(n,Q,L,D))) {
        
        /* lambda reduction */
        reduction(n,L,D,Z);
        matmul("TN",n,1,n,1.0,Z,a,0.0,z); /* z=Z'*a */
        
        /* mlambda search */
        if (!(info=search(n,m,L,D,z,E,s))) {
            // F 搜出來的備選模糊度
            info=solve("T",Z,E,n,m,F); /* F=Z'\E */
        }
    }
    free(L); free(D); free(Z); free(z); free(E);
    return info;
}

各個步驟很清晰的呈現(xiàn)在代碼中,牛的。

Chap.II LD

static int LD(int n, const double *Q, double *L, double *D)
  • @note Q a ^ a ^ = U D U T Q_{\hat a \hat a}=UDU^T Qa^a^?=UDUT,實際上 U 在函數(shù)中是用 L 表示的
  • n: @param[in] 待固定的模糊度個數(shù)
  • Q: @param[in] 方差-協(xié)方差矩陣n*n
  • L: @param[out]Q分解得到的上三角矩陣n*n,實際上用U表示更合適,因為是上三角陣
  • D: @param[out]Q分解得到的對角矩陣,只保留了對角線元素1*n

Chap.III reduction

static void reduction(int n, double *L, double *D, double *Z)
  • @note 得到整數(shù)高斯變換陣(降相關(guān)陣)Z, Q z ^ z ^ = Z Q a ^ a ^ Z T = L z D L z T Q_{\hat z \hat z}=ZQ_{\hat a \hat a}Z^T=L_zDL_z^T Qz^z^?=ZQa^a^?ZT=Lz?DLzT?
  • n: @param[in] 待固定的模糊度個數(shù)
  • L: @param[in/out]Q分解得到的上三角矩陣n*n,傳出前后會發(fā)生變化
  • D: @param[in/out]Q分解得到的對角矩陣,只保留了對角線元素1*n,傳出前后會發(fā)生變化
  • Z: @param[out] 降相關(guān)矩陣Z陣,n*n,Z的所有元素都是整數(shù),并且其行列式為1
  • @notereduction 函數(shù)中調(diào)用了gaussperm,對它們的理解還需進一步加強。

Chap.IV search

static int search(int n, int m, const double *L, const double *D, const double *zs, double *zn, double *s)
  • n: @param[in] 待固定的模糊度個數(shù)
  • m: @param[in] 待搜索的候選模糊度向量組個數(shù)
  • L: @param[in]Q分解得到的上三角矩陣n*n,并且經(jīng)過reduction處理
  • D: @param[in]Q分解得到的對角矩陣,只保留了對角線元素1*n,并且經(jīng)過reduction處理,目前存在如下關(guān)系: Q z ^ z ^ = Z Q a ^ a ^ Z T = L z D L z T Q_{\hat z \hat z}=ZQ_{\hat a \hat a}Z^T=L_zDL_z^T Qz^z^?=ZQa^a^?ZT=Lz?DLzT?
  • zs: @param[in] 降相關(guān)后的浮點模糊度 z ^ \hat z z^ n*1
  • zn: @param[out] 搜索到的候選模糊度向量組 m*n
  • s: @param[out] 各候選模糊度向量到浮點模糊度向量的距離 m*1
    s = ( z ˉ ? z ^ ) T Q z ^ z ^ ? 1 ( z ˉ ? z ^ ) = ( a ˉ ? a ^ ) T Q a ^ a ^ ? 1 ( a ˉ ? a ^ ) s=(\bar z-\hat z)^TQ_{\hat z\hat z}^{-1}(\bar z-\hat z)=(\bar a-\hat a)^TQ_{\hat a\hat a}^{-1}(\bar a-\hat a) s=(zˉ?z^)TQz^z^?1?(zˉ?z^)=(aˉ?a^)TQa^a^?1?(aˉ?a^)

Chap.V matmul & solve

這兩個函數(shù)實際上是通用函數(shù),在這里充當矩陣變換的作用。

matmul("TN", n, 1, n, 1.0, Z, a, 0.0, z);

這個函數(shù)的作用是得到降相關(guān)后的浮點模糊度向量(實際上是降相關(guān)矩陣與原浮點模糊度向量的乘積) z ^ = Z a ^ \hat z=Z\hat a z^=Za^

solve("T", Z, E, n, m, F);

這個函數(shù)將搜索得到的 z ˉ \bar z zˉ 的集合 E 轉(zhuǎn)換回去得到 a ˉ \bar a aˉ 的集合 F。

F = Z ? 1 E F=Z^{-1}E F=Z?1E

Part.III 一個實例

下面考慮一個三維的情況:
【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)

Chap.I 測試函數(shù)

筆者將RTKLIB有關(guān)LAMBDA搜索的程序移植到C++程序中,寫了如下的測試代碼:

void t_gtest::RLAMBDA_test() {

    t_glambda2* lambda = new t_glambda2();
    int n = 3, m = 7, iN = n, iMaxCan = m;
    double a[3] = { 5.45,3.10,2.97 };
    double Q[9] = { 6.290,5.978,0.544, 5.978,6.292,2.340, 0.544,2.340,6.288 };

    int piA[3] = { 0 };
    /*for (int i = 0; i < iN; i++) {
        piA[i] = round(pdA[i]);
        pdA[i] -= piA[i];
    }*/
    cout << "原始方差-協(xié)方差矩陣:" << endl;
    printArr(Q, iN, iN);
    cout << "浮點模糊度:" << endl;
    printArr(a, 1, iN);
    cout << "-----------------------------------" << endl;

    double s[8] = { 0 };
    double* F = new double[iN * iMaxCan]{ 0 };
    int info;
    double* L, * D, * Z, * z, * E;

    L = lambda->zeros(n, n); D = lambda->mat(n, 1); Z = lambda->eye(n); 
    z = lambda->mat(n, 1); E = lambda->mat(n, m);

    /* LD factorization */
    if (!(info = lambda->LD(n, Q, L, D))) {
        cout << "-----------------------------------" << endl;
        cout << "LD 之后 L 陣:" << endl;
        printArr(L, iN, iN);
        cout << "LD 之后 D 陣:" << endl;
        printArr(D, 1, iN);
        /* lambda reduction */
        lambda->reduction(n, L, D, Z);
        cout << "-----------------------------------" << endl;
        cout << "reduction 之后 L 陣:" << endl;
        printArr(L, iN, iN);
        cout << "reduction 之后 D 陣:" << endl;
        printArr(D, 1, iN);
        cout << "reduction 之后 Z 陣:" << endl;
        printArr(Z, iN, iN);
        lambda->matmul("TN", n, 1, n, 1.0, Z, a, 0.0, z); /* z=Z'*a */
        cout << "-----------------------------------" << endl;
        cout << "matmul 之后 z 陣:" << endl;
        printArr(z, 1, iN);
        cout << "matmul 之后 a 陣:" << endl;
        printArr(a, 1, iN);
        cout << "matmul 之后 Z 陣:" << endl;
        printArr(Z, iN, iN);
        /* mlambda search */
        if (!(info = lambda->search(n, m, L, D, z, E, s))) {
            cout << "-----------------------------------" << endl;
            cout << "search 之后 E 陣:" << endl;
            printArr(E, m, n);
            cout << "search 之后 s 陣:" << endl;
            printArr(s, 1, m);
            cout << "search 之后 z 陣:" << endl;
            printArr(z, 1, iN);
            info = lambda->solve("T", Z, E, n, m, F); /* F=Z'\E */
            cout << "-----------------------------------" << endl;
            cout << "solve 之后 F 陣:" << endl;
            printArr(F, m, n);
            cout << "solve 之后 E 陣:" << endl;
            printArr(E, m, n);
            cout << "solve 之后 Z 陣:" << endl;
            printArr(Z, n, n);
        }
    }
    free(L); free(D); free(Z); free(z); free(E); free(F);

    if (lambda != NULL)
    {
        delete lambda;
        lambda = NULL;
    }
}

Chap.II 結(jié)果輸出

程序運行之后有如下輸出:

原始方差-協(xié)方差矩陣:
6.29  5.978  0.544  
5.978  6.292  2.34  
0.544  2.34  6.288  
浮點模糊度:
5.45  3.1  2.97  
-----------------------------------
-----------------------------------
LD 之后 L 陣:
1  1.06537  0.086514  
0  1  0.372137  
0  0  1  
LD 之后 D 陣:
0.0898576  5.4212  6.288  
-----------------------------------
reduction 之后 L 陣:
1  0.267668  0.367412  
0  1  0.13099  
0  0  1  
reduction 之后 D 陣:
4.31016  1.13526  0.626  
reduction 之后 Z 陣:
-2  3  -1  
3  -3  1  
1  -1  0  
-----------------------------------
matmul 之后 z 陣:
-4.57  10.02  2.35  
matmul 之后 a 陣:
5.45  3.1  2.97  
matmul 之后 Z 陣:
-2  3  -1  
3  -3  1  
1  -1  0  
-----------------------------------
search 之后 E 陣:
-5  10  2  
-4  10  2  
-6  10  2  
-4  10  3  
-5  10  3  
-3  10  2  
-5  9  2  
search 之后 s 陣:
0.218331  0.307273  0.59341  0.714614  0.77989  0.860234  1.03198  
search 之后 z 陣:
-4.57  10.02  2.35  
-----------------------------------
solve 之后 F 陣:
5  3  4  
6  4  4  
4  2  4  
6  3  1  
5  2  1  
7  5  4  
4  2  3  
solve 之后 E 陣:
-5  10  2  
-4  10  2  
-6  10  2  
-4  10  3  
-5  10  3  
-3  10  2  
-5  9  2  
solve 之后 Z 陣:
-2  3  -1  
3  -3  1  
1  -1  0  

Chap.III 結(jié)果分析 & 驗證

結(jié)合程序輸出,對結(jié)果用 Matlab 進行了驗證

驗證代碼如下:

%% -------- RTKLIB 檢驗 --------
clc;clear
a_hat=[5.45,3.10,2.97]';
Q=[6.290 5.978 0.544;5.978 6.292 2.340;0.544 2.340 6.288];
% 原始模糊度方差與相關(guān)系數(shù),要看的話記得打斷點,后面會覆蓋掉
a_11=sqrt(Q(1,1)); ro_12=1/sqrt(Q(1,1)*Q(2,2)/(Q(1,2)*Q(1,2)));
a_22=sqrt(Q(2,2)); ro_13=1/sqrt(Q(1,1)*Q(3,3)/(Q(1,3)*Q(1,3)));
a_33=sqrt(Q(3,3)); ro_23=1/sqrt(Q(2,2)*Q(3,3)/(Q(2,3)*Q(2,3)));

Z2=[-2 3 -1;3 -3 1;1 -1 0]; det(Z2);                % 行列式為 1
U2=[1  1.06537  0.086514; 0  1  0.372137;0  0  1];  % 上三角
D2=diag([0.0898576  5.4212  6.288]);
Q-U2*D2*U2'                                         % UDUT 分解正確性檢驗,結(jié)果為0
z_hat=Z2*a_hat;                                     % 變換之后的浮點模糊度
Q_z=Z2*Q*Z2';                                       % 變換之后的協(xié)方差矩陣
% Z變換后的模糊度方差與相關(guān)系數(shù)
a_11=sqrt(Q_z(1,1)); ro_12=1/sqrt(Q_z(1,1)*Q_z(2,2)/(Q_z(1,2)*Q_z(1,2)));
a_22=sqrt(Q_z(2,2)); ro_13=1/sqrt(Q_z(1,1)*Q_z(3,3)/(Q_z(1,3)*Q_z(1,3)));
a_33=sqrt(Q_z(3,3)); ro_23=1/sqrt(Q_z(2,2)*Q_z(3,3)/(Q_z(2,3)*Q_z(2,3)));
% RTKLIB reduction 函數(shù)之后 L 和 D 變?yōu)?L_z=[1  0.267668  0.367412;0  1  0.13099;0  0  1 ];
D_z=diag([4.31016  1.13526  0.626]);
Q_z-L_z*D_z*L_z'                                    % Z變換之后正確性檢驗,結(jié)果為0
% 求整數(shù)解和浮點解之間的距離
a_bar=[5 3 4]';                                     % 最后得到整數(shù)解
z_bar=[-5 10 2]';
(z_bar-z_hat)'*inv(Q_z)*(z_bar-z_hat)               % RTKLIB 吐出的是它
(a_bar-a_hat)'*inv(Q)*(a_bar-a_hat)					% 和上面相等

比較有意思的一點是變換前后搜索空間與各模糊度相關(guān)系數(shù)的變化,筆者覺得這才是 LAMBDA 的靈魂和精髓。
【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)
【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)
下面是用 Matlab 繪制的三維搜索空間的變化(注意坐標軸刻度和橢球形狀)
【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-419405.html

Reference

  1. 基于 Matlab 的方差-協(xié)方差矩陣可視化表示(橢圓、橢球)
  2. 【GNSS】LAMBDA 模糊度固定方法
  3. Teunnissen P J G. The least-square ambiguity decorrelation adjustment: a method for fast GPS integer ambiguity estimation [J]. J. Geodesy, 1995, 70(1): 65-82.
  4. De Jonge P, Tiberius C. The LAMBDA method for integer ambiguity estimation: implementation aspects[J]. Publications of the Delft Computing Centre, LGR-Series, 1996, 12(12): 1-47.

到了這里,關(guān)于【GNSS】RTKLIB 中 LAMBDA 搜索整周模糊度的算法實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SimSearch:一個輕量級的springboot項目索引構(gòu)建工具,實現(xiàn)快速模糊搜索

    大部分項目都會涉及模糊搜索功能,而實現(xiàn)模糊搜索一般分為兩個派系: like簡約派系 搜索引擎派系 對于較為大型的項目來說,使用Solr、ES或者Milvus之類的引擎是比較流行的選擇了(效果只能說優(yōu)秀),而對于中小型項目,如果考慮這些較為重型的引擎,就意味著開發(fā)成本和

    2024年02月02日
    瀏覽(30)
  • 模糊聚類算法——模糊C均值聚類及matlab實現(xiàn)

    模糊C均值聚類算法(Fuzzy C-Means, FCM)。 1. 算法概述 模糊C均值聚類算法是一種經(jīng)典的模糊聚類算法,用于無監(jiān)督學習中的數(shù)據(jù)聚類問題。它通過為每個數(shù)據(jù)點分配模糊隸屬度,將數(shù)據(jù)點劃分到不同的聚類中心。與傳統(tǒng)的硬聚類算法不同,模糊C均值聚類允許數(shù)據(jù)點同時屬于多

    2024年01月24日
    瀏覽(20)
  • Python實現(xiàn)高斯模糊算法(含完整源碼)

    Python實現(xiàn)高斯模糊算法(含完整源碼) 在圖像處理中,高斯模糊是一種常用的模糊濾鏡算法,其主要原理是通過對圖像進行卷積操作來減少噪點和細節(jié),從而得到更加平滑的圖像效果。在Python語言中,我們可以通過NumPy和OpenCV等第三方庫來實現(xiàn)高斯模糊算法。 下面是基于Nu

    2024年02月14日
    瀏覽(19)
  • 在C ++ OpenCV 和 FFTW 中 實現(xiàn)快速去模糊算法

    在圖像處理中,模糊是一個常見的問題,它可能由于各種原因(如運動模糊,焦點模糊等)而產(chǎn)生。幸運的是,有一種稱為去模糊的技術(shù),可以幫助我們恢復(fù)原始的、清晰的圖像。在本文中,我們將介紹如何在C++中使用OpenCV和FFTW庫實現(xiàn)快速去模糊算法。 去模糊算法的基本思

    2024年02月13日
    瀏覽(17)
  • ruby 搜索功能-精準搜索-模糊搜索

    實現(xiàn)搜索功能首先需要在controller 文件中增加 如下的語句,可以精準搜索和模糊搜索,具體看自己需要的情況 假設(shè)user項目中存在省份和城市這兩列 那么,進行設(shè)置省份和城市的精準搜索 同樣的。也可以進行模糊搜索,假設(shè)存在invited_users 和 tel 這兩列 那么進行模糊搜索 然后

    2024年02月12日
    瀏覽(24)
  • 一起學Elasticsearch系列-模糊搜索

    本文已收錄至Github,推薦閱讀 ?? Java隨想錄 微信公眾號:Java隨想錄 在 Elasticsearch 中,模糊搜索是一種近似匹配的搜索方式。它允許找到與搜索詞項相似但不完全相等的文檔。 前綴匹配通過指定一個前綴值,搜索并匹配索引中指定字段的文檔,找出那些以該前綴開頭的結(jié)果

    2024年02月01日
    瀏覽(29)
  • vue uniapp 微信小程序 搜索下拉框 模糊搜索

    vue uniapp 微信小程序 搜索下拉框 模糊搜索

    話不多說 直接貼代碼 MVVM 就是 Model-View-ViewModel 的縮寫,MVVM 將視圖和業(yè)務(wù)邏輯分開。 View:視圖層,Model 數(shù)據(jù)模型,而 ViewModel 是把兩者建立通信的橋梁。 在 MVVM 框架下,View 和 Model 之間沒有直接的聯(lián)系,而是通過 ViewModel 進行交互。View 和 ViewModel 之間以及 Model 和 ViewModel 之

    2024年02月09日
    瀏覽(19)
  • mysql 國密加密字段排序和模糊搜索

    雙寫 加密字段和明文分別存到兩個字段中 , 查詢只對明文進行操作 .? (備注: 這種只是應(yīng)對檢查或者設(shè)計的方式 , 對于程序沒有實際意義) 使用函數(shù) 利用mysql已有加解密的函數(shù) , 在排序和模糊搜索之前解密數(shù)據(jù) , 再進行排序或者模糊搜索 . (備注: 查詢速度受到很大影響 , 不能

    2024年02月05日
    瀏覽(21)
  • 用ES搜索關(guān)鍵字并且返回模糊字段高亮

    用ES搜索關(guān)鍵字并且返回模糊字段高亮

    ? ?一般來說,各個網(wǎng)站,首頁的搜索,都會有進行全文搜索的示例,并且把模糊匹配的多個數(shù)據(jù)進行標記(高亮),這樣便于全局檢索關(guān)鍵的數(shù)據(jù),便于客戶進行瀏覽。基于此,本文簡單介紹這種功能基本java 的 實現(xiàn) ? ?由于公司頁面此功能隱藏了,本文就以接口調(diào)用返回看具

    2024年02月14日
    瀏覽(22)
  • C語言實現(xiàn)哈希搜索算法

    C語言實現(xiàn)哈希搜索算法

    哈希搜索,也叫散列查找,是一種通過哈希表(散列表)實現(xiàn)快速查找目標元素的算法。哈希搜索算法通常適用于需要快速查找一組數(shù)據(jù)中是否存在某個元素的場景,其時間復(fù)雜度最高為 O(1),而平均情況下的時間復(fù)雜度通常相當接近 O(1),因此在實際應(yīng)用中具有很高的效率和

    2024年02月12日
    瀏覽(9)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包