Matlab系列之小波分析基础

  • 前言
  • 介绍
    • 1、waveinfo函数
    • 2、wfilters函数
      • 应用实例
      • 运行结果
    • 3、dwt函数
      • 应用实例
      • 运行结果
    • 4、wavedec
      • 应用实例
      • 运行结果
    • 5、wrcoef
      • 应用实例
      • 运行结果
  • 结语
  • 更多精彩,等你发现~

前言

原本想把MATLAB里关于概率论的相关进行记录,不过概率论学得不好,感觉在该部分的表达上还存在很大不足,就放弃了相关的篇章,直接开始了本篇,本篇主要是记录小波分析的一些东西,小波分析的原理就不细说了,所以还是老样子,主要介绍小波分析在MATLAB中的相关知识,不足之处请指出。

介绍

小波分析是数学分析方法里的一种,主要应用于信号处理、图像处理、语音分析以及其他的非线性科学领域,它被认为是继Fourier分析之后的又一有效的时频分析方法。小波变换与Fourier变换相比,是一个时间和频域的局域变换因而能有效地从信号中提取信息,通过伸缩和平移等运算功能对函数或信号进行多尺度细化分析(Multiscale Analysis),解决了Fourier变换不能解决的许多困难问题。

MATLAB提供了小波分析工具箱,在主界面的命令窗口输入:wavemenu,就可以打开工具箱,如下所示。

常用的就是小波基函数、连续小波变换及其应用、离散小波变换及其应用、小波包变换、信号和图像的多尺度分解、基于小波变换的信号去噪、信号压缩,在上图也可以找到与这些对应的选项。常用的小波基函数如下表:

函数表示 函数描述
morl Morlet小波
mexh 墨西哥草帽小波
meyr Meyer小波
haar Haar小波
dbN 紧支集正交小波
symN 近似对称的紧支集正交小波
coifN Coifmant小波
biorNr.Nd 双正交样条小波

以下记录的是一些常用指令和语法使用,工具箱的操作就不弄了,自行根据指令进行对应和补充即可。

1、waveinfo函数

note:information on wavelets.

该语法的功能是提供工具箱中所有小波的信息查询,使用格式:waveinfo(‘wname’)

wname指代的小波有

'haar'   : Haar wavelet.
'db'     : Daubechies wavelets.
'sym'    : Symlets.
'coif'   : Coiflets.
'bior'   : Biorthogonal wavelets.
'rbio'   : Reverse biorthogonal wavelets.
'meyr'   : Meyer wavelet.
'dmey'   : Discrete Meyer wavelet.
'gaus'   : Gaussian wavelets.
'mexh'   : Mexican hat wavelet.
'morl'   : Morlet wavelet.
'cgau'   : Complex Gaussian wavelets.
'cmor'   : Complex Morlet wavelets.
'shan'   : Complex Shannon wavelets.
'fbsp'   : Complex Frequency B-spline wavelets.
'fk'     : Fejer-Korovkin orthogonal wavelets

使用举例:waveinfo(‘haar’)

结果:

查询小波包的信息,则使用:waveinfo(‘wsys’)

2、wfilters函数

note:Wavelet filters.

这个函数有两种用法,结果也不太相同;

第一种:[LO_D,HI_D,LO_R,HI_R] = wfilters(‘wname’)

计算正交小波或双正交小波(wname)有关联的四个滤波器,分别为:

LO_D,分解低通滤波器
HI_D,分解高通滤波器
LO_R,重构低通滤波器
HI_R,重构高通滤波器

第二种:[F1,F2] = wfilters(‘wname’,‘type’)

直接通过‘type’来返回对应的滤波器,对应如下:

如果'type'='d',则为LO_D和HI_D(分解滤波器)
如果'type'='r',则为LO_R和HI_R(重构滤波器)
如果'type'='l',则为LO_D和LO_R(低通滤波器)
如果'type'='h'  则为HI_D和HI_R(高通滤波器)

应用实例

