luozhenzhen1992 2015-09-24 09:53 采纳率: 0%
浏览 1223

压缩感知的大神们,帮帮忙啊,一维信号的MP算法重构,稍微改动了下矩阵,出错了

clc
clear all;
close all;
M = 64;   %观测信号长度
N = 256;  %稀疏信号长度
K = 7;   %稀疏度
f1=50;    %  信号频率1
f2=100;   %  信号频率2
f3=200;   %  信号频率3
f4=400;   %  信号频率4
fs=800;   %  采样频率
ts=1/fs;  %  采样间隔
Ts=1:N;   %  采样序列
x0=0.3*cos(2*pi*f1*Ts*ts)+0.6*cos(2*pi*f2*Ts*ts)+0.1*cos(2*pi*f3*Ts*ts)+0.9*cos(2*pi*f4*Ts*ts);

%------  高斯感知矩阵Phi   -------------
D=ones(M,N);
D(:,1:2:N)=0;
Phi = sqrt(1/M) * D;

%Phi = sqrt(1/M) * randn(M,N);
for i = 1:N 
    Phi(:,i) = Phi(:,i) / norm(Phi(:,i));
end
%-------- 测量向量 y  ----------
y = Phi * x0.';

%% -----2. MP Reconstruction ------------
Psi=fft(eye(N,N))/sqrt(N);                        %  傅里叶正变换矩阵
T=Phi*Psi';    

%  恢复矩阵(测量矩阵*正交反变换矩阵)
x = zeros(N,1);       %x0的逼近信号x
times =  K;           %迭代次数 = 稀疏度
g = zeros(N,1);       %余量和感知矩阵内积
r  = y;               %余量初始化为y
tic
for n=0:times
    g = T' * r;
    [val,K] = max( abs(g) ) ;
    x(K,1) = x(K,1) + g(K,1);
    r = r - g(K,1) * T(:,K);
end
toc
x1=real(Psi'*x); 
disp('MP relative error=');
disp( norm(x1'-x0)/norm(x0) );
figure(1),
hold on;
plot(x1,'k.-');plot(x0,'r');  legend('MP重构信号','原始信号');
figure(2),  plot(real(r),'b');  legend('残差');
图片说明

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 可否在不同线程中调用封装数据库操作的类
    • ¥20 使用Photon PUN2解决游戏得分同步的问题
    • ¥15 微带串馈天线阵列每个阵元宽度计算
    • ¥15 keil的map文件中Image component sizes各项意思
    • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
    • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
    • ¥15 划分vlan后,链路不通了?
    • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
    • ¥15 Vue3 大型图片数据拖动排序
    • ¥15 Centos / PETGEM