Java 离散小波变换公式_一维离散小波变换函数使用总结

本文详细介绍了如何使用Java进行一维离散小波变换,包括1级和多级分解的过程,以及相关函数的使用,如dwt、idwt、wavedec和waverec等。通过实例展示了小波系数的提取、重构和信号恢复,强调了小波系数无量纲和需要重构才能返回有意义的时域信号的特点。
摘要由CSDN通过智能技术生成

前言

matlab自带的小波分析工具非常全!实际工作中直接用即可。但是刚开始使用会遇到挫折:它的函数太多,并且它们的"名称、功能、配套使用"等要求都有些"相近",很容易导致糊涂!因此本文的总结与配套实例很具有参考价值!

下面先列举3条关键理解,后面会用到:

小波分解,分解到的"不是频率域"!可以抽象理解为"小波域",但其实没有实际内涵!傅里叶变换到频率域是有实际内涵的;

小波分解得到的"小波系数"是"没有量纲"的!它其实是"没有实际意义的数",需要做系数重构才能从"小波域"再转回到"时域";

"系数重构"与"重构信号"不是一个东西!系数重构就是把无量纲的小波分解系数变回到有意义的"时域";"重构信号"就是把分解的完整恢复回去。

几种函数的说法与适用处

下面介绍最容易让人糊涂的matlab一些自带函数的说法与用途(都是针对离散小波变换),不同的函数有不同的适用处于搭配函数.

分解与重构/恢复信号:

1级分解与重构原始信号函数为: dwt和dwt2 与 idwt和idwt2;

多级(包括1级)分解与重构原始信号函数为: wavedec和wavedec2 与 waverec和waverec2;所以wavedec可涵盖dwt。

系数重构:需理解其作用 √ √ √

1级分解的系数重构用函数的是: upcoef和upcoef2;

多级分解的系数重构用函数的是: wrcoef和wrcoef2。

系数提取:

多级分解低频近似系数提取:appcoef和appcoef2;

多解分解高频细节系数提取:detcoef和detcoef2。

说明:"系数提取"只有"多级分解"才会用的到! 1级分解是不需要"系数提取"的!因为就分成了低频和高频2个部分,直接用1维或2维分解函数的返回结果就行了!所以:多级分解的系数提取,就相当于1级分解后的返回结果的直接画图。

上面就是容易搞混的几个操作与使用搭配。

还是要着重强调一点:用自带的函数做完"小波分解"后,得到的"小波系数"是"没有量纲"的!可以理解为原始信号域映射到小波域(小波域不是什么具体的东西,只是为了方便理解)!只有把分解出来的"小波系数"再做"系数重构"后,才能回到原始的信号域,得到原始信号的不同的低频和高频子信号成分(还是时域的显示)。

下面我们先给出具体的例子(一维离散数据),再总结每个函数具体的语法:

例子1:一维信号1级分解(dwt)、系数重构(upcoef)、重构/恢复信号(idwt):

clc; clear;

% 导入自带的一个一维电压信号, 取前4096个点

load leleccum;

s = leleccum(1:4096);

% 一级"分解": 时域 → 小波域

% 说明: 2个"系数(低+高)"的尺寸全部是一半 2048

% 命令: dwt

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

figure(1);

subplot(2,2,1); plot(cA1); title('小波域: 低频近似部分(点数少一半)'); grid on;

xlabel('小波域: 横轴坐标无实际意义');

subplot(2,2,2); plot(cD1); title('小波域: 高频细节部分(点数少一半)'); grid on;

xlabel('小波域: 横轴坐标无实际意义');

% 1级分解系数"重构": 小波域 → 时域

% 说明: 2个"子信号(低+高)"的尺寸全部和原始大小一样 4096!!

% 命令: upcoef

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

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

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

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

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

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

% 重构原始信号: 参数用的还是分解出的系数

% 命令: idwt

s_rec = idwt(cA1,cD1,'haar');

