1、matlab 小波变换Matlab 1. 离散傅立叶变换的 Matlab 实现Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。这些函数的调用格式如下:Afft(X,N,DIM)其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 N ;DIM 表示要进行离散傅立叶变换。 Afft2(X,MROWS,NCOLS)其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。别可以实现
2、一维、二维和 N 维 DFTAfftn(X,SIZE)其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后的长度。 函数 ifft、ifft2 和 ifftn 的调用格式于对应的离散傅立叶变换函数一致。别可以实现一维、二维和 N 维 DFT例子:图像的二维傅立叶频谱1. 离散傅立叶变换的 Matlab 实现% 读入原始图像Iimread(lena.bmp);函数 fft、fft2 和 fftn 分imshow(I)% 求离散傅立叶频谱J=fftshift(fft2(I);figure;别可以实现一维、二维和 N 维 DFTimshow(log(abs(J),8,10)2.
3、 离散余弦变换的 Matlab 实现 Matlab2.1. dct2 函数功能:二维 DCT 变换 Matlab格式:B=dct2(A)B=dct2(A,m,n)B=dct2(A,m,n)函数 fft、fft2 和 fftn 分说明:Bdct2(A) 计算 A 的 DCT 变换 B ,A 与 B 的大小相同;Bdct2(A,m,n) 和 B=dct2(A,m,n) 通过对 A 补 0 或剪裁,使 B 的大小为 mn。2.2. dict2 函数 功能:DCT 反变换格式:B=idct2(A)B=idct2(A,m,n)别可以实现一维、二维和 N 维 DFTB=idct2(A,m,n)说明:Bid
4、ct2(A) 计算 A 的 DCT 反变换 B ,A 与 B 的大小相同;Bidct2(A,m,n) 和 B=idct2(A,m,n) 通过对 A 补 0 或剪裁,使 B 的大小为 mn。Matlab2.3. dctmtx 函数功能:计算 DCT 变换矩阵格式:Ddctmtx(n) 说明:Ddctmtx(n) 返回一个 nn 的 DCT 变换矩阵,输出矩阵 D 为 double 类型。1. 离散傅立叶变换的 Matlab 实现3. 图像小波变换的 Matlab 实现函数 fft、fft2 和 fftn 分3.1 一维小波变换的 Matlab 实现(1) dwt 函数 Matlab功能:一维离散
5、小波变换格式:cA,cD=dwt(X,wname)cA,cD=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维 DFT说明:cA,cD=dwt(X,wname) 使用指定的小波基函数 wname 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;cA,cD=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。(2) idwt 函数功能:一维离散小波反变换 格式:X=idwt(cA,cD,wname)X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,wname,L)函数 fft、fft2 和 fftn 分X=idw
6、t(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,wname) 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。wname 为所选的小波函数 X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。X=idwt(cA,cD,wname,L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。1. 离散傅立叶变换的 Matlab 实现3.2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT-函数名 函
7、数功能- dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换 Matlabwaverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量 1. 离散傅立叶变换的 Matlab 实现detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构 1. 离散傅立叶变换的 Matlab 实现dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换-函数 fft、fft2 和 fftn 分(1)
8、 wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB) Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0NB,缺省值 NB16;OPT 指定了编码的方式(缺省值为 mat),即:别可以实现一维、二维和 N 维 DFTOPTrow ,按行编码OPTcol ,按列编码OPTmat ,按整个矩阵编码函数 fft、fft2
9、和 fftn 分ABSOL 是函数的控制参数(缺省值为 1),即:ABSOL0 时,返回编码矩阵ABSOL1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab 实现(2) dwt2 函数功能:二维离散小波变换 格式:cA,cH,cV,cD=dwt2(X,wname)cA,cH,cV,cD=dwt2(X,Lo_D,Hi_D)说明:cA,cH,cV,cD=dwt2(X,wname)使用指定的小波基函数 wname 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;cA,cH,cV,cD=dwt2(X,L
10、o_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。1. 离散傅立叶变换的 Matlab 实现(3) wavedec2 函数功能:二维信号的多层小波分解 1. 离散傅立叶变换的 Matlab 实现格式:C,S=wavedec2(X,N,wname)C,S=wavedec2(X,N,Lo_D,Hi_D)说明:C,S=wavedec2(X,N,wname) 使用小波基函数 wname 对二维信号 X 进行 N 层分解;C,S=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。别可以实现一维
11、、二维和 N 维 DFT(4) idwt2 函数功能:二维离散小波反变换函数 fft、fft2 和 fftn 分格式:X=idwt2(cA,cH,cV,cD,wname)X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)X=idwt2(cA,cH,cV,cD,wname,S)别可以实现一维、二维和 N 维 DFTX=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)说明:X=idwt2(cA,cH,cV,cD,wname) 由信号小波分解的近似信号 cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X ;X=idwt2(cA,cH,cV,cD,Lo_R,Hi
12、_R) 使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;X=idwt2(cA,cH,cV,cD,wname,S) 和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 个数据点。(5) waverec2 函数说明:二维信号的多层小波重构格式:X=waverec2(C,S,wname) X=waverec2(C,S,Lo_R,Hi_R)说明:X=waverec2(C,S,wname) 由多层二维小波分解的结果 C、S 重构原始信号 X ,wname 为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和
13、高通滤波器 Lo_R 和 Hi_R 重构原信号。Allnodes 计算树结点 函数 fft、fft2 和 fftn 分appcoef 提取一维小波变换低频系数 appcoef2 提取二维小波分解低频系数 bestlevt 计算完整最佳小波包树 别可以实现一维、二维和 N 维 DFTbesttree 计算最佳(优)树 * biorfilt 双正交样条小波滤波器组 biorwavf 双正交样条小波滤波器 Matlab* centfrq 求小波中心频率 cgauwavf Complex Gaussian 小波 cmorwavf coiflets 小波滤波器 1. 离散傅立叶变换的 Matlab 实现
14、cwt 一维连续小波变换 dbaux Daubechies 小波滤波器计算 dbwavf Daubechies 小波滤波器 dbwavf(W) W=dbN N=1,2,3,.,50 别可以实现一维、二维和 N 维 DFTddencmp 获取默认值阈值(软或硬)熵标准 depo2ind 将深度-位置结点形式转化成索引结点形式 detcoef 提取一维小波变换高频系数 Matlabdetcoef2 提取二维小波分解高频系数 disp 显示文本或矩阵 drawtree 画小波包分解树(GUI) 别可以实现一维、二维和 N 维 DFTdtree 构造 DTREE 类 dwt 单尺度一维离散小波变换 d
15、wt2 单尺度二维离散小波变换 别可以实现一维、二维和 N 维 DFTdwtmode 离散小波变换拓展模式 * dyaddown 二元取样 * dyadup 二元插值 1. 离散傅立叶变换的 Matlab 实现entrupd 更新小波包的熵值 fbspwavf B 样条小波 gauswavf Gaussian 小波 Matlabget 获取对象属性值 idwt 单尺度一维离散小波逆变换 idwt2 单尺度二维离散小波逆变换 ind2depo 将索引结点形式转化成深度位置结点形式 * intwave 积分小波数 isnode 判断结点是否存在 Matlabistnode 判断结点是否是终结点并返
16、回排列值 iswt 一维逆 SWT(Stationary Wavelet Transform)变换 iswt2 二维逆 SWT 变换 Matlableaves Determine terminal nodesmexihat 墨西哥帽小波 meyer Meyer 小波 别可以实现一维、二维和 N 维 DFTmeyeraux Meyer 小波辅助函数 morlet Morlet 小波 nodease 计算上溯结点 nodedesc 计算下溯结点(子结点) nodejoin 重组结点 nodepar 寻找父结点 别可以实现一维、二维和 N 维 DFTnodesplt 分割(分解)结点 noleave
17、s Determine nonterminal nodesntnode Number of terminal nodes 函数 fft、fft2 和 fftn 分ntree Constructor for the class NTREE* orthfilt 正交小波滤波器组 plot 绘制向量或矩阵的图形 * qmf 镜像二次滤波器 rbiowavf Reverse biorthogonal spline wavelet filtersread 读取二进制数据 函数 fft、fft2 和 fftn 分readtree 读取小波包分解树 * scal2frq Scale to frequency
18、set Matlabshanwavf Shannon waveletsswt 一维 SWT(Stationary Wavelet Transform)变换 swt2 二维 SWT 变换 symaux Symlet wavelet filter computation.symwavf Symlets 小波滤波器 thselect 信号消噪的阈值选择 thodes Referencestreedpth 求树的深度 treeord 求树结构的叉数 函数 fft、fft2 和 fftn 分upcoef 一维小波分解系数的直接重构 upcoef2 二维小波分解系数的直接重构 upwlev 单尺度一维小波
19、分解的重构 函数 fft、fft2 和 fftn 分upwlev2 单尺度二维小波分解的重构 wavedec 单尺度一维小波分解 wavedec2 多尺度二维小波分解 Matlabwavedemo 小波工具箱函数 demo * wavefun 小波函数和尺度函数 * wavefun2 二维小波函数和尺度函数 别可以实现一维、二维和 N 维 DFTwavemenu 小波工具箱函数 menu 图形界面调用函数 * wavemngr 小波管理函数 waverec 多尺度一维小波重构 1. 离散傅立叶变换的 Matlab 实现waverec2 多尺度二维小波重构 wbmpen Penalized th
20、reshold for wavelet 1-D or 2-D de-noisingwcodemat 对矩阵进行量化编码 1. 离散傅立叶变换的 Matlab 实现wdcbm Thresholds for wavelet 1-D using Birge-Massart strategywdcbm2 Thresholds for wavelet 2-D using Birge-Massart strategywden 用小波进行一维信号的消噪或压缩 wdencmp De-noising or compression using waveletswentropy 计算小波包的熵 wextend Ex
21、tend a vector or a matrix * wfilters 小波滤波器 wkeep 提取向量或矩阵中的一部分 * wmaxlev 计算小波分解的最大尺度 1. 离散傅立叶变换的 Matlab 实现wnoise 产生含噪声的测试函数数据 wnoisest 估计一维小波的系数的标准偏差 wp2wtree 从小波包树中提取小波树 1. 离散傅立叶变换的 Matlab实现wpcoef 计算小波包系数 wpcutree 剪切小波包分解树 wpdec 一维小波包的分解 函数 fft、fft2 和 fftn 分wpdec2 二维小波包的分解 wpdencmp 用小波包进行信号的消噪或压缩 wp
22、fun 小波包函数 函数 fft、fft2 和 fftn 分wpjoin 重组小波包wprcoef 小波包分解系数的重构 wprec 一维小波包分解的重构 1. 离散傅立叶变换的 Matlab 实现wprec2 二维小波包分解的重构 wpsplt 分割(分解)小波包 wpthcoef 进行小波包分解系数的阈值处理 函数 fft、fft2 和 fftn 分wptree 显示小波包树结构wpviewcf Plot the colored wavelet packet coefficients.wrcoef 对一维小波系数进行单支重构 别可以实现一维、二维和 N 维 DFTwrcoef2 对二维小波
23、系数进行单支重构 wrev 向量逆序 write 向缓冲区内存写进数据 wtbo Constructor for the class WTBOwthcoef 一维信号的小波系数阈值处理 wthcoef2 二维信号的小波系数阈值处理 1. 离散傅立叶变换的 Matlab实现wthresh 进行软阈值或硬阈值处理 wthrmngr 阈值设置管理 wtreemgr 管理树结构 MatlabComment 微微微微1: 1.装载信号在 MATLAB命令行中输入load noisblocs=noisbloc(1:1024);ls=length(s);plot(s);2.完成信号的单尺度一维离散小波分解采
24、用 db4基本小波分解信号在命令窗口中输入cA1,cD1=dwt(s,db4);这就产生了低频系数 cA1和高频系数 cD1。可以通过 whos命令查看 cA1和 cD1的长度:whosName Size Bytes ClasscA1 1x515 4120 double arraycD1 1x515 4120 double arrayls 1x1 8 double arraynoisbloc 1x1024 8192 double arrays 1x1024 8192 double arrayGrand total is 3079 elements using 24632 bytes3.从系数中
25、重构低频部分和高频部分从第二步产生的系数 cA1和 cD1构造第一层的低频和高频(A1 和 D1)系数;A1=upcoef(a,cA1,db4,1,ls);D1=upcoef(a,cD1,db4,1,ls);或用下面两个函数:A1=idwt(cA1,db4,ls);D1=idwt(cD1,db4,ls);4.显示高频和低频部分为了显示第一层分解结果,输入subplot(211); plot(A1); title(低频 A1);subplot(212); plot(D1); title(低频 D1);5.由小波逆变换恢复信号使用 idwt 函数很容易实现,在命令窗口输入subplot(211);
26、 plot(s); title(原始信号);subplot(212); plot(A0); title(重构信号);6.多层一维分解为了完成一个 5 层的分解,输入:C,L=wavedec(s,5,db4);7.提取系数的低频和高频部分为了从上面的 C 中提取第 3 层的低频系数,输入:cA3=appcoef(C,L,db4,3);8.重构第 3 层的低频系数为了从上面的 C 中重构第 3 层的低频系数,输入:A3=wrcoef(a,C,L,db4,3);9.重构第 1、2、3、4 、5 层的高频信号其方法是:cA5=appcoef(C,L,db4,5);A5=wrcoef(a,C,L,db4
27、,5);D1=wrcoef(d,C,L,db4,1);D2=wrcoef(d,C,L,db4,2);D3=wrcoef(d,C,L,db4,3);D4=wrcoef(d,C,L,db4,4);D5=wrcoef(d,C,L,db4,5);下面显示多尺度一维分解的结果:subplot(322); plot(D1); title(低频 D1);subplot(323); plot(D2); title(低频 D2);subplot(323); plot(D3); title(低频 D3);subplot(325); plot(A5); title(低频 D4);subplot(326); plot(A5); title(低频 D5);10.重构原始信号并显示A0=waverec(C,L,db4);subplot(311); plot(s); title(原始信号);subplot(312); plot(A0); title(重构信号);subplot(313); plot(s-A0); title(误差信号);