uestcer03 发表于 2011-6-11 13:12

自定义小波的添加方法

在小波工具箱中包含大量的小波函数,但是对于一些特殊的应用需求,可能需要添加新的小波函数。用户可以使用wavemngr函数添加新的小波函数。小波分析工具箱允许用户使用命令行和图形用户接口两种方式来定义新的小波函数。

   添加一个新的小波函数的准备工作

  通过使用wavemngr函数,用户可以添加新的小波函数和小波函数族。需要注意的是用户在使用wavemngr命令添加一个新的小波函数之前,必须进行如下的工作:

  (1)选择一个小波函数的全名称(full name);

  (2)选择一个小波函数的缩写名称(short name);

  (3)选择一个小波类型(WT);

  (4)定义小波的序列号(nums);

  (5)新建一个MAT文件或M文件;

  (6)对于没有有限冲击响应滤波器的小波函数,定义有效支撑集。

  下面分步骤讨论:

  1.选择小波函数的全名称

  小波函数的全名称必须是一个字符串。

  小波分析工具箱中已经定义的小波全称名有:Haar, Daubechies, Symlets, Coiflets, BiorSplines, ReverseBior,

  Meyer, DMeyer, Gaussian, Mexican_hat, Morlet, Complex Gaussian, Shannon, Frequency B-Spline以及Complex Morlet。

   2.选择小波函数的缩写名

  小波函数的缩写名的字符个数必须小于或等于4个。

  小波工具箱中已经定义的小波缩写名有:haar, db, sym, coif, bior, rbio, meyr, dmey, gaus, mexh, morl, fbsp以及cmor。

   3.选择小波类型

  小波的类型主要有以下五种:

  (1)具有有限冲击响应滤波器的正交小波

  这种类型的小波可以通过尺度滤波器w定义。小波分析工具箱中已经定义的此种类型的小波有Haar、Daubechies、Coiflets以及Symlets。

  (2)具有有限冲击响应滤波器的双正交小波

  这种类型的小波可以通过两个尺度滤波器wr和wd定义。BiorSplines小波是已经定义的此种类型的小波。

  (3)不具有有限冲击响应滤波器,但具有尺度方程的小波

  这种类型的小波可以通过尺度方程和小波方程来进行定义。Meyer小波是小波分析工具箱中已经定义的此种类型的小波。

  (4)不具有有限冲击响应滤波器和尺度方程的小波

  这种类型的小波可以通过定义小波方程来进行定义。小波工具箱中已经定义的此种类型的小波包括Morlet和Mexican_hat。

  (5)具有有限冲击响应滤波器和尺度方程的复小波

  这种类型的小波可以通过定义小波方程来进行定义。小波工具箱中已经定义的此种类型的小波包括Complex Gaussian和Shannon。

   4.定义小波系列的序列号

  如果存在一个小波函数系,则缩写名和序列号一起构成一个小波函数名。参数nums是包含序列号的字符串,序列号之间用空格隔开。对于单小波的序列(如Haar、Meyer、Morlet),没有这个参数。

  例如:对于第一Daubechies小波,fsn='db',nums='1 2 3',因此它可以产生三个小波函数db1、db2和db3。对于第一BiorSplines小波,fsn='biior',nums='1.1 1.3 1.5 2.2',因此可以产生四个小波函数bior1.1、bior1.3、bior1.5、bior2.2。

   5.新建一个MAT文件或M文件

  wavemngr函数需要一个 文件参数(file),它是一个包含MAT文件或M文件名称的字符串。对于一个包含许多小波的小波系,必须定义一个M文件,M文件的格式取决于小波的类型。对于只含单小波的小波系,必须定义一个MAT文件。这个MAT文件必须以该小波函数系的缩写参数(fsn)作为它的名称,同时要有一个单变量,其名称为fsn,其值为尺度滤波器。 M文件可以按照下面的方式进行定义。

  (1)第一类小波(具有有限冲击响应滤波器的正交小波)

  M文件的第一行的语法结构是:

  function w=file(wname)

  其中,输入参数wname是小波函数名,输出参数w是相应的尺度滤波器。尺度滤波器w必须是偶数长度,如果不是,则工具箱自动补零,将其变为偶数长。

  在工具箱提供的小波函数中,尺度滤波器的和为1。对于一个新的小波函数(尺度滤波器的值为零除外),用户可以不进行标准化,因为工具箱会自动对其进行标准化并使用标准化的版本。

  已经定义的这种类型的M文件有:Daubechies小波的dbwavf.m,Coiflets小波的coifwavf.m以及Symlets小波的symwavf.m。

  (2)第二类小波(具有有限冲击响应滤波器的双正交小波)

  M文件第一行的语法结构是:

  function =file(wname)

  其中,wname是小波函数名,输出参数wr和wd分别是相应的重构尺度滤波器和分解尺度滤波器。尺度滤波器wr和wd必须是偶数长。一般来说,初始的双正交滤波器并不满足这个要求,因此工具箱会对它们进行补零。

  在工具箱提供的小波函数中,尺度滤波器的和为1。对于一个新的小波函数(尺度滤波器的值为零除外),用户可以不进行标准化,因为工具箱会自动对其进行标准化并使用标准化的版本。

  已经定义的这种类型的M文件有:BiorSplines小波的biorwavf.m。

  (3)第三类小波(不具有有限冲击响应滤波器,但具有尺度方程的小波)

  M文件第一行的语法结构是:

  function =file(lb,ub,n,wname)

  函数返回的是在n点的支撑长度上尺度方程phi和小波方程psi在t处的值。参数wname是可选的。

  meyer.m是小波分析工具箱中已经定义的这种类型的M文件。

  (4)第四类小波(不具有有限冲击响应滤波器和尺度方程的小波或

  第五类小波(具有有限冲击响应滤波器和尺度方程的复小波)

  M文件的第一行语法结构为:

  function =file(lb,ub,n,wname) 或

  function =file(lb,ub,n,wname,'additional arguments')

  函数返回的是在n点的支撑长度上的小波方程psi在t点的值。

  已经定义第四种类型小波的M文件有:Mexican_hat小波的mexihat.m和Morlet小波的morlet.m。已经定义的第五类小波的M文件有shanwavf.m和Complex Morlet小波的cmorwavf.m。

  注意:对于第3、4、5类型的小波,参数wname 是可选的。仅仅当用户所添加的小波函数系有不只一个小波并且用户打算在GUI模式下使用小波函数系时,参数wname 是必须的。

   6.定义有效的支撑集

  有效支撑集的定义仅对第3、4、5类小波的需要,因为它们不具有紧支性。定义有效支撑集就是定义一个上界和下界。

下面举一个例子来说明添加自定义小波的过程:

clc
clear all
%% 创建一个第4类型的小波
familyName      = 'MyWAVE T4';   %小波全名
familyShortName = 'mywa';          %小波简称
familyWaveType= 4;                   %小波类型
familyNums      = '';                     %只有一个小波,序列号留空
fileWaveName    = 'mywa';         %创建小波的函数文件名
familyBounds    = [-4 4];               %定义有效支撑集

%%
% 将新创建的小波添加到matlab中
wavemngr('add',familyName,familyShortName,familyWaveType, ...
    familyNums,fileWaveName,familyBounds)

%%
% 查看自定义小波是否创建成功.
wavemngr('read')

%%
% 显示自定义小波函数.
wname = 'mywa';
clf ; wavefun(wname,'plot',7);

%%
% 使用添加的自定义小波对信号进行连续小波变换
load sumsin; x = sumsin;
scales = 1:128;
coefs = cwt(x,scales,wname);
clf; colormap(jet(128));
wscalogram('image',coefs,'scales',scales,'ydata',x);

%%
%删除自定义小波
wavemngr('del',familyShortName);

注:其他类型小波的添加的例子可以查看matlab中的addnewwaveletdemo.m文件,该文件位于D:\Program Files\MATLAB\R2010b\toolbox\wavelet\wavedemo目录下!

copyleft 发表于 2011-8-31 17:06

thank you for your sharing

malan018 发表于 2012-7-18 10:22

谢谢楼主!

wujx 发表于 2012-11-10 11:44

thank you very much!!!!
页: [1]
查看完整版本: 自定义小波的添加方法