日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MP、OMP与施密特正交化(转载)

發布時間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MP、OMP与施密特正交化(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

淺談壓縮感知(十九):MP、OMP與施密特正交化

</h1><div class="clear"></div><div class="postBody">

關于MP、OMP的相關算法與收斂證明,可以參考:http://www.cnblogs.com/AndyJee/p/5047174.html,這里僅簡單陳述算法流程及二者的不同之處。

主要內容:

  • MP的算法流程及其MATLAB實現
  • OMP的算法流程以及MATLAB實現
  • MP與OMP的區別
  • 施密特正交化與OMP的關系
  • 一、MP(匹配追蹤)的算法流程:

    二、MP的MATLAB實現:

    % MP:匹配追蹤算法 % dictionary: 超完備字典 % x: 待表示信號 % M = 4; N = 10; % Phi = randn(M,N); % 字典 % for nn = 1:N % Phi(:,nn) = Phi(:,nn)/norm(Phi(:,nn)); % end % b = randn(M,1); % 信號 function x = MP(dictionary,x,iter) [M,N] = size(dictionary); residual = zeros(M,iter); %殘差矩陣,保存每次迭代后的殘差 residual(:,1) = x; %初始化殘差為x L = size(residual,2); %得到殘差矩陣的列 pos_num = zeros(1,L); %用來保存每次選擇的列序號 resi_norm = zeros(1,L); %用來保存每次迭代后的殘差的2范數 resi_norm(1) = norm(x); %因為前面已初始化殘差為x iter_out = 1e-3; iter_count = 0;

    for mm = 1:iter
    %迭代退出條件
    if resi_norm(mm) < iter_out
    break;
    end
    %求出dictionary每列與上次殘差的內積
    scalarproducts = dictionary’residual(:,mm);
    %找到內積中最大的列及其內積值
    [val,pos] = max(abs(scalarproducts));
    %更新殘差
    residual(:,mm+1) = residual(:,mm) - scalarproducts(pos)dictionary(:,pos);
    %計算殘差的2范數(平方和再開根號)
    resi_norm(mm+1) = norm(residual(:,mm+1));
    %保存選擇的列序號
    pos_num(mm) = pos;
    iter_count = iter_count + 1;
    end
    %繪出殘差的2范數曲線
    resi_norm = resi_norm(1:iter_count+1);
    plot(resi_norm);grid;
    %顯示選擇的字典原子
    pos_num = pos_num(1:iter_count);
    disp(pos_num);
    %稀疏系數(稀疏表示)
    dict = dictionary(:,pos_num);
    y_vec = (dict’*dict)^(-1)dict’x;
    disp(y_vec);
    figure;plot(y_vec);

    三、OMP(正交匹配追蹤)的算法流程:

    四、OMP的MATLAB實現:

    % MP:匹配追蹤算法 % dictionary: 超完備字典 % x: 待表示信號 % M = 4; N = 10; % Phi = randn(M,N); % 字典 % for nn = 1:N % Phi(:,nn) = Phi(:,nn)/norm(Phi(:,nn)); % end % b = randn(M,1); % 信號 function x = OMP(dictionary,x,iter) [M,N] = size(dictionary); residual = zeros(M,iter); %殘差矩陣,保存每次迭代后的殘差 residual(:,1) = x; %初始化殘差為x L = size(residual,2); %得到殘差矩陣的列 pos_num = zeros(1,L); %用來保存每次選擇的列序號 resi_norm = zeros(1,L); %用來保存每次迭代后的殘差的2范數 resi_norm(1) = norm(x); %因為前面已初始化殘差為x iter_out = 1e-3; iter_count = 0; aug_mat = [];

    for mm = 1:iter
    %迭代退出條件
    if resi_norm(mm) < iter_out
    break;
    end
    %求出dictionary每列與上次殘差的內積
    scalarproducts = dictionary’residual(:,mm);
    %找到內積中最大的列及其內積值
    [val,pos] = max(abs(scalarproducts));
    %最小二乘的增廣矩陣
    aug_mat = [aug_mat dictionary(:,pos)];
    %最小二乘投影
    proj_y = aug_mat(aug_mat’*aug_mat)^(-1)aug_mat’x;
    %更新殘差
    residual(:,mm+1) = x - proj_y;
    %計算殘差的2范數(平方和再開根號)
    resi_norm(mm+1) = norm(residual(:,mm+1));
    %保存選擇的列序號
    pos_num(mm) = pos;
    iter_count = iter_count + 1;
    end
    %繪出殘差的2范數曲線
    resi_norm = resi_norm(1:iter_count+1);
    plot(resi_norm);grid;
    %顯示選擇的字典原子
    pos_num = pos_num(1:iter_count);
    disp(pos_num);
    %稀疏系數
    dict = dictionary(:,pos_num);
    y_vec = (dict’*dict)^(-1)dict’x;
    disp(y_vec);
    figure;plot(y_vec);

    五、MP與OMP的區別:

    OMP與MP的不同根本在于殘差更新過程:OMP減去的Pemem所有被選擇過的原子組成的矩陣Φt所張成空間上的正交投影,而MP減去的Pemem本次被選擇的原子φm所張成空間上的正交投影。基于此,OMP可以保證已經選擇過的原子不會再被選擇。

    六、施密特(Schimidt)正交化與OMP

    1、施密特(Schimidt)正交化的過程:

    上面的的[x,y]表示向量內積,[x,y]=xTy=yTx=[x,y]。施密特正交化公式中的br實際上可寫為:

    分子之所以可以這么變化是由于[x,y]實際上為一個數,因此[x,y]x=x[x,y]=?xxTy

    2、OMP與施密特(Schimidt)正交化的關系:

    結論:OMP分解過程,實際上是將所選原子依次進行Schimidt正交化,然后將待分解信號減去在正交化后的原子上各自的分量即可得殘差。其實(式3)求殘差的過程也是在進行施密特正交化。

    3、驗證OMP殘差求解過程與Schmidt正交化的關系

    % 驗證OMP殘差求解過程與Schmidt正交化的關系 % clc;clear;close all; M = 4; N = 10; Phi = randn(M,N); % 字典 for nn = 1:NPhi(:,nn) = Phi(:,nn)/norm(Phi(:,nn)); end b = randn(M,1); % 信號 res0 = b; % 初始化殘差為待稀疏信號b % OMP % 選擇字典第一個原子 c1 = Phi'* res0; % 求矩陣Phi各列與b的內積 [val1,pos1] = max(abs(c1)); % 找到內積中最大的列及其內積值 phit = [Phi(:,pos1)]; % 由所有選出的列組合的矩陣 Pphi = phit*(phit'*phit)^(-1)*phit'; % 正交投影變換矩陣 omp_res1 = res0 - Pphi*res0; % OMP用上一次殘差減去殘差在phit列空間的正交投影 omp_resb = b - Pphi*b; % OMP用待稀疏信號b減去b在phit列空間的正交投影 % Schimidt x = Phi(:,pos1); % Schimidt正交化第一個向量 Px = x*(x'*x)^(-1)*x'; smt_res1 = res0 - Px*b; % 實際上是b - Px*b % test norm(omp_res1-omp_resb) norm(omp_resb-smt_res1)

    % OMP
    % 選擇字典第二列
    c2 = Phi’ * omp_res1;
    [val2,pos2] = max(abs(c2));
    phit = [Phi(:,pos1) Phi(:,pos2)];
    Pphi = phit*(phit’phit)^(-1)phit’;
    omp_res2 = omp_res1 - Pphiomp_res1;
    omp_resb = b - Pphib;
    % Schimidt
    y = Phi(:,pos2) - PxPhi(:,pos2); % Schimidt正交化第二個向量
    Py = y(y’y)^(-1)y’;
    smt_res2 = smt_res1 - Pyb; % 實際上是b - Pxb - Py*b,上一次殘差減去b在第2列正交化所得z上的投影
    % test
    norm(omp_res2-omp_resb)
    norm(omp_resb-smt_res2)

    % OMP
    % 選擇字典第三列
    c3 = Phi’ * omp_res2;
    [val3,pos3] = max(abs(c3));
    phit = [Phi(:,pos1) Phi(:,pos2) Phi(:,pos3)];
    Pphi = phit*(phit’phit)^(-1)phit’;
    omp_res3 = omp_res2 - Pphiomp_res2;
    omp_resb = b - Pphib;
    % Schimidt
    z = Phi(:,pos3) - PxPhi(:,pos3) - PyPhi(:,pos3); % Schimidt正交化第三個向量
    Pz = z*(z’z)^(-1)z’;
    smt_res3 = smt_res2 - Pzb; % 實際上是b - Pxb - Pyb - Pzb,上一次殘差減去b在第3列正交化所得z上的投影
    % test
    norm(omp_res3-omp_resb)
    norm(omp_resb-smt_res3)

    參考文章:

    http://blog.csdn.net/jbb0523/article/details/45099655

    http://blog.csdn.net/jbb0523/article/details/45100351

    分類: 壓縮感知compressive sensing, 數學Mathematics <div id="blog_post_info"> 好文要頂 關注我 收藏該文 AndyJee
    關注 - 0
    粉絲 - 324 +加關注 0 0 <div class="clear"></div> <div id="post_next_prev"><a href="https://www.cnblogs.com/AndyJee/p/5091932.html" class="p_n_p_prefix">? </a> 上一篇: <a href="https://www.cnblogs.com/AndyJee/p/5091932.html" title="發布于 2015-12-31 15:41">淺談壓縮感知(十八):常見測量矩陣及其實現</a> <br> <a href="https://www.cnblogs.com/AndyJee/p/5112251.html" class="p_n_p_prefix">? </a> 下一篇: <a href="https://www.cnblogs.com/AndyJee/p/5112251.html" title="發布于 2016-01-08 10:21">淺談壓縮感知(二十):OMP與壓縮感知</a> posted @ 2016-01-07 17:44?AndyJee 閱讀(3158) 評論(0) 編輯 收藏 </div><!--end: topics 文章、評論容器--> 刷新評論刷新頁面返回頂部 注冊用戶登錄后才能發表評論,請 登錄 或 注冊, 訪問 網站首頁。 【推薦】超50萬C++/C#源碼: 大型實時仿真組態圖形源碼
    【推薦】零基礎輕松玩轉華為云產品,獲壕禮加返百元大禮
    【推薦】新手上天翼云,數十款云產品、新一代主機0元體驗
    【推薦】華為IoT平臺開發者套餐9.9元起,購買即送免費課程
    相關博文:
    · 淺談壓縮感知(九):正交匹配追蹤算法OMP
    · 淺談壓縮感知(二十二):壓縮感知重構算法之正則化正交匹配追蹤(ROMP)
    · 淺談壓縮感知(二十五):壓縮感知重構算法之分段正交匹配追蹤(StOMP)
    · 淺談壓縮感知(二十一):壓縮感知重構算法之正交匹配追蹤(OMP)
    · 淺談壓縮感知(二十):OMP與壓縮感知
    <div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" style="border: 0px; vertical-align: bottom;" data-google-container-id="2" data-load-complete="true"></iframe></div></div> </div> <div id="under_post_kb"> 最新 IT 新聞:
    · Windows 10終于拿下操作系統市場半壁江山
    · 藏在1.85億人體內的隱形致癌病毒,有人確診即是晚期
    · 嘀嗒出行:用戶突破1.3億,車主突破1500萬
    · 無人機泡沫破裂:創企紛紛關門 風投遭重創
    · 基因編輯明星動物遇挫:無角牛體內發現細菌基因污染 | 專訪 ?
    ? 更多新聞...

    總結

    以上是生活随笔為你收集整理的MP、OMP与施密特正交化(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。