matlab小波变换数据少,一维离散数据小波变换实用案例

前言

小波变换专业处理时变信号!其重要用途包含:突变点检测、时频分析、信号降噪等。本文将详细介绍小波变换的这3种主要用途,借助具体例子来说明并总结相关函数的使用。

间断点检测

现实信号中的间断点是较为常见的,明显的间断点就是信号的"突跳",反应在数学上就是该点"一阶不可导"!如何突跳很明显,我们可以肉眼识别并剔除;但是如果数据本身幅值变化就很大,那么很多小的时域的间断点凭人眼是很难发现和剔除的!此时我们可以使用小波变换,把原始分解到"小波域"去查看!间断点例子如图1所示:

f1c6b7f73995

存在3个间断点的原始信号.png

其生成函数为:

x = zeros(1,500);

% 待检测数据

for t = 1:500

if (t<200)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*t);

elseif (t>=200) & (t<300)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 30;

elseif (t>=300) & (t<400)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10;

else

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10 + 250*sin(2*pi*0.003*t);

end

end

figure(1)

plot(x); title('原始信号'); grid on;

xlabel('采样点'); ylabel('振幅');

说明:间断点的检查对于原始信号总体上本应是有规律、连续、平滑变化的!但是由于偶然且剧烈的仪器或外界的干扰,导致在某采样点发生了"突跳"!图1中间断点1和2就是这种情况。另外,如果突跳还经常发现在两个频率信号的交界处,图1中的间断点3就是这种情况。

下面我们就用简单的小波分解来检测间断点:一维haar小波1级分解

x = zeros(1,500);

% 待检测数据

for t = 1:500

if (t<200)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*t);

elseif (t>=200) & (t<300)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 30;

elseif (t>=300) & (t<400)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10;

else

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10 + 250*sin(2*pi*0.003*t);

end

end

% 一级分解: haar

[cA1,cD1] = dwt(x,'haar');

A1 = upcoef('a',cA1,'haar',1);

D1 = upcoef('d',cD1,'haar',1);

figure(1);

subplot(1,3,1); plot(x); title('原始信号'); grid on;

xlabel('采样点'); ylabel('振幅');

subplot(1,3,2); plot(A1); title('时域: 原始信号低频近似部分(点数一样)'); grid on;

xlabel('小波域: x和y轴无量纲');

subplot(1,3,3); plot(D1); title('时域: 原始信号高频细节部分(点数一样)'); grid on;

xlabel('小波域: x和y轴无量纲');

效果:

f1c6b7f73995

图2:一维haar小1级分解间断点检测结果

说明:可以看到只做了1级的小波分解,其"高频细节"部分"系数图像"就可以很好的辨识出原始信号的间断点!这里需要注意的是:我们辨识间断点看的就是无量纲的、小波域的系数图像!而不需要做系数重构回到时间域。

总结1:小波域的高频细节的系数图像,专门用来检查原始信号间断点。

下面我们再使用db4小波基做多级(3级)分解看看:

x = zeros(1,500);

% 待检测数据

for t = 1:500

if (t<200)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*t);

elseif (t>=200) & (t<300)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 30;

elseif (t>=300) & (t<400)

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10;

else

x(t) = 50.*exp(t/300).*sin(2*pi*0.01*200) + 10 + 250*sin(2*pi*0.003*t);

end

end

% 多级(3级)分解: db4

[C,L] = wavedec(x,3,'db4');

A3=wrcoef('a',C,L,'db4',3); % 低

D3=wrcoef('d',C,L,'db4',3);

D2=wrcoef('d',C,L,'db4'

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值