clc;
clear all;
[LO_D,HI_D,LO_R,HI_R]=wfilters('db45');%多贝西小波
%stem产生离散序列的图形,xlim限制x轴的长度,另外三个就是对图形做描述
subplot(221);stem(LO_D);xlim([0 95]);title('分解低通滤波器');
xlabel('x');ylabel('y');
subplot(222);stem(HI_D);xlim([0 95]);title('分解高通滤波器');
xlabel('x');ylabel('y');
subplot(223);stem(LO_R);xlim([0 95]);title('重构低通滤波器');
xlabel('x');ylabel('y');
subplot(224);stem(HI_R);xlim([0 95]);title('重构高通滤波器');
xlabel('x');ylabel('y');

运行结果

3、dwt函数

note:Single-level discrete 1-D wavelet transform.

该函数是通过指定小波‘wname’或者指定小波的分解滤波器LO_D和HI_D执行单层一维小波分解。

使用方法:

[CA,CD] = dwt(X,'wname')或[CA,CD] = dwt(X,LO_D,HI_D)

还有一种是指定模式计算小波分解

[cA,cD] = dwt(…,‘mode’,MODE)

该用法的举例:[cA,cD] = dwt(x,‘db1’,‘mode’,‘sym’);

mode对应值及其英语表述如下:

'mode' DWT Extension Mode
'sym' or 'symh' Symmetric-padding (half-point): boundary value symmetric replication — default mode
'symw' Symmetric-padding (whole-point): boundary value symmetric replication
'asym' or 'asymh' Antisymmetric-padding (half-point): boundary value antisymmetric replication
'asymw' Antisymmetric-padding (whole-point): boundary value antisymmetric replication
'zpd' Zero-padding
'spd' or 'sp1' Smooth-padding of order 1 (first derivative interpolation at the edges)
'sp0' Smooth-padding of order 0 (constant extension at the edges)
'ppd' Periodic-padding (periodic extension at the edges)

二维的类似,函数为dwt2,使用语法为:

 [CA,CH,CV,CD] = dwt2(X,'wname')[CA,CH,CV,CD] = dwt2(X,Lo_D,Hi_D) [CA,CH,CV,CD] = dwt2(...,'mode',MODE)

小波分解的逆过程就是小波重构,类似FFT和IFFT,很多时候傅里叶变换也被人拿来和小波变换作一些比对。

iwdt和iwdt2的使用语法分别如下所示:

%iwdt使用语法
X = idwt(CA,CD,'wname',L)
X = idwt(CA,CD,LO_R,HI_R,L)
X = idwt(...,'mode',MODE)
%iwdt2使用语法
X = idwt2(CA,CH,CV,CD,'wname')
X = idwt2(CA,CH,CV,CD,Lo_R,Hi_R)
X = = idwt2(...,'mode',MODE)

除了以上的语法以外,在这些基础上还有一些扩展的语法,这些就留给“help”了。

应用实例

clc;
clear all;
close all;
n=randn(1,256);
z=1.5*sin(1:256);
s=n+z;
[ca1,cd1]=dwt(s,'haar');%%等同于db1
subplot(311);plot(s,'b-');title('原始信号');
xlabel('x');ylabel('y');
subplot(323);plot(ca1,'b-');title('haar低频系数1');
xlabel('x');ylabel('y');
subplot(324);plot(cd1,'b-');title('haar高频系数1');
xlabel('x');ylabel('y');
%计算滤波器的相关值,再直接指定分解滤波器进行系数的计算
[LO_D,HI_D]=wfilters('haar','d');
[ca2,cd2]=dwt(s,LO_D,HI_D);
subplot(325);plot(ca2,'b-');title('haar低频系数2');
xlabel('x');ylabel('y');
subplot(326);plot(cd2,'b-');title('haar高频系数2');
xlabel('x');ylabel('y');

运行结果

4、wavedec

note:Multi-level 1-D wavelet decomposition.

该函数的功能依然是小波分解,只是其层级变多了,所以可以猜到其语法和dwt会有点相似,如下:

[C,L] = wavedec(X,N,'wname')
[C,L] = wavedec(X,N,LO_D,HI_D),

N必须是正整数,其用意就是,返回信号X在N层的小波分解,C代表的是分解向量,L代表一个记录向量。

