1.首先,小波变换的时候要注意一个问题,就是最高频率fmax为采样频率fs的1/2,即小波变换的初始频率。fmax=1/2fs=小波变换的初始频率

下面来举一个例子。 一个原始信号,经历的时间长度为2秒,采样了2000个点,那么做除法,可得出采样频率fs为1000hz,由奈奎斯特采样定理得该信号的最大频率为500hz(fs/2),那么对该信号做3阶的DWT,一阶细节的频段为250-500hz,一阶逼近的频段为小于250hz,二阶细节的频段为125-250hz,逼近的频段为小于125hz,三阶细节的频段约为62.5-125hz,逼近的频段为小于62.5hz。对于更多阶的分解也是以此类推的。
还有几点补充,以上方法是由采样定理和二进小波变换的原理得出的,都是用2做除法得出,这是许多文献的通常做法,但实际matlab在DWT时并不能做到每一阶都精确的减半,关于这个问题可以参看小波一级dwt分解后,为什么没有变成原来的一半,我qu啊_百度知道 ,但影响并不大,尽可放心使用。另外要计算重构信号的频率值,那与你所用的小波基的中心频率有关,只有使用FFT了。还有信号最多能分解几阶要考虑wmaxlev函数的要求。

*【这里插个问题,在实际使用matlab的时候会遇到的:小波dwt变换后,长度没有变成原来的一半?】

原回答:

使用不同小波基对于dwt函数可能产生不同大小的cA和cD,这牵扯了一系列问题,我们慢慢讲吧。
1.首先matlab定义的小波基分为5类:(1)具有有限冲激响应滤波器的正交小波。 这种类型的小波可以通过尺度滤波器W定义。如Haar,Daubechies,Coiflets以及Symlets小波。(2)具有有限冲激响应滤波器的双正交小波。 可以通过两个尺度滤波器Wr(重构)和Wd(分解)定义。如BiorSplines小波。(3)不具有有限冲激响应滤波器,但有尺度方程的正交小波。 可以通过定义尺度方程和小波方程来进行定义。如Meyer小波。(4)不具有有限冲激响应滤波器和尺度方程的小波。 可以通过定义小波方程来进行定义。如Morlet和Mexican hat小波。(5)具有有限冲激响应滤波器和尺度方程的复小波。可以通过定义小波方程来进行定义。如Complex Gaussian和Shannon小波。
2.对于1和2类小波都是通过滤波器理论实现离散小波变换(DWT)的。DWT理论告诉我们每分解一层小波系数减半,但理论实现的算法由于加入了FB(滤波器)理论所以并不能精确的减半,其分解后小波系数的个数可以用floor((n-1)/2)+N 这个公式计算,其中floor表示向下取整,n是原始信号的长度,N是滤波器长度的一半。例如使用db3进行DWT,用你上面信号x,其长度为1024,db3滤波器长度为6,则N=3,那么cA和cD的长度为floor(511.5)+3=511+3=514。你可以编程试试别的小波基,它们小波系数的个数可都是不一定相同的,并参看dwt函数的帮助文档。(长度size变化(约等于减半),但整体时长不变,采样率fs变化,并且fs=2fmax)
3.dmey小波基是Meyer小波的离散形式,所以它是第3类小波,不具有有限冲激响应滤波器所以它做DWT就不能完全靠FB实现了,它变换完的小波系数的个数只能依靠其定义尺度方程和小波方程时的离散点的个数确定,然而matlab对于dmey小波基的相关信息的说明太少了,没有相关信息很难推算出它变换完的小波系数的个数,所以很抱歉,我也不知562是怎么来的。
但你应该明白一点,小波一级dwt分解后,小波系数的个数可并不一定完全精准地变成原来信号长度的一半啊,这与你使用的小波基有关。(理论书籍坑爹啊!)

感谢大神解答参考:

利用小波分解后,频率计算问题_百度知道 (baidu.com)https://zhidao.baidu.com/question/1796007745075089787.html?from=pubpage&msgtype=2

小波一级dwt分解后,为什么没有变成原来的一半,我qu啊_百度知道 (baidu.com)https://zhidao.baidu.com/question/744136556371648892.html?oldq=12. 小波系数和小波分量是什么,小波系数怎么用,有什么用?

先来官方解释:

对一个给定信号进行小波变换,就是将该信号按某一小波函数展开,即将信号表示为一系列不同尺度和不同时移的小波函数的线性组合,其中每一项的系数称为小波系数,而同一尺度下所有不同时移的小波函数的线性组合称为信号在该尺度下的小波分量

要求φ(t)时频2个域内都具有好的紧支性,才可以反映f(t)在以(u,ηs)(η为母小波的中心频率)为中心,能量集中的时频盒上的值Wf(u,s),称为小波系数.利用小波系数的位置和尺度可以很好地探测到信号的时频变化

Wf(a,b)称为小波系数,它随a、b而变,其实质是对f(t)用不同滤波器进行滤波.

**这里的“线性组合”根据小波变换定义来看,其实就是深度学习中“卷积”意义的由来。进行点积。


再来个大佬的通俗易懂的解释,很好理解:

