浅谈压缩感知(十四):傅里叶矩阵与小波变换矩阵的MATLAB实现

主要内容:

  1. 傅里叶矩阵及其MATLAB实现
  2. 小波变换矩阵及其MATLAB实现 

傅里叶矩阵及其MATLAB实现

傅里叶矩阵的定义:(来源: http://mathworld.wolfram.com/FourierMatrix.html

傅里叶矩阵的MATLAB实现:

  dftmtx(N) is the N-by-N complex matrix of values around the unit-circle whose inner product with a column vector of length N yields the discrete Fourier transform of the vector. If X is a column vector of length N, then dftmtx(N)*X yields the same result as FFT(X); however, FFT(X) is more efficient.

  The inverse discrete Fourier transform matrix is CONJ(dftmtx(N))/N.

% clc;clear;
N = 16;
X = randn(N,1);
dft_result1 = dftmtx(N)*X;
dft_result2 = fft(X);
% isEqual = all(dft_result1 == dft_result2);
err = norm(dft_result1(:)-dft_result2(:));
if err < 0.01
    fprintf(‘dftmtx(N)*X yields the same result as FFT(X)‘);
else
    fprintf(‘dftmtx(N)*X does not yield the same result as FFT(X)‘);
end

小波变换矩阵及其MATLAB实现

小波变换矩阵的概念:

参考:http://blog.csdn.net/jbb0523/article/details/42470103

小波变换矩阵的MATLAB实现:

function [ ww ] = dwtmtx( N,wtype,wlev )
%DWTMTX Discrete wavelet transform matrix
%   This function generates the transform matrix ww according to input
%   parameters N,wtype,wlev .
%Detailed explanation goes here
%   N is the dimension of ww
%   wtype is the wavelet type
%   wlev is the number of decomposition level
%NOTE: The extension mode must be Periodization(‘per‘)
[h,g]= wfilters(wtype,‘d‘);         %Decomposition low&high pass filter
L=length(h);                        %Filter length
h_1 = fliplr(h);                    %Flip matrix left to right
g_1 = fliplr(g);
loop_max = log2(N);
loop_min = double(int8(log2(L)))+1;
if wlev>loop_max-loop_min+1
    fprintf(‘\nWaring: wlev is too big\n‘);
    fprintf(‘The biggest wlev is %d\n‘,loop_max-loop_min+1);
    wlev = loop_max-loop_min+1;
end
ww=1;
for loop = loop_max-wlev+1:loop_max
    Nii = 2^loop;
    p1_0 = [h_1 zeros(1,Nii-L)];
    p2_0 = [g_1 zeros(1,Nii-L)];
    p1 = zeros(Nii/2,Nii);
    p2 = zeros(Nii/2,Nii);
    for ii=1:Nii/2
        p1(ii,:)=circshift(p1_0‘,2*(ii-1)+1-(L-1)+L/2-1)‘;
        p2(ii,:)=circshift(p2_0‘,2*(ii-1)+1-(L-1)+L/2-1)‘;
    end
    w1=[p1;p2];
    mm=2^loop_max-length(w1);
    w=[w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)];
    ww=ww*w;
    clear p1;clear p2;
end

%The end!!!
end

验证是否与Matlab自带的函数wavedec所得结果一致:

%验证函数dwtmtx的正确性
clear all;close all;clc;
N = 2^7;
% ‘db1‘ or ‘haar‘, ‘db2‘, ... ,‘db10‘, ... , ‘db45‘
% ‘coif1‘, ... , ‘coif5‘
% ‘sym2‘, ... , ‘sym8‘, ... ,‘sym45‘
% ‘bior1.1‘, ‘bior1.3‘, ‘bior1.5‘
% ‘bior2.2‘, ‘bior2.4‘, ‘bior2.6‘, ‘bior2.8‘
% ‘bior3.1‘, ‘bior3.3‘, ‘bior3.5‘, ‘bior3.7‘
% ‘bior3.9‘, ‘bior4.4‘, ‘bior5.5‘, ‘bior6.8‘
% ‘rbio1.1‘, ‘rbio1.3‘, ‘rbio1.5‘
% ‘rbio2.2‘, ‘rbio2.4‘, ‘rbio2.6‘, ‘rbio2.8‘
% ‘rbio3.1‘, ‘rbio3.3‘, ‘rbio3.5‘, ‘rbio3.7‘
% ‘rbio3.9‘, ‘rbio4.4‘, ‘rbio5.5‘, ‘rbio6.8‘
wtype = ‘rbio6.8‘;
wlev_max = wmaxlev(N,wtype);
if wlev_max == 0
    fprintf(‘\nThe parameter N and wtype does not match!\n‘);
end
dwtmode(‘per‘);
for wlev = 1:wlev_max
    ww = dwtmtx(N,wtype,wlev);
    x = randn(1,N);
    y1 = (ww*x‘)‘;
    [y2,y2l] = wavedec(x,wlev,wtype);
    y_err = sum((y1-y2).*(y1-y2));
    fprintf(‘wlev = %d: y_err = %f\n‘,wlev,y_err);
