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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 测距传感器数据手册i2c
    • ¥15 RPA正常跑,cmd输入cookies跑不出来
    • ¥15 求帮我调试一下freefem代码
    • ¥15 matlab代码解决,怎么运行
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法