figure(2);

subplot(1,2,1); plot(s); title('原始时域信号: 4096个采样点'); grid on;

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

subplot(1,2,2); plot(s_rec); title('重构原始信号: 点数一样'); grid on;

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

suptitle('一维原始信号与重构原始信号');

figure(1)效果:

56733f6c0a10

图1:一维1级小波(域)系数图像与系数重构时域子信号

figure(2)效果:

56733f6c0a10

图2:原始信号与一维1级分解后重构信号对比

例子2:一维信号多级分解(wavedec)、系数重构(wrcoef)、系数提取(appcoef + detcoef)、重构/恢复信号(idwt):

clc; clear;

% 导入自带的一个一维电压信号, 取前4096个点

load leleccum;

s = leleccum(1:4096);

% 多尺度/级分解:

% 命令: wavedec

[C,L]=wavedec(s,3,'db1');

% 系数提取: 提取经过变换之后的信号: 小波域下的低频系数(近似信息)和高频系数(细节信号), 即"时域→小波域"!

% 说明: 系数提取是多级分解才用!1级分解有就分成2个部分,不需要提取。

% 命令: appcoef低频系数提取; detcoef高频系数提取

cA3=appcoef(C,L,'db1',3); % 低: 3表示第三层

cD3=detcoef(C,L,3);

cD2=detcoef(C,L,2);

cD1=detcoef(C,L,1); % 3个高: 最后的数字表示的是层数

figure(1)

% 4个部分长度不一样!

subplot(2,2,1); plot(cA3); title('3级分解中低频近似部分'); grid on; % 长度 1/2^3 = 1/8

xlabel('小波域: 横轴坐标无实际意义');

subplot(2,2,2); plot(cD3); title('3级分解中高频细节部分'); grid on; % 长度 1/2^3 = 1/8

xlabel('小波域: 横轴坐标无实际意义');

subplot(2,2,3); plot(cD2); title('2级分解中高频细节部分'); grid on; % 长度 1/2^2 = 1/4

xlabel('小波域: 横轴坐标无实际意义');

subplot(2,2,4); plot(cD1); title('1级分解中高频细节部分'); grid on; % 长度 1/2^1 = 1/2

xlabel('小波域: 横轴坐标无实际意义');

suptitle('时域→小波域');

% 多级重构系数: 从小波域还原出信号高频部分的子信号, 即从"小波域→时域"!

% 命令: wrcoef 参数中a是低频, d是高频

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

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

D2=wrcoef('d',C,L,'db1',2);

D1=wrcoef('d',C,L,'db1',1); % 3个高

figure(2)

subplot(2,2,1); plot(A3); title('原始信号中的低频信号成分'); grid on;

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

subplot(2,2,2); plot(D3); title('原始信号中的高频信号成分1'); grid on;

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

subplot(2,2,3); plot(D2); title('原始信号中的高频信号成分2'); grid on;

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

subplot(2,2,4); plot(D1); title('原始信号中的高频信号成分3'); grid on;

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

suptitle('小波域→时域');

% 重构原始信号: 滤波后单纯的恢复原始信号

% 命令: waverec

s_rec = waverec(C,L,'db1');

figure(3);

subplot(1,2,1); plot(s); title('原始信号'); grid on;

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

subplot(1,2,2); plot(s_rec); title('重构原始信号'); grid on;

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

suptitle('时域原始与重构原始信号');

figure(1)效果:

56733f6c0a10

图3:一维多级分解后小波(域)系数图像

figure(2)效果:

56733f6c0a10

图4:一维多级分解后系数重构时域子信号

figure(3)效果:

56733f6c0a10

图5:原始信号与一维多级分解后重构信号对比

函数语法总结

语法总结按照上面的2个例子(一维离散数据)进行。

(1)首先总结例1中的函数语法:

一维1级分解函数:dwt

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

% dwt参数:x是原始信号,'wavename'是自己选的小波基函数(例如'haar')