应用实例

%对音频进行小波分解
clc;
clear all;
close all;
%产生声音文件
load handel.mat
filename = 'dzkr_SoundTest.wav';
audiowrite(filename,y,Fs);
clear y Fs
%将生成的音频导入
s=audioread('dzkr_SoundTest.wav');%旧版本可能用的是wavread(),需要自行比对下版本差别
n=length(s);
figure;
subplot(211);plot(4000:n,s(4000:n));
xlim([4000 6200]);ylim([-1 1]);
xlabel('信号序列');ylabel('信号值');
title('原始声音图像');
[C,L]=wavedec(s(4000:n),2,'db2');
subplot(212);plot(C);xlim([0 2200]);ylim([-2 2]);
title('小波分解结构');
xlabel('低频系数 and 第二层及第一层高频的信号序列');ylabel('信号值');

运行结果

wavedec也有二维的形式,即wavedec2,语法如下:

[C,S] = wavedec2(X,N,'wname')
[C,S] = wavedec2(X,N,LO_D,HI_D)

其中S则变成了记录矩阵,C依然还是分解向量,其他的参数与以上的一致。

很理所当然的就可以想到逆过程了,不过可不再是加个i了,其逆过程变成了waverec,二维则是waverec2,两者的语法分别为:

%waverec
X = waverec(C,L,'wname')
X = waverec(C,L,LO_R,HI_R)
%waverec2
X = waverec2(C,S,'wname')
X = waverec2(C,S,LO_R,HI_R)

5、wrcoef

这个函数也是重构的功能,和waverec有点类似,用法如下:

X = wrcoef('type',C,L,'wname',N)
X = wrcoef('type',C,L,LO_R,HI_R,N)
X = wrcoef('type',C,L,'wname')
X = wrcoef('type',C,L,LO_R,HI_R)

参数上和waverec的也基本一致,不过多了一个‘type’,而且N

有N的就是相当于进行N层重构,且N的值和‘type’有关系,type可取低频‘a’或高频’d’,取低频‘a’的时候,N最小可以为0;两种类型下N的值都得满足于:N <= length(L)-2,若没有指定N,则默认在N = length(L)-2进行重构。

应用实例

clc;
clear all;
close all;
N=1000;
t=1:N;
%产生信号
sig1=sin(0.3*t);%正弦波
%三角波
sig2(1:500)=((1:N/2)-1)/500;
sig2(501:N)=(N-((N/2+1):1000))/500;
sig=sig1+sig2;%叠加信号
[C,L]=wavedec(sig,2,'db6');%进行小波分解
a1=wrcoef('a',C,L,'db6',1);%重构第1层逼近系数
a2=wrcoef('a',C,L,'db6',2);%重构第2层逼近系数
d1=wrcoef('d',C,L,'db6',1);%重构第1层细节系数
d2=wrcoef('d',C,L,'db6',2);%重构第2层细节系数
subplot(511);plot(sig);xlabel('信号序列');ylabel('原始信号');
subplot(512);plot(a1);xlabel('信号序列');ylabel('a1');
subplot(513);plot(a2);xlabel('信号序列');ylabel('a2');
subplot(514);plot(d1);xlabel('信号序列');ylabel('d1');
subplot(515);plot(d2);xlabel('信号序列');ylabel('d2');

运行结果

结语

本篇暂告一段落,仔细看完的话,你会发现本篇介绍到的小波分析展示了其”选取滤波器“的功能,之后还会写一篇用小波分析的知识做一些图像处理,比如图像去噪和图像压缩,音频的话,本篇已经略微涉及到了音频信号简单分解,深入了解就不折腾了,还是等该系列的下篇关于小波分析在图像处理的部分应用吧~


更多精彩,等你发现~