一个信号无论进行连续小波变换(CWT)或是离散小波变换(DWT),变换完的结果就叫小波系数。小波系数是没有量纲单位的结果,需要经过重构这些系数得到实际有量纲的信号。
如同用一个任意长度(例如手的一指宽)去测量某个物体的大小,你可以测得一系列的数字,比如宽1代表1指长度,长2.5代表2个半指长度(但这不是标准的量纲,没有人用一指当作通用标准量纲,也就是没有量纲),如果我不告诉你一指到底有多少cm,你就不知道这一系列的数字到底是多少个标准量纲的cm,也就不知道那个物体长多少cm。那根手指就是小波基,测量的过程就是小波变换,测得一系列的数字就是小波系数。
当我告诉你一指为1.8cm时,你用测得一系列的数字乘以1.8就将这一系列数字转化为带有量纲cm的另一组数字,长1.8cm,宽4.5cm,这个过程就是小波系数的重构为有实际量纲信号的过程。实际小波变换和重构的原理通俗讲就是这么个思路,当然实际小波变换的方法要复杂得多,牵扯数学和信号处理的问题也很多,这里就是便于你理解这玩意的示意性解说。
高频小波系数和低频小波系数通常是使用mallat算法的DWT的概念,通过高频带通滤波器和低通滤波器,将信号中的信息分为高频细节和低频逼近信息。
高频小波系数是研究信号高频信息的,可以直接研究高频小波系数本身,为了得到较好的效果也可对高频小波系数进行处理后突出其特征再研究,当然最通常的方法还是重构。例如研究人脸的面部特征,脸上的雀斑,痘痘,黑痣和瘊子等都是高频信息,为了从人脸上分离和突出它们,就可以对高频小波系数进行处理或重构。
低频小波系数是研究信号低频信息的(貌似废话),为了较为准确的显示低频特征通常要进行重构,因为将低频小波系数本身作为信号,其频率有时并不低,所以要重构才是信号本身的低频信息。还是例如研究人脸的面部特征,脸型是低频信息,为了分清国字脸,鸭蛋脸还是瓜子脸,就可以重构低频小波系数,得到其低频特征(也可以理解为分离高频信息得到的消噪结果,所以低频系数的重构通常认为是原始信号消噪处理的结果)。

感谢参考:

论文中,老说“对小波系数进行处理”,想问下什么是小波系数?_百度知道 (baidu.com)https://zhidao.baidu.com/question/1382947695099319860.html

看图说话:

从原信号X开始分解(假设原始信号X的采样频率为fs,那么初始分解的最大频率为fs/2),依次除以2,得到CA1(0-X/2),CD!(X/2-X),CA2(0-X/4),CD2(X/4-X/2)... 

补充一些信号dB的知识:

对于功率来说。dB=10lg(A/B)。对电流或电压来说,dB=20lg(A/B)。dB是一个纯记数单位,3dB表示A/B=2/1,即所谓的半功率点。1dB你自己应该也就知道了是什么意思。

补充参考:

关于通频带,3dB带宽,三阶截点和1dB压缩点,截止频率,频率范围,带宽,特征频率(中心频率),截止频率和增益(db) - 百度文库 (baidu.com)https://wenku.baidu.com/view/51e131c66137ee06eff918eb.htmldB带宽定义和理解 - 百度文库 (baidu.com)https://wenku.baidu.com/view/d64f4d0785254b35eefdc8d376eeaeaad0f31646.html

函数:

小波的分解:这里为数字信号,离散小波变换

1. dwt():使用小波'wname'对信号X进行单层分解,discrete wavelet trasnsform

求得的近似系数存放在数组cA中,细节系数存放在数组cD

[cA,cD]=dwt(X,'wname')使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量

[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解;可以实现一维、二维和 N 维 DFT

2. wavedec():利用小波'wname'对信号X进行N层分解(多层分解)wavedecompose

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

[C,L]=wavedec(X,1,’wname’)中返回的近似和细节都存放在C中,即C=[cA,cD],L存放是近似和各阶细节系数对应的长度

appcoef():提取DWT后小波的近似系数(approximate)
detcoef():提取DWT后小波的细节系数(detail)

A=appcoef(C,L,'wname',N)
利用小波'wname'从分解系数[C,L]中提取第N层近似系数

D = detcoef(C,L,N)

利用小波'wname'从分解系数[C,L]中提取第N层细节系数

%提取第7、8层小波后的近似系数
A7=appcoef(C,L,wavename,7);
A8=appcoef(C,L,wavename,8);

%提取第7、8层小波后的细节系数
D7=detcoef(C,L,7);
D8=detcoef(C,L,8);

小波的重构:

1. idwt():一维离散小波反变换(信号重构,单层),inverse discrete wavelet transform

X=idwt(cA,cD,'wname')由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X ;'wname' 为所选的小波函数

X=idwt(cA,cD,'wname',L)同上,多了指定返回信号 X 中心附近的 L 个点

X=idwt(cA,cD,Lo_R,Hi_R)用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X

X=idwt(cA,cD,Lo_R,Hi_R,L)同上,多了指定返回信号 X 中心附近的 L 个点

2. waverec(): waverecovery

 X = waverec(C,L,'wname')

 X = waverec(C,L,Lo_R,Hi_R)

[未完待续,补充参考1]
(136条消息) matlab 小波的分解与重构_2021乐乐的博客-CSDN博客_matlab小波分解与重构https://blog.csdn.net/weixin_42528089/article/details/103452313

-----------------------------------------------1,2为传统小波分解---------------------------------------------------------

3.小波包分解

[未完待续,补充参考2]

matlab详解:

(138条消息) 小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)_cqfdcw的博客-CSDN博客_小波包分解https://blog.csdn.net/cqfdcw/article/details/84995904

python程序:

(138条消息) 用python进行小波包分解_qq_41978536的博客-CSDN博客_python小波包分解https://blog.csdn.net/qq_41978536/article/details/89337436

Python 小波包变换,小波包能量特征提取 代码 - Jerry_Jin - 博客园 (cnblogs.com)https://www.cnblogs.com/jins-note/p/13460614.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