% 左边返回值:cA1低频近似系数,cD1高频细节系数。

一维1级系数重构函数:upcoef

A1 = upcoef('a', cA1, 'wavename', 1); % 低频系数重构

D1 = upcoef('d', cD1, 'wavename', 1); % 高频系数重构

% upcoef参数:'a'表示低频近似/'d'表示高频细节,cA1与cD1系数,1就是当前是1解分解(不变);

% 左边返回值:A1是低频近似系数的重构结果,D1是高频细节系数的重构结果。

一维1级分解重构/恢复信号函数:idwt

s_rec = idwt(cA1,cD1,'wavename');

% idwt参数:cA1和cD1就是dwt分解得到的低频近似和高频细节的系数;

% 左边返回值:s_rec就是重构/恢复的原始信号。

(2)总结例2中的函数语法:

一维多级分解函数:wavedec

[C,L] = wavedec(s, N, 'wavename');

% wavedec参数:s是原始信号,N是分解级数,'wavename'小波基函数;

% 左边返回值:C是小波分解后的各个系数,L是相应小波系数的个数;

这个函数的返回值可能凭语言不好理解,直接看图6示意图就很好理解。注意到:C中是所有分解出来的东西(系数)的一个大汇总,即都在一个大矩阵里!所以就需要从C中把各个系数提取出来。

56733f6c0a10

图6:wavedec返回值C和L的含义示意图

一维多级系数提取函数:appcoef与detcoef

% 以3级分解为例:

[C,L] = wavedec(s,3,'db1');

% 各级系数提取:

% 最后剩的那个低频近似部分(1个)的系数提取:appcoef

cA3 = appcoef(C, L, 'wavename', N);

% appcoef参数:C和L就是上面分解出来的东西,'wavename'和分解用的小波基一致,N和分解的级数一致;

% 左边返回值:最后那个低频近似的系数(从C和L中提取出来了)。

% 每一级中的高频细节部分(N个)的系数提取:detcoef

cD3 = detcoef(C, L, 3);

cD2 = detcoef(C, L, 2);

cD1 = detcoef(C, L, 1);

% detcoef参数:C和L和同意,后面的数字就是分解的层数;

% 左边返回值:每一级高频近似部分的系数(从C和L中提取出来)

说明:分解N级,要做N个高频细节部分的的系数提取,低频近似只用做一次!

一维多级系数重构函数:wrcoef

% 以3级分解为例:

[C,L] = wavedec(s,3,'db1');

% 直接上实例说明:'wavename'用的是'db1'

A3 = wrcoef('a',C,L,'db1',3); % 最后那个低频近似部分的系数重构

D3 = wrcoef('d',C,L,'db1',3); % 3级高频细节部分系数重构

D2 = wrcoef('d',C,L,'db1',2); % 2级高频细节部分系数重构

D1 = wrcoef('d',C,L,'db1',1); % 1级高频细节部分系数重构

% wrcoef参数:'a'或'd'代表"低频近似"或"高频细节",C和L同意,最后的数字是该部分所在的级数;

% 左边返回指:各个部分系数重构的结果。

说明:分解N级,要做N个高频细节部分的的系数重构,低频近似只用做一次!

一维多级分解重构/恢复信号函数:waverec

s_rec = waverec(C,L,'wavename');

% waverec参数:C和L还是同意,'wavename'和上面用的小波基保持一致;

% 左边返回值:s_rec就是重构/恢复的原始信号。

注意:重构/恢复原始信号,用的是分解得到的系数!而不是系数重构后的东西。

至此,一维离散小波1级和多级分解所有会用到的函数就都介绍完毕了!以表总结:

一维1级分解

一维多级分解

分解函数

dwt

wavedec

系数提取函数

不需要

appcoef 和 detcoef

系数重构函数

upcoef

wrcoef

重构/恢复信号函数

idwt

waverec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值