当前位置:   article > 正文

小波变换原理及matlab代码_matlab小波变换

matlab小波变换

一、什么是小波?

        小波是一种具有零均值的快速衰减的波浪状振荡,与扩展到无穷远的正弦波不同,小波存在的时间有限,小波有不同的大小和形状。下面是一些常见的示例,需要根据不同的应用领域来选择合适的小波。

         其中,缩放和平移是小波变换中的两个重要概念

        假如有一个信号f(t),缩放是指在时间上拉伸和收缩信号的过程,可以用下面的式子表示f(\frac{t}{s})s>0,其中s是尺度因子,他是一个正值,对应于信号在时间上的尺度,尺度因子与小波的频率成反比,尺度因子越大,小波就会被拉伸变长,那么小波的频率就会变小,反之,当尺度因子减小,小波就会被压缩,小波的频率就会变大;例如,将一个正弦波缩放2会导致其原始频率降低一半或一倍频程。所以对于小波,尺度和频率之间存在一个比例常数的倒数关系,其中这个比例常数被乘为小波的“中心频率”,小波的等效频率与中心频率之间存在下列关系:

F_{eq}=\frac{C_f}{s\Delta t}

其中,Feq为小波等效频率,Cf为中心频率,s为尺度因子,\Delta t是采样间隔。

 拉伸小波有助于捕获信号中缓慢变化的部分,而压缩小波有助于捕获信号中突变的部分。

平移是指沿着信号长度延迟或者提前小波的开始,可以表示为f(t-k),表示小波发生位移到t-k处,通常需要位移将小波与信号中寻找的特征对齐。

二、连续小波变换与离散小波变换

小波分析中两种主要的变换为连续小波变换和离散小波变换,这两种变换根据小波的缩放和位移有所不同。

(1)连续小波变换的主要应用场景是时频分析和时间局部化频率分量的过滤。

                                                              时频域分析

                                                  时间局部化频率分量的过滤

 可以使用此转换来获得信号的同步时频分析,而解析小波最适合于时频分析,因为这些小波(Morse Wavelets, Bump Wavelets, Analytic Morlet Wavelet)没有负的频率分量。连续小波变换输出的是系数,这些系数将用作对信号的尺度,频率和时间

 对于连续小波变换,可以在每两个整数尺度内以中间尺度分析信号,如下图

在2的1次尺度和2的2次尺度之间还可以有更多的尺度去分析(精细尺度分析),也即对应于将应用更多个不同频率的小波对信号进行分析,这个参数称为每倍频程的尺度数,每倍频程的长度数越大,尺度离散化越精细,这个参数的典型值有10,12,16,32,(即上图中指数项的分母)。

分析过程:每个缩放的小波沿信号的整个长度进行时间偏移,并与原始信号进行比较,对所有的尺度重复此过程,从而生成作为小波尺度和移位参数函数的系数。例如,一个包含1000个样本的信号用20格尺度分析会产生20000个系数,这样,可以使用连续小波变换更好的表征信号中的震荡行为。

连续小波变换可以在Matlab中可以用cwt函数进行;

  1. No = 10
  2. Nv = 32;
  3. figure
  4. cwt(f,Fs,'NumOctaves',No,'VoicesPerOctave',Nv);
  5. %f为信号,Fs为采样频率,No为倍频带数量,Nv为倍频带声音数量

(2)离散小波变换的主要应用是信号和图像的去噪和压缩。

                                                                             去噪

                                                                            压缩

离散小波变换有助于用较少的系数表示许多自然发生的信号和图像,这使得表示更为稀疏,离散小波变换的基本尺度设置为2,则尺度变换为2的指数形式2^{j},(j = 1,2,3,4...),而位移发生在前面等式的整数倍处为2^{j}m,(m=1,2,3,4...),这个过程通常被称为二元缩放和移位,这种方法消除了系数的冗余,变换的输出会生成与输入信号长度相等数量的系数,因此他需要更少的内存。

离散小波变换过程相当于将信号通过一个带通滤波器,如下图(S为信号)

下面是离散小波变换的基本过程:

  1. 选择小波函数:首先需要选择适当的小波函数作为变换的基函数。常用的小波函数有Daubechies小波、Haar小波、Symlet小波等。选择合适的小波函数决定了变换的性能。

  2. 信号分解:将待处理的信号分解成低频部分(近似系数)和高频部分(细节系数)。分解可以使用滤波器组来实现,其中一个滤波器用于提取低频部分,另一个滤波器用于提取高频部分。低频部分表示信号的平滑部分,而高频部分表示信号的细节或边缘信息。

  3. 重复分解:对于得到的低频部分(近似系数),可以再次进行分解(分解得到的系数数量是上一级的一半)得到更低频和更高频的子带。这个过程可以迭代多次,直到达到所需的频带分解层数。

  4. 重构:在完成信号分解后,可以通过逆过程对子带进行重构,以还原原始信号。重构过程使用逆滤波器组来进行,其中一个逆滤波器用于恢复低频部分,另一个逆滤波器用于恢复高频部分。

值得注意的是,离散小波变换是一种多尺度分析方法,可以提取信号的时间和频率特征,并具有良好的局部特性。通过选择不同的小波函数和分解层数,可以根据需求对信号进行不同精度的变换和重构。

离散小波的去噪过程大概为以下几步:

1.获得近似系数和细节系数。

2.分析细节并确定合适的阈值技术。

3.对细节系数进行阈值处理并重构信号。

对于非平稳信号,高频成分里面一般会包含噪声,但是注意有用的信号突变也会是高频成分,那么就需要使用阈值去计算高频成分里面的有用信号和噪声信号,Matlab提供四种计算阈值的方法和两种应用阈值的方法(软阈值和硬阈值:幅值小于阈值的系数都设为0,不同的是软阈值将大于阈值的系数减去阈值,而硬阈值处理则对于大于阈值的系数不做操作)。下面可以给出小波降噪的一段代码

  1. level = 5;%小波分解级数
  2. wname = 'sym6'; %指定小波
  3. fd= wden(f,'rigrsure','s','sln',level,wname) ;
  4. figure:
  5. subplot(2,1,1);
  6. plot(f);axis tignt; grid on;title('Noisy Signal') ;
  7. subplot(2,1.2)
  8. plot(fd); axis tight; grid on;
  9. title(sprintf('Denoised Signal SNR: %0.2f dB',-20*1og10 (norm(abs(fO-fd) ) /norm(f0))));
  10. %函数wden对输入信号进行多级分解,计算阈值并将其应用于细节系数,使用新的细节系数重构信号
  11. %f是含噪信号
  12. %'rigrsure'指定阈值技术
  13. %'s'表示软阈值处理
  14. %'sln'表示使用第一级的单个噪声估计值进行阈值重缩放

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/549889
推荐阅读
相关标签
  

闽ICP备14008679号