c++ hough变换代码_智能医疗(4)——小波变换的理解与应用

526b646fb6d5a880f82abb559cd837ad.png
  • 各位读者小伙伴大家好~这篇文章篇幅很长,字数繁多,敬请各位耐心看完,对于初学者直观地了解小波变换会有很大帮助。

要理解小波变换,前提是先理解傅里叶变换。“变换”的是什么东西呢?是(线性代数中相互独立的向量)。

说到底,傅里叶变换和小波变换都是在搞基,只是傅里叶变换和小波变换的基函数不同。对基更加详细的阐述,可以在“智能医疗(3)—— 傅里叶级数到小波变换”中查看。

Lucas:智能医疗(3)—— 傅里叶级数到小波变换​zhuanlan.zhihu.com
9b3bfb6853052b92b6d4a1c19cbf67e4.png

本文的主要内容是提升对小波变换的理解,同时将其应用在对ECG信号进行降噪处理。

正文:

基的特点决定了具体的计算过程。如果我们希望选取有利于压缩的话,那么就希望这个基能用其中很少的向量来最大程度地表示信号,这样即使把别的向量给砍了,信号也不会损失很多。于是,我们希望选取小波变换的基,能用最简单的方式呈现最多的信号特性。

小波变换,为什么是“小”波,这是相对傅里叶变换而言的。傅里叶变换用的基能量是无限的,是周期无限的三角函数;而小波基的能量有限、会衰减,而且集中在某一点附近。

小波变换都会有一个母小波(mother wavelet),同时还有一个父小波,或称为尺度函数(scaling function)。任何小波变换的基函数,其实就是对这个母小波和父小波缩放和平移后的集合。

和傅立叶级数有一点不同的是,小波级数(小波基)通常是标准正交基,也就是说,它们不仅两两正交,还归一化了。

adc5d73eb91f2cf280a07ffa86dda5b3.png

小波级数(小波基)通常有很多种,通常具有以下特性

  1. 小波基是有限、不规律、非对称的。但任何小波和常量函数的内积都趋近于0。换句话说,母小波在一个周期的积分趋近于0。
  2. 小波变换对不管是一维还是高维的大部分信号都能描述很好。这个和傅立叶级数有很大区别。后者最擅长的是把一维的,类三角波连续变量函数信号映射到一维系数序列上,但对于突变信号或任何高维的非三角波信号则几乎无能为力。
  3. 围绕小波级数的展开能够在时域和频域上同时定位信号。这个特性是得益于小波变换是二维变换。从两者展开的表达式就可以看出来,傅立叶级数是
    ,而小波级数是
  4. 从信号算出展开系数a需要很方便。普遍情况下,小波变换的复杂度是O(Nlog(N)),和FFT相当。有不少很快的变换甚至可以达到O(N),也就是说,计算复杂度和信号长度是线性的关系。

接下来,我们从小波变换对突变的阶跃信号的描述,来分析小波变换的过程和优势。

e501b0d1993e4b9bca10c3726d5ee0c0.png

在图中,小波变换的缩放倍数都是2的级数,平移的大小和当前其缩放的程度有关。这样的小波的基函数,具有高频和低频的分析能力,同时还具备了时域分析能力。

只要小波的基函数不和这个信号变化重叠,它所对应的级数系数都为0

假如我们就用这个三级小波对此信号展开,那么只有3个级数对应的系数不为0 。即使更加复杂的小波,不管什么小波,大部分级数系数都会是0。

那么与傅里叶变换相比,小波变换有什么优势

  1. 小波变换允许更加精确地局部描述以及信号特征的分离。一个傅立叶系数通常表示某个贯穿整个时间域的信号分量,因此,即使是临时的信号,其特征也被强扯到了整个时间周期去描述。而小波展开的系数则代表了对应分量它当下的自己,因此非常容易诠释。
  2. 小波变换的基是变化的。小波变换的基,是可以根据信号来推导或者构建出来的,只要符合小波变换的性质和特点即可。对于傅立叶变换以及大部分的信号变换系统,他们的函数基都是固定的,没有任何灵活性。