end
时间: 2024-10-08 09:33:55

浅谈压缩感知(十四):傅里叶矩阵与小波变换矩阵的MATLAB实现的相关文章

浅谈压缩感知(七):常见测量矩阵的MATLAB实现

1.随机高斯测量矩阵 function [ Phi ] = GaussMtx( M,N ) %GaussMtx Summary of this function goes here % Generate Bernoulli matrix % M -- RowNumber % N -- ColumnNumber % Phi -- The Gauss matrix %% Generate Gauss matrix Phi = randn(M,N); %Phi = Phi/sqrt(M); end 2

浅谈压缩感知(四):恢复算法

主要内容: 1.L1 minimization 2.Matching Pursuit 3.Iterative thresholding 4.Total-variation minimization 1.L1 minimization 这是一个凸优化问题,类似于统计学中的LASSO. 优化算法有: 特点: L1最小化的其他形式: 2.Matching Pursuit 匹配追踪:参考http://www.cnblogs.com/AndyJee/p/3849200.html 算法步骤: 特点: 3.I

浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)

主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子空间追踪(SP)几乎完全一样,因此算法流程也基本一致. SP与CoSaMP主要区别在于"Ineach iteration, in the SP algorithm, only K new candidates are added, while theCoSAMP algorithm adds 2K

浅谈压缩感知(十六):感知矩阵之RIP

在压缩感知中,总是看到"矩阵满足RIP"之类的字眼,没错,这是一个压缩感知绕不开的术语,有限等距性质(Restricted Isometry Property, RIP). 注意:RIP性质针对的同样是感知矩阵而非测量矩阵. 0.相关概念与符号 1.RIP定义 中文版: 英文版: 概括: (RIP)矩阵满足2K阶RIP保证了能够把任意一个K稀疏信号θK映射为唯一的y,也就是说要想通过压缩观测y恢复K稀疏信号θK,必须保证传感矩阵满足2K阶RIP,满足2K阶RIP的矩阵任意2K列线性无关

浅谈压缩感知(十五):测量矩阵之spark常数

在压缩感知中,有一些用来评价测量矩阵的指标,如常见的RIP等,除了RIP之外,spark常数也能够用来衡量能否成为合适的测量矩阵. 1.零空间条件NULL Space Condition 在介绍spark之前,先考虑一下测量矩阵的零空间. 这里从矩阵的零空间来考虑测量矩阵需满足的条件:对于K稀疏的信号x,当且仅当测量矩阵的零空间与2K个基向量张成的线性空间没有交集,或者说零空间中的向量不在2K个基向量张成的线性空间中. 上述描述的性质似乎有点难懂,那么与之等价的表述就是spark常数. 2.sp

浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为OMP算法的一种推广.OMP每次只选择与残差相关最大的一个,而gOMP则是简单地选择最大的S个.之所以这里表述为"简单地选择"是相比于ROMP之类算法的,不进行任何其它处理,只是选择最大的S个而已. gOMP的算法流程: 二.gOMP的MATLAB实现(CS_gOMP

浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)

主要内容: SWOMP的算法流程 SWOMP的MATLAB实现 一维信号的实验与结果 门限参数a.测量数M与重构成功概率关系的实验与结果 SWOMP与StOMP性能比较 一.SWOMP的算法流程 分段弱正交匹配追踪(Stagewise Weak OMP)可以说是StOMP的一种修改算法,它们的唯一不同是选择原子时的门限设置,这可以降低对测量矩阵的要求.我们称这里的原子选择方式为"弱选择"(Weak Selection),StOMP的门限设置由残差决定,这对测量矩阵(原子选择)提出了要求

浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘

主要内容: l1_ls的算法流程 l1_ls的MATLAB实现 一维信号的实验与结果 前言 前面所介绍的算法都是在匹配追踪算法MP基础上延伸的贪心算法,从本节开始,介绍基于凸优化的压缩感知重构算法. 约束的凸优化问题: 去约束的凸优化问题: 在压缩感知中,J函数和H函数的选择: 那么,后面要解决的问题就是如何通过最优化方法来求出x. 一.l1_ls的算法 l1_ls,全称?1-regularized least squares,基于L1正则的最小二乘算法,在标准内点法的基础上,在truncate

浅谈压缩感知(十三):压缩感知与传统压缩

导言: 压缩感知,顾名思义,就是感知压缩,这里包含两层意思,1.感知,即采集或采样,在传统的信号采集中,为了不失真,必须满足Nyquist采样定理,在上一篇博文已经介绍了压缩感知在采样上与传统信号采集的联系与区别,参照http://www.cnblogs.com/AndyJee/p/5050321.html : 2.压缩,即数据压缩,这里是有区别与传统压缩的一个概念,因此本文主要从压缩的角度出发,介绍压缩感知与传统压缩的联系与区别. 传统压缩: 传统的信号获取与处理过程包括:采样.压缩.传输.解