zoukankan      html  css  js  c++  java
  • 压缩感知(十)

    压缩感知仿真验证

    一维信号重建实验

    clear; 
    close all;
     
    choice_transform=1;       
    choice_Phi=0;             
    n = 512;
    t = [0: n-1];
    f = cos(2*pi/256*t) + sin(2*pi/128*t);   % 
    n = length(f);
    a = 0.2;                    
    m = double(int32(a*n));
    
    switch choice_transform
        case 1
            ft = dct(f);
            disp('ft = dct(f)')
        case 0
            ft = fft(f);
            disp('ft = fft(f)')
    end
     
    disp(['ÐźÅÏ¡Êè¶È£º',num2str(length(find((abs(ft))>0.1)))])
    figure('name', 'A Tone Time and Frequency Plot');
    subplot(2, 1, 1);
    plot(f);
    xlabel('Time (s)'); 
    % ylabel('f(t)');
    subplot(2, 1, 2);
     
    switch choice_transform
        case 1
            plot(ft)
            disp('plot(ft)')
        case 0
            plot(abs(ft));
            disp('plot(abs(ft))')
    end
    xlabel('Frequency (Hz)'); 
    % ylabel('DCT(f(t))');
    
    switch choice_Phi
        case 1
            Phi = PartHadamardMtx(m,n);       
        case 0
            Phi = sqrt(1/m) * randn(m,n);    
    end
    f2 = (Phi * f')';       
    % f2 = f(1:2:n);
     
    switch choice_transform
        case 1
            Psi = dct(eye(n,n));           
            disp('Psi = dct(eye(n,n));')
        case 0
            Psi = inv(fft(eye(n,n)));      
            disp('Psi = inv(fft(eye(n,n)));')
    end
     
    A = Phi * Psi;                    % A = Phi * Psi
    cvx_begin;
        variable x(n) complex;
    %     variable x(n) ;
        minimize(norm(x,1));
        subject to
          A*x == f2';
    cvx_end;
     
    figure;
    subplot(2,1,2);
    switch choice_transform
        case 1
            plot(real(x));
            disp('plot(real(x))')
        case 0
            plot(abs(x));
            disp('plot(abs(x))')
    end
     
    title('Using L1 Norm£¨Frequency Domain£©');
     
    %  ylabel('DCT(f(t))'); xlabel('Frequency (Hz)');
    switch choice_transform
        case 1
            sig = dct(real(x));
            disp('sig = dct(real(x))')
        case 0
            sig = real(ifft(full(x)));
            disp('sig = real(ifft(full(x)))')
    end
    subplot(2,1,1);
    plot(f)
    hold on;plot(sig);hold off
    title('Using L1 Norm (Time Domain)');
    % ylabel('f(t)'); xlabel('Time (s)');
    legend('Original','Recovery')
    
    for K = 1:100
        theta = CS_OMP(f2,A,K);
        %     figure;plot(dct(theta));title(['K=',num2str(K)])
        switch choice_transform
            case 1
                re(K) = norm(f'-(dct(theta)));
            case 0
                re(K) = norm(f'-real(ifft(full(theta))));
        end
    end
    theta = CS_OMP(f2,A,find(re==min(min(re))));
    disp(['×î¼ÑÏ¡Êè¶ÈK=',num2str(find(re==min(min(re))))]);
    % theta = CS_OMP(f2,A,10);
    figure;subplot(2,1,2);
    switch choice_transform
        case 1
            plot(theta);
            disp('plot(theta)')
        case 0
            plot(abs(theta));
            disp('plot(abs(theta))')
    end
     
    title(['Using OMP(Frequence Domain)  K=',num2str(find(re==min(min(re))))])
     
    switch choice_transform
        case 1
            sig2 = dct(theta);
            disp('sig2 = dct(theta)')
        case 0
            sig2 = real(ifft(full(theta)));
            disp('sig2 = real(ifft(full(theta)))')
    end
     
    subplot(2,1,1);plot(f);hold on;
    plot(sig2)
    hold off;
    title(['Using OMP(Time Domain)  K=',num2str(find(re==min(min(re))))]);
    legend('Original','Recovery')

    一维信号仿真结果

     

    如上图所示,为原始信号f = cos(2*pi/256*t) + sin(2*pi/128*t),及其频域图(频域稀疏)。

    取原信号的20%,使用L1范数算法对原信号进行恢复重建,效果如上图所示,蓝色为原始信号,红色为恢复信号。

     取原信号的20%,使用OMP算法对原信号进行恢复重建,效果如上图所示,蓝色为原始信号,红色为恢复信号。

    取原信号的30%,使用L1范数算法对原信号进行恢复重建,效果如上图所示,蓝色为原始信号,红色为恢复信号。

    取原信号的30%,使用OMP算法对原信号进行恢复重建,效果如上图所示,蓝色为原始信号,红色为恢复信号。

    小结:压缩感知原本就是为了信号(非图像)采集而生,所以在信号采集上有很强的实用性,甚至只需要原信号10~20%的信息,就可以复原出原信号的大部分特性。

  • 相关阅读:
    ADO.NET中DataSet的应用(读书笔记5)
    ADO.NET中DataTable的应用(读书笔记4)
    如何在前端界面操作数据表(读书笔记3)
    如何在各类空间中输入输出数据(读书笔记2)
    关于利用input的file属性在页面添加图片的问题
    本地存储
    react
    微信开发
    node
    SVN和GIT
  • 原文地址:https://www.cnblogs.com/wangyinan0214/p/12331201.html
Copyright © 2011-2022 走看看