L1范数(基追踪) vs L2范数(最小二乘) 对比复现(Matlab)
% ==============================================
% 压缩感知:L1范数(基追踪) vs L2范数(最小二乘) 对比复现
% 前置条件:安装Matlab CVX工具箱(用于求解L1凸优化问题)
% ==============================================
%% 1. 生成模拟数据(符合压缩感知假设)
clear; clc; close all; % 清理工作区、命令行、关闭旧绘图窗口
% 定义核心参数
m = 128; % 观测向量维度(低维)
n = 256; % 原始信号维度(高维),满足m < n(欠定问题)
sparsity_ratio = 0.1; % 原始信号稀疏度(10%非零元素)
% 生成高斯随机观测矩阵A(满足RIP条件,保证稀疏恢复可行)
A = randn(m, n);
% 生成原始稀疏信号u(sprandn生成稀疏正态分布向量)
u = sprandn(n, 1, sparsity_ratio);
% 生成观测向量b(理想无噪声场景,b = A*u)
b = A * u;
%% 2. 求解两种恢复方法的解
% 方法1:L2范数解(最小二乘法,处理欠定问题,用伪逆求解)
% 欠定问题(m < n)有无穷多解,L2范数最小的解为pinv(A)*b(稠密解)
u_l2 = pinv(A) * b;
% 方法2:L1范数解(基追踪,最小化L1范数,满足观测约束,稀疏解)
% 依赖CVX工具箱,若未安装请先安装CVX
cvx_begin quiet % quiet:关闭CVX运行日志输出,更简洁
variable u_l1(n) % 定义优化变量(待恢复的稀疏信号)
minimize( norm(u_l1, 1) ) % 目标函数:最小化L1范数(保证稀疏性)
subject to % 约束条件:满足观测方程,无噪声理想场景
A * u_l1 == b;
cvx_end
%% 3. 量化评估恢复效果(打印关键指标)
fprintf('==================== 恢复效果评估 ====================\n');
% 原始信号稀疏度
u_sparsity = nnz(u) / n;
fprintf('原始信号稀疏度:%.2f%%\n', u_sparsity * 100);
% L1恢复结果:相对误差 + 稀疏度
l1_error = norm(u_l1 - u) / norm(u);
l1_sparsity = nnz(abs(u_l1) > 1e-3) / n; % 1e-3:过滤数值计算微小误差
fprintf('L1范数恢复 - 相对误差:%.4e | 稀疏度:%.2f%%\n', l1_error, l1_sparsity * 100);
% L2恢复结果:相对误差 + 稀疏度
l2_error = norm(u_l2 - u) / norm(u);
l2_sparsity = nnz(abs(u_l2) > 1e-3) / n;
fprintf('L2范数恢复 - 相对误差:%.4e | 稀疏度:%.2f%%\n', l2_error, l2_sparsity * 100);
%% 4. 可视化对比(生成三张对比子图,复现目标效果)
figure('Position', [100, 100, 800, 600]); % 设定绘图窗口大小,更清晰
% 子图1:原始稀疏信号u
subplot(3, 1, 1);
stem(u, 'b.', 'MarkerSize', 8);
title('(a) 原始稀疏信号 u', 'FontSize', 12);
xlabel('信号索引', 'FontSize', 10);
ylabel('信号幅值', 'FontSize', 10);
xlim([1, n]); % 固定x轴范围,三张图保持一致
grid on; grid minor; % 添加网格,更易观察非零元素位置
% 子图2:L1范数恢复信号u_l1
subplot(3, 1, 2);
stem(u_l1, 'r.', 'MarkerSize', 8);
title('(b) L_1范数恢复信号(基追踪)', 'FontSize', 12);
xlabel('信号索引', 'FontSize', 10);
ylabel('信号幅值', 'FontSize', 10);
xlim([1, n]);
grid on; grid minor;
% 子图3:L2范数恢复信号u_l2
subplot(3, 1, 3);
stem(u_l2, 'g.', 'MarkerSize', 8);
title('(c) L_2范数恢复信号(最小二乘)', 'FontSize', 12);
xlabel('信号索引', 'FontSize', 10);
ylabel('信号幅值', 'FontSize', 10);
xlim([1, n]);
grid on; grid minor;
% 强制刷新绘图窗口,确保图像正常显示
drawnow;

浙公网安备 33010602011771号