总结来说,傅立叶变换适合周期性的,统计特性不随时间变化的信号;而小波变换则适用于大部分信号,尤其是瞬时信号。它针对绝大部分信号的压缩,去噪,检测效果都特别好。

在上一篇“智能医疗(3)—— 傅里叶级数到小波变换”,我们提到短时傅里叶变换STFT和小波分析的基本思想有类似之处。

在这篇文章中,我们做一个更加形象的描述,小波变换的窗函数在不同的区域内的宽度不同:当我们需要更精确的低频信息,小波分析准许用一个长的窗口宽度;当我们需要更高频率的信息的时候,小波分析准许用一个短的窗口宽度。

小波变换的公式

adc5d73eb91f2cf280a07ffa86dda5b3.png

小波变换的公式,含有两个参数,那么执行一次小波变换的过程是怎么样的?

  1. 取一个小波,从函数的开始点起作比较
  2. 计算一个数C, 代表小波和这个区域内的信号有多接近。C越大,相似度越高。
  3. 位移小波,重复1、2,直到你完全运算完整个信号。
  4. 缩小或者伸展真整个小波,重复1,2,3
  5. 复整个操作直到1,2,3,4全部做完

d3f936e0e6852b0a5a80a9b711badd71.png

matlab代码

level=8; wavename='bior2.6';
ecgdata=ECGsignalM1;
figure(2);
plot(ecgdata(1:points));grid on ;axis tight;axis([1,points,-2,5]);
title('原始ECG信号');
%%%%%%%%%%进行小波变换6层
[C,L]=wavedec(ecgdata,level,wavename);
%%%%%%%提取尺度系数,
A1=appcoef(C,L,wavename,1);
A2=appcoef(C,L,wavename,2);
A3=appcoef(C,L,wavename,3);
A4=appcoef(C,L,wavename,4);
A5=appcoef(C,L,wavename,5);
A6=appcoef(C,L,wavename,6);
A7=appcoef(C,L,wavename,7);
A8=appcoef(C,L,wavename,8);
%%%%%%%提取细节系数
D1=detcoef(C,L,1);
D2=detcoef(C,L,2);
D3=detcoef(C,L,3);
D4=detcoef(C,L,4);
D5=detcoef(C,L,5);
D6=detcoef(C,L,6);
D7=detcoef(C,L,7);
D8=detcoef(C,L,8);
%%%%%%%%%%%%重构
A8=zeros(length(A8),1); %去除基线漂移
RA7=idwt(A8,D8,wavename);
RA6=idwt(RA7(1:length(D7)),D7,wavename);
RA5=idwt(RA6(1:length(D6)),D6,wavename);
RA4=idwt(RA5(1:length(D5)),D5,wavename);
RA3=idwt(RA4(1:length(D4)),D4,wavename);
RA2=idwt(RA3(1:length(D3)),D3,wavename);
D2=zeros(length(D2),1); %去除高频噪声
RA1=idwt(RA2(1:length(D2)),D2,wavename);
D1=zeros(length(D1),1);%去除高频噪声
DenoisingSignal=idwt(RA1,D1,wavename);
figure(3);
plot(DenoisingSignal);
title('去除噪声的ECG信号'); grid on; axis tight;axis([1,points,-2,5]);
clear ecgdata;

绘制图像

通过图像我们可以很明显地观察到,ECG信号的噪声减弱了。

这对接下来对ECG信号的“特征提取”起到了至关重要的作用。

10c28f94f79b1af64b659af975931ca2.png

写在后面

这就是笔者关于小波变换的理解和应用。期待各位读者的关注、点赞、留言和收藏

我将持续创作有关智能医疗领域的相关内容,接下来也会附上对应的代码。

参考资料

https://blog.csdn.net/liusandian/article/details/52472847

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值