Matlab系列之小波分析基础相关推荐

  1. Matlab系列之绘图基础

    Matlab系列之绘图基础 前言 图形句柄与对象 对象属性 应用实例 运行结果 图形句柄的创建 图形窗口对象 实例程序 运行效果 坐标轴对象 实例程序 运行效果 曲线对象 实例程序 运行效果 文字对象 ...

  2. 深度学习与计算机视觉系列(1)_基础介绍

    转载自: 深度学习与计算机视觉系列(1)_基础介绍 - 龙心尘 - 博客频道 - CSDN.NET http://blog.csdn.net/longxinchen_ml/article/detail ...

  3. Matlab系列之符号运算(上)

    Matlab系列之符号运算 前言 创建符号对象 基本操作 符号变量的基本操作 符号表达式的基本操作 四则运算 多项式的操作 符号表达式化简 符号表达式的替换 反函数求解 复合函数 更多精彩等你发现~ ...

  4. Matlab系列记录之图像处理(结束篇)

    Matlab系列记录之图像处理(结束篇) 前言 图像知识 图像类型 1.RGB图 2.灰度图 3.二值化图 读写图像文件 显示图像 示例 结果 图像运算 直方图 示例 结果 直方图均衡 示例 结果 灰 ...

  5. Matlab系列之二维图形(上)

    Matlab系列之二维图形(上) 简要 绘制基础 plot 文字标注 (1) 添加图形标题 (2)添加坐标轴标注 (3)图例 (4)文本注释 示例 程序 结果 线型.点型和颜色 坐标轴设置 示例 结果 ...

  6. Matlab系列之GUI设计基础

    Matlab系列之GUI设计基础 简介 编辑界面 菜单设计 控件设计 控件描述 个人理解 Matlab转译 控件属性 [1]外观与行为 [2]控件对象的信息 [3]回调函数 [4]状态信息 结束 更多 ...

  7. Matlab系列之二维图形(下)

    Matlab系列之二维图形(下) 交互式绘图 ginput gtext zoom 双坐标轴绘图 两个特殊的绘图指令 fplot ezplot 特殊绘图指令 1)对数坐标轴指令 示例1 结果1(仔细看图 ...

  8. Webpack系列-第一篇基础杂记

    系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...

  9. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  10. linux基础试卷笔试,顽石系列:Linux基础笔试

    顽石系列:Linux基础笔试 系统操作 压缩文件 扩展名压缩程序 *.Z compress *.zip zip *.gz gzip *.bz2 bzip2 *.xz xz *.tar tar 程序打包 ...

最新文章

  1. linux安装PHP环境
  2. 计算机原理与基础 —— 进制之间的转换(二进制与十、八、十六禁止之间的转换)
  3. 现代密码学4.1--消息完整性
  4. android考试编程题,30道android笔试题及答案
  5. 线段树求区间最大值RMQ(单点更新)
  6. Jquery 获取 radio选中值
  7. mysql 定时器概念_MySQL 定时器
  8. JVM堆外内存的回收机制分析
  9. .Net应用程序打包部署总结
  10. Linux基础之命令练习Day4-fdisk,mkfs,mlabel,mount,umount,mkswap,swapon,dd,top,free,ps,kill,rpm,yum,make...
  11. vue入门:(组件)
  12. 定时器和promise_如何讲清楚Promise?
  13. 随机信号功率谱估计方法matlab仿真
  14. 批量保存打开的网页到本地
  15. 全网最详细的openstack安装教程
  16. 基线管理之Windows安全配置
  17. 关于统计一篇很好的文章
  18. 计算机高级语言程序的流程控制结构,汇编语言(四) - 程序结构
  19. stream has already been operated upon or closed错误
  20. zabbix代理服务器配置

热门文章

  1. 五大黑科技资源网站,你想要的这里都有
  2. 缠论中枢python源码_缠论中枢主图指标 源码 通达信 贴图 自动画笔
  3. 西门子plc cpu228 4路模拟量输入 2路模拟量输出
  4. iOS开发——性能优化的25个建议和技巧
  5. 数据库笔试题 (3)
  6. 前端常见面试题-css篇
  7. CAPL编程语言简介
  8. 易语言解析html换行,HTML代码查看工具易语言源码
  9. 住建部印发《全国建筑设计周期定额》——建设和设计单位“不得压缩”设计周期...
  10. MergeSort(合